From 69bb692a58184a8d0d7ce0c6709ee1941e0b5e03 Mon Sep 17 00:00:00 2001 From: kang Date: Mon, 18 May 2026 20:13:59 +0800 Subject: [PATCH] auto-save 2026-05-18 20:13 (~3) --- .memory/worklog.json | 366 ++++++++++++------------- web/app/globals.css | 216 ++++++++++++++- web/components/ad-recreation-board.tsx | 38 ++- 3 files changed, 402 insertions(+), 218 deletions(-) diff --git a/.memory/worklog.json b/.memory/worklog.json index 16d22cd..3943962 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1,194 +1,5 @@ { "entries": [ - { - "files_changed": 1, - "hash": "8b18908", - "message": "auto-save 2026-05-16 03:59 (~1)", - "ts": "2026-05-16T03:59:42+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "41c534e", - "message": "auto-save 2026-05-16 04:05 (~1)", - "ts": "2026-05-16T04:05:31+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "d472cdf", - "message": "auto-save 2026-05-16 04:11 (~1)", - "ts": "2026-05-16T04:11:21+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "b95a728", - "message": "auto-save 2026-05-16 04:17 (~1)", - "ts": "2026-05-16T04:17:10+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "f7e4a2a", - "message": "auto-save 2026-05-16 04:22 (~1)", - "ts": "2026-05-16T04:23:00+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "5758c94", - "message": "auto-save 2026-05-16 04:28 (~1)", - "ts": "2026-05-16T07:31:38+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "c5a549e", - "message": "auto-save 2026-05-16 10:20 (~1)", - "ts": "2026-05-16T10:22:49+08:00", - "type": "commit" - }, - { - "files_changed": 2, - "hash": "de56f9d", - "message": "auto-save 2026-05-16 10:28 (~2)", - "ts": "2026-05-16T10:28:22+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "f3ba716", - "message": "auto-save 2026-05-16 10:33 (~1)", - "ts": "2026-05-16T10:33:54+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "dc77686", - "message": "auto-save 2026-05-16 10:39 (~1)", - "ts": "2026-05-16T10:39:24+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "e12433d", - "message": "auto-save 2026-05-16 10:44 (~1)", - "ts": "2026-05-16T10:44:52+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "752bbab", - "message": "auto-save 2026-05-16 12:12 (~1)", - "ts": "2026-05-16T12:12:12+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "4283512", - "message": "auto-save 2026-05-16 12:18 (~1)", - "ts": "2026-05-16T12:18:24+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "809e983", - "message": "auto-save 2026-05-16 12:23 (~1)", - "ts": "2026-05-16T12:23:53+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "3bd3199", - "message": "auto-save 2026-05-16 12:29 (~1)", - "ts": "2026-05-16T12:29:22+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "cead9a7", - "message": "auto-save 2026-05-16 12:34 (~1)", - "ts": "2026-05-16T12:34:49+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "7a2f630", - "message": "auto-save 2026-05-16 12:43 (~1)", - "ts": "2026-05-16T12:44:07+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "75a430d", - "message": "auto-save 2026-05-16 12:49 (~1)", - "ts": "2026-05-16T12:49:35+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "24743ef", - "message": "auto-save 2026-05-16 14:01 (~1)", - "ts": "2026-05-16T14:01:14+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "ebe1476", - "message": "auto-save 2026-05-16 14:06 (~1)", - "ts": "2026-05-16T14:06:40+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "c27e68d", - "message": "auto-save 2026-05-16 14:12 (~1)", - "ts": "2026-05-16T14:12:18+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "f299408", - "message": "auto-save 2026-05-16 14:17 (~1)", - "ts": "2026-05-16T14:17:47+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "7c427d3", - "message": "auto-save 2026-05-16 14:23 (~1)", - "ts": "2026-05-16T14:23:19+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "c55d95c", - "message": "auto-save 2026-05-16 14:28 (~1)", - "ts": "2026-05-16T14:28:46+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "5e78071", - "message": "auto-save 2026-05-16 14:34 (~1)", - "ts": "2026-05-16T14:34:30+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "a5a3cec", - "message": "auto-save 2026-05-16 14:40 (~1)", - "ts": "2026-05-16T14:40:17+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "e1411e7", - "message": "auto-save 2026-05-16 14:45 (~1)", - "ts": "2026-05-16T14:46:03+08:00", - "type": "commit" - }, { "files_changed": 1, "hash": "7067a2b", @@ -3229,6 +3040,183 @@ "message": "fix: surface resilient subject asset generation", "hash": "095c6f1", "files_changed": 8 + }, + { + "ts": "2026-05-18T18:18:23+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 18:18 (~2)", + "hash": "06bf0ee", + "files_changed": 2 + }, + { + "ts": "2026-05-18T18:20:48+08:00", + "type": "commit", + "message": "docs: align legacy model descriptions", + "hash": "87ffa6b", + "files_changed": 1 + }, + { + "ts": "2026-05-18T10:22:18Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:docs: align legacy model descriptions", + "files_changed": 1 + }, + { + "ts": "2026-05-18T18:29:13+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 18:29 (~3)", + "hash": "4d10b09", + "files_changed": 3 + }, + { + "ts": "2026-05-18T10:32:18Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 3 项未提交变更 · 最近提交:auto-save 2026-05-18 18:29 (~3)", + "files_changed": 3 + }, + { + "ts": "2026-05-18T18:34:39+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 18:34 (~4)", + "hash": "0bec7f9", + "files_changed": 4 + }, + { + "ts": "2026-05-18T18:38:10+08:00", + "type": "commit", + "message": "feat: add subject profile controls", + "hash": "33c3aef", + "files_changed": 4 + }, + { + "ts": "2026-05-18T10:42:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:feat: add subject profile controls", + "files_changed": 1 + }, + { + "ts": "2026-05-18T10:52:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:feat: add subject profile controls", + "files_changed": 1 + }, + { + "ts": "2026-05-18T11:02:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:feat: add subject profile controls", + "files_changed": 1 + }, + { + "ts": "2026-05-18T11:12:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:feat: add subject profile controls", + "files_changed": 1 + }, + { + "ts": "2026-05-18T19:19:49+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:19 (~4)", + "hash": "0e2b038", + "files_changed": 4 + }, + { + "ts": "2026-05-18T11:22:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 2 项未提交变更 · 最近提交:auto-save 2026-05-18 19:19 (~4)", + "files_changed": 2 + }, + { + "ts": "2026-05-18T19:25:14+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:25 (~3)", + "hash": "73c9b51", + "files_changed": 3 + }, + { + "ts": "2026-05-18T19:30:39+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:30 (~2)", + "hash": "182435b", + "files_changed": 2 + }, + { + "ts": "2026-05-18T11:32:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 5 项未提交变更 · 最近提交:feat: add subject profile controls", + "files_changed": 5 + }, + { + "ts": "2026-05-18T19:33:16+08:00", + "type": "commit", + "message": "feat: use subject brief for endpoint frames", + "hash": "adf8b2b", + "files_changed": 4 + }, + { + "ts": "2026-05-18T19:41:29+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:41 (~2)", + "hash": "a869cf9", + "files_changed": 2 + }, + { + "ts": "2026-05-18T11:42:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 2 项未提交变更 · 最近提交:auto-save 2026-05-18 19:41 (~2)", + "files_changed": 2 + }, + { + "ts": "2026-05-18T19:46:53+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:46 (~2)", + "hash": "a6f03fd", + "files_changed": 2 + }, + { + "ts": "2026-05-18T19:52:19+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:52 (~3)", + "hash": "2219f96", + "files_changed": 3 + }, + { + "ts": "2026-05-18T11:52:19Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:auto-save 2026-05-18 19:52 (~3)", + "files_changed": 1 + }, + { + "ts": "2026-05-18T19:57:44+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 19:57 (~4)", + "hash": "699fdcd", + "files_changed": 4 + }, + { + "ts": "2026-05-18T12:02:20Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 2 项未提交变更 · 最近提交:auto-save 2026-05-18 19:57 (~4)", + "files_changed": 2 + }, + { + "ts": "2026-05-18T20:03:09+08:00", + "type": "commit", + "message": "auto-save 2026-05-18 20:03 (~3)", + "hash": "e4a56f2", + "files_changed": 3 + }, + { + "ts": "2026-05-18T20:07:11+08:00", + "type": "commit", + "message": "feat: enforce english prompt language strategy", + "hash": "bc0b010", + "files_changed": 4 + }, + { + "ts": "2026-05-18T12:12:20Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 2 项未提交变更 · 最近提交:feat: enforce english prompt language strategy", + "files_changed": 2 } ] } diff --git a/web/app/globals.css b/web/app/globals.css index 2e0cf4f..2870190 100644 --- a/web/app/globals.css +++ b/web/app/globals.css @@ -469,10 +469,29 @@ nextjs-portal { 信息流工作台 · 登录页同源质感 ============================================================ */ .skg-board-theme { + --skg-gold-1: #d6b36a; + --skg-gold-2: #c89b3c; + --skg-cream: #f5efe3; + --skg-bg-1: #0a0a0a; + --skg-bg-2: #111111; + --skg-bg-3: rgba(255, 255, 255, 0.035); + --skg-border: rgba(255, 255, 255, 0.1); + --skg-text-1: #ffffff; + --skg-text-2: rgba(255, 255, 255, 0.62); + --skg-text-3: rgba(255, 255, 255, 0.34); + --skg-success: #34d399; + --skg-warn: #fcd34d; + --skg-danger: #fb7185; + --skg-info: #67e8f9; + --skg-radius-sm: 6px; + --skg-radius-md: 8px; + --skg-radius-lg: 12px; + --skg-shadow-button: 0 6px 24px -8px rgba(0, 0, 0, 0.45); + color: var(--skg-text-1); background: - radial-gradient(circle at 12% 2%, rgba(214, 179, 106, 0.13), transparent 31%), - radial-gradient(circle at 82% 8%, rgba(143, 176, 113, 0.1), transparent 26%), - linear-gradient(120deg, #050706 0%, #070b09 42%, #030303 100%); + radial-gradient(circle at 52% 4%, rgba(214, 179, 106, 0.1), transparent 30%), + radial-gradient(circle at 12% 96%, rgba(214, 179, 106, 0.065), transparent 34%), + linear-gradient(120deg, #0a0a0a 0%, #10100f 46%, #050505 100%); } .skg-board-theme::before { @@ -501,17 +520,16 @@ nextjs-portal { .skg-board-ambient { background: - radial-gradient(circle at 22% 18%, rgba(214, 179, 106, 0.16), transparent 26%), - radial-gradient(circle at 68% 10%, rgba(143, 176, 113, 0.11), transparent 28%), - radial-gradient(circle at 52% 100%, rgba(214, 179, 106, 0.08), transparent 36%); + radial-gradient(circle at 78% 0%, rgba(232, 201, 122, 0.08), transparent 30%), + radial-gradient(circle at 8% 100%, rgba(214, 179, 106, 0.06), transparent 34%); } .skg-board-topbar, .skg-board-panel { - border-color: rgba(160, 182, 129, 0.14) !important; + border-color: var(--skg-border) !important; background: - linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.026)), - rgba(6, 11, 8, 0.58) !important; + linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.022)), + rgba(17, 17, 17, 0.74) !important; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 18px 54px rgba(0, 0, 0, 0.34); @@ -520,8 +538,8 @@ nextjs-portal { .skg-board-topbar { background: - linear-gradient(100deg, rgba(214, 179, 106, 0.08), rgba(143, 176, 113, 0.035) 42%, rgba(255, 255, 255, 0.03)), - rgba(4, 8, 6, 0.62) !important; + linear-gradient(100deg, rgba(214, 179, 106, 0.075), rgba(255, 255, 255, 0.03) 54%, rgba(214, 179, 106, 0.035)), + rgba(12, 12, 12, 0.76) !important; } .skg-board-theme input:focus, @@ -541,11 +559,22 @@ nextjs-portal { } .skg-board-theme--light { - color: #22261f; + --skg-bg-1: #faf8f4; + --skg-bg-2: #ffffff; + --skg-bg-3: rgba(0, 0, 0, 0.03); + --skg-border: rgba(0, 0, 0, 0.08); + --skg-text-1: #0a0a0a; + --skg-text-2: rgba(0, 0, 0, 0.62); + --skg-text-3: rgba(0, 0, 0, 0.34); + --skg-success: #059669; + --skg-warn: #b7791f; + --skg-danger: #e11d48; + --skg-info: #0891b2; + color: var(--skg-text-1); background: - radial-gradient(circle at 12% 0%, rgba(214, 179, 106, 0.18), transparent 30%), - radial-gradient(circle at 82% 8%, rgba(143, 176, 113, 0.14), transparent 28%), - linear-gradient(126deg, #f7f4ea 0%, #eef1e7 48%, #f9f6ee 100%); + radial-gradient(circle at 50% 0%, rgba(232, 212, 168, 0.18), transparent 31%), + radial-gradient(circle at 4% 100%, rgba(214, 179, 106, 0.12), transparent 28%), + linear-gradient(126deg, #faf8f4 0%, #f4efe5 48%, #ffffff 100%); } .skg-board-theme--light::before { @@ -669,6 +698,163 @@ nextjs-portal { color: #171a14; } +.skg-board-brand { + display: flex; + min-width: 0; + align-items: center; + gap: 14px; +} + +.skg-board-brand__logo-chip { + display: inline-flex; + height: 42px; + width: 132px; + flex-shrink: 0; + align-items: center; + justify-content: center; + border: 1px solid rgba(214, 179, 106, 0.24); + border-radius: var(--skg-radius-md); + background: #f5efe3; + box-shadow: var(--skg-shadow-button); +} + +.skg-board-brand__logo { + width: 96px; + height: auto; + display: block; +} + +.skg-board-brand__system { + font-size: 12px; + font-weight: 700; + letter-spacing: 0.16em; + color: var(--skg-gold-1); +} + +.skg-board-brand__title { + margin-top: 3px; + color: var(--skg-text-1); + font-size: 20px; + font-weight: 650; + line-height: 1.1; + letter-spacing: 0; +} + +.skg-board-brand__subtitle { + margin-top: 4px; + color: var(--skg-text-3); + font-size: 12px; + line-height: 1.3; +} + +.skg-stat-card { + border: 1px solid rgba(214, 179, 106, 0.18); + border-radius: var(--skg-radius-md); + background: var(--skg-cream); + color: #0a0a0a; + box-shadow: var(--skg-shadow-button); +} + +.skg-stat-card__label { + color: rgba(0, 0, 0, 0.5); +} + +.skg-stat-card__value { + color: #0a0a0a; +} + +.skg-primary-action { + border-radius: var(--skg-radius-md); + background: #f5efe3; + color: #0a0a0a; + box-shadow: var(--skg-shadow-button); +} + +.skg-primary-action:hover { + background: #fff7df; +} + +.skg-secondary-action { + border: 1px solid rgba(214, 179, 106, 0.3); + border-radius: var(--skg-radius-md); + background: rgba(214, 179, 106, 0.08); + color: var(--skg-gold-1); +} + +.skg-secondary-action:hover { + border-color: rgba(214, 179, 106, 0.54); + background: rgba(214, 179, 106, 0.12); + color: #f5d98e; +} + +.skg-empty-state { + border: 1px dashed rgba(214, 179, 106, 0.22); + border-radius: var(--skg-radius-lg); + background: + radial-gradient(circle at 50% 0%, rgba(214, 179, 106, 0.1), transparent 38%), + rgba(255, 255, 255, 0.028); + color: var(--skg-text-3); +} + +.skg-empty-character { + width: min(230px, 82%); + margin: 0 auto 12px; + pointer-events: none; +} + +.skg-empty-character .login-character-stage { + min-height: 112px; + border-color: rgba(214, 179, 106, 0.16); + background: + radial-gradient(circle at 78% 18%, rgba(214, 179, 106, 0.16), transparent 28%), + linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.026)); + box-shadow: none; +} + +.skg-empty-character .login-character-stage::after, +.skg-empty-character .login-stage-grid { + display: none; +} + +.skg-empty-character .login-characters-container { + bottom: -6px; + transform: translateX(-50%) scale(0.22); +} + +.skg-board-theme--light .skg-board-brand__logo-chip { + background: #ffffff; +} + +.skg-board-theme--light .skg-stat-card { + background: #0a0a0a; + color: #fff; + box-shadow: 0 10px 24px -12px rgba(133, 96, 21, 0.38); +} + +.skg-board-theme--light .skg-stat-card__label { + color: rgba(255, 255, 255, 0.54); +} + +.skg-board-theme--light .skg-stat-card__value { + color: #fff; +} + +.skg-board-theme--light .skg-primary-action { + background: #0a0a0a; + color: #fff; + box-shadow: 0 10px 24px -12px rgba(133, 96, 21, 0.42); +} + +.skg-board-theme--light .skg-primary-action:hover { + background: #252525; +} + +.skg-board-theme--light .skg-empty-state { + background: + radial-gradient(circle at 50% 0%, rgba(232, 212, 168, 0.28), transparent 38%), + rgba(255, 255, 255, 0.66); +} + .login-hero { isolation: isolate; color: #282828; diff --git a/web/components/ad-recreation-board.tsx b/web/components/ad-recreation-board.tsx index 0b000cd..83c79ac 100644 --- a/web/components/ad-recreation-board.tsx +++ b/web/components/ad-recreation-board.tsx @@ -59,6 +59,7 @@ import { } from "@/lib/api" import { type NodeData } from "@/components/nodes" import { MediaAssetTile } from "@/components/media-asset-tile" +import { AnimatedLoginCharacters } from "@/components/login/animated-login-characters" const TARGETS: Array<{ value: FrameExtractTarget; label: string }> = [ { value: "balanced", label: "综合" }, @@ -1938,21 +1939,27 @@ export function AdRecreationBoard({
-
-
feed ad recreation worksheet
-

信息流广告复刻工作表

+
+ +
+
未来健康 · 营销内容工作台
+

营销内容工作台 · TK 二创

+

信息流广告复刻生产线

+
-
+
@@ -2102,20 +2109,20 @@ function MaterialColumn({ onChange={(e) => setUrl(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") onSubmitUrl() }} placeholder="粘贴 TK / 信息流视频链接" - className="h-10 min-w-0 flex-1 rounded-md border border-white/10 bg-black/45 px-3 text-[13px] text-white outline-none placeholder:text-white/28 focus:border-cyan-300/60" + className="h-10 min-w-0 flex-1 rounded-md border border-white/10 bg-black/45 px-3 text-[13px] text-white outline-none placeholder:text-white/28 focus:border-[#d6b36a]/60" /> @@ -5190,8 +5197,11 @@ function ActionButton({ function EmptyState({ text }: { text: string }) { return ( -
- {text} +
+ +
{text}
) }