+
+ {isDragging ?
释放文件以上传
: null}
)
) : (
-
+
+
+
+
+
{mode === "image" ? "拖拽或选择图片" : "拖拽或选择视频"}
+
{mode === "image" ? "支持 PNG / JPG / WebP" : "支持 MP4 / MOV / WebM"}
+
)}
diff --git a/src/features/script-tokens/ScriptTokensPage.tsx b/src/features/script-tokens/ScriptTokensPage.tsx
index 3cf256f..01ee210 100644
--- a/src/features/script-tokens/ScriptTokensPage.tsx
+++ b/src/features/script-tokens/ScriptTokensPage.tsx
@@ -1,4 +1,15 @@
-import { useEffect, useRef, useState, type ChangeEvent, type KeyboardEvent } from "react";
+import {
+ BarChartOutlined,
+ CheckCircleFilled,
+ CloseOutlined,
+ CopyOutlined,
+ DownloadOutlined,
+ FileTextOutlined,
+ LoadingOutlined,
+ ThunderboltOutlined,
+ UploadOutlined,
+} from "@ant-design/icons";
+import { useEffect, useRef, useState, type ChangeEvent, type DragEvent, type KeyboardEvent } from "react";
import "../../styles/pages/script-tokens-v5.css";
import "../../styles/pages/script-tokens.css";
import { evaluateScript } from "../../api/scriptEvalClient";
@@ -307,6 +318,7 @@ function ScriptTokensPage() {
const [animatedScore, setAnimatedScore] = useState(0);
const [activeHistoryIndex, setActiveHistoryIndex] = useState
(0);
const [history, setHistory] = useState(loadHistory);
+ const [isDragging, setIsDragging] = useState(false);
const fileInputRef = useRef(null);
const scoreFrameRef = useRef(null);
@@ -329,9 +341,7 @@ function ScriptTokensPage() {
return () => { if (scoreFrameRef.current) cancelAnimationFrame(scoreFrameRef.current); };
}, [result]);
- const handleFileUpload = async (event: ChangeEvent) => {
- const file = event.target.files?.[0];
- if (!file) return;
+ const processUploadedFile = async (file: File) => {
const ext = getFileExtension(file.name);
const readable = isReadableTextFile(file, ext);
setUploadedFile({ name: file.name, size: file.size });
@@ -361,6 +371,12 @@ function ScriptTokensPage() {
} else {
setScript(`[已上传文件:${file.name}]\n\n暂不支持解析 ${ext ? ext.toUpperCase() : "未知"} 格式,请上传常见文本类文件。`);
}
+ };
+
+ const handleFileUpload = async (event: ChangeEvent) => {
+ const file = event.target.files?.[0];
+ if (!file) return;
+ await processUploadedFile(file);
event.target.value = "";
};
@@ -461,6 +477,30 @@ function ScriptTokensPage() {
fileInputRef.current?.click();
};
+ const handleDragOver = (event: DragEvent) => {
+ event.preventDefault();
+ event.stopPropagation();
+ if (event.dataTransfer.types.includes("Files")) {
+ setIsDragging(true);
+ }
+ };
+
+ const handleDragLeave = (event: DragEvent) => {
+ event.preventDefault();
+ event.stopPropagation();
+ if (event.currentTarget === event.target || !event.currentTarget.contains(event.relatedTarget as Node)) {
+ setIsDragging(false);
+ }
+ };
+
+ const handleDrop = (event: DragEvent) => {
+ event.preventDefault();
+ event.stopPropagation();
+ setIsDragging(false);
+ const file = event.dataTransfer.files[0];
+ if (file) processUploadedFile(file);
+ };
+
const grade = result ? getGrade(result.totalScore) : null;
const beatPct = result ? (result.totalScore >= 95 ? 97 : result.totalScore >= 88 ? 92 : result.totalScore >= 80 ? 85 : 72) : 0;
const compactTitle = uploadedFile?.name?.replace(/\.[^.]+$/, "") ?? "剧本评测";
@@ -477,15 +517,32 @@ function ScriptTokensPage() {
上传剧本
fileInputRef.current?.click()}
onKeyDown={uploadKeyDown}
+ onDragOver={handleDragOver}
+ onDragLeave={handleDragLeave}
+ onDrop={handleDrop}
>
+ {isDragging ? (
+
+
+ 释放文件以上传
+
+ ) : null}
{uploadedFile ? (
-
+
+
{uploadedFile.name}
{formatFileSize(uploadedFile.size)}
diff --git a/src/features/subtitle-removal/SubtitleRemovalPage.tsx b/src/features/subtitle-removal/SubtitleRemovalPage.tsx
index 08b1293..e06bf0c 100644
--- a/src/features/subtitle-removal/SubtitleRemovalPage.tsx
+++ b/src/features/subtitle-removal/SubtitleRemovalPage.tsx
@@ -12,7 +12,7 @@ import {
SwapOutlined,
VideoCameraOutlined,
} from "@ant-design/icons";
-import { useCallback, useEffect, useRef, useState, type CSSProperties } from "react";
+import { useCallback, useEffect, useRef, useState, type CSSProperties, type DragEvent } from "react";
import "../../styles/pages/more-tools.css";
import "../../styles/pages/image-workbench.css";
import "../../styles/pages/subtitle-removal.css";
@@ -76,6 +76,7 @@ function SubtitleRemovalPage({
const [isProcessing, setIsProcessing] = useState(false);
const [isDownloading, setIsDownloading] = useState(false);
const [isSavingAsset, setIsSavingAsset] = useState(false);
+ const [isDragging, setIsDragging] = useState(false);
const activeTaskIdRef = useRef(activeTaskId);
activeTaskIdRef.current = activeTaskId;
const keepaliveRestoredRef = useRef(false);
@@ -128,10 +129,7 @@ function SubtitleRemovalPage({
event.currentTarget.value = "";
};
- const handleFileDrop = (event: React.DragEvent) => {
- event.preventDefault();
- const file = Array.from(event.dataTransfer.files).find((f) => f.type.startsWith("video/"));
- if (!file) return;
+ const processDroppedFile = (file: File) => {
if (sourcePreview.startsWith("blob:")) URL.revokeObjectURL(sourcePreview);
setSourceName(file.name);
setSourceFile(file);
@@ -143,6 +141,10 @@ function SubtitleRemovalPage({
setStatus(`已导入 ${file.name}`);
};
+ const handleDragOver = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.dataTransfer.types.includes("Files")) setIsDragging(true); };
+ const handleDragLeave = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.currentTarget === e.target || !e.currentTarget.contains(e.relatedTarget as Node)) setIsDragging(false); };
+ const handleFileDrop = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); const file = Array.from(e.dataTransfer.files).find((f) => f.type.startsWith("video/")); if (file) processDroppedFile(file); };
+
const handleImportUrl = () => {
const normalized = sourceUrl.trim();
if (!/^https?:\/\//i.test(normalized)) {
@@ -344,7 +346,13 @@ function SubtitleRemovalPage({
accept="video/mp4"
onChange={handleFileChange}
/>
- e.preventDefault()} onDrop={handleFileDrop}>
+
+ {isDragging ?
释放文件以上传
: null}
) : (
-
-
-
上传视频后在此预览
+
+
+
+
+
拖拽或选择视频
+
仅支持 MP4,最大 1GB,最高 1080P
)}
diff --git a/src/features/workbench/WorkbenchPage.tsx b/src/features/workbench/WorkbenchPage.tsx
index 247206c..a91d243 100644
--- a/src/features/workbench/WorkbenchPage.tsx
+++ b/src/features/workbench/WorkbenchPage.tsx
@@ -106,6 +106,9 @@ import {
type WorkbenchKeepaliveTask,
MODE_META,
MODE_OPTIONS,
+ CHAT_MODEL_OPTIONS,
+ THINKING_SPEED_OPTIONS,
+ THINKING_DEPTH_OPTIONS,
IMAGE_MODEL_OPTIONS,
VIDEO_MODEL_OPTIONS,
RATIO_OPTIONS,
@@ -354,9 +357,13 @@ function WorkbenchPage({
const [videoModel, setVideoModel] = useState(VIDEO_MODEL_OPTIONS[0].value);
const [videoFrameMode, setVideoFrameMode] = useState("omni");
const [videoRatio, setVideoRatio] = useState("16:9");
- const [videoDuration, setVideoDuration] = useState("4");
+ const [videoDuration, setVideoDuration] = useState("5");
const [videoQuality, setVideoQuality] = useState(() => getDefaultVideoQuality(VIDEO_MODEL_OPTIONS[0].value));
+ const [chatModel, setChatModel] = useState(CHAT_MODEL_OPTIONS[0].value);
+ const [thinkingSpeed, setThinkingSpeed] = useState(THINKING_SPEED_OPTIONS[0].value);
+ const [thinkingDepth, setThinkingDepth] = useState(THINKING_DEPTH_OPTIONS[0].value);
+
useEffect(() => {
let cancelled = false;
@@ -412,13 +419,13 @@ function WorkbenchPage({
const referenceCount = referenceItems.length;
const activeVideoModelValue = toHappyHorseDisplayModel(videoModel);
const activeModelValue =
- activeMode === "image" ? imageModel : activeMode === "video" ? activeVideoModelValue : CHAT_MODEL;
+ activeMode === "image" ? imageModel : activeMode === "video" ? activeVideoModelValue : chatModel;
const activeModel =
activeMode === "image"
? imageModelOptions.find((item) => item.value === imageModel)?.label || imageModel
: activeMode === "video"
? videoModelOptions.find((item) => item.value === activeVideoModelValue)?.label || activeVideoModelValue
- : "OmniChat";
+ : CHAT_MODEL_OPTIONS.find((item) => item.value === chatModel)?.label || chatModel;
const conversationRecords = useMemo
(
() =>
conversations.map((conversation) => ({
@@ -2737,6 +2744,46 @@ function WorkbenchPage({
ariaLabel="工作台模式"
direction={dropdownDirection}
/>
+ {activeMode === "chat" && (
+ <>
+ toggleToolbarMenu("chat-model")}
+ onClose={closeToolbarMenus}
+ onChange={setChatModel}
+ ariaLabel="对话模型"
+ direction={dropdownDirection}
+ />
+ toggleToolbarMenu("chat-speed")}
+ onClose={closeToolbarMenus}
+ onChange={setThinkingSpeed}
+ ariaLabel="思考速度"
+ direction={dropdownDirection}
+ />
+ toggleToolbarMenu("chat-depth")}
+ onClose={closeToolbarMenus}
+ onChange={setThinkingDepth}
+ ariaLabel="思考深度"
+ direction={dropdownDirection}
+ />
+ >
+ )}
{activeMode === "image" && (
<>
({ ...option }));
@@ -249,7 +270,6 @@ export const VIDEO_FRAME_OPTIONS: WorkbenchOption[] = [
];
export const VIDEO_DURATION_OPTIONS: WorkbenchOption[] = [
- { value: "4", label: "4s" },
{ value: "5", label: "5s" },
{ value: "6", label: "6s" },
{ value: "7", label: "7s" },
diff --git a/src/styles/pages/canvas.css b/src/styles/pages/canvas.css
index 41f3f09..e6c66cd 100644
--- a/src/styles/pages/canvas.css
+++ b/src/styles/pages/canvas.css
@@ -723,6 +723,43 @@
height: 1px;
}
+/* ── Canvas drag-and-drop visual feedback ─────────────────────────── */
+.studio-canvas.is-canvas-dragging::after {
+ content: "释放以上传图片";
+ position: absolute;
+ inset: 0;
+ z-index: 1000;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(33, 242, 154, 0.12);
+ border: 3px dashed #21f29a;
+ color: #111;
+ font-size: 20px;
+ font-weight: 700;
+ pointer-events: none;
+}
+
+.studio-canvas-text-composer.is-drag-over {
+ outline: 2px dashed #21f29a;
+ outline-offset: 2px;
+ background: rgba(33, 242, 154, 0.06);
+}
+
+.studio-canvas-text-composer.is-drag-over::after {
+ content: "释放图片以创建节点";
+ position: absolute;
+ inset: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 10;
+ color: #333;
+ font-size: 13px;
+ font-weight: 600;
+ pointer-events: none;
+}
+
/* Tool Modal Overlay */
.studio-canvas-tool-modal-overlay {
position: fixed;
diff --git a/src/styles/pages/dialog-generator.css b/src/styles/pages/dialog-generator.css
index bc479f3..0637705 100644
--- a/src/styles/pages/dialog-generator.css
+++ b/src/styles/pages/dialog-generator.css
@@ -553,6 +553,209 @@
display: inline-block;
}
+/* ── Generation controls ── */
+.dialog-generator-mode-switch {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 8px;
+}
+
+.dialog-generator-mode {
+ min-height: 42px;
+ border: 1px solid rgba(0, 255, 136, 0.16);
+ border-radius: 8px;
+ background: rgba(255, 255, 255, 0.04);
+ color: #9aa1b8;
+ cursor: pointer;
+ font-size: 14px;
+ font-weight: 800;
+ transition:
+ border-color 180ms ease,
+ background 180ms ease,
+ color 180ms ease,
+ transform 180ms ease;
+}
+
+.dialog-generator-mode:hover {
+ border-color: rgba(0, 255, 136, 0.32);
+ color: #dce3ed;
+ transform: translateY(-1px);
+}
+
+.dialog-generator-mode.is-active {
+ border-color: rgba(0, 255, 136, 0.42);
+ background: rgba(0, 255, 136, 0.08);
+ color: #00ff88;
+ box-shadow: 0 0 16px rgba(0, 255, 136, 0.08);
+}
+
+.dialog-generator-controls {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 8px;
+}
+
+.dialog-generator-pills {
+ position: relative;
+}
+
+.dialog-generator-pill {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ min-height: 38px;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 8px;
+ background: rgba(255, 255, 255, 0.04);
+ color: #dce3ed;
+ cursor: pointer;
+ padding: 0 12px;
+ font-size: 13px;
+ font-weight: 750;
+ transition:
+ border-color 180ms ease,
+ background 180ms ease,
+ color 180ms ease;
+}
+
+.dialog-generator-pill:hover {
+ border-color: rgba(0, 255, 136, 0.28);
+ color: #f6f8fb;
+}
+
+.dialog-generator-pill.is-open {
+ border-color: rgba(0, 255, 136, 0.38);
+ background: rgba(0, 255, 136, 0.08);
+ color: #00ff88;
+}
+
+.dialog-generator-pill .anticon {
+ font-size: 14px;
+}
+
+.dialog-generator-dropdown {
+ position: absolute;
+ z-index: 30;
+ top: calc(100% + 4px);
+ left: 0;
+ min-width: 148px;
+ border: 1px solid rgba(0, 255, 136, 0.18);
+ border-radius: 8px;
+ background: rgba(10, 16, 26, 0.96);
+ box-shadow:
+ 0 12px 36px rgba(0, 0, 0, 0.42),
+ 0 0 0 1px rgba(0, 255, 136, 0.06);
+ backdrop-filter: blur(18px);
+ padding: 4px;
+ overflow: hidden;
+}
+
+.dialog-generator-dropdown__item {
+ display: block;
+ width: 100%;
+ border: 0;
+ border-radius: 6px;
+ background: transparent;
+ color: #bcc4d6;
+ cursor: pointer;
+ padding: 9px 12px;
+ text-align: left;
+ font-size: 13px;
+ font-weight: 700;
+ transition:
+ background 120ms ease,
+ color 120ms ease;
+}
+
+.dialog-generator-dropdown__item:hover {
+ background: rgba(0, 255, 136, 0.08);
+ color: #e8eaef;
+}
+
+.dialog-generator-dropdown__item.is-active {
+ background: rgba(0, 255, 136, 0.12);
+ color: #00ff88;
+ font-weight: 850;
+}
+
+/* ── Video duration ── */
+.dialog-generator-duration {
+ display: grid;
+ gap: 8px;
+ width: 100%;
+}
+
+.dialog-generator-duration__label {
+ color: #9aa1b8;
+ font-size: 13px;
+ font-weight: 750;
+}
+
+.dialog-generator-duration__options {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 6px;
+}
+
+.dialog-generator-duration__btn {
+ min-width: 42px;
+ min-height: 34px;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 6px;
+ background: rgba(255, 255, 255, 0.04);
+ color: #9aa1b8;
+ cursor: pointer;
+ padding: 0 8px;
+ font-size: 12px;
+ font-weight: 750;
+ transition:
+ border-color 180ms ease,
+ background 180ms ease,
+ color 180ms ease;
+}
+
+.dialog-generator-duration__btn:hover {
+ border-color: rgba(0, 255, 136, 0.28);
+ color: #dce3ed;
+}
+
+.dialog-generator-duration__btn.is-active {
+ border-color: rgba(0, 255, 136, 0.42);
+ background: rgba(0, 255, 136, 0.12);
+ color: #00ff88;
+}
+
+/* ── Generate button ── */
+.dialog-generator-run {
+ min-height: 48px;
+ border: 1px solid rgba(0, 255, 136, 0.28);
+ border-radius: 8px;
+ background: linear-gradient(135deg, rgba(0, 255, 136, 0.14) 0%, rgba(34, 240, 192, 0.08) 100%);
+ color: #00ff88;
+ cursor: pointer;
+ font-size: 16px;
+ font-weight: 900;
+ letter-spacing: 0.04em;
+ transition:
+ border-color 180ms ease,
+ background 180ms ease,
+ transform 180ms ease,
+ box-shadow 180ms ease;
+}
+
+.dialog-generator-run:hover:not(:disabled) {
+ border-color: rgba(0, 255, 136, 0.5);
+ background: linear-gradient(135deg, rgba(0, 255, 136, 0.2) 0%, rgba(34, 240, 192, 0.12) 100%);
+ transform: translateY(-1px);
+ box-shadow: 0 4px 24px rgba(0, 255, 136, 0.1);
+}
+
+.dialog-generator-run:disabled {
+ opacity: 0.52;
+ cursor: not-allowed;
+}
+
@media (max-width: 980px) {
.dialog-generator-shell {
grid-template-columns: 1fr;
diff --git a/src/styles/pages/ecommerce-video.css b/src/styles/pages/ecommerce-video.css
index 715671c..72fbf81 100644
--- a/src/styles/pages/ecommerce-video.css
+++ b/src/styles/pages/ecommerce-video.css
@@ -6,9 +6,13 @@
align-content: initial;
justify-items: initial;
gap: 0;
- overflow: hidden;
+ overflow: auto;
background: #0e1014;
- scrollbar-color: #353b45 #0e1014;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+.product-clone-page[data-tool="clone"] .product-clone-preview--video::-webkit-scrollbar {
+ display: none;
}
.ecom-video-workspace {
@@ -20,6 +24,11 @@
overflow: hidden;
background: #0e1014;
color: #e5ebf4;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+.ecom-video-workspace::-webkit-scrollbar {
+ display: none;
}
.ecom-video-flowbar {
@@ -112,6 +121,42 @@
gap: 8px;
}
+/* ── Flowbar zoom controls ─────────────────────────── */
+.ecom-video-flowbar__zoom {
+ display: inline-flex;
+ align-items: center;
+ gap: 5px;
+}
+.ecom-video-flowbar__zoom button {
+ width: 26px;
+ height: 26px;
+ border: 1px solid #2c3038;
+ border-radius: 6px;
+ background: #1a1d24;
+ color: #8890a0;
+ font-size: 14px;
+ font-weight: 700;
+ cursor: pointer;
+ display: grid;
+ place-items: center;
+ transition: border-color 150ms ease, color 150ms ease;
+}
+.ecom-video-flowbar__zoom button:hover:not(:disabled) {
+ border-color: #00ff88;
+ color: #00ff88;
+}
+.ecom-video-flowbar__zoom button:disabled {
+ opacity: 0.35;
+ cursor: not-allowed;
+}
+.ecom-video-flowbar__zoom span {
+ min-width: 38px;
+ text-align: center;
+ font-size: 11px;
+ font-weight: 600;
+ color: #6a7282;
+}
+
.ecom-video-flowbar__error {
max-width: min(260px, 28vw);
overflow: hidden;
@@ -181,8 +226,13 @@
background: #101318;
padding: 32px 40px;
display: flex;
- align-items: stretch;
+ align-items: flex-start;
justify-content: center;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+.ecom-video-flow-canvas::-webkit-scrollbar {
+ display: none;
}
.ecom-video-flow-map {
@@ -418,22 +468,23 @@
width: 38px;
height: 38px;
place-items: center;
- border: 1px solid #3d3020;
- border-radius: 8px;
- background: #15181f;
- color: #ffe1ad;
+ border: 1px solid #00cc6a;
+ border-radius: 9px;
+ background: #00ff88;
+ color: #06130d;
font-size: 16px;
+ font-weight: 700;
cursor: pointer;
transition:
transform 150ms ease,
- border-color 150ms ease,
- background-color 150ms ease;
+ filter 150ms ease,
+ box-shadow 150ms ease;
}
.ecom-video-flow-dock button:hover {
- border-color: #4d3a1a;
- background: #241c12;
- transform: translateY(-1px);
+ filter: brightness(1.08);
+ box-shadow: 0 2px 12px rgba(0, 255, 136, 0.25);
+ transform: translateY(-2px);
}
.ecom-video-flow-notice {
diff --git a/src/styles/pages/ecommerce.css b/src/styles/pages/ecommerce.css
index 3835832..bfeee7d 100644
--- a/src/styles/pages/ecommerce.css
+++ b/src/styles/pages/ecommerce.css
@@ -990,8 +990,8 @@
overflow-x: hidden;
overflow-y: auto;
padding: 20px 18px;
- scrollbar-color: #3a3f49 #15171c;
scrollbar-width: thin;
+ scrollbar-color: #3a3f49 #15171c;
transition:
opacity 360ms ease,
transform var(--clone-settings-motion-duration) var(--clone-settings-motion-ease);
@@ -1541,12 +1541,11 @@
.product-clone-page[data-tool="clone"] .clone-ai-replicate-panel {
display: grid;
- flex: 0 0 272px;
- grid-template-rows: auto minmax(0, 1fr);
+ flex: 0 0 auto;
+ grid-template-rows: auto auto minmax(0, 1fr);
gap: 9px;
- height: 272px;
min-height: 0;
- overflow: hidden;
+ overflow: visible;
border: 1px solid #303540;
border-radius: 14px;
background: #1c1f26;
@@ -1608,7 +1607,7 @@
.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload {
position: relative;
display: grid;
- min-height: 78px;
+ min-height: 96px;
overflow: visible;
place-items: center;
align-content: center;
@@ -1617,7 +1616,7 @@
border-radius: 12px;
background: #20242c;
color: #eef2f6;
- padding: 8px;
+ padding: 16px 12px;
cursor: pointer;
transition:
border-color 160ms ease,
@@ -1625,15 +1624,52 @@
transform 160ms ease;
}
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload.has-files {
+ min-height: 120px;
+ place-items: center;
+ align-content: center;
+ gap: 8px;
+ padding: 10px;
+}
+
.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload:hover {
border-color: #00ff88;
background: #202c28;
}
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload.is-dragging {
+ border-color: #00ff88;
+ background: #1a2e24;
+ border-style: solid;
+}
+
.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload:active {
transform: scale(0.98);
}
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload-overlay {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ border-radius: 12px;
+ background: rgba(0, 255, 136, 0.08);
+ color: #00ff88;
+ pointer-events: none;
+}
+
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload-overlay .anticon {
+ font-size: 28px;
+}
+
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload-overlay span {
+ font-size: 14px;
+ font-weight: 800;
+}
+
.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload > span {
display: inline-grid;
grid-template-columns: auto minmax(0, max-content);
@@ -1676,75 +1712,86 @@
font-weight: 800;
}
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-preview {
- position: absolute;
- inset: 6px;
+/* ── Reference image file grid (inside upload button) ── */
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-files {
display: grid;
- grid-auto-flow: column;
- grid-auto-columns: minmax(0, 56px);
- align-items: center;
- justify-content: center;
+ grid-template-columns: repeat(auto-fill, minmax(56px, 1fr));
gap: 6px;
- border-radius: 10px;
- background: #20242c;
- opacity: 0;
- pointer-events: none;
- transform: scale(0.98);
- transition:
- opacity 160ms ease,
- transform 160ms ease;
+ width: 100%;
+ overflow: visible;
}
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload:hover .clone-ai-replicate-preview,
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-upload:focus-visible .clone-ai-replicate-preview {
- opacity: 1;
- pointer-events: auto;
- transform: scale(1);
-}
-
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-preview figure {
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-file {
position: relative;
display: block;
- width: 56px;
- height: 52px;
+ aspect-ratio: 1;
min-width: 0;
overflow: visible;
margin: 0;
- border-radius: 8px;
+ border-radius: 6px;
}
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-preview figure > img {
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-file > img {
display: block;
width: 100%;
height: 100%;
min-width: 0;
- overflow: hidden;
border: 1px solid #3a4555;
- border-radius: 8px;
+ border-radius: 6px;
background: #111720;
object-fit: cover;
}
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-preview figure:only-child {
- width: min(170px, 100%);
- height: 52px;
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-file > img:hover {
+ border-color: #00ff88;
}
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-preview figure:only-child > img {
- object-fit: contain;
-}
-
-.product-clone-page[data-tool="clone"] .clone-ai-replicate-preview b {
- display: grid;
- width: 42px;
- height: 42px;
- place-items: center;
- border: 1px solid #3a4555;
- border-radius: 999px;
- background: #151b24;
- color: #eef2f6;
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-add-more {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 5px;
+ justify-self: center;
+ width: fit-content;
+ max-width: calc(100% - 8px);
+ height: 28px;
+ min-width: 0;
+ border-radius: 7px;
+ background: #2b3039;
+ color: #9aa4b4;
+ padding: 0 10px;
font-size: 12px;
- font-weight: 900;
+ font-weight: 750;
+ white-space: nowrap;
+}
+
+.product-clone-page[data-tool="clone"] .clone-ai-replicate-add-more .anticon {
+ font-size: 13px;
+ color: #5d84bd;
+}
+
+/* ── Portal-based zoom preview (avoids overflow clipping) ── */
+.clone-ai-zoom-portal {
+ position: fixed;
+ z-index: 9999;
+ width: min(280px, 52vw);
+ max-height: 340px;
+ border: 1px solid #3a4555;
+ border-radius: 14px;
+ background: #101115;
+ padding: 8px;
+ box-shadow: 0 22px 48px rgba(0, 0, 0, 0.5);
+ transform: translate(-50%, calc(-100% - 12px));
+ pointer-events: none;
+}
+
+.clone-ai-zoom-portal img {
+ display: block;
+ width: 100%;
+ height: auto;
+ max-height: 324px;
+ border-radius: 8px;
+ object-fit: contain;
}
.product-clone-page[data-tool="clone"] .clone-ai-replicate-link input {
@@ -2745,12 +2792,18 @@
position: relative;
display: grid;
min-height: 0;
- overflow: hidden;
- align-content: center;
+ overflow-y: auto;
+ overflow-x: hidden;
+ align-content: safe center;
justify-items: center;
gap: 22px;
background: #101115;
padding: 92px 46px 142px;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+.product-clone-page[data-tool="clone"] .clone-ai-preview::-webkit-scrollbar {
+ display: none;
}
.product-clone-page[data-tool="clone"] .clone-ai-preview-header {
@@ -2781,6 +2834,50 @@
color: #00ff88;
}
+/* ── Preview zoom controls ─────────────────────────── */
+.product-clone-page[data-tool="clone"] .clone-ai-preview-zoom {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin-top: 8px;
+}
+.product-clone-page[data-tool="clone"] .clone-ai-preview-zoom button {
+ width: 28px;
+ height: 28px;
+ border: 1px solid #2c3038;
+ border-radius: 6px;
+ background: #1b1d23;
+ color: #a0a8b8;
+ font-size: 16px;
+ font-weight: 700;
+ cursor: pointer;
+ display: grid;
+ place-items: center;
+ transition: border-color 150ms ease, color 150ms ease;
+}
+.product-clone-page[data-tool="clone"] .clone-ai-preview-zoom button:hover:not(:disabled) {
+ border-color: #00ff88;
+ color: #00ff88;
+}
+.product-clone-page[data-tool="clone"] .clone-ai-preview-zoom button:disabled {
+ opacity: 0.35;
+ cursor: not-allowed;
+}
+.product-clone-page[data-tool="clone"] .clone-ai-preview-zoom span {
+ min-width: 42px;
+ text-align: center;
+ font-size: 12px;
+ font-weight: 600;
+ color: #758096;
+}
+.product-clone-page[data-tool="clone"] .clone-ai-preview-zoom-wrap {
+ flex-shrink: 0;
+ display: flex;
+ align-items: flex-start;
+ justify-content: center;
+ min-width: max-content;
+}
+
.product-clone-page[data-tool="clone"] .clone-ai-empty-state {
display: grid;
width: min(100%, 600px);
@@ -2888,7 +2985,8 @@
}
.product-clone-page[data-tool="clone"] .clone-ai-main-result {
- height: 440px;
+ width: 100%;
+ height: auto;
}
.product-clone-page[data-tool="clone"] .clone-ai-result-grid {
@@ -2898,12 +2996,12 @@
}
.product-clone-page[data-tool="clone"] .clone-ai-result-grid button {
- height: 210px;
+ width: 100%;
+ height: auto;
}
.product-clone-page[data-tool="clone"] .clone-ai-result-grid button:first-child {
grid-column: 1 / -1;
- height: 240px;
}
.product-clone-page[data-tool="clone"] .clone-ai-main-result span,
@@ -3510,8 +3608,8 @@
.product-set-thumb:focus-within .uploaded-image-zoom,
.product-clone-uploaded-thumb:hover .uploaded-image-zoom,
.product-clone-uploaded-thumb:focus-within .uploaded-image-zoom,
-.clone-ai-replicate-preview figure:hover .uploaded-image-zoom,
-.clone-ai-replicate-preview figure:focus-within .uploaded-image-zoom {
+.clone-ai-replicate-file:hover .uploaded-image-zoom,
+.clone-ai-replicate-file:focus-within .uploaded-image-zoom {
opacity: 1;
transform: translate(-50%, 0) scale(1);
visibility: visible;
@@ -9458,3 +9556,4 @@
min-height: calc(100% - 59px);
}
}
+
diff --git a/src/styles/pages/image-workbench.css b/src/styles/pages/image-workbench.css
index 20948ea..0b854ab 100644
--- a/src/styles/pages/image-workbench.css
+++ b/src/styles/pages/image-workbench.css
@@ -216,14 +216,14 @@
.image-workbench-layout {
display: grid;
- grid-template-columns: 280px 1fr 220px;
+ grid-template-columns: 280px 1fr;
flex: 1;
min-height: 0;
overflow: hidden;
}
.image-workbench-layout--inpaint {
- grid-template-columns: 260px 1fr 240px;
+ grid-template-columns: 260px 1fr;
}
.image-workbench-layout--camera {
@@ -278,6 +278,27 @@
position: relative;
}
+.image-workbench-upload-shell.is-dragging {
+ border-radius: var(--radius-sm);
+ outline: 2px dashed var(--accent);
+ outline-offset: -2px;
+}
+
+.image-workbench-upload-drop-overlay {
+ position: absolute;
+ inset: 0;
+ z-index: 10;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: var(--radius-sm);
+ background: rgba(var(--accent-rgb), 0.08);
+ color: var(--accent);
+ font-size: 15px;
+ font-weight: 800;
+ pointer-events: none;
+}
+
.image-workbench-upload {
display: flex;
flex-direction: column;
diff --git a/src/styles/pages/legacy-pages.css b/src/styles/pages/legacy-pages.css
index 3a7585d..07c635e 100644
--- a/src/styles/pages/legacy-pages.css
+++ b/src/styles/pages/legacy-pages.css
@@ -14618,6 +14618,55 @@
background: #ddf5e2;
}
+.agent-tool-pill.is-open {
+ background: #ddf5e2;
+ box-shadow: 1px 1px 0 #111;
+}
+
+.agent-tool-pills {
+ position: relative;
+}
+
+.agent-dropdown {
+ position: absolute;
+ top: calc(100% + 4px);
+ left: 0;
+ z-index: 120;
+ min-width: 160px;
+ background: #fff;
+ border: 3px solid #111;
+ box-shadow: 3px 3px 0 #111;
+ border-radius: 0;
+ overflow: hidden;
+}
+
+.agent-dropdown__item {
+ display: block;
+ width: 100%;
+ padding: 8px 14px;
+ border: none;
+ border-bottom: 1px solid #ddd;
+ background: #fff;
+ color: #111;
+ font-size: 13px;
+ text-align: left;
+ cursor: pointer;
+ transition: background 0.1s;
+}
+
+.agent-dropdown__item:last-child {
+ border-bottom: none;
+}
+
+.agent-dropdown__item:hover {
+ background: #ddf5e2;
+}
+
+.agent-dropdown__item.is-active {
+ background: #c8f0d6;
+ font-weight: 700;
+}
+
.agent-run-button {
display: flex;
align-items: center;
diff --git a/src/styles/pages/more.css b/src/styles/pages/more.css
index efa9b84..cbd6270 100644
--- a/src/styles/pages/more.css
+++ b/src/styles/pages/more.css
@@ -1,4 +1,8 @@
.more-page-v2 {
+ --more-card-shadow: 0 18px 48px rgba(0, 0, 0, 0.24);
+ --more-card-glow: 0 0 0 1px rgba(255, 255, 255, 0.025), 0 18px 38px rgba(0, 0, 0, 0.16);
+
+ position: relative;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
height: 100%;
@@ -11,74 +15,165 @@
}
.more-page-v2__header {
- display: flex;
+ position: relative;
+ z-index: 2;
+ display: grid;
+ grid-template-columns: minmax(180px, auto) auto minmax(0, 1fr);
align-items: center;
- gap: 24px;
- padding: 18px 28px 14px;
+ gap: 18px;
+ padding: 18px 28px 16px;
border-bottom: 1px solid var(--border-weak);
background:
- linear-gradient(90deg, rgba(var(--accent-rgb), 0.1), transparent 50%),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.035), transparent 48%),
+ linear-gradient(180deg, rgba(255, 255, 255, 0.025), transparent),
var(--bg-surface, var(--bg-panel));
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.03);
+}
+
+.more-page-v2__title-group {
+ display: grid;
+ gap: 4px;
+ min-width: 0;
+}
+
+.more-page-v2__eyebrow {
+ color: var(--accent);
+ font-size: 11px;
+ font-weight: 800;
+ letter-spacing: 0.08em;
+ line-height: 1;
+ text-transform: uppercase;
}
.more-page-v2__header h1 {
margin: 0;
- font-size: 18px;
+ color: var(--fg-body);
+ font-size: clamp(22px, 2vw, 28px);
font-weight: 800;
- letter-spacing: -0.01em;
+ letter-spacing: 0;
+ line-height: 1.1;
+}
+
+.more-page-v2__header-meta {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 8px;
+ min-width: 0;
+}
+
+.more-page-v2__header-meta span {
+ display: inline-flex;
+ align-items: center;
+ min-height: 28px;
+ padding: 0 10px;
+ border: 1px solid rgba(var(--accent-rgb), 0.16);
+ border-radius: var(--radius-xs, 8px);
+ background: rgba(var(--accent-rgb), 0.07);
+ color: var(--fg-muted);
+ font-size: 12px;
+ font-weight: 700;
+ white-space: nowrap;
}
.more-page-v2__filters {
display: flex;
align-items: center;
- gap: 6px;
+ justify-content: flex-end;
+ min-width: 0;
+ gap: 8px;
+ overflow-x: auto;
+ padding-bottom: 2px;
+ scrollbar-width: none;
+}
+
+.more-page-v2__filters::-webkit-scrollbar {
+ display: none;
}
.more-page-v2__filters button {
display: inline-flex;
align-items: center;
- min-height: 30px;
- padding: 0 12px;
- border: 1px solid var(--border-subtle);
- border-radius: 999px;
+ justify-content: center;
+ flex: 0 0 auto;
+ min-height: 34px;
+ gap: 8px;
+ padding: 0 12px 0 13px;
+ border: 1px solid var(--border-weak);
+ border-radius: var(--radius-xs, 8px);
background: var(--bg-inset);
color: var(--fg-muted);
font: inherit;
font-size: 12px;
- font-weight: 600;
+ font-weight: 750;
cursor: pointer;
- transition: all 140ms ease;
+ transition:
+ border-color 140ms ease,
+ background 140ms ease,
+ color 140ms ease,
+ transform 140ms ease,
+ box-shadow 140ms ease;
+}
+
+.more-page-v2__filters button em {
+ display: inline-grid;
+ place-items: center;
+ min-width: 20px;
+ height: 20px;
+ padding: 0 6px;
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.06);
+ color: var(--fg-muted);
+ font-size: 11px;
+ font-style: normal;
+ font-weight: 800;
}
.more-page-v2__filters button:hover {
- border-color: rgba(var(--accent-rgb), 0.3);
+ border-color: rgba(var(--accent-rgb), 0.32);
+ background: var(--bg-hover, rgba(255, 255, 255, 0.035));
color: var(--fg-body);
+ transform: translateY(-1px);
}
.more-page-v2__filters button.is-active {
border-color: rgba(var(--accent-rgb), 0.5);
- background: rgba(var(--accent-rgb), 0.12);
+ background:
+ linear-gradient(180deg, rgba(var(--accent-rgb), 0.18), rgba(var(--accent-rgb), 0.09)),
+ var(--bg-inset);
color: var(--accent);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 0 0 1px rgba(var(--accent-rgb), 0.08);
+}
+
+.more-page-v2__filters button.is-active em {
+ background: rgba(var(--accent-rgb), 0.18);
+ color: var(--accent);
+}
+
+.more-page-v2__filters button:focus-visible,
+.more-card:focus-visible {
+ outline: 2px solid rgba(var(--accent-rgb), 0.72);
+ outline-offset: 3px;
}
.more-page-v2__scroll {
overflow-y: auto;
- padding: 24px 28px 64px;
- scrollbar-color: rgba(var(--accent-rgb), 0.2) transparent;
+ padding: 26px 28px 68px;
+ scrollbar-color: rgba(var(--accent-rgb), 0.26) transparent;
}
.more-page-v2__section {
- margin-bottom: 28px;
+ margin-bottom: 30px;
}
.more-page-v2__section-title {
display: flex;
align-items: center;
gap: 8px;
- margin: 0 0 14px;
+ margin: 0 0 15px;
color: var(--fg-muted);
font-size: 12px;
- font-weight: 700;
+ font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.04em;
}
@@ -88,90 +183,165 @@
color: var(--accent);
}
+.more-page-v2__section-title span {
+ display: inline-flex;
+ align-items: center;
+ min-height: 20px;
+ padding: 0 7px;
+ border: 1px solid rgba(var(--accent-rgb), 0.18);
+ border-radius: 999px;
+ background: rgba(var(--accent-rgb), 0.07);
+ color: var(--accent);
+ font-size: 11px;
+ line-height: 1;
+ text-transform: none;
+}
+
.more-page-v2__recent-row {
display: flex;
- gap: 10px;
+ gap: 12px;
flex-wrap: wrap;
}
.more-page-v2__featured-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
- gap: 16px;
+ gap: 18px;
}
.more-card--featured {
display: flex;
align-items: flex-start;
- gap: 16px;
- padding: 24px;
- border-radius: var(--radius-md, 14px);
- background: var(--card-gradient);
- border: 1px solid var(--border-weak);
- transition: all 200ms ease;
- overflow: hidden;
+ gap: 18px;
+ padding: 20px;
+ border-color: rgba(var(--accent-rgb), 0.18);
+ border-radius: var(--radius-xs, 8px);
+ background:
+ var(--card-gradient),
+ linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.012)),
+ var(--bg-panel);
+ box-shadow: var(--more-card-glow);
position: relative;
+ overflow: hidden;
}
.more-card--featured::before {
content: "";
position: absolute;
- top: -20px;
- right: -20px;
- width: 120px;
- height: 120px;
- border-radius: 50%;
- background: radial-gradient(circle, rgba(var(--accent-rgb), 0.06), transparent 70%);
+ inset: 0;
+ background:
+ linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.035), transparent),
+ linear-gradient(180deg, rgba(255, 255, 255, 0.045), transparent 34%);
+ opacity: 0.5;
pointer-events: none;
}
.more-card--featured:hover {
- border-color: rgba(var(--accent-rgb), 0.4);
- transform: translateY(-2px);
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
+ border-color: rgba(var(--accent-rgb), 0.45);
+ transform: translateY(-3px);
+ box-shadow: var(--more-card-shadow), 0 0 0 1px rgba(var(--accent-rgb), 0.1);
}
.more-card__featured-icon {
display: grid;
place-items: center;
- width: 56px;
- height: 56px;
- border-radius: 16px;
- background: rgba(var(--accent-rgb), 0.12);
+ width: 52px;
+ height: 52px;
+ border: 1px solid rgba(var(--accent-rgb), 0.22);
+ border-radius: var(--radius-xs, 8px);
+ background:
+ linear-gradient(180deg, rgba(var(--accent-rgb), 0.16), rgba(var(--accent-rgb), 0.08)),
+ var(--bg-inset);
color: var(--accent);
font-size: 24px;
flex-shrink: 0;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.more-card__featured-body {
display: flex;
flex-direction: column;
- gap: 6px;
+ gap: 9px;
+ min-width: 0;
text-align: left;
}
-.more-card__featured-body strong {
- font-size: 16px;
- font-weight: 700;
+.more-card__featured-kicker {
+ width: fit-content;
+ color: var(--accent);
+ font-size: 11px;
+ font-weight: 800;
+ letter-spacing: 0.04em;
+ line-height: 1;
}
-.more-card__featured-body span {
+.more-card__featured-body strong {
+ color: var(--fg-body);
+ font-size: 18px;
+ font-weight: 800;
+ line-height: 1.25;
+}
+
+.more-card__featured-desc {
font-size: 13px;
color: var(--fg-muted);
line-height: 1.5;
}
+.more-card__steps {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 7px;
+ color: var(--fg-muted);
+}
+
+.more-card__steps span {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ min-height: 24px;
+ padding: 0 8px;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: var(--radius-xs, 8px);
+ background: rgba(255, 255, 255, 0.035);
+ color: var(--fg-muted);
+ font-size: 11px;
+ font-weight: 750;
+}
+
+.more-card__steps span:not(:last-child)::after {
+ position: absolute;
+ right: -7px;
+ color: rgba(var(--accent-rgb), 0.62);
+ content: "/";
+}
+
+.more-card__outcome {
+ color: var(--fg-muted);
+ font-size: 12px;
+ line-height: 1.5;
+}
+
.more-card__cta {
- margin-top: 4px;
- font-size: 12px !important;
- font-weight: 600;
+ display: inline-flex;
+ align-items: center;
+ width: fit-content;
+ min-height: 28px;
+ margin-top: 0;
+ padding: 0 10px;
+ border: 1px solid rgba(var(--accent-rgb), 0.28);
+ border-radius: var(--radius-xs, 8px);
+ background: rgba(var(--accent-rgb), 0.08);
+ font-size: 12px;
+ font-weight: 800;
color: var(--accent) !important;
}
.more-page-v2__grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
- gap: 14px;
+ grid-template-columns: repeat(auto-fill, minmax(236px, 1fr));
+ gap: 16px;
}
.more-card {
@@ -179,23 +349,33 @@
display: grid;
align-content: start;
justify-items: start;
- gap: 8px;
+ min-width: 0;
+ gap: 10px;
padding: 18px;
border: 1px solid var(--border-weak);
- border-radius: var(--radius-sm, 10px);
- background: var(--bg-panel);
+ border-radius: var(--radius-xs, 8px);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.032), transparent 42%),
+ var(--bg-panel);
color: var(--fg-body);
font: inherit;
text-align: left;
cursor: pointer;
- transition: all 160ms ease;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.025);
+ transition:
+ border-color 160ms ease,
+ background 160ms ease,
+ box-shadow 160ms ease,
+ transform 160ms ease;
}
.more-card:hover {
- border-color: rgba(var(--accent-rgb), 0.4);
- background: var(--bg-hover, rgba(255, 255, 255, 0.03));
+ border-color: rgba(var(--accent-rgb), 0.38);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent 46%),
+ var(--bg-hover, rgba(255, 255, 255, 0.03));
transform: translateY(-2px);
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
+ box-shadow: var(--more-card-glow), 0 10px 26px rgba(0, 0, 0, 0.16);
}
.more-card--pending {
@@ -215,19 +395,24 @@
display: flex;
align-items: center;
gap: 10px;
- padding: 10px 16px;
- min-width: 140px;
+ min-width: 150px;
+ min-height: 54px;
+ padding: 10px 14px;
+ border-color: rgba(var(--accent-rgb), 0.14);
}
.more-card__icon {
display: grid;
place-items: center;
- width: 38px;
- height: 38px;
+ width: 40px;
+ height: 40px;
+ border: 1px solid rgba(var(--accent-rgb), 0.16);
border-radius: var(--radius-xs, 8px);
- background: rgba(var(--accent-rgb), 0.1);
+ background:
+ linear-gradient(180deg, rgba(var(--accent-rgb), 0.12), rgba(var(--accent-rgb), 0.06)),
+ var(--bg-inset);
color: var(--accent);
- font-size: 16px;
+ font-size: 17px;
flex-shrink: 0;
}
@@ -237,17 +422,505 @@
font-size: 14px;
}
-.more-card strong {
- font-size: 13px;
+.more-card__recent-body {
+ display: grid;
+ min-width: 0;
+ gap: 2px;
+}
+
+.more-card__recent-body small {
+ color: var(--fg-muted);
+ font-size: 11px;
font-weight: 700;
}
+.more-card strong {
+ max-width: 100%;
+ color: var(--fg-body);
+ font-size: 14px;
+ font-weight: 800;
+ line-height: 1.35;
+}
+
+.more-card__topline {
+ position: absolute;
+ top: 14px;
+ right: 14px;
+ display: inline-flex;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ max-width: calc(100% - 70px);
+ gap: 5px;
+}
+
+.more-card__topline span {
+ display: inline-flex;
+ align-items: center;
+ min-height: 20px;
+ padding: 0 7px;
+ border: 1px solid rgba(var(--accent-rgb), 0.18);
+ border-radius: 999px;
+ background: rgba(var(--accent-rgb), 0.07);
+ color: var(--accent);
+ font-size: 10px;
+ font-weight: 800;
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.more-card__compare {
+ position: relative;
+ display: block;
+ width: 100%;
+ min-height: 92px;
+ overflow: hidden;
+ border: 1px solid rgba(var(--accent-rgb), 0.28);
+ border-radius: 10px;
+ background:
+ linear-gradient(135deg, rgba(var(--accent-rgb), 0.1), transparent 34%),
+ linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.012)),
+ var(--bg-inset);
+ box-shadow:
+ inset 0 1px 0 rgba(255, 255, 255, 0.08),
+ inset 0 -1px 0 rgba(0, 0, 0, 0.34),
+ 0 0 20px rgba(var(--accent-rgb), 0.08);
+ clip-path: polygon(0 10px, 10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%);
+ isolation: isolate;
+}
+
+.more-card__compare::before {
+ position: absolute;
+ inset: 0;
+ z-index: 2;
+ pointer-events: none;
+ background:
+ linear-gradient(90deg, transparent, rgba(var(--accent-rgb), 0.12), transparent),
+ linear-gradient(180deg, rgba(255, 255, 255, 0.05), transparent 32%, rgba(0, 0, 0, 0.2));
+ content: "";
+ mix-blend-mode: screen;
+ opacity: 0.68;
+}
+
+.more-card__compare::after {
+ position: absolute;
+ inset: 5px;
+ z-index: 3;
+ border: 1px solid rgba(var(--accent-rgb), 0.16);
+ clip-path: polygon(0 8px, 8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%);
+ content: "";
+ pointer-events: none;
+}
+
+.more-card__compare-labels {
+ position: absolute;
+ inset: 7px 9px auto;
+ z-index: 5;
+ display: flex;
+ justify-content: space-between;
+ gap: 10px;
+ pointer-events: none;
+}
+
+.more-card__compare-labels span {
+ display: inline-flex;
+ align-items: center;
+ height: 16px;
+ padding: 0 7px;
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ border-radius: 999px;
+ background: rgba(0, 0, 0, 0.45);
+ color: rgba(255, 255, 255, 0.72);
+ font-size: 8px;
+ font-weight: 800;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+}
+
+.more-card__compare-labels span:last-child {
+ border-color: rgba(var(--accent-rgb), 0.42);
+ color: var(--accent);
+ text-shadow: 0 0 8px rgba(var(--accent-rgb), 0.45);
+}
+
+.more-card__compare-stage {
+ position: absolute;
+ inset: 0;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) 2px minmax(0, 1fr);
+}
+
+.more-card__compare-side,
+.more-card__scene-subject,
+.more-card__scene-detail,
+.more-card__scene-overlay,
+.more-card__compare-divider,
+.more-card__compare-divider span {
+ display: block;
+}
+
+.more-card__compare-side {
+ position: relative;
+ min-width: 0;
+ overflow: hidden;
+ background:
+ radial-gradient(circle at 50% 45%, rgba(255, 255, 255, 0.1), transparent 42%),
+ linear-gradient(135deg, #14191b, #070a0b);
+}
+
+.more-card__compare-side--before {
+ filter: saturate(0.78) brightness(0.82);
+}
+
+.more-card__compare-side--after {
+ filter: saturate(1.08) brightness(1.02);
+}
+
+.more-card__compare-divider {
+ position: relative;
+ z-index: 4;
+ background: rgba(var(--accent-rgb), 0.35);
+ box-shadow:
+ 0 0 10px rgba(var(--accent-rgb), 0.85),
+ 0 0 24px rgba(var(--accent-rgb), 0.36);
+}
+
+.more-card__compare-divider span {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 11px;
+ height: 18px;
+ border: 1px solid rgba(var(--accent-rgb), 0.72);
+ background: rgba(var(--accent-rgb), 0.18);
+ box-shadow: 0 0 16px rgba(var(--accent-rgb), 0.56);
+ transform: translate(-50%, -50%);
+ clip-path: polygon(0 0, 100% 50%, 0 100%, 26% 50%);
+}
+
+.more-card__scene-subject,
+.more-card__scene-detail,
+.more-card__scene-overlay {
+ position: absolute;
+ pointer-events: none;
+}
+
+.more-card__compare--upscale .more-card__compare-side--before {
+ background:
+ linear-gradient(90deg, rgba(0, 0, 0, 0.18) 50%, transparent 50%),
+ linear-gradient(rgba(255, 255, 255, 0.08) 50%, transparent 50%),
+ linear-gradient(135deg, #1c2324, #5b4e35 46%, #0c1011);
+ background-size: 10px 10px, 10px 10px, auto;
+}
+
+.more-card__compare--upscale .more-card__compare-side--after {
+ background:
+ radial-gradient(circle at 55% 54%, rgba(212, 178, 102, 0.42), transparent 11%),
+ repeating-conic-gradient(from 18deg at 55% 54%, rgba(231, 201, 139, 0.42) 0 8deg, transparent 8deg 22deg),
+ linear-gradient(135deg, #071013, #263238 45%, #0a0e10);
+}
+
+.more-card__compare--upscale .more-card__scene-detail {
+ inset: 32% 12%;
+ border: 1px solid rgba(220, 190, 120, 0.36);
+ border-radius: 50%;
+ opacity: 0.7;
+}
+
+.more-card__compare--watermark .more-card__compare-side {
+ background:
+ linear-gradient(180deg, #416b85 0 35%, #e19456 36% 55%, #433322 56% 100%);
+}
+
+.more-card__compare--watermark .more-card__compare-side::before {
+ position: absolute;
+ inset: 44% -8% auto;
+ height: 28px;
+ background: repeating-linear-gradient(170deg, rgba(255, 255, 255, 0.46) 0 5px, transparent 5px 12px);
+ content: "";
+ opacity: 0.42;
+}
+
+.more-card__compare--watermark .more-card__scene-subject {
+ left: 16%;
+ bottom: 28%;
+ width: 30%;
+ height: 34%;
+ background: linear-gradient(135deg, #1b1712, #6e4a28);
+ clip-path: polygon(42% 0, 100% 100%, 0 100%);
+}
+
+.more-card__compare--watermark .more-card__compare-side--before .more-card__scene-overlay::before,
+.more-card__compare--subtitle .more-card__compare-side--before .more-card__scene-overlay::before {
+ position: absolute;
+ inset: auto auto 14px 10px;
+ color: rgba(255, 255, 255, 0.82);
+ font-size: 10px;
+ font-weight: 900;
+ letter-spacing: 0.08em;
+ line-height: 1.2;
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.75);
+ content: "WATERMARK";
+ transform: rotate(-12deg);
+}
+
+.more-card__compare--watermark .more-card__compare-side--after .more-card__scene-overlay::before {
+ position: absolute;
+ right: 12px;
+ bottom: 12px;
+ width: 22px;
+ height: 2px;
+ background: rgba(var(--accent-rgb), 0.72);
+ box-shadow: 0 0 12px rgba(var(--accent-rgb), 0.7);
+ content: "";
+}
+
+.more-card__compare--subtitle .more-card__compare-side {
+ background:
+ radial-gradient(circle at 16% 18%, rgba(202, 232, 234, 0.42), transparent 12%),
+ radial-gradient(circle at 82% 16%, rgba(224, 159, 72, 0.32), transparent 9%),
+ linear-gradient(135deg, #10161a, #392819 58%, #07090a);
+}
+
+.more-card__compare--subtitle .more-card__scene-subject {
+ left: 31%;
+ bottom: 13%;
+ width: 38%;
+ height: 60%;
+ border-radius: 50% 50% 24% 24%;
+ background: linear-gradient(180deg, #3b2519 0 20%, #b28463 21% 44%, #173342 45%);
+}
+
+.more-card__compare--subtitle .more-card__compare-side--before .more-card__scene-overlay::before {
+ inset: auto 12px 12px;
+ content: "有些选择一旦做出";
+ transform: none;
+}
+
+.more-card__compare--subtitle .more-card__compare-side--before .more-card__scene-overlay::after {
+ position: absolute;
+ right: 18px;
+ bottom: 26px;
+ left: 18px;
+ height: 2px;
+ background: rgba(255, 255, 255, 0.82);
+ content: "";
+}
+
+.more-card__compare--inpaint .more-card__compare-side,
+.more-card__compare--dialog .more-card__compare-side {
+ background:
+ radial-gradient(circle at 50% 38%, #b6815d 0 18%, transparent 19%),
+ radial-gradient(circle at 48% 32%, #1c1210 0 27%, transparent 28%),
+ linear-gradient(135deg, #15191a, #050707);
+}
+
+.more-card__compare--inpaint .more-card__scene-subject,
+.more-card__compare--dialog .more-card__scene-subject {
+ left: 36%;
+ top: 24%;
+ width: 30%;
+ height: 42%;
+ border-radius: 46% 46% 42% 42%;
+ background: linear-gradient(180deg, #b78661, #6f4230);
+}
+
+.more-card__compare--inpaint .more-card__scene-detail {
+ left: 30%;
+ top: 40%;
+ width: 42%;
+ height: 10%;
+ border: 2px solid rgba(18, 22, 22, 0.92);
+ border-radius: 999px;
+}
+
+.more-card__compare--inpaint .more-card__compare-side--after .more-card__scene-detail {
+ height: 15%;
+ background: rgba(0, 0, 0, 0.78);
+ box-shadow: 0 0 10px rgba(var(--accent-rgb), 0.18);
+}
+
+.more-card__compare--camera .more-card__compare-side--before {
+ background:
+ radial-gradient(circle at 28% 74%, rgba(255, 201, 100, 0.72), transparent 8%),
+ radial-gradient(circle at 78% 28%, rgba(255, 255, 255, 0.42), transparent 12%),
+ linear-gradient(100deg, #0a0c0d, #2c3233 48%, #07090a);
+}
+
+.more-card__compare--camera .more-card__compare-side--after {
+ background:
+ repeating-linear-gradient(12deg, rgba(255, 255, 255, 0.08) 0 2px, transparent 2px 14px),
+ repeating-linear-gradient(102deg, rgba(255, 255, 255, 0.07) 0 1px, transparent 1px 16px),
+ linear-gradient(140deg, #2a2520, #07090a);
+}
+
+.more-card__compare--camera .more-card__scene-subject {
+ left: 33%;
+ bottom: 8%;
+ width: 35%;
+ height: 56%;
+ border-radius: 48% 48% 22% 22%;
+ background: linear-gradient(180deg, #b38262 0 38%, #15191b 39%);
+}
+
+.more-card__compare--camera .more-card__compare-side--after .more-card__scene-subject {
+ top: 26%;
+ bottom: auto;
+ height: 38%;
+ transform: scale(0.8);
+}
+
+.more-card__compare--dialog .more-card__compare-side--after .more-card__scene-detail {
+ right: 8%;
+ top: 26%;
+ width: 38%;
+ height: 48%;
+ border: 1px solid rgba(var(--accent-rgb), 0.48);
+ border-radius: 8px;
+ background:
+ linear-gradient(rgba(var(--accent-rgb), 0.25), rgba(var(--accent-rgb), 0.25)) 50% 22% / 72% 2px no-repeat,
+ linear-gradient(rgba(var(--accent-rgb), 0.42), rgba(var(--accent-rgb), 0.42)) 50% 52% / 72% 2px no-repeat,
+ linear-gradient(rgba(var(--accent-rgb), 0.25), rgba(var(--accent-rgb), 0.25)) 50% 82% / 72% 2px no-repeat,
+ rgba(0, 0, 0, 0.42);
+ box-shadow: 0 0 14px rgba(var(--accent-rgb), 0.3);
+}
+
+.more-card__compare--character .more-card__compare-side--before,
+.more-card__compare--character .more-card__compare-side--after {
+ background:
+ radial-gradient(circle at 50% 68%, rgba(var(--accent-rgb), 0.28), transparent 22%),
+ linear-gradient(135deg, #15191a, #07090a);
+}
+
+.more-card__compare--character .more-card__scene-subject {
+ left: 38%;
+ bottom: 16%;
+ width: 24%;
+ height: 54%;
+ border-radius: 50% 50% 18% 18%;
+ background:
+ radial-gradient(circle at 52% 14%, #d89a6e 0 15%, transparent 16%),
+ linear-gradient(180deg, #20242a 0 35%, #9c1f23 36% 50%, #14181a 51%);
+}
+
+.more-card__compare--character .more-card__compare-side--after .more-card__scene-detail {
+ inset: 22% 8% 14%;
+ background: repeating-linear-gradient(90deg, rgba(var(--accent-rgb), 0.32) 0 2px, transparent 2px 18%);
+ opacity: 0.9;
+}
+
+.more-card__compare--avatar .more-card__compare-side,
+.more-card__compare--digital-human .more-card__compare-side {
+ background:
+ radial-gradient(circle at 50% 35%, #b98d70 0 17%, transparent 18%),
+ linear-gradient(135deg, #15191a, #060808);
+}
+
+.more-card__compare--avatar .more-card__scene-subject,
+.more-card__compare--digital-human .more-card__scene-subject {
+ left: 36%;
+ top: 23%;
+ width: 30%;
+ height: 52%;
+ border-radius: 50% 50% 30% 30%;
+ background: linear-gradient(180deg, #c59a7c 0 42%, #252a2b 43%);
+}
+
+.more-card__compare--avatar .more-card__compare-side--after .more-card__scene-detail {
+ inset: 28% 17% auto;
+ height: 36%;
+ background:
+ radial-gradient(circle, var(--accent) 0 2px, transparent 3px) 18% 20% / 22px 18px,
+ radial-gradient(circle, var(--accent) 0 2px, transparent 3px) 70% 70% / 22px 18px;
+ opacity: 0.9;
+}
+
+.more-card__compare--avatar .more-card__compare-side--after .more-card__scene-overlay::before,
+.more-card__compare--digital-human .more-card__compare-side--after .more-card__scene-overlay::before {
+ position: absolute;
+ right: 8px;
+ bottom: 10px;
+ width: 34px;
+ height: 23px;
+ border: 1px solid rgba(var(--accent-rgb), 0.45);
+ border-radius: 5px;
+ background:
+ linear-gradient(rgba(var(--accent-rgb), 0.65), rgba(var(--accent-rgb), 0.65)) 8px 7px / 20px 2px no-repeat,
+ linear-gradient(rgba(var(--accent-rgb), 0.36), rgba(var(--accent-rgb), 0.36)) 8px 15px / 14px 2px no-repeat,
+ rgba(0, 0, 0, 0.38);
+ content: "";
+}
+
+.more-card__compare--digital-human .more-card__compare-side--after .more-card__scene-detail {
+ right: 12%;
+ top: 28%;
+ width: 18%;
+ height: 38%;
+ background:
+ linear-gradient(90deg, rgba(var(--accent-rgb), 0.85) 0 2px, transparent 2px 100%),
+ repeating-linear-gradient(180deg, rgba(var(--accent-rgb), 0.55) 0 2px, transparent 2px 8px);
+ box-shadow: 0 0 12px rgba(var(--accent-rgb), 0.34);
+}
+
+.more-card__compare--workbench .more-card__compare-side--before {
+ background:
+ linear-gradient(120deg, rgba(255, 255, 255, 0.12) 0 2px, transparent 2px 100%),
+ radial-gradient(circle at 48% 52%, #596166, transparent 24%),
+ linear-gradient(135deg, #101516, #050707);
+}
+
+.more-card__compare--workbench .more-card__compare-side--after {
+ background:
+ radial-gradient(circle at 52% 46%, rgba(var(--accent-rgb), 0.42), transparent 20%),
+ linear-gradient(135deg, #15201b, #050707);
+}
+
+.more-card__compare--workbench .more-card__scene-detail {
+ inset: 20% 18%;
+ border: 1px dashed rgba(var(--accent-rgb), 0.5);
+ border-radius: 8px;
+}
+
.more-card__desc {
color: var(--fg-muted);
- font-size: 12px;
+ font-size: 12.5px;
line-height: 1.5;
}
+.more-card__use-case {
+ display: block;
+ min-height: 38px;
+ color: color-mix(in srgb, var(--fg-muted) 78%, var(--fg-body));
+ font-size: 12px;
+ line-height: 1.55;
+}
+
+.more-card__action {
+ display: inline-flex;
+ align-items: center;
+ width: fit-content;
+ min-height: 26px;
+ margin-top: 2px;
+ padding: 0 9px;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: var(--radius-xs, 8px);
+ background: rgba(255, 255, 255, 0.035);
+ color: var(--fg-body);
+ font-size: 11px;
+ font-weight: 800;
+ transition:
+ border-color 160ms ease,
+ background 160ms ease,
+ color 160ms ease,
+ transform 160ms ease;
+}
+
+.more-card:hover .more-card__action {
+ border-color: rgba(var(--accent-rgb), 0.28);
+ background: rgba(var(--accent-rgb), 0.08);
+ color: var(--accent);
+ transform: translateX(2px);
+}
+
.more-card__badge {
position: absolute;
top: 10px;
@@ -260,10 +933,92 @@
font-weight: 700;
}
+.more-page-v2__empty {
+ display: grid;
+ justify-items: center;
+ gap: 10px;
+ min-height: 220px;
+ padding: 34px 20px;
+ border: 1px solid var(--border-weak);
+ border-radius: var(--radius-xs, 8px);
+ background:
+ linear-gradient(180deg, rgba(var(--accent-rgb), 0.065), transparent 64%),
+ var(--bg-panel);
+ color: var(--fg-muted);
+ text-align: center;
+}
+
+.more-page-v2__empty-icon {
+ display: grid;
+ place-items: center;
+ width: 48px;
+ height: 48px;
+ border: 1px solid rgba(var(--accent-rgb), 0.22);
+ border-radius: var(--radius-xs, 8px);
+ background: rgba(var(--accent-rgb), 0.1);
+ color: var(--accent);
+ font-size: 20px;
+}
+
+.more-page-v2__empty strong {
+ color: var(--fg-body);
+ font-size: 16px;
+ font-weight: 800;
+}
+
+.more-page-v2__empty p {
+ max-width: 420px;
+ margin: 0;
+ color: var(--fg-muted);
+ font-size: 13px;
+ line-height: 1.6;
+}
+
+.more-page-v2__empty-action {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 34px;
+ margin-top: 4px;
+ padding: 0 12px;
+ border: 1px solid rgba(var(--accent-rgb), 0.32);
+ border-radius: var(--radius-xs, 8px);
+ background: rgba(var(--accent-rgb), 0.08);
+ color: var(--accent);
+ font: inherit;
+ font-size: 12px;
+ font-weight: 800;
+ cursor: pointer;
+ transition:
+ border-color 140ms ease,
+ background 140ms ease,
+ transform 140ms ease;
+}
+
+.more-page-v2__empty-action:hover {
+ border-color: rgba(var(--accent-rgb), 0.46);
+ background: rgba(var(--accent-rgb), 0.12);
+ transform: translateY(-1px);
+}
+
+.more-page-v2__empty-action:focus-visible {
+ outline: 2px solid rgba(var(--accent-rgb), 0.72);
+ outline-offset: 3px;
+}
+
@media (max-width: 1180px) {
.more-page-v2 {
padding-left: 20px;
}
+
+ .more-page-v2__header {
+ grid-template-columns: minmax(180px, auto) minmax(0, 1fr);
+ }
+
+ .more-page-v2__filters {
+ grid-column: 1 / -1;
+ justify-content: flex-start;
+ }
}
@media (max-width: 860px) {
@@ -272,18 +1027,33 @@
}
.more-page-v2__header {
- flex-wrap: wrap;
+ grid-template-columns: minmax(0, 1fr);
padding: 14px 16px 12px;
gap: 12px;
}
+ .more-page-v2__header-meta {
+ gap: 6px;
+ }
+
+ .more-page-v2__header-meta span {
+ min-height: 26px;
+ font-size: 11px;
+ }
+
+ .more-page-v2__filters {
+ justify-content: flex-start;
+ margin-right: -16px;
+ padding-right: 16px;
+ }
+
.more-page-v2__scroll {
padding: 16px 16px 48px;
}
.more-page-v2__grid {
- grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
- gap: 10px;
+ grid-template-columns: repeat(auto-fill, minmax(172px, 1fr));
+ gap: 12px;
}
.more-page-v2__recent-row {
@@ -298,18 +1068,64 @@
}
.more-card--featured {
- padding: 18px;
+ padding: 16px;
gap: 12px;
}
.more-card__featured-icon {
- width: 44px;
- height: 44px;
- border-radius: 12px;
+ width: 42px;
+ height: 42px;
font-size: 20px;
}
.more-card__featured-body strong {
font-size: 15px;
}
+
+ .more-card__featured-kicker,
+ .more-card__outcome {
+ font-size: 11px;
+ }
+
+ .more-card__steps {
+ gap: 6px;
+ }
+
+ .more-card__steps span {
+ min-height: 22px;
+ padding: 0 7px;
+ font-size: 10px;
+ }
+
+ .more-card__compare {
+ min-height: 82px;
+ }
+
+ .more-card__topline {
+ position: static;
+ max-width: 100%;
+ justify-content: flex-start;
+ }
+
+ .more-card__use-case {
+ min-height: 54px;
+ }
+}
+
+@media (max-width: 520px) {
+ .more-page-v2__grid {
+ grid-template-columns: 1fr;
+ }
+
+ .more-card {
+ gap: 9px;
+ }
+
+ .more-card__compare {
+ min-height: 94px;
+ }
+
+ .more-card__use-case {
+ min-height: 0;
+ }
}
diff --git a/src/styles/pages/profile.css b/src/styles/pages/profile.css
index 43c0622..e856cc3 100644
--- a/src/styles/pages/profile.css
+++ b/src/styles/pages/profile.css
@@ -22,3 +22,431 @@
overflow: visible;
scrollbar-width: auto;
}
+
+.profile-page__interactive-card {
+ cursor: pointer;
+ user-select: none;
+}
+
+.profile-page__interactive-card:focus-visible {
+ outline: 2px solid color-mix(in srgb, var(--accent) 72%, transparent);
+ outline-offset: 3px;
+}
+
+.profile-page__detail-overlay {
+ position: fixed;
+ inset: 0;
+ z-index: 120;
+ display: grid;
+ place-items: center;
+ padding: clamp(18px, 3vw, 32px);
+ isolation: isolate;
+ overscroll-behavior: contain;
+}
+
+.profile-page__detail-backdrop {
+ position: absolute;
+ inset: 0;
+ border: 0;
+ background: rgba(0, 0, 0, 0.62);
+ cursor: pointer;
+}
+
+.profile-page__detail-panel {
+ position: relative;
+ z-index: 1;
+ display: grid;
+ grid-template-rows: auto minmax(0, 1fr) auto;
+ gap: 16px;
+ width: min(1080px, calc(100vw - 48px));
+ max-height: min(820px, calc(100dvh - 48px));
+ overflow: hidden;
+ padding: clamp(16px, 2vw, 22px);
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ border-radius: 18px;
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018)),
+ color-mix(in srgb, var(--bg-panel) 94%, #000);
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.42);
+}
+
+.profile-page__detail-head {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 18px;
+ min-width: 0;
+ padding-bottom: 2px;
+}
+
+.profile-page__detail-head h2 {
+ max-width: 760px;
+ margin: 5px 0 0;
+ color: var(--text);
+ font-size: clamp(18px, 2vw, 25px);
+ line-height: 1.25;
+}
+
+.profile-page__detail-eyebrow {
+ color: var(--accent);
+ font-size: 12px;
+ font-weight: 800;
+}
+
+.profile-page__detail-close {
+ display: inline-grid;
+ flex: 0 0 38px;
+ place-items: center;
+ width: 38px;
+ height: 38px;
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ border-radius: 12px;
+ background: rgba(255, 255, 255, 0.04);
+ color: var(--text-muted);
+ cursor: pointer;
+}
+
+.profile-page__detail-close:hover,
+.profile-page__detail-close:focus-visible {
+ border-color: rgba(255, 255, 255, 0.22);
+ background: rgba(255, 255, 255, 0.075);
+ color: var(--text);
+ outline: none;
+}
+
+.profile-page__detail-body {
+ display: grid;
+ grid-template-columns: minmax(0, 1.42fr) minmax(300px, 0.78fr);
+ gap: 18px;
+ min-width: 0;
+ min-height: 0;
+ overflow: hidden;
+}
+
+.profile-page__detail-preview {
+ display: grid;
+ place-items: center;
+ align-self: stretch;
+ min-height: min(500px, 54dvh);
+ overflow: hidden;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 16px;
+ background:
+ linear-gradient(135deg, rgba(var(--accent-rgb), 0.055), transparent 58%),
+ rgba(255, 255, 255, 0.024);
+}
+
+.profile-page__detail-media {
+ display: block;
+ width: 100%;
+ height: 100%;
+ max-height: min(640px, 56dvh);
+ object-fit: contain;
+}
+
+video.profile-page__detail-media {
+ height: 100%;
+ min-height: 320px;
+ background: #050607;
+}
+
+.profile-page__detail-placeholder {
+ display: grid;
+ justify-items: center;
+ gap: 10px;
+ color: var(--text-muted);
+ font-size: 13px;
+}
+
+.profile-page__detail-placeholder .anticon {
+ display: grid;
+ place-items: center;
+ width: 50px;
+ height: 50px;
+ border: 1px solid rgba(var(--accent-rgb), 0.2);
+ border-radius: 16px;
+ background: rgba(var(--accent-rgb), 0.08);
+ color: var(--accent);
+ font-size: 20px;
+}
+
+.profile-page__detail-info {
+ display: grid;
+ align-content: start;
+ gap: 14px;
+ min-width: 0;
+ min-height: 0;
+ overflow: auto;
+ padding-right: 4px;
+ scrollbar-gutter: stable;
+}
+
+.profile-page__detail-info p {
+ margin: 0;
+ max-height: min(230px, 28dvh);
+ overflow: auto;
+ padding: 13px 14px;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: 13px;
+ background: rgba(255, 255, 255, 0.03);
+ color: var(--text-muted);
+ font-size: 14px;
+ line-height: 1.7;
+ word-break: break-word;
+ scrollbar-gutter: stable;
+}
+
+.profile-page__detail-info dl {
+ display: grid;
+ gap: 10px;
+ margin: 0;
+}
+
+.profile-page__detail-info dl div {
+ display: grid;
+ gap: 4px;
+ min-width: 0;
+ padding: 12px;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: 13px;
+ background: rgba(255, 255, 255, 0.03);
+}
+
+.profile-page__detail-info dt {
+ color: var(--text-soft);
+ font-size: 11px;
+ font-weight: 760;
+}
+
+.profile-page__detail-info dd {
+ margin: 0;
+ overflow: hidden;
+ color: var(--text);
+ font-size: 13px;
+ font-weight: 700;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.profile-page__detail-notice {
+ display: inline-flex;
+ width: fit-content;
+ max-width: 100%;
+ padding: 7px 10px;
+ border: 1px solid rgba(243, 170, 38, 0.28);
+ border-radius: 999px;
+ background: rgba(243, 170, 38, 0.08);
+ color: var(--warning);
+ font-size: 12px;
+ line-height: 1.3;
+}
+
+.profile-page__detail-actions {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto auto;
+ align-items: center;
+ justify-content: stretch;
+ gap: 10px;
+ min-width: 0;
+ padding-top: 14px;
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
+}
+
+.profile-page__detail-action {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 7px;
+ min-height: 40px;
+ padding: 0 16px;
+ border: 1px solid rgba(var(--accent-rgb), 0.36);
+ border-radius: 12px;
+ background: rgba(var(--accent-rgb), 0.11);
+ color: var(--accent);
+ font-size: 13px;
+ font-weight: 750;
+ cursor: pointer;
+}
+
+.profile-page__detail-action--primary {
+ justify-self: start;
+ min-width: 132px;
+}
+
+.profile-page__detail-action--secondary,
+.profile-page__detail-action--danger {
+ min-width: 118px;
+}
+
+.profile-page__detail-action:hover,
+.profile-page__detail-action:focus-visible {
+ border-color: rgba(var(--accent-rgb), 0.54);
+ background: rgba(var(--accent-rgb), 0.16);
+ outline: none;
+}
+
+.profile-page__detail-action--danger {
+ border-color: rgba(255, 90, 95, 0.24);
+ background: rgba(255, 90, 95, 0.08);
+ color: #ffadb0;
+}
+
+.profile-page__detail-action--danger:hover,
+.profile-page__detail-action--danger:focus-visible {
+ border-color: rgba(255, 90, 95, 0.42);
+ background: rgba(255, 90, 95, 0.13);
+}
+
+.profile-page__detail-action:disabled {
+ cursor: wait;
+ opacity: 0.62;
+}
+
+@media (max-width: 760px) {
+ .profile-page__detail-overlay {
+ align-items: end;
+ padding: 10px 10px 0;
+ }
+
+ .profile-page__detail-panel {
+ width: 100%;
+ max-height: calc(100dvh - 10px);
+ padding: 16px;
+ border-radius: 18px 18px 0 0;
+ }
+
+ .profile-page__detail-body {
+ grid-template-columns: 1fr;
+ gap: 14px;
+ overflow: auto;
+ padding-right: 0;
+ }
+
+ .profile-page__detail-preview {
+ align-items: start;
+ min-height: 260px;
+ max-height: 42dvh;
+ overflow: auto;
+ }
+
+ .profile-page__detail-media {
+ width: 100%;
+ height: auto;
+ max-height: none;
+ }
+
+ video.profile-page__detail-media {
+ align-self: center;
+ height: auto;
+ min-height: 220px;
+ max-height: 42dvh;
+ }
+
+ .profile-page__detail-info {
+ overflow: auto;
+ padding-right: 0;
+ }
+
+ .profile-page__detail-info p {
+ min-height: 96px;
+ max-height: 30dvh;
+ }
+
+ .profile-page__detail-info dl {
+ grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
+ gap: 8px;
+ }
+
+ .profile-page__detail-info dl div {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 7px;
+ min-height: 40px;
+ padding: 8px 10px;
+ }
+
+ .profile-page__detail-info dt {
+ display: none;
+ }
+
+ .profile-page__detail-info dd {
+ min-width: 0;
+ color: var(--text);
+ font-weight: 800;
+ text-align: left;
+ }
+
+ .profile-page__detail-actions {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .profile-page__detail-action--primary {
+ grid-column: 1 / -1;
+ justify-self: stretch;
+ }
+
+ .profile-page__detail-action--secondary,
+ .profile-page__detail-action--danger {
+ min-width: 0;
+ }
+}
+
+@media (max-width: 420px) {
+ .profile-page__detail-overlay {
+ padding: 0;
+ }
+
+ .profile-page__detail-panel {
+ max-height: 94dvh;
+ padding: 14px;
+ border-right: 0;
+ border-bottom: 0;
+ border-left: 0;
+ border-radius: 18px 18px 0 0;
+ }
+
+ .profile-page__detail-head {
+ gap: 12px;
+ }
+
+ .profile-page__detail-head h2 {
+ font-size: 18px;
+ }
+
+ .profile-page__detail-close {
+ flex-basis: 36px;
+ width: 36px;
+ height: 36px;
+ }
+
+ .profile-page__detail-info dl {
+ gap: 8px;
+ }
+
+ .profile-page__detail-info p {
+ min-height: 108px;
+ }
+
+ .profile-page__detail-preview {
+ min-height: 240px;
+ max-height: 40dvh;
+ }
+
+ .profile-page__detail-info dl {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .profile-page__detail-actions {
+ grid-template-columns: 1fr;
+ }
+
+ .profile-page__detail-action--primary {
+ grid-column: auto;
+ }
+
+ .profile-page__detail-action {
+ min-height: 42px;
+ }
+}
diff --git a/src/styles/pages/script-tokens-v5.css b/src/styles/pages/script-tokens-v5.css
index 4318d88..602325d 100644
--- a/src/styles/pages/script-tokens-v5.css
+++ b/src/styles/pages/script-tokens-v5.css
@@ -142,6 +142,7 @@
/* Upload zone */
.script-eval-v5-upload-zone {
+ position: relative;
border: 2px dashed var(--v5-border2);
border-radius: 12px;
padding: 22px 18px;
@@ -155,6 +156,37 @@
background: var(--v5-green-deep);
}
+.script-eval-v5-upload-zone.is-dragging {
+ border-color: var(--v5-green);
+ border-style: solid;
+ background: var(--v5-green-deep);
+}
+
+.script-eval-v5-upload-drop-overlay {
+ position: absolute;
+ inset: 0;
+ z-index: 10;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ border-radius: 12px;
+ background: rgba(0, 255, 136, 0.06);
+ color: var(--v5-green);
+ pointer-events: none;
+}
+
+.script-eval-v5-upload-drop-overlay .anticon {
+ font-size: 40px;
+ opacity: 0.8;
+}
+
+.script-eval-v5-upload-drop-overlay span {
+ font-size: 16px;
+ font-weight: 800;
+}
+
.script-eval-v5-upload-icon {
margin-bottom: 10px;
font-size: 38px;
@@ -195,10 +227,11 @@
}
.script-eval-v5-upload-done {
+ position: relative;
display: none;
align-items: center;
gap: 10px;
- padding: 12px 14px;
+ padding: 12px 28px 12px 14px;
border-radius: 8px;
background: var(--v5-green-deep);
border: 1px solid var(--v5-green-border);
@@ -208,6 +241,30 @@
display: flex;
}
+.script-eval-v5-upload-delete {
+ position: absolute;
+ top: 4px;
+ right: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 18px;
+ height: 18px;
+ border: 0;
+ border-radius: 50%;
+ background: rgba(255, 255, 255, 0.12);
+ color: var(--v5-text3);
+ cursor: pointer;
+ font-size: 10px;
+ line-height: 1;
+ transition: background 0.15s, color 0.15s;
+}
+
+.script-eval-v5-upload-delete:hover {
+ background: rgba(255, 77, 103, 0.5);
+ color: #fff;
+}
+
.script-eval-v5-upload-done .anticon {
font-size: 16px;
color: var(--v5-green);
@@ -218,7 +275,7 @@
font-size: 13px;
color: var(--v5-green);
font-weight: 600;
- flex: 1;
+ max-width: 16ch;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@@ -2805,7 +2862,7 @@
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- max-width: 8em;
+ max-width: 16em;
}
.script-eval-v5-uf-size {
diff --git a/src/styles/pages/studio-layout.css b/src/styles/pages/studio-layout.css
index 0bfdbb2..8ca62a1 100644
--- a/src/styles/pages/studio-layout.css
+++ b/src/styles/pages/studio-layout.css
@@ -307,9 +307,10 @@
width: 56px;
height: 56px;
border-radius: var(--radius-sm);
- background: rgba(var(--accent-rgb), 0.13);
+ background: rgba(var(--accent-rgb), 0.22);
color: var(--accent);
font-size: 26px;
+ box-shadow: 0 0 20px rgba(var(--accent-rgb), 0.08);
}
.studio-canvas-ghost__title {
diff --git a/src/styles/themes/dark-green.css b/src/styles/themes/dark-green.css
index 0ba9f38..4a83525 100644
--- a/src/styles/themes/dark-green.css
+++ b/src/styles/themes/dark-green.css
@@ -8516,6 +8516,789 @@
overflow-y: hidden;
}
+/* Personal center design-taste pass: keep the black-green product language, but unify spacing, surfaces, and responsive behavior. */
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard {
+ --profile-page: #08090b;
+ --profile-panel: #121416;
+ --profile-panel-soft: #16191b;
+ --profile-control: #181b1e;
+ --profile-control-strong: #1d2124;
+ --profile-border: rgba(255, 255, 255, 0.085);
+ --profile-border-strong: rgba(255, 255, 255, 0.15);
+ --profile-text: #f4f7f5;
+ --profile-muted: rgba(225, 235, 231, 0.64);
+ --profile-soft: rgba(225, 235, 231, 0.42);
+ --profile-accent: #00ff88;
+ --profile-accent-soft: rgba(0, 255, 136, 0.12);
+ --profile-accent-border: rgba(0, 255, 136, 0.34);
+ --profile-radius-lg: 18px;
+ --profile-radius-md: 14px;
+ --profile-radius-sm: 10px;
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.018), transparent 260px),
+ var(--profile-page);
+ color: var(--profile-text);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__banner {
+ height: clamp(148px, 18vw, 210px);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent),
+ var(--profile-panel);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__banner-overlay {
+ background:
+ linear-gradient(180deg, rgba(8, 9, 11, 0.24) 0%, rgba(8, 9, 11, 0.7) 68%, var(--profile-page) 100%),
+ linear-gradient(90deg, rgba(8, 9, 11, 0.76), rgba(8, 9, 11, 0.28) 48%, rgba(8, 9, 11, 0.68));
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__body {
+ grid-template-columns: minmax(272px, 304px) minmax(0, 1fr);
+ gap: clamp(18px, 2.2vw, 28px);
+ width: min(1220px, calc(100% - 48px));
+ margin-top: -54px;
+ padding-bottom: clamp(44px, 5vw, 72px);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard :is(
+ .profile-page__sidebar,
+ .profile-page__account-card,
+ .profile-page__main-tabs,
+ .profile-page__section,
+ .profile-page__list-card,
+ .profile-page__review-item,
+ .profile-page__empty-state
+) {
+ border: 1px solid var(--profile-border);
+ border-radius: var(--profile-radius-lg);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.038), rgba(255, 255, 255, 0.012)),
+ var(--profile-panel);
+ box-shadow: 0 18px 44px rgba(0, 0, 0, 0.16);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar {
+ gap: 16px;
+ padding: clamp(16px, 1.8vw, 22px);
+}
+
+@media (min-width: 1024px) {
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar {
+ position: sticky;
+ top: 18px;
+ align-self: start;
+ }
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar-head {
+ gap: 10px;
+ width: 100%;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-ring {
+ width: 90px;
+ height: 90px;
+ padding: 3px;
+ border-color: var(--profile-accent-border);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
+ var(--profile-accent-soft);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-ring .profile-page__avatar,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar {
+ width: 82px;
+ height: 82px;
+ border-color: rgba(5, 8, 13, 0.94);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__username {
+ color: var(--profile-text);
+ font-size: clamp(19px, 1.5vw, 22px);
+ line-height: 1.2;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__bio-display {
+ width: min(268px, 100%);
+ min-height: 38px;
+ border-color: var(--profile-border);
+ background: rgba(255, 255, 255, 0.035);
+ color: var(--profile-muted);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__bio-display:hover,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__bio-display:focus-visible {
+ border-color: var(--profile-accent-border);
+ background: var(--profile-accent-soft);
+ color: var(--profile-text);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__counts {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 8px;
+ width: 100%;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__count {
+ min-width: 0;
+ padding: 12px 8px;
+ border: 1px solid var(--profile-border);
+ border-radius: var(--profile-radius-sm);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent),
+ var(--profile-control);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__count strong {
+ color: var(--profile-text);
+ font-size: 20px;
+ font-weight: 850;
+ font-variant-numeric: tabular-nums;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__count span {
+ color: var(--profile-muted);
+ font-size: 11px;
+ font-weight: 700;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-card {
+ gap: 12px;
+ padding: 12px;
+ border-radius: var(--profile-radius-md);
+ background:
+ radial-gradient(circle at 14% 0%, rgba(0, 255, 136, 0.11), transparent 32%),
+ linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.016)),
+ rgba(10, 14, 13, 0.72);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-card .profile-page__list-tabs {
+ gap: 5px;
+ padding: 5px;
+ border: 1px solid var(--profile-border);
+ border-radius: 12px;
+ background: rgba(255, 255, 255, 0.026);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-card .profile-page__list-tabs button {
+ min-height: 44px;
+ border: 1px solid transparent;
+ border-radius: 9px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-card .profile-page__list-tabs button.is-active,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs button.is-active {
+ border-color: var(--profile-accent-border);
+ background: var(--profile-accent-soft);
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary {
+ grid-template-columns: minmax(0, 1fr) auto;
+ padding: 12px;
+ border-color: var(--profile-border);
+ border-radius: 13px;
+ background:
+ linear-gradient(135deg, rgba(0, 255, 136, 0.06), transparent 60%),
+ rgba(255, 255, 255, 0.026);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary small,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary em {
+ color: var(--profile-soft);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary strong {
+ color: var(--profile-text);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary-metric strong {
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions {
+ display: grid;
+ gap: 9px;
+ width: 100%;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__share-btn {
+ min-height: 42px;
+ border-color: var(--profile-border);
+ border-radius: var(--profile-radius-sm);
+ background: var(--profile-control);
+ color: var(--profile-muted);
+ font-weight: 700;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__share-btn:hover,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__share-btn:focus-visible {
+ border-color: var(--profile-border-strong);
+ background: var(--profile-control-strong);
+ color: var(--profile-text);
+ outline: none;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn.profile-page__share-btn--primary {
+ border-color: rgba(0, 255, 136, 0.74);
+ background:
+ linear-gradient(180deg, rgba(88, 255, 172, 0.98), rgba(0, 216, 116, 0.92));
+ color: #061014;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn.profile-page__share-btn--primary:hover,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn.profile-page__share-btn--primary:focus-visible {
+ border-color: #35ffa2;
+ background:
+ linear-gradient(180deg, rgba(115, 255, 187, 1), rgba(0, 216, 116, 0.96));
+ color: #061014;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__share-btn--plan {
+ min-height: 34px;
+ border-color: var(--profile-accent-border);
+ border-style: dashed;
+ background: var(--profile-accent-soft);
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__share-btn--danger {
+ border-color: rgba(255, 90, 95, 0.18);
+ background: rgba(255, 90, 95, 0.045);
+ color: rgba(255, 165, 168, 0.84);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main {
+ gap: 16px;
+ min-width: 0;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ gap: 6px;
+ min-height: 52px;
+ margin: 0;
+ padding: 6px;
+ border-radius: var(--profile-radius-lg);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs button {
+ min-width: 0;
+ min-height: 40px;
+ padding: 0 12px;
+ border: 1px solid transparent;
+ border-radius: 12px;
+ background: transparent;
+ color: var(--profile-muted);
+ font-weight: 760;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+ padding: clamp(14px, 1.8vw, 20px);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-head {
+ grid-template-columns: minmax(0, 1fr) auto;
+ grid-template-areas:
+ "title meta"
+ "desc meta";
+ row-gap: 4px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-label {
+ color: var(--profile-text);
+ font-size: 16px;
+ font-weight: 820;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-desc {
+ color: var(--profile-muted);
+ font-size: 12px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-meta {
+ border-color: var(--profile-accent-border);
+ background: var(--profile-accent-soft);
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__list-grid {
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 12px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__review-list {
+ grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
+ gap: 12px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__list-card {
+ border-radius: var(--profile-radius-md);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.034), transparent),
+ rgba(255, 255, 255, 0.018);
+ transition:
+ border-color var(--transition-fast),
+ background var(--transition-fast),
+ transform var(--transition-fast);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__interactive-card:hover,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__interactive-card:focus-visible {
+ border-color: rgba(0, 255, 136, 0.28);
+ background:
+ linear-gradient(180deg, rgba(0, 255, 136, 0.046), transparent),
+ rgba(255, 255, 255, 0.024);
+ transform: translateY(-1px);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card {
+ grid-template-columns: 94px minmax(0, 1fr);
+ height: auto;
+ min-height: 128px;
+ max-height: none;
+ padding: 14px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview {
+ width: 94px;
+ height: 98px;
+ min-height: 98px;
+ max-height: 98px;
+ border-color: var(--profile-border);
+ border-radius: 12px;
+ background:
+ linear-gradient(135deg, rgba(0, 255, 136, 0.06), transparent 64%),
+ var(--profile-control);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview img,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview video {
+ height: 98px;
+ min-height: 98px;
+ max-height: 98px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-badge {
+ border-color: rgba(0, 255, 136, 0.24);
+ background: rgba(5, 10, 8, 0.78);
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-body {
+ grid-template-rows: auto minmax(0, 1fr) auto;
+ gap: 7px;
+ height: 98px;
+ min-height: 98px;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-head {
+ min-height: 0;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-head strong {
+ color: var(--profile-text);
+ font-size: 14px;
+ line-height: 1.28;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-head span {
+ max-width: 76px;
+ overflow: hidden;
+ padding: 3px 7px;
+ border: 1px solid rgba(0, 255, 136, 0.22);
+ border-radius: 999px;
+ background: var(--profile-accent-soft);
+ color: var(--profile-accent);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card p {
+ display: -webkit-box;
+ min-height: 0;
+ max-height: none;
+ overflow: hidden;
+ color: var(--profile-muted);
+ line-height: 1.45;
+ white-space: normal;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-meta {
+ min-height: 0;
+ color: var(--profile-soft);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__empty-state {
+ min-height: 240px;
+ border-style: dashed;
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.026), transparent),
+ rgba(255, 255, 255, 0.014);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__empty-mark,
+.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__empty-btn {
+ border-color: var(--profile-accent-border);
+ background: var(--profile-accent-soft);
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-overlay {
+ --profile-page: #08090b;
+ --profile-panel: #121416;
+ --profile-control: #181b1e;
+ --profile-border: rgba(255, 255, 255, 0.085);
+ --profile-border-strong: rgba(255, 255, 255, 0.15);
+ --profile-text: #f4f7f5;
+ --profile-muted: rgba(225, 235, 231, 0.64);
+ --profile-accent: #00ff88;
+ --profile-accent-soft: rgba(0, 255, 136, 0.12);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-backdrop {
+ background: rgba(0, 0, 0, 0.72);
+ backdrop-filter: blur(8px);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-panel {
+ border-color: var(--profile-border-strong);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.042), rgba(255, 255, 255, 0.014)),
+ var(--profile-panel);
+ box-shadow: 0 28px 80px rgba(0, 0, 0, 0.48);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-eyebrow,
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-action {
+ color: var(--profile-accent);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-head h2 {
+ color: var(--profile-text);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-preview,
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-info p,
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-info dl div,
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-close,
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-action {
+ border-color: var(--profile-border);
+ background: var(--profile-control);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-actions {
+ border-top-color: var(--profile-border);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.018), rgba(255, 255, 255, 0.006)),
+ var(--profile-panel);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-action--primary {
+ border-color: rgba(0, 255, 136, 0.62);
+ background:
+ linear-gradient(180deg, rgba(0, 255, 136, 0.18), rgba(0, 255, 136, 0.11)),
+ var(--profile-control);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-action--secondary {
+ color: var(--profile-text);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-info p,
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-info dt {
+ color: var(--profile-muted);
+}
+
+.web-shell[data-ui-theme="dark-green"] .profile-page__detail-info dd {
+ color: var(--profile-text);
+}
+
+@media (max-width: 980px) {
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__body {
+ grid-template-columns: 1fr;
+ width: min(760px, calc(100% - 32px));
+ margin-top: -42px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar {
+ display: grid;
+ grid-template-columns: minmax(0, 1.05fr) minmax(220px, 0.95fr);
+ align-items: start;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar-head {
+ grid-row: span 4;
+ align-items: flex-start;
+ text-align: left;
+ }
+}
+
+@media (max-width: 640px) {
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__banner {
+ height: 138px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__body {
+ width: min(100% - 22px, 560px);
+ gap: 14px;
+ margin-top: -28px;
+ padding-bottom: 84px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar {
+ display: flex;
+ gap: 12px;
+ padding: 14px;
+ border-radius: 16px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar-head {
+ align-items: center;
+ text-align: center;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-ring {
+ width: 82px;
+ height: 82px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-ring .profile-page__avatar,
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar {
+ width: 76px;
+ height: 76px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary {
+ grid-template-columns: minmax(0, 1fr);
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-summary-metric {
+ justify-items: start;
+ padding-top: 10px;
+ padding-left: 0;
+ border-top: 1px solid var(--profile-border);
+ border-left: 0;
+ text-align: left;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs {
+ display: flex;
+ min-height: 48px;
+ overflow-x: auto;
+ scroll-snap-type: x proximity;
+ scrollbar-width: none;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs::-webkit-scrollbar {
+ display: none;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs button {
+ flex: 0 0 auto;
+ min-width: 92px;
+ scroll-snap-align: start;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section {
+ padding: 13px;
+ border-radius: 16px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-head {
+ grid-template-columns: minmax(0, 1fr);
+ grid-template-areas:
+ "title"
+ "desc"
+ "meta";
+ align-items: start;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-desc {
+ white-space: normal;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__list-grid,
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__review-list {
+ grid-template-columns: 1fr;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card {
+ grid-template-columns: 84px minmax(0, 1fr);
+ min-height: 112px;
+ padding: 12px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview {
+ width: 84px;
+ height: 84px;
+ min-height: 84px;
+ max-height: 84px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview img,
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview video {
+ height: 84px;
+ min-height: 84px;
+ max-height: 84px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-body {
+ height: 84px;
+ min-height: 84px;
+ }
+}
+
+@media (max-width: 380px) {
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__body {
+ width: min(100% - 16px, 380px);
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__counts {
+ gap: 6px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__count {
+ padding: 9px 4px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card {
+ grid-template-columns: 74px minmax(0, 1fr);
+ gap: 9px;
+ padding: 10px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview {
+ width: 74px;
+ height: 74px;
+ min-height: 74px;
+ max-height: 74px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview img,
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-preview video {
+ height: 74px;
+ min-height: 74px;
+ max-height: 74px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-body {
+ gap: 5px;
+ height: 74px;
+ min-height: 74px;
+ }
+}
+
+/* Personal center mobile comfort pass: compact account controls and keep library navigation reachable. */
+@media (max-width: 640px) {
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard {
+ background:
+ linear-gradient(180deg, rgba(0, 255, 136, 0.035), transparent 180px),
+ var(--profile-page);
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__body {
+ gap: 12px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__sidebar {
+ gap: 10px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__username {
+ font-size: 18px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__bio-display {
+ min-height: 34px;
+ padding: 7px 11px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__count {
+ min-height: 58px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-card {
+ gap: 9px;
+ padding: 10px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__account-card .profile-page__list-tabs button {
+ min-height: 40px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 8px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn {
+ min-height: 40px;
+ padding: 0 10px;
+ font-size: 12px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn--plan,
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn--primary {
+ grid-column: 1 / -1;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__main-tabs {
+ position: sticky;
+ top: 0;
+ z-index: 12;
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-color: rgba(255, 255, 255, 0.11);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.018)),
+ rgba(18, 20, 22, 0.96);
+ box-shadow:
+ 0 1px 0 rgba(0, 255, 136, 0.1) inset,
+ 0 16px 34px rgba(0, 0, 0, 0.32);
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section {
+ gap: 12px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__section-label {
+ font-size: 15px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card {
+ border-radius: 14px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-head strong {
+ font-size: 13px;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__media-card .profile-page__list-card-meta {
+ font-size: 10px;
+ }
+}
+
+@media (max-width: 420px) {
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions {
+ grid-template-columns: 1fr;
+ }
+
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn--plan,
+ .web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__actions .profile-page__share-btn--primary {
+ grid-column: auto;
+ }
+}
+
/* Ecommerce generation page: keep its carousel and composer independent from
the community carousel rules that share class names. */
.web-shell[data-ui-theme="dark-green"] .ecommerce-landing-page {
diff --git a/src/utils/enterpriseVideoPolicy.ts b/src/utils/enterpriseVideoPolicy.ts
index ee73655..2240ea2 100644
--- a/src/utils/enterpriseVideoPolicy.ts
+++ b/src/utils/enterpriseVideoPolicy.ts
@@ -8,27 +8,27 @@ export const ENTERPRISE_WANXIANG_I2V_MODEL = "wan2.7-i2v";
export const ENTERPRISE_VIDEO_MODEL_OPTIONS = [
{
value: HAPPY_HORSE_UI_MODEL,
- label: "HappyHorse 1.0 · 0.72 积分/秒起",
+ label: "HappyHorse 1.0",
description: "自动匹配文生视频、首帧图生视频或参考图生视频",
},
{
value: VIDU_UI_MODEL,
- label: "Vidu Q3 Turbo · 0.40 积分/秒起",
+ label: "Vidu Q3 Turbo",
description: "自动匹配文生视频或图生视频,支持16秒",
},
{
value: PIXVERSE_UI_MODEL,
- label: "PixVerse V6 · 0.40 积分/秒起",
+ label: "PixVerse V6",
description: "自动匹配文生视频或图生视频,擅长动作特效",
},
{
value: ENTERPRISE_WANXIANG_I2V_MODEL,
- label: "万相 图生视频 · 0.60 积分/秒起",
+ label: "万相 图生视频",
description: "图生视频模型,支持首帧图驱动",
},
{
value: ENTERPRISE_KLING_MODEL,
- label: "Kling V3 Omni · 0.60 积分/秒起",
+ label: "Kling V3 Omni",
description: "支持文生视频、图生视频及多模态参考生成",
},
] as const;