diff --git a/frontend-web/public/brand/aivideo-hero-preview.png b/frontend-web/public/brand/aivideo-hero-preview.png new file mode 100644 index 0000000..5bb9ecf Binary files /dev/null and b/frontend-web/public/brand/aivideo-hero-preview.png differ diff --git a/frontend-web/src/app/globals.css b/frontend-web/src/app/globals.css index fca18a6..31c89f8 100644 --- a/frontend-web/src/app/globals.css +++ b/frontend-web/src/app/globals.css @@ -1,38 +1,28 @@ @import "tailwindcss"; :root { - --page-bg: #ffffff; - --page-bg-soft: #f5f5f7; - --page-bg-muted: #fafafc; - --page-ink: #1d1d1f; - --page-ink-soft: rgba(29, 29, 31, 0.76); - --page-muted: rgba(29, 29, 31, 0.56); - --page-border: rgba(210, 210, 215, 0.88); - --page-border-soft: rgba(210, 210, 215, 0.48); - --page-accent: #0071e3; - --page-accent-hover: #0066cc; - --page-success: #159957; - --page-warn: #b7791f; - --page-danger: #c53030; - --page-shadow: 3px 5px 30px rgba(0, 0, 0, 0.12); - --page-shadow-soft: 0 12px 40px rgba(0, 0, 0, 0.08); -} - -.app-fonts { - font-family: - "SF Pro Text", - "SF Pro Display", - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - "PingFang SC", - "Microsoft YaHei UI", - sans-serif; - color: var(--page-ink); - background: var(--page-bg); - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; + --page-bg: #f5efe4; + --page-bg-soft: #efe7da; + --page-bg-muted: #faf6ee; + --page-surface: #fffdf7; + --page-surface-strong: #ffffff; + --page-ink: #161816; + --page-ink-soft: rgba(22, 24, 22, 0.72); + --page-muted: rgba(22, 24, 22, 0.54); + --page-border: rgba(22, 24, 22, 0.14); + --page-border-soft: rgba(22, 24, 22, 0.08); + --page-accent: #00a99d; + --page-accent-hover: #008e84; + --page-accent-strong: #073f3b; + --page-warm: #ff6f36; + --page-warm-soft: #f2c1a2; + --page-success: #0e8f61; + --page-warn: #a15c00; + --page-danger: #c2410c; + --page-shadow: 0 18px 54px rgba(25, 21, 15, 0.18); + --page-shadow-soft: 0 10px 28px rgba(25, 21, 15, 0.1); + --radius-card: 8px; + --radius-control: 8px; } * { @@ -52,11 +42,29 @@ body { margin: 0; color: var(--page-ink); background: - radial-gradient(circle at top right, rgba(0, 113, 227, 0.05), transparent 18%), - linear-gradient(180deg, #ffffff 0%, #f8f9fb 100%); + linear-gradient(180deg, rgba(255, 253, 247, 0.92), rgba(245, 239, 228, 0.96)), + repeating-linear-gradient( + 90deg, + rgba(22, 24, 22, 0.025) 0, + rgba(22, 24, 22, 0.025) 1px, + transparent 1px, + transparent 96px + ); overflow-x: hidden; } +.app-fonts { + font-family: + var(--font-body), + "PingFang SC", + "Microsoft YaHei UI", + "Noto Sans CJK SC", + sans-serif; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; +} + a { color: inherit; text-decoration: none; @@ -71,12 +79,24 @@ textarea { button:disabled { cursor: not-allowed; - opacity: 0.62; + opacity: 0.58; } input::placeholder, textarea::placeholder { - color: rgba(29, 29, 31, 0.42); + color: rgba(22, 24, 22, 0.36); +} + +svg { + flex: 0 0 auto; +} + +h1, +h2, +h3, +h4, +p { + margin-top: 0; } .spin { @@ -120,7 +140,7 @@ textarea::placeholder { .list-grid, .ops-feed { display: grid; - gap: 16px; + gap: 14px; } .field-label { @@ -128,6 +148,7 @@ textarea::placeholder { gap: 8px; color: var(--page-ink-soft); font-size: 14px; + font-weight: 600; } .field-label input, @@ -136,16 +157,16 @@ textarea::placeholder { .prompt-editor, .library-search input { width: 100%; - padding: 14px 16px; + padding: 13px 14px; border: 1px solid var(--page-border); - border-radius: 14px; - background: #ffffff; + border-radius: var(--radius-control); + background: var(--page-surface-strong); color: var(--page-ink); outline: none; transition: - border-color 0.2s ease, - box-shadow 0.2s ease, - transform 0.2s ease; + border-color 0.18s ease, + box-shadow 0.18s ease, + background 0.18s ease; } .field-label input:focus, @@ -153,15 +174,16 @@ textarea::placeholder { .field-label textarea:focus, .prompt-editor:focus, .library-search input:focus { - border-color: rgba(0, 113, 227, 0.48); - box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12); - transform: translateY(-1px); + border-color: rgba(0, 169, 157, 0.55); + box-shadow: 0 0 0 4px rgba(0, 169, 157, 0.12); + background: #ffffff; } .field-label textarea, .prompt-editor { - min-height: 150px; + min-height: 156px; resize: vertical; + line-height: 1.7; } .primary-button, @@ -170,19 +192,23 @@ textarea::placeholder { .marketing-primary-button, .marketing-secondary-button, .marketing-link-button { - min-height: 46px; - padding: 12px 20px; + min-height: 44px; + padding: 11px 18px; display: inline-flex; align-items: center; justify-content: center; - gap: 10px; + gap: 9px; border: 1px solid transparent; + border-radius: 999px; cursor: pointer; + font-weight: 700; + line-height: 1; transition: - transform 0.2s ease, - background 0.2s ease, - border-color 0.2s ease, - opacity 0.2s ease; + transform 0.18s ease, + background 0.18s ease, + border-color 0.18s ease, + color 0.18s ease, + box-shadow 0.18s ease; } .primary-button:hover, @@ -196,73 +222,80 @@ textarea::placeholder { .primary-button, .marketing-primary-button { - border-radius: 999px; - background: var(--page-accent); - color: #ffffff; + background: var(--page-ink); + color: #fffdf7; + box-shadow: 0 12px 30px rgba(22, 24, 22, 0.2); } .primary-button:hover, .marketing-primary-button:hover { - background: var(--page-accent-hover); + background: #000000; + box-shadow: 0 16px 36px rgba(22, 24, 22, 0.24); } .ghost-button, .marketing-secondary-button, .marketing-link-button { - border-radius: 999px; border-color: var(--page-border); - background: rgba(255, 255, 255, 0.9); + background: rgba(255, 253, 247, 0.78); color: var(--page-ink); } -.danger-button { - border-radius: 10px; +.ghost-button:hover, +.marketing-secondary-button:hover, +.marketing-link-button:hover { + border-color: rgba(0, 169, 157, 0.35); background: #ffffff; - border-color: rgba(197, 48, 48, 0.22); +} + +.danger-button { + background: #fff7f2; + border-color: rgba(194, 65, 12, 0.24); color: var(--page-danger); } .compact-button { - min-height: 38px; - padding: 8px 14px; + min-height: 36px; + padding: 8px 13px; font-size: 13px; } +.primary-button-wide { + width: 100%; +} + .auth-inline-link, .marketing-link-inline, .text-button { display: inline-flex; align-items: center; gap: 8px; - color: var(--page-accent-hover); - font-size: 14px; - font-weight: 500; -} - -.text-button { border: 0; padding: 0; background: none; + color: var(--page-accent-hover); cursor: pointer; + font-size: 14px; + font-weight: 700; } .inline-feedback { - padding: 14px 16px; - border-radius: 14px; + padding: 13px 14px; + border-radius: var(--radius-card); border: 1px solid var(--page-border); - background: #ffffff; + background: var(--page-surface); color: var(--page-ink-soft); } .inline-feedback.is-success { - border-color: rgba(21, 153, 87, 0.28); - background: rgba(21, 153, 87, 0.06); + border-color: rgba(14, 143, 97, 0.28); + background: rgba(14, 143, 97, 0.08); color: var(--page-success); } .inline-feedback.is-error { - border-color: rgba(197, 48, 48, 0.24); - background: rgba(197, 48, 48, 0.06); + border-color: rgba(194, 65, 12, 0.28); + background: rgba(194, 65, 12, 0.08); color: var(--page-danger); } @@ -276,11 +309,20 @@ textarea::placeholder { .marketing-flow-card, .marketing-stage-card, .auth-form-card, -.auth-showcase-card { +.auth-showcase-card, +.site-highlight-card, +.control-block, +.asset-upload-panel, +.recent-task-strip, +.media-slot, +.task-stat-card, +.dashboard-mini-card, +.asset-library-card { position: relative; overflow: hidden; - background: #ffffff; + border-radius: var(--radius-card); border: 1px solid var(--page-border-soft); + background: rgba(255, 253, 247, 0.88); box-shadow: var(--page-shadow-soft); } @@ -288,7 +330,6 @@ textarea::placeholder { .stat-card, .pulse-card { padding: 24px; - border-radius: 24px; } .list-item, @@ -297,9 +338,15 @@ textarea::placeholder { .marketing-ops-card, .marketing-flow-card, .marketing-stage-card, -.auth-showcase-card { - padding: 20px; - border-radius: 20px; +.auth-showcase-card, +.site-highlight-card, +.control-block, +.asset-upload-panel, +.recent-task-strip, +.media-slot, +.task-stat-card, +.dashboard-mini-card { + padding: 18px; } .panel h3, @@ -310,30 +357,37 @@ textarea::placeholder { .auth-form-head h3, .admin-auth-head h2, .marketing-section-copy h2 { - margin: 0 0 12px; - font-family: - "SF Pro Display", - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - "PingFang SC", - sans-serif; - font-weight: 600; - letter-spacing: -0.03em; + margin: 0 0 10px; + font-family: var(--font-display), "PingFang SC", "Microsoft YaHei UI", sans-serif; + font-weight: 800; + letter-spacing: 0; +} + +.panel h3, +.workbench-header h3, +.library-header h3 { + font-size: 26px; + line-height: 1.18; +} + +.panel p, +.marketing-tile p, +.marketing-flow-card p, +.marketing-ops-card p, +.auth-showcase-card span, +.list-item .muted { + line-height: 1.65; } .stat-card .value, .task-stat-card strong, .studio-stat strong { - font-family: - "SF Pro Display", - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - "PingFang SC", - sans-serif; - font-weight: 600; - letter-spacing: -0.03em; + display: block; + font-family: var(--font-display), "PingFang SC", "Microsoft YaHei UI", sans-serif; + font-size: 34px; + line-height: 1; + font-weight: 850; + letter-spacing: 0; } .header-kicker, @@ -341,12 +395,13 @@ textarea::placeholder { .auth-showcase-kicker, .auth-form-kicker, .admin-page-kicker { - display: inline-block; - letter-spacing: 0.18em; - text-transform: uppercase; + display: inline-flex; + align-items: center; + color: var(--page-accent-hover); font-size: 12px; - color: var(--page-accent); - font-weight: 600; + font-weight: 850; + letter-spacing: 0; + text-transform: uppercase; } .status-badge { @@ -354,34 +409,40 @@ textarea::placeholder { align-items: center; padding: 6px 10px; border-radius: 999px; - font-size: 11px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.08em; + border: 1px solid transparent; + font-size: 12px; + font-weight: 800; + letter-spacing: 0; + white-space: nowrap; } .tone-soft { - background: rgba(0, 113, 227, 0.08); - color: var(--page-accent); + background: rgba(0, 169, 157, 0.1); + border-color: rgba(0, 169, 157, 0.2); + color: var(--page-accent-strong); } .tone-success { - background: rgba(21, 153, 87, 0.08); + background: rgba(14, 143, 97, 0.1); + border-color: rgba(14, 143, 97, 0.2); color: var(--page-success); } .tone-warn { - background: rgba(183, 121, 31, 0.1); - color: var(--page-warn); + background: rgba(255, 111, 54, 0.12); + border-color: rgba(255, 111, 54, 0.24); + color: #8a3b11; } .tone-danger { - background: rgba(197, 48, 48, 0.1); + background: rgba(194, 65, 12, 0.1); + border-color: rgba(194, 65, 12, 0.22); color: var(--page-danger); } .tone-ghost { - background: rgba(29, 29, 31, 0.06); + background: rgba(22, 24, 22, 0.06); + border-color: rgba(22, 24, 22, 0.08); color: var(--page-muted); } @@ -403,7 +464,7 @@ textarea::placeholder { .site-highlight-strip, .mini-grid { display: grid; - gap: 18px; + gap: 16px; } .stats-grid { @@ -415,7 +476,7 @@ textarea::placeholder { } .workbench-grid { - grid-template-columns: minmax(0, 1.1fr) minmax(360px, 0.9fr); + grid-template-columns: minmax(0, 1.05fr) minmax(380px, 0.95fr); align-items: start; } @@ -429,6 +490,10 @@ textarea::placeholder { grid-template-columns: repeat(3, minmax(0, 1fr)); } +.task-stat-band { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} + .asset-gallery { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); } @@ -446,97 +511,116 @@ textarea::placeholder { .code-block { margin: 0; padding: 16px; - border-radius: 16px; - background: #1d1d1f; - border: 1px solid #2a2a2d; - color: #f5f5f7; + border-radius: var(--radius-card); + background: #121512; + border: 1px solid rgba(255, 255, 255, 0.08); + color: #fff9ed; overflow: auto; font-size: 13px; line-height: 1.7; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; + font-family: var(--font-mono), Consolas, monospace; } .media-preview { width: 100%; - border-radius: 16px; - background: #f5f5f7; + border-radius: var(--radius-card); + background: #111512; border: 1px solid var(--page-border); } .marketing-home { min-height: 100vh; - background: #ffffff; + background: + linear-gradient(180deg, #fffaf1 0%, #f3eadc 48%, #121512 48%, #121512 100%); } .marketing-nav { position: sticky; top: 0; z-index: 20; - height: 52px; - padding: 0 24px; + height: 68px; + padding: 0 32px; display: flex; align-items: center; justify-content: space-between; - gap: 16px; - background: rgba(255, 255, 255, 0.82); - backdrop-filter: saturate(180%) blur(20px); - border-bottom: 1px solid rgba(210, 210, 215, 0.58); + gap: 18px; + border-bottom: 1px solid rgba(22, 24, 22, 0.09); + background: rgba(255, 250, 241, 0.9); + backdrop-filter: blur(18px); } .marketing-logo, .site-brand { + display: inline-flex; + align-items: center; + gap: 10px; font-size: 20px; - font-weight: 600; - letter-spacing: -0.03em; + font-weight: 850; + letter-spacing: 0; +} + +.marketing-logo-mark, +.site-brand-mark { + width: 34px; + height: 34px; + display: grid; + place-items: center; + border-radius: 999px; + background: var(--page-ink); + color: #fffdf7; + font-size: 12px; + font-weight: 900; } .marketing-nav-links, .marketing-nav-actions { display: flex; align-items: center; - gap: 18px; + gap: 14px; } .marketing-nav-links a { - font-size: 14px; + padding: 10px 12px; color: var(--page-ink-soft); + font-size: 14px; + font-weight: 700; } .marketing-hero { - min-height: calc(100vh - 52px); + min-height: calc(100svh - 120px); display: grid; - grid-template-columns: minmax(0, 1.06fr) minmax(420px, 0.94fr); - gap: 24px; + grid-template-columns: minmax(0, 0.86fr) minmax(520px, 1.14fr); + gap: 42px; align-items: center; - padding: 56px 40px 72px; - background: - linear-gradient(180deg, #000000 0%, #090909 100%); - color: #ffffff; + max-width: 1480px; + margin: 0 auto; + padding: 56px 40px 46px; } .marketing-hero-copy { display: grid; gap: 20px; - max-width: 760px; + min-width: 0; + max-width: 700px; } .marketing-hero-copy h1 { margin: 0; - font-size: clamp(52px, 6vw, 86px); - line-height: 0.96; - letter-spacing: -0.05em; - font-weight: 600; + max-width: 11ch; + font-family: var(--font-display), "PingFang SC", "Microsoft YaHei UI", sans-serif; + font-size: 72px; + line-height: 1; + font-weight: 900; + letter-spacing: 0; } -.marketing-hero-copy p, -.marketing-stage-card p, -.marketing-section-copy p, -.marketing-flow-card p, -.marketing-ops-card p { +.marketing-hero-copy p { margin: 0; - color: rgba(255, 255, 255, 0.78); - line-height: 1.6; - font-size: 17px; + color: var(--page-ink-soft); + font-size: 18px; + line-height: 1.76; + overflow-wrap: anywhere; + word-break: break-all; } .marketing-hero-actions { @@ -545,71 +629,76 @@ textarea::placeholder { gap: 12px; } +.marketing-stat-row { + grid-template-columns: repeat(3, minmax(0, 1fr)); + margin-top: 10px; +} + .marketing-stat-row div { padding-top: 14px; - border-top: 1px solid rgba(255, 255, 255, 0.12); + border-top: 1px solid var(--page-border); } .marketing-stat-row strong { display: block; - margin-bottom: 8px; - font-size: 20px; + margin-bottom: 6px; + font-size: 16px; } .marketing-stat-row span { - color: rgba(255, 255, 255, 0.64); + color: var(--page-muted); + font-size: 13px; line-height: 1.55; - font-size: 14px; } -.marketing-stage { +.marketing-hero-visual { + position: relative; + min-width: 0; +} + +.marketing-hero-image { + width: 100%; + height: auto; + display: block; + border-radius: var(--radius-card); + box-shadow: 0 24px 90px rgba(22, 24, 22, 0.28); +} + +.marketing-proof-strip { + position: absolute; + right: 24px; + bottom: 24px; + width: min(660px, calc(100% - 48px)); display: grid; - gap: 18px; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1px; + overflow: hidden; + border-radius: var(--radius-card); + border: 1px solid rgba(255, 255, 255, 0.2); + background: rgba(18, 21, 18, 0.72); + color: #fffdf7; + backdrop-filter: blur(18px); } -.marketing-stage-card { - background: #f5f5f7; - color: var(--page-ink); - box-shadow: none; +.marketing-proof-strip div { + display: grid; + gap: 5px; + padding: 14px; } -.marketing-stage-card-dark { - background: linear-gradient(180deg, #1d1d1f, #272729); - color: #ffffff; - box-shadow: var(--page-shadow); +.marketing-proof-strip svg { + color: var(--page-warm); } -.marketing-stage-card-dark p, -.marketing-stage-card-dark span, -.marketing-stage-card-dark .marketing-stage-label { - color: rgba(255, 255, 255, 0.78); -} - -.marketing-stage-card h2 { - margin: 10px 0 12px; - font-size: 30px; - line-height: 1.08; - letter-spacing: -0.03em; -} - -.marketing-stage-label { +.marketing-proof-strip span { + color: rgba(255, 253, 247, 0.66); font-size: 12px; - letter-spacing: 0.16em; - text-transform: uppercase; + font-weight: 700; } -.marketing-chip-row { - display: flex; - flex-wrap: wrap; - gap: 10px; - margin-top: 18px; -} - -.marketing-chip-row span { - padding: 8px 12px; - border-radius: 999px; - border: 1px solid rgba(255, 255, 255, 0.16); - font-size: 12px; +.marketing-proof-strip strong { + font-size: 14px; + line-height: 1.35; } .marketing-section { @@ -617,53 +706,71 @@ textarea::placeholder { } .marketing-section-light { - background: #f5f5f7; + background: #fffaf1; color: var(--page-ink); } .marketing-section-dark { - background: #000000; - color: #ffffff; -} - -.marketing-section-dark .marketing-section-copy p, -.marketing-section-dark .marketing-flow-card p { - color: rgba(255, 255, 255, 0.72); + background: + linear-gradient(180deg, rgba(18, 21, 18, 1), rgba(29, 31, 25, 1)); + color: #fffdf7; } .marketing-section-copy { display: grid; gap: 12px; - max-width: 760px; - margin-bottom: 28px; + max-width: 820px; + margin: 0 auto 30px; + text-align: center; } .marketing-section-copy h2 { - font-size: clamp(36px, 4vw, 56px); - line-height: 1.04; + font-size: 44px; + line-height: 1.1; } .marketing-section-copy p { margin: 0; color: var(--page-ink-soft); - line-height: 1.6; font-size: 17px; + line-height: 1.7; +} + +.marketing-section-dark .marketing-section-copy p, +.marketing-section-dark .marketing-flow-card p { + color: rgba(255, 253, 247, 0.7); +} + +.marketing-tile-grid, +.marketing-flow-grid, +.marketing-ops-shell { + max-width: 1240px; + margin: 0 auto; +} + +.marketing-tile { + min-height: 214px; + display: grid; + align-content: start; + gap: 14px; + background: #fffdf7; } .marketing-tile h3, .marketing-flow-card strong, .marketing-ops-card strong { margin: 0; - font-size: 22px; - line-height: 1.15; - letter-spacing: -0.02em; + font-size: 21px; + line-height: 1.2; + letter-spacing: 0; } .marketing-tile p, .marketing-flow-card p, .marketing-ops-card p { - font-size: 15px; + margin: 0; color: var(--page-ink-soft); + font-size: 15px; } .marketing-tile-icon { @@ -671,37 +778,78 @@ textarea::placeholder { height: 42px; display: grid; place-items: center; - border-radius: 12px; - background: rgba(0, 113, 227, 0.08); - color: var(--page-accent); + border-radius: var(--radius-card); + background: #e0f5f2; + color: var(--page-accent-strong); } .marketing-flow-card, .marketing-ops-card { - background: rgba(255, 255, 255, 0.04); - border-color: rgba(255, 255, 255, 0.12); + background: rgba(255, 253, 247, 0.06); + border-color: rgba(255, 253, 247, 0.12); box-shadow: none; + color: #fffdf7; } .marketing-flow-card span { - font-size: 12px; - letter-spacing: 0.14em; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.5); + display: inline-flex; + width: 38px; + height: 38px; + align-items: center; + justify-content: center; + margin-bottom: 32px; + border-radius: 999px; + background: var(--page-warm); + color: #251710; + font-size: 13px; + font-weight: 900; } .marketing-ops-shell { display: grid; - grid-template-columns: minmax(0, 1.1fr) minmax(300px, 0.9fr); + grid-template-columns: minmax(0, 1fr) minmax(340px, 0.7fr); gap: 24px; - align-items: start; + align-items: stretch; +} + +.marketing-ops-shell .marketing-section-copy { + margin: 0; + text-align: left; +} + +.marketing-ops-card { + display: grid; + align-content: space-between; + gap: 22px; + background: #121512; +} + +.marketing-ops-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.marketing-ops-grid span { + min-height: 74px; + display: grid; + align-content: center; + gap: 8px; + padding: 14px; + border-radius: var(--radius-card); + border: 1px solid rgba(255, 253, 247, 0.12); + color: rgba(255, 253, 247, 0.82); +} + +.marketing-link-inline { + color: #fffdf7; } .auth-page { min-height: 100vh; display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(420px, 0.92fr); - background: #f5f5f7; + background: var(--page-bg); } .auth-showcase { @@ -713,44 +861,58 @@ textarea::placeholder { .auth-showcase-user { background: - linear-gradient(180deg, #000000 0%, #0c0c0e 100%); - color: #ffffff; + linear-gradient(135deg, rgba(18, 21, 18, 0.98), rgba(7, 63, 59, 0.94)), + repeating-linear-gradient( + 0deg, + rgba(255, 255, 255, 0.04) 0, + rgba(255, 255, 255, 0.04) 1px, + transparent 1px, + transparent 80px + ); + color: #fffdf7; } .auth-showcase-copy { display: grid; gap: 16px; - max-width: 760px; + max-width: 720px; } .auth-showcase-copy h1 { margin: 0; - font-size: clamp(44px, 5vw, 72px); - line-height: 0.98; - letter-spacing: -0.04em; - font-weight: 600; + font-size: 58px; + line-height: 1.04; + font-weight: 900; + letter-spacing: 0; } .auth-showcase-copy p { margin: 0; - max-width: 620px; - color: rgba(255, 255, 255, 0.74); - line-height: 1.6; + max-width: 640px; + color: rgba(255, 253, 247, 0.74); font-size: 17px; + line-height: 1.7; +} + +.auth-showcase-card { + background: rgba(255, 253, 247, 0.1); + border-color: rgba(255, 253, 247, 0.16); + box-shadow: none; + color: #fffdf7; } .auth-showcase-card svg { - color: var(--page-accent); + color: var(--page-warm); } .auth-showcase-card strong { display: block; + margin: 10px 0 6px; font-size: 18px; } .auth-showcase-card span { - color: var(--page-ink-soft); - line-height: 1.55; + color: rgba(255, 253, 247, 0.72); font-size: 14px; } @@ -758,12 +920,14 @@ textarea::placeholder { padding: 32px; display: grid; place-items: center; - background: #f5f5f7; + background: + linear-gradient(180deg, rgba(255, 250, 241, 0.96), rgba(239, 231, 218, 0.96)); } .auth-form-card { - width: min(480px, 100%); - border-radius: 24px; + width: min(478px, 100%); + padding: 28px; + background: #fffdf7; } .auth-form-head { @@ -772,11 +936,15 @@ textarea::placeholder { margin-bottom: 24px; } +.auth-form-head h2 { + font-size: 32px; +} + .auth-form-head p, .admin-auth-head p { margin: 0; color: var(--page-ink-soft); - line-height: 1.55; + line-height: 1.6; } .auth-form-actions { @@ -788,7 +956,8 @@ textarea::placeholder { .site-app-shell { min-height: 100vh; - background: var(--page-bg-soft); + background: + linear-gradient(180deg, #fffaf1 0%, #f4ecdf 36%, #ede4d5 100%); } .site-topbar { @@ -796,13 +965,13 @@ textarea::placeholder { top: 0; z-index: 20; display: grid; - grid-template-columns: auto 1fr auto; + grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 18px; - padding: 16px 24px; - background: rgba(255, 255, 255, 0.84); - backdrop-filter: saturate(180%) blur(20px); - border-bottom: 1px solid rgba(210, 210, 215, 0.58); + padding: 14px 22px; + border-bottom: 1px solid rgba(22, 24, 22, 0.09); + background: rgba(255, 250, 241, 0.9); + backdrop-filter: blur(18px); } .site-brand-block { @@ -811,33 +980,40 @@ textarea::placeholder { } .site-brand-subtitle { - font-size: 12px; + padding-left: 44px; color: var(--page-muted); + font-size: 12px; + font-weight: 700; } .site-topnav { display: flex; - gap: 10px; + gap: 8px; flex-wrap: wrap; justify-content: center; } .site-topnav-link { - padding: 10px 14px; + min-height: 38px; + display: inline-flex; + align-items: center; + gap: 7px; + padding: 9px 12px; border-radius: 999px; color: var(--page-ink-soft); font-size: 14px; + font-weight: 750; } .site-topnav-link.active { - background: #ffffff; - color: var(--page-accent); - box-shadow: var(--page-shadow-soft); + background: #121512; + color: #fffdf7; + box-shadow: 0 8px 22px rgba(22, 24, 22, 0.18); } .site-userbar { display: flex; - gap: 14px; + gap: 10px; align-items: center; } @@ -852,21 +1028,25 @@ textarea::placeholder { } .site-userbar-meta span { + max-width: 190px; + overflow: hidden; color: var(--page-muted); font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; } .site-main-shell { - max-width: 1320px; + max-width: 1380px; margin: 0 auto; - padding: 26px 24px 48px; + padding: 28px 24px 52px; } .site-page-hero { - display: flex; - justify-content: space-between; - align-items: flex-start; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; gap: 18px; + align-items: end; margin-bottom: 18px; } @@ -878,10 +1058,10 @@ textarea::placeholder { .site-page-copy h1 { margin: 0; - font-size: clamp(38px, 4vw, 56px); - line-height: 1; - letter-spacing: -0.04em; - font-weight: 600; + font-size: 44px; + line-height: 1.06; + font-weight: 900; + letter-spacing: 0; } .site-page-copy p { @@ -898,12 +1078,14 @@ textarea::placeholder { } .header-chip { - padding: 10px 14px; + min-height: 36px; + padding: 9px 12px; border-radius: 999px; - background: rgba(255, 255, 255, 0.94); + background: rgba(255, 253, 247, 0.82); border: 1px solid var(--page-border); color: var(--page-ink-soft); font-size: 12px; + font-weight: 700; display: inline-flex; align-items: center; gap: 8px; @@ -911,34 +1093,32 @@ textarea::placeholder { .header-chip-success { color: var(--page-success); - border-color: rgba(21, 153, 87, 0.24); - background: rgba(21, 153, 87, 0.06); + border-color: rgba(14, 143, 97, 0.24); + background: rgba(14, 143, 97, 0.08); +} + +.site-highlight-strip { + margin-bottom: 20px; } .site-highlight-card { - padding: 18px; - border-radius: 18px; - background: #ffffff; - border: 1px solid var(--page-border-soft); - box-shadow: var(--page-shadow-soft); + background: rgba(255, 253, 247, 0.78); } .site-highlight-card span { display: block; - margin-bottom: 10px; + margin-bottom: 8px; + color: var(--page-accent-hover); font-size: 12px; - letter-spacing: 0.14em; - text-transform: uppercase; - color: var(--page-accent); + font-weight: 850; } .site-highlight-card strong { - font-size: 18px; - line-height: 1.3; + font-size: 17px; + line-height: 1.35; } .shell-content { - margin-top: 20px; display: grid; gap: 18px; } @@ -952,52 +1132,52 @@ textarea::placeholder { margin-bottom: 20px; } +.studio-panel, +.library-panel { + background: rgba(255, 253, 247, 0.9); +} + .studio-command-bar { display: grid; - gap: 14px; grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 12px; margin-bottom: 18px; } .studio-command-pill { - padding: 16px 18px; - border-radius: 18px; - background: #ffffff; - border: 1px solid var(--page-border); - box-shadow: var(--page-shadow-soft); + padding: 15px; + border-radius: var(--radius-card); + background: #121512; + color: rgba(255, 253, 247, 0.62); display: grid; gap: 8px; - font-size: 11px; - letter-spacing: 0.12em; - text-transform: uppercase; - color: var(--page-muted); + font-size: 12px; + font-weight: 800; } .studio-command-pill strong { - color: var(--page-ink); + color: #fffdf7; font-size: 15px; - line-height: 1.45; - letter-spacing: 0; - text-transform: none; + line-height: 1.4; } .studio-stat { - padding: 20px; - border-radius: 20px; - color: #ffffff; - box-shadow: var(--page-shadow); + padding: 18px; + border-radius: var(--radius-card); + color: #fffdf7; + box-shadow: var(--page-shadow-soft); } .studio-summary-grid .studio-stat:nth-child(1) { - background: linear-gradient(135deg, #0a84ff, #5ac8fa); + background: #073f3b; } .studio-summary-grid .studio-stat:nth-child(2) { - background: linear-gradient(135deg, #1d1d1f, #3a3a3c); + background: #121512; } .studio-summary-grid .studio-stat:nth-child(3) { - background: linear-gradient(135deg, #0071e3, #2997ff); + background: #a85d37; } .studio-stat span, @@ -1009,29 +1189,24 @@ textarea::placeholder { .studio-stat span, .studio-stat small { - color: rgba(255, 255, 255, 0.78); + color: rgba(255, 253, 247, 0.72); } .studio-stat strong { - display: block; - margin: 14px 0 10px; - font-size: 30px; - line-height: 1; + margin: 12px 0 8px; } .mini-note { color: var(--page-muted); + line-height: 1.5; } .control-block, .asset-upload-panel, .recent-task-strip, .media-slot { - padding: 18px; - border-radius: 20px; - background: #ffffff; - border: 1px solid var(--page-border-soft); - box-shadow: var(--page-shadow-soft); + margin-top: 16px; + background: #fffdf7; } .control-head, @@ -1044,7 +1219,7 @@ textarea::placeholder { } .block-title { - font-weight: 600; + font-weight: 850; font-size: 15px; } @@ -1056,22 +1231,27 @@ textarea::placeholder { .model-card { width: 100%; padding: 16px; - border-radius: 18px; + border-radius: var(--radius-card); border: 1px solid var(--page-border); - background: var(--page-bg-muted); + background: #fbf7ee; text-align: left; color: var(--page-ink); cursor: pointer; - transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease; + transition: + transform 0.18s ease, + border-color 0.18s ease, + background 0.18s ease, + box-shadow 0.18s ease; } .model-card:hover { transform: translateY(-1px); + box-shadow: var(--page-shadow-soft); } .model-card.active { - background: rgba(0, 113, 227, 0.06); - border-color: rgba(0, 113, 227, 0.22); + background: #e7f6f3; + border-color: rgba(0, 169, 157, 0.35); } .model-card-head { @@ -1109,31 +1289,35 @@ textarea::placeholder { .model-card-metrics span, .tab-chip, .segmented-button { - padding: 8px 12px; + min-height: 34px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 11px; border-radius: 999px; border: 1px solid var(--page-border); - background: #ffffff; + background: #fffdf7; color: var(--page-ink-soft); font-size: 13px; + font-weight: 750; } .segmented-button { - min-height: 38px; cursor: pointer; } .segmented-button.active, .tab-chip.active { - color: var(--page-accent); - border-color: rgba(0, 113, 227, 0.18); - background: rgba(0, 113, 227, 0.06); + color: #fffdf7; + border-color: #121512; + background: #121512; } .segmented-group, .workspace-tabs { display: flex; flex-wrap: wrap; - gap: 10px; + gap: 8px; } .media-slot-body { @@ -1153,10 +1337,11 @@ textarea::placeholder { display: grid; gap: 4px; min-width: 0; + max-width: 100%; padding: 10px 12px; - border-radius: 14px; - border: 1px solid rgba(0, 113, 227, 0.2); - background: rgba(0, 113, 227, 0.06); + border-radius: var(--radius-card); + border: 1px solid rgba(0, 169, 157, 0.24); + background: rgba(0, 169, 157, 0.08); color: var(--page-ink); text-align: left; cursor: pointer; @@ -1178,9 +1363,10 @@ textarea::placeholder { display: flex; gap: 14px; align-items: center; - padding: 18px; - border-radius: 18px; - background: #ffffff; + padding: 16px 18px; + margin-top: 16px; + border-radius: var(--radius-card); + background: #fffdf7; border: 1px solid var(--page-border-soft); box-shadow: var(--page-shadow-soft); } @@ -1193,7 +1379,7 @@ textarea::placeholder { .toggle-card span { display: block; - font-weight: 600; + font-weight: 850; } .toggle-card small { @@ -1205,10 +1391,7 @@ textarea::placeholder { .composer-footer { display: grid; gap: 14px; -} - -.primary-button-wide { - width: 100%; + margin-top: 16px; } .upload-row { @@ -1224,9 +1407,9 @@ textarea::placeholder { display: flex; align-items: center; gap: 12px; - border-radius: 14px; - border: 1px dashed rgba(0, 113, 227, 0.24); - background: #ffffff; + border-radius: var(--radius-card); + border: 1px dashed rgba(0, 169, 157, 0.34); + background: #fffdf7; color: var(--page-ink-soft); cursor: pointer; } @@ -1247,7 +1430,7 @@ textarea::placeholder { justify-content: space-between; align-items: center; gap: 12px; - margin-bottom: 18px; + margin: 18px 0; flex-wrap: wrap; } @@ -1256,27 +1439,29 @@ textarea::placeholder { display: flex; align-items: center; gap: 10px; - padding-left: 14px; + padding-left: 12px; border-radius: 999px; border: 1px solid var(--page-border); - background: #ffffff; + background: #fffdf7; } .library-search input { border: 0; background: transparent; + box-shadow: none; +} + +.library-search input:focus { + box-shadow: none; } .asset-library-card { - overflow: hidden; - border-radius: 18px; - background: #ffffff; - border: 1px solid var(--page-border-soft); + background: #fffdf7; box-shadow: var(--page-shadow-soft); } .asset-library-card.selected { - border-color: rgba(0, 113, 227, 0.24); + border-color: rgba(0, 169, 157, 0.45); } .asset-thumb { @@ -1285,7 +1470,8 @@ textarea::placeholder { display: grid; place-items: center; overflow: hidden; - background: var(--page-bg-soft); + background: + linear-gradient(135deg, #ede5d5, #fbf7ee); } .asset-thumb-image { @@ -1302,23 +1488,23 @@ textarea::placeholder { .asset-thumb-audio { gap: 10px; - color: var(--page-accent); + color: var(--page-accent-strong); } .asset-media-badge { position: absolute; - top: 12px; - left: 12px; + top: 10px; + left: 10px; padding: 6px 10px; border-radius: 999px; - background: rgba(255, 255, 255, 0.92); - border: 1px solid rgba(210, 210, 215, 0.58); + background: rgba(255, 253, 247, 0.92); + border: 1px solid rgba(22, 24, 22, 0.08); font-size: 12px; - font-weight: 600; + font-weight: 850; } .asset-card-body { - padding: 16px; + padding: 15px; } .asset-card-title-row { @@ -1328,18 +1514,25 @@ textarea::placeholder { align-items: flex-start; } +.asset-card-title-row strong { + min-width: 0; + overflow-wrap: anywhere; +} + .asset-card-meta { margin-top: 8px; color: var(--page-ink-soft); font-size: 13px; + overflow-wrap: anywhere; } .asset-selected-mark { display: inline-flex; align-items: center; gap: 4px; - color: var(--page-accent); + color: var(--page-accent-hover); font-size: 12px; + font-weight: 800; white-space: nowrap; } @@ -1350,6 +1543,7 @@ textarea::placeholder { .task-mini-card { display: grid; gap: 12px; + background: #fffdf7; } .task-mini-meta { @@ -1368,9 +1562,9 @@ textarea::placeholder { .empty-state { padding: 24px; - border-radius: 18px; + border-radius: var(--radius-card); border: 1px dashed var(--page-border); - background: rgba(255, 255, 255, 0.82); + background: rgba(255, 253, 247, 0.72); color: var(--page-ink-soft); text-align: center; } @@ -1381,29 +1575,34 @@ textarea::placeholder { gap: 14px; } +.profile-avatar { + width: 44px; + height: 44px; + display: grid; + place-items: center; + border-radius: 999px; + background: #121512; + color: #fffdf7; + font-weight: 900; +} + +.profile-avatar-large { + width: 64px; + height: 64px; + font-size: 24px; +} + .task-stat-card { - padding: 18px; - border-radius: 18px; - background: #ffffff; - border: 1px solid var(--page-border-soft); - box-shadow: var(--page-shadow-soft); + background: #fffdf7; } .task-stat-card span, .dashboard-mini-card span { display: block; margin-bottom: 10px; - font-size: 11px; - letter-spacing: 0.12em; - text-transform: uppercase; color: var(--page-muted); -} - -.task-stat-card strong { - display: block; - margin-bottom: 8px; - font-size: 30px; - line-height: 1; + font-size: 12px; + font-weight: 850; } .task-stat-card small, @@ -1420,13 +1619,13 @@ textarea::placeholder { .task-stream-meta { color: var(--page-muted); font-size: 12px; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; + font-family: var(--font-mono), Consolas, monospace; } .dashboard-stage { display: grid; gap: 18px; - grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr); + grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); } .dashboard-stage-copy { @@ -1435,11 +1634,7 @@ textarea::placeholder { } .dashboard-mini-card { - padding: 18px; - border-radius: 18px; - background: #ffffff; - border: 1px solid var(--page-border-soft); - box-shadow: var(--page-shadow-soft); + background: #fffdf7; } .dashboard-mini-card strong { @@ -1449,6 +1644,12 @@ textarea::placeholder { .ops-feed-item { display: grid; gap: 8px; + padding: 14px 0; + border-bottom: 1px solid var(--page-border-soft); +} + +.ops-feed-item:last-child { + border-bottom: 0; } .ops-feed-item strong { @@ -1463,23 +1664,24 @@ textarea::placeholder { .admin-auth-page, .admin-app-shell, .admin-loading-shell { - --admin-bg: #1f2228; - --admin-surface: rgba(255, 255, 255, 0.03); - --admin-surface-hover: rgba(255, 255, 255, 0.06); - --admin-border: rgba(255, 255, 255, 0.1); - --admin-border-strong: rgba(255, 255, 255, 0.2); - --admin-text: #ffffff; - --admin-text-soft: rgba(255, 255, 255, 0.68); - --admin-text-dim: rgba(255, 255, 255, 0.5); - --admin-focus: rgba(59, 130, 246, 0.5); + --admin-bg: #151712; + --admin-bg-soft: #1f2119; + --admin-surface: rgba(255, 249, 237, 0.055); + --admin-surface-hover: rgba(255, 249, 237, 0.09); + --admin-border: rgba(255, 249, 237, 0.12); + --admin-border-strong: rgba(255, 249, 237, 0.24); + --admin-text: #fff9ed; + --admin-text-soft: rgba(255, 249, 237, 0.68); + --admin-text-dim: rgba(255, 249, 237, 0.48); + --admin-accent: #00c2b2; + background: var(--admin-bg); + color: var(--admin-text); } .admin-auth-page { min-height: 100vh; display: grid; - grid-template-columns: minmax(0, 1.05fr) 460px; - background: var(--admin-bg); - color: var(--admin-text); + grid-template-columns: minmax(0, 1.06fr) 460px; } .admin-auth-copy, @@ -1491,47 +1693,57 @@ textarea::placeholder { display: grid; align-content: space-between; gap: 28px; + background: + linear-gradient(135deg, rgba(21, 23, 18, 1), rgba(41, 36, 25, 0.96)), + repeating-linear-gradient( + 90deg, + rgba(255, 249, 237, 0.04) 0, + rgba(255, 249, 237, 0.04) 1px, + transparent 1px, + transparent 86px + ); } .admin-auth-copy h1 { margin: 0; - max-width: 10ch; - font-size: clamp(48px, 5vw, 96px); - line-height: 0.92; - letter-spacing: -0.04em; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; - font-weight: 400; + max-width: 12ch; + font-size: 64px; + line-height: 0.98; + font-family: var(--font-mono), Consolas, monospace; + font-weight: 800; + letter-spacing: 0; } .admin-auth-copy p { margin: 0; - max-width: 720px; + max-width: 700px; color: var(--admin-text-soft); font-size: 17px; - line-height: 1.6; + line-height: 1.65; } .admin-page-kicker { - color: var(--admin-text-soft); - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; + color: var(--admin-accent); + font-family: var(--font-mono), Consolas, monospace; } .admin-auth-grid { display: grid; - gap: 14px; + gap: 12px; grid-template-columns: repeat(3, minmax(0, 1fr)); } .admin-auth-info { - padding: 18px; + padding: 16px; border: 1px solid var(--admin-border); + border-radius: var(--radius-card); background: var(--admin-surface); display: grid; gap: 10px; } .admin-auth-info svg { - color: #ffffff; + color: var(--page-warm); } .admin-auth-info strong { @@ -1547,11 +1759,13 @@ textarea::placeholder { .admin-auth-panel { display: grid; place-items: center; + background: var(--admin-bg-soft); } .admin-auth-card { width: min(420px, 100%); padding: 28px; + border-radius: var(--radius-card); border: 1px solid var(--admin-border); background: var(--admin-surface); } @@ -1565,8 +1779,8 @@ textarea::placeholder { .admin-auth-head h2 { margin: 0; font-size: 30px; - font-weight: 400; - letter-spacing: -0.03em; + font-weight: 850; + letter-spacing: 0; } .admin-auth-page .field-label, @@ -1581,9 +1795,8 @@ textarea::placeholder { .admin-app-shell .field-label select, .admin-app-shell .field-label textarea { color: var(--admin-text); - background: transparent; + background: rgba(255, 249, 237, 0.05); border-color: var(--admin-border-strong); - border-radius: 0; } .admin-auth-page .field-label input:focus, @@ -1592,116 +1805,121 @@ textarea::placeholder { .admin-app-shell .field-label input:focus, .admin-app-shell .field-label select:focus, .admin-app-shell .field-label textarea:focus { - box-shadow: 0 0 0 4px var(--admin-focus); - border-color: rgba(255, 255, 255, 0.28); + box-shadow: 0 0 0 4px rgba(0, 194, 178, 0.16); + border-color: rgba(0, 194, 178, 0.48); } .admin-auth-page .primary-button, .admin-app-shell .primary-button { - border-radius: 0; - background: #ffffff; - color: #1f2228; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; - letter-spacing: 0.12em; - text-transform: uppercase; + background: #fff9ed; + color: #151712; + box-shadow: none; } .admin-auth-page .ghost-button, .admin-app-shell .ghost-button, .admin-app-shell .danger-button { - border-radius: 0; background: transparent; - color: #ffffff; + color: var(--admin-text); border-color: var(--admin-border-strong); - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; - letter-spacing: 0.08em; - text-transform: uppercase; + box-shadow: none; +} + +.admin-auth-page .auth-inline-link { + color: var(--admin-accent); } .admin-auth-page .inline-feedback, .admin-app-shell .inline-feedback { - border-radius: 0; - background: rgba(255, 255, 255, 0.04); + background: rgba(255, 249, 237, 0.05); border-color: var(--admin-border); color: var(--admin-text-soft); } .admin-auth-page .inline-feedback.is-error, .admin-app-shell .inline-feedback.is-error { - border-color: rgba(255, 255, 255, 0.18); - background: rgba(255, 255, 255, 0.06); - color: #ffffff; + border-color: rgba(255, 111, 54, 0.34); + background: rgba(255, 111, 54, 0.09); + color: #ffd3c0; } .admin-app-shell { min-height: 100vh; display: grid; grid-template-columns: 280px minmax(0, 1fr); - background: var(--admin-bg); - color: var(--admin-text); } .admin-rail { + position: sticky; + top: 0; + height: 100vh; + overflow: auto; border-right: 1px solid var(--admin-border); - padding: 24px; + padding: 22px; display: flex; flex-direction: column; - gap: 20px; + gap: 18px; + background: #12140f; } .admin-rail-brand { display: grid; gap: 10px; + padding-bottom: 14px; + border-bottom: 1px solid var(--admin-border); } .admin-rail-kicker { - font-size: 11px; - letter-spacing: 0.16em; - text-transform: uppercase; color: var(--admin-text-soft); - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; + font-size: 11px; + font-family: var(--font-mono), Consolas, monospace; + font-weight: 800; } .admin-rail-brand h1 { margin: 0; - font-size: 32px; + font-size: 30px; line-height: 1; - letter-spacing: -0.04em; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; - font-weight: 400; + font-family: var(--font-mono), Consolas, monospace; + font-weight: 850; + letter-spacing: 0; } .admin-rail-brand p { margin: 0; color: var(--admin-text-soft); line-height: 1.55; - font-size: 14px; + font-size: 13px; } .admin-rail-nav { display: grid; - gap: 6px; + gap: 5px; } .admin-rail-link { - min-height: 42px; - padding: 0 12px; + min-height: 40px; + padding: 0 11px; display: inline-flex; align-items: center; gap: 10px; border: 1px solid transparent; + border-radius: var(--radius-card); color: var(--admin-text-soft); - font-size: 13px; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; - letter-spacing: 0.08em; - text-transform: uppercase; + font-size: 12px; + font-family: var(--font-mono), Consolas, monospace; + font-weight: 800; } .admin-rail-link.active, .admin-rail-link:hover { border-color: var(--admin-border); background: var(--admin-surface-hover); - color: #ffffff; + color: var(--admin-text); +} + +.admin-rail-link.active svg { + color: var(--admin-accent); } .admin-rail-footer { @@ -1713,6 +1931,7 @@ textarea::placeholder { .admin-rail-user { display: grid; gap: 4px; + color: var(--admin-text); } .admin-rail-user strong { @@ -1722,10 +1941,11 @@ textarea::placeholder { .admin-rail-user span { color: var(--admin-text-dim); font-size: 12px; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; + font-family: var(--font-mono), Consolas, monospace; } .admin-main-shell { + min-width: 0; padding: 24px; } @@ -1740,10 +1960,9 @@ textarea::placeholder { .admin-page-hero h2 { margin: 0; font-size: 40px; - line-height: 0.98; - font-weight: 400; - letter-spacing: -0.04em; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; + line-height: 1.04; + font-weight: 850; + letter-spacing: 0; } .admin-page-hero p { @@ -1757,20 +1976,22 @@ textarea::placeholder { display: flex; flex-wrap: wrap; gap: 10px; + justify-content: flex-end; } .admin-page-tags span { - padding: 10px 12px; + padding: 9px 11px; border: 1px solid var(--admin-border); + border-radius: 999px; color: var(--admin-text-soft); font-size: 12px; - font-family: var(--font-mono), "SFMono-Regular", Consolas, monospace; - letter-spacing: 0.08em; - text-transform: uppercase; + font-family: var(--font-mono), Consolas, monospace; + font-weight: 800; } -.admin-app-shell .shell-content { - margin-top: 16px; +.admin-dashboard-stack { + display: grid; + gap: 18px; } .admin-app-shell .panel, @@ -1784,8 +2005,7 @@ textarea::placeholder { background: var(--admin-surface); border-color: var(--admin-border); box-shadow: none; - border-radius: 0; - color: #ffffff; + color: var(--admin-text); } .admin-app-shell .muted, @@ -1793,14 +2013,14 @@ textarea::placeholder { .admin-app-shell .task-stat-card small, .admin-app-shell .dashboard-mini-card small, .admin-app-shell .asset-card-meta, -.admin-app-shell .list-item .muted { +.admin-app-shell .list-item .muted, +.admin-app-shell .ops-feed-item span { color: var(--admin-text-soft); } .admin-app-shell .header-kicker, -.admin-app-shell .header-chip, .admin-app-shell .status-badge { - color: #ffffff; + color: var(--admin-accent); } .admin-app-shell .header-chip, @@ -1810,20 +2030,18 @@ textarea::placeholder { background: transparent; border-color: var(--admin-border); color: var(--admin-text-soft); - border-radius: 0; box-shadow: none; } .admin-app-shell .tab-chip.active, .admin-app-shell .segmented-button.active { - color: #ffffff; - border-color: var(--admin-border-strong); - background: var(--admin-surface-hover); + color: #151712; + border-color: #fff9ed; + background: #fff9ed; } .admin-app-shell .code-block { - border-radius: 0; - background: #111317; + background: #0b0d0a; border-color: var(--admin-border); } @@ -1834,7 +2052,7 @@ textarea::placeholder { .admin-app-shell .tone-ghost { background: transparent; border: 1px solid var(--admin-border); - color: #ffffff; + color: var(--admin-text); } @media (max-width: 1320px) { @@ -1848,7 +2066,7 @@ textarea::placeholder { } .site-page-hero { - display: grid; + align-items: start; } } @@ -1859,6 +2077,13 @@ textarea::placeholder { grid-template-columns: 1fr; } + .admin-rail { + position: relative; + height: auto; + border-right: 0; + border-bottom: 1px solid var(--admin-border); + } + .marketing-hero, .marketing-flow-grid, .site-highlight-strip, @@ -1867,10 +2092,15 @@ textarea::placeholder { .media-slot-grid, .task-stat-band, .dashboard-stage-grid, - .studio-command-bar { + .studio-command-bar, + .marketing-proof-strip { grid-template-columns: 1fr; } + .marketing-hero { + min-height: auto; + } + .site-topbar { grid-template-columns: 1fr; justify-items: start; @@ -1887,18 +2117,12 @@ textarea::placeholder { .admin-auth-panel { padding: 28px 20px; } - - .admin-rail { - border-right: 0; - border-bottom: 1px solid var(--admin-border); - } } @media (max-width: 768px) { .marketing-nav { height: auto; - padding-top: 14px; - padding-bottom: 14px; + padding: 14px 18px; flex-direction: column; align-items: flex-start; } @@ -1911,15 +2135,65 @@ textarea::placeholder { .marketing-hero, .marketing-section, - .site-main-shell { + .site-main-shell, + .admin-main-shell { padding-left: 18px; padding-right: 18px; } - .marketing-hero-copy h1, + .marketing-hero-copy h1 { + font-size: 40px; + } + + .marketing-section-copy h2, + .site-page-copy h1, + .admin-page-hero h2 { + font-size: 34px; + } + .auth-showcase-copy h1, .admin-auth-copy h1 { - font-size: clamp(36px, 12vw, 56px); + font-size: 40px; + } + + .marketing-proof-strip { + position: static; + width: 100%; + margin-top: 10px; + } + + .marketing-hero { + gap: 24px; + padding-top: 42px; + } + + .marketing-hero-copy { + gap: 16px; + } + + .marketing-hero-copy p { + font-size: 16px; + line-height: 1.72; + } + + .marketing-stat-row { + display: none; + } + + .marketing-stat-row, + .upload-row, + .admin-auth-grid, + .marketing-ops-grid { + grid-template-columns: 1fr; + } + + .site-userbar { + align-items: flex-start; + flex-direction: column; + } + + .site-userbar-meta { + text-align: left; } .panel, diff --git a/frontend-web/src/app/page.tsx b/frontend-web/src/app/page.tsx index 7be5b32..39d6ccb 100644 --- a/frontend-web/src/app/page.tsx +++ b/frontend-web/src/app/page.tsx @@ -1,46 +1,71 @@ import { ArrowRight, - CirclePlay, Coins, + Film, FolderKanban, ImagePlus, + LineChart, + MonitorPlay, ShieldCheck, Sparkles, + Workflow, } from "lucide-react"; +import Image from "next/image"; import Link from "next/link"; const productHighlights = [ { - title: "生成工作台", - copy: "把模型、提示词、时长、比例和素材引用收进一个创作面板。", + title: "面向付费用户的生成工作台", + copy: "模型、提示词、规格、素材引用和积分预估聚合在同一条创作链路里。", icon: Sparkles, }, { - title: "素材系统", - copy: "图片、视频、音频参考素材统一入库,创作时直接调用。", + title: "可复用的多媒体素材资产", + copy: "图片、视频、音频统一入库,用户可以在创作时快速检索和引用。", icon: ImagePlus, }, { - title: "任务追踪", - copy: "生成状态实时刷新,结果视频、积分消耗和任务详情一屏可见。", + title: "任务、结果和扣费可追溯", + copy: "生成状态、结果视频、冻结积分和最终扣费形成完整交付记录。", icon: FolderKanban, }, { - title: "积分与增长", - copy: "充值、兑换码、注册奖励和邀请关系形成完整的商业闭环。", + title: "商业化闭环内置", + copy: "充值、兑换码、注册奖励和邀请关系已经接入后台规则系统。", icon: Coins, }, ]; +const workflow = [ + { + step: "01", + title: "配置模型与预算", + copy: "模型能力、输出规格和积分预估前置展示。", + }, + { + step: "02", + title: "组织提示词与素材", + copy: "用户在同一屏完成提示词、参考图、参考视频和音频引用。", + }, + { + step: "03", + title: "提交并追踪结果", + copy: "任务状态、结果视频、异常信息和扣费记录持续可回看。", + }, +]; + export default function HomePage() { return (
-
AIVideo
+ + AI + AIVideo +
@@ -54,14 +79,15 @@ export default function HomePage() {
- AI VIDEO PLATFORM -

把视频生成、素材管理与运营链路,做成可交付的产品级体验。

+ Commercial AI Video Platform +

AIVideo 商业级 AI 视频生产平台

- AIVideo 把用户创作端与后台控制台收进同一套系统里,既能让普通用户顺滑出片,也能让运营团队管理模型、价格、订单与任务健康度。 + 从创作工作台、素材库、任务交付到积分付费和运营控制台,AIVideo + 把 AI 视频生成包装成可以上线、收费、运营和持续治理的完整产品。

- 免费开始 + 创建账号 @@ -70,44 +96,44 @@ export default function HomePage() {
- 一体化 - 创作、素材、任务、钱包和后台控制台 + 一套前后台 + 用户端和运营端共用业务链路
- 更少跳转 - 用户从提示词到成片提交只需要一条主流程 + 完整资金流 + 积分、充值、兑换与奖励可追踪
- 可商业化 - 支持积分、充值、兑换和邀请奖励体系 + 可扩展模型层 + 平台模型和供应商模型解耦管理
-
-
-
Creator Workspace
-

一块真正能交付创作结果的 AI 工作台

-

- 把模型选择、提示词、素材引用和任务提交放在同一屏里,让用户不需要理解底层供应商和协议,也能稳定完成视频生产。 -

-
- Text to video - Asset references - Task polling +
+ AIVideo 创作工作台界面预览 +
+
+ + 创作端 + 工作台 / 素材 / 任务
-
- -
-
- - 从提交到成片 - 任务页持续刷新进度,成功后直接打开结果视频。 +
+ + 增长端 + 充值 / 邀请 / 兑换
-
- - 从增长到付费 - 积分冻结、充值订单、兑换码和奖励规则统一串联。 +
+ + 运营端 + 模型 / 定价 / 回调
@@ -116,9 +142,9 @@ export default function HomePage() {
Product Capabilities -

对用户足够简单,对业务足够完整。

+

不是接口 Demo,是能继续商业化的产品底座。

- 不是一个只有生成接口的 DEMO,而是一套从创作体验到运营规则都能继续打磨和落地的产品基础设施。 + 用户看到的是简单的创作流程,业务团队得到的是可管理的模型、价格、任务和用户经济系统。

@@ -140,24 +166,16 @@ export default function HomePage() {
Workflow -

把复杂的视频生成流程,压缩成用户能理解的三步。

+

把复杂生成流程压缩成清晰的付费创作路径。

-
- 01 - 选择模型与输出规格 -

平台只暴露对创作真正重要的参数,不把底层技术复杂度扔给用户。

-
-
- 02 - 组织提示词和参考素材 -

提示词、图片、视频和音频素材在同一工作台里互相配合。

-
-
- 03 - 提交任务并持续跟踪 -

任务记录页承接状态轮询、扣费结果和最终视频交付。

-
+ {workflow.map((item) => ( +
+ {item.step} + {item.title} +

{item.copy}

+
+ ))}
@@ -165,18 +183,30 @@ export default function HomePage() {
Operations Console -

面向运营和业务团队的控制台,也在同一套设计语言里。

+

后台不再是附属页面,而是上线后的运营控制面。

- 用户端强调体验,后台强调秩序。两者共享同一业务模型,但在视觉气质上各自准确,不互相污染。 + 管理员可以维护用户、模型、供应商、价格、充值、兑换、回调和异常任务,让产品具备持续运营能力。

- - 用户、模型、价格、任务、回调与系统配置 -

- 运营后台不是附属页面,而是产品交付的一部分。AIVideo - 从一开始就把增长、付费和模型治理一起纳入设计。 -

+
+ + + 模型路由 + + + + 积分定价 + + + + 任务治理 + + + + 回调审计 + +
进入管理员登录 diff --git a/frontend-web/src/components/site-shell.tsx b/frontend-web/src/components/site-shell.tsx index 4c64348..7c539c7 100644 --- a/frontend-web/src/components/site-shell.tsx +++ b/frontend-web/src/components/site-shell.tsx @@ -2,7 +2,17 @@ import { useQuery } from "@tanstack/react-query"; import clsx from "clsx"; -import { Activity, LogOut } from "lucide-react"; +import { + Activity, + Clapperboard, + FolderKanban, + ImagePlus, + LogOut, + Plus, + Share2, + UserRound, + WalletCards, +} from "lucide-react"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { useEffect, useMemo } from "react"; @@ -16,36 +26,42 @@ const navigation = [ label: "创作", title: "生成工作台", description: "组织模型、提示词、素材和任务提交。", + icon: Clapperboard, }, { href: "/workspace/tasks", label: "任务", title: "任务记录", description: "追踪生成状态、扣费结果和最终视频。", + icon: FolderKanban, }, { href: "/workspace/assets", label: "素材", title: "素材管理", description: "统一管理图片、视频和音频参考素材。", + icon: ImagePlus, }, { href: "/wallet", label: "钱包", title: "钱包概览", description: "查看积分、充值和兑换的资金流转。", + icon: WalletCards, }, { href: "/invite", label: "邀请", title: "邀请中心", description: "处理邀请关系和增长奖励链路。", + icon: Share2, }, { href: "/profile", label: "账户", title: "个人资料", description: "维护基础资料和账户身份信息。", + icon: UserRound, }, ]; @@ -88,23 +104,28 @@ export function SiteShell({ children }: { children: React.ReactNode }) {
+ AI AIVideo - AI Video Platform + Creator Console
@@ -112,6 +133,10 @@ export function SiteShell({ children }: { children: React.ReactNode }) { {data.nickname || data.username} {data.email}
+ + + 新建 +