diff --git a/frontend/src/style.css b/frontend/src/style.css
index 9401e19..223e1fc 100644
--- a/frontend/src/style.css
+++ b/frontend/src/style.css
@@ -101,9 +101,9 @@ html:not(.dark) .theme-text :is([class*="bg-slate-900"], [class*="bg-slate-800"]
shell and washes out on white. In LIGHT mode, darken to the -600 tone. The
matcher also catches the /80 opacity variants. Badges keep their pale tinted
bg (bg-*-500/10) which reads fine on white. */
-html:not(.dark) .theme-text :is([class*="text-indigo-300"], [class*="text-indigo-200"]) { color: rgb(79 70 229); }
-html:not(.dark) .theme-text :is([class*="text-violet-300"], [class*="text-violet-200"]) { color: rgb(124 58 237); }
-html:not(.dark) .theme-text :is([class*="text-fuchsia-300"], [class*="text-fuchsia-200"]) { color: rgb(192 38 211); }
+html:not(.dark) .theme-text :is([class*="text-sky-300"], [class*="text-sky-200"]) { color: rgb(79 70 229); }
+html:not(.dark) .theme-text :is([class*="text-orange-300"], [class*="text-orange-200"]) { color: rgb(234 88 12); }
+html:not(.dark) .theme-text :is([class*="text-rose-300"], [class*="text-rose-200"]) { color: rgb(225 29 72); }
html:not(.dark) .theme-text :is([class*="text-emerald-300"], [class*="text-emerald-200"]) { color: rgb(5 150 105); }
html:not(.dark) .theme-text :is([class*="text-sky-300"], [class*="text-sky-200"]) { color: rgb(2 132 199); }
html:not(.dark) .theme-text :is([class*="text-amber-300"], [class*="text-amber-200"]) { color: rgb(217 119 6); }
@@ -121,8 +121,8 @@ html:not(.dark) .theme-text :is(.fp, .pg, .act, .filter-pill, .kind-btn, .preset
color: var(--fg); background: var(--hover);
}
html:not(.dark) .theme-text :is(.fp-on, .pg-on, .seg-on, .opt-on) { background: var(--fg); color: #fff; box-shadow: 2px 2px 0 var(--m-orange); }
-/* Tag chips (TagInput) — near-white violet text is unreadable on white; keep
- the violet tint but switch the label to dark ink. */
+/* Tag chips (TagInput) — near-white orange text is unreadable on white; keep
+ the orange tint but switch the label to dark ink. */
html:not(.dark) .theme-text .chip { color: rgb(15 23 42 / 0.9); }
html:not(.dark) .theme-text .chip .chip-x { color: rgb(15 23 42 / 0.55); background: transparent; box-shadow: none; }
html:not(.dark) .theme-text .chip .chip-x:hover { color: #fff; background: rgb(244 63 94 / 0.6); }
@@ -137,10 +137,9 @@ html:not(.dark) .theme-text :is(.filter-pill, .kind-btn).on { background: var(--
placed later, so the selection reads on a white page. */
html:not(.dark) .theme-text .fp-emerald { background: rgb(16 185 129 / 0.14); color: rgb(4 120 87); box-shadow: inset 0 0 0 1px rgb(16 185 129 / 0.45); }
html:not(.dark) .theme-text .fp-rose { background: rgb(244 63 94 / 0.12); color: rgb(190 18 60); box-shadow: inset 0 0 0 1px rgb(244 63 94 / 0.45); }
-html:not(.dark) .theme-text .fp-fuchsia { background: rgb(217 70 239 / 0.12); color: rgb(162 28 175); box-shadow: inset 0 0 0 1px rgb(217 70 239 / 0.45); }
html:not(.dark) .theme-text .fp-amber { background: rgb(245 158 11 / 0.16); color: rgb(180 83 9); box-shadow: inset 0 0 0 1px rgb(245 158 11 / 0.5); }
-html:not(.dark) .theme-text .fp-violet { background: rgb(139 92 246 / 0.14); color: rgb(109 40 217); box-shadow: inset 0 0 0 1px rgb(139 92 246 / 0.45); }
-html:not(.dark) .theme-text .fp-purple { background: rgb(168 85 247 / 0.14); color: rgb(107 33 168); box-shadow: inset 0 0 0 1px rgb(168 85 247 / 0.45); }
+html:not(.dark) .theme-text .fp-orange { background: rgb(249 115 22 / 0.14); color: rgb(194 65 12); box-shadow: inset 0 0 0 1px rgb(249 115 22 / 0.45); }
+html:not(.dark) .theme-text .fp-pink { background: rgb(244 114 182 / 0.14); color: rgb(190 24 93); box-shadow: inset 0 0 0 1px rgb(244 114 182 / 0.45); }
html:not(.dark) .theme-text .fp-slate { background: rgb(100 116 139 / 0.14); color: rgb(51 65 85); box-shadow: inset 0 0 0 1px rgb(100 116 139 / 0.45); }
html:not(.dark) .theme-text .fp-sky { background: rgb(14 165 233 / 0.14); color: rgb(3 105 161); box-shadow: inset 0 0 0 1px rgb(14 165 233 / 0.45); }
html:not(.dark) .theme-text .fp-teal { background: rgb(20 184 166 / 0.14); color: rgb(15 118 110); box-shadow: inset 0 0 0 1px rgb(20 184 166 / 0.45); }
@@ -148,7 +147,7 @@ html:not(.dark) .theme-text .fp-teal { background: rgb(20 184 166 / 0.14); color
/* Custom checkbox for admin tables (
).
Replaces the plain accent-color box with a rounded, branded one + white check.
Neutral border + transparent bg so it reads on both the dark admin shell and
- light mode; fills fuchsia when checked. */
+ light mode; fills rose when checked. */
.chk {
appearance: none;
-webkit-appearance: none;
@@ -196,11 +195,11 @@ html:not(.dark) .theme-text .fp-teal { background: rgb(20 184 166 / 0.14); color
white-space: nowrap;
}
.acct-tag-sub { background: rgb(14 165 233 / 0.14); color: rgb(3 105 161); box-shadow: inset 0 0 0 1px rgb(14 165 233 / 0.4); }
-.acct-tag-master { background: rgb(139 92 246 / 0.14); color: rgb(109 40 217); box-shadow: inset 0 0 0 1px rgb(139 92 246 / 0.4); }
+.acct-tag-master { background: rgb(249 115 22 / 0.14); color: rgb(194 65 12); box-shadow: inset 0 0 0 1px rgb(249 115 22 / 0.4); }
.acct-tag-free { background: rgb(100 116 139 / 0.14); color: rgb(51 65 85); box-shadow: inset 0 0 0 1px rgb(100 116 139 / 0.4); }
.acct-tag-limit { background: rgb(245 158 11 / 0.16); color: rgb(180 83 9); box-shadow: inset 0 0 0 1px rgb(245 158 11 / 0.4); }
html.dark .acct-tag-sub { background: rgb(14 165 233 / 0.18); color: rgb(125 211 252); box-shadow: inset 0 0 0 1px rgb(56 189 248 / 0.35); }
-html.dark .acct-tag-master { background: rgb(139 92 246 / 0.22); color: rgb(196 181 253); box-shadow: inset 0 0 0 1px rgb(167 139 250 / 0.35); }
+html.dark .acct-tag-master { background: rgb(249 115 22 / 0.22); color: rgb(253 186 116); box-shadow: inset 0 0 0 1px rgb(253 186 116 / 0.35); }
html.dark .acct-tag-free { background: rgb(148 163 184 / 0.22); color: rgb(226 232 240); box-shadow: inset 0 0 0 1px rgb(148 163 184 / 0.35); }
html.dark .acct-tag-limit { background: rgb(245 158 11 / 0.18); color: rgb(252 211 77); box-shadow: inset 0 0 0 1px rgb(251 191 36 / 0.35); }
/* Capability chips (ModelsView): all variants need bg + ring + color reset in light mode.
@@ -255,9 +254,9 @@ html:not(.dark) .media-card :is([class*="border-white/"], [class*="ring-white/"]
/* Accent text inside a media-card sits on dark imagery too — keep it at its
bright (dark-mode) shade instead of the darkened light-theme rescue above. */
html:not(.dark) .media-card :is([class*="text-emerald-3"], [class*="text-emerald-2"]) { color: rgb(110 231 183) !important; }
-html:not(.dark) .media-card :is([class*="text-fuchsia-3"], [class*="text-fuchsia-2"]) { color: rgb(240 171 252) !important; }
-html:not(.dark) .media-card :is([class*="text-indigo-3"], [class*="text-indigo-2"]) { color: rgb(165 180 252) !important; }
-html:not(.dark) .media-card :is([class*="text-violet-3"], [class*="text-violet-2"]) { color: rgb(196 181 253) !important; }
+html:not(.dark) .media-card :is([class*="text-rose-3"], [class*="text-rose-2"]) { color: rgb(251 207 232) !important; }
+html:not(.dark) .media-card :is([class*="text-sky-3"], [class*="text-sky-2"]) { color: rgb(147 197 253) !important; }
+html:not(.dark) .media-card :is([class*="text-orange-3"], [class*="text-orange-2"]) { color: rgb(253 186 116) !important; }
html:not(.dark) .media-card :is([class*="text-sky-3"], [class*="text-sky-2"]) { color: rgb(125 211 252) !important; }
html:not(.dark) .media-card :is([class*="text-amber-3"], [class*="text-amber-2"]) { color: rgb(252 211 77) !important; }
diff --git a/frontend/src/views/AccountsView.vue b/frontend/src/views/AccountsView.vue
index ff0c285..2967417 100644
--- a/frontend/src/views/AccountsView.vue
+++ b/frontend/src/views/AccountsView.vue
@@ -65,11 +65,11 @@ function typePill(t) {
return {
adobe: 'bg-rose-500/10 text-rose-300 ring-rose-400/30',
openai: 'bg-emerald-500/10 text-emerald-300 ring-emerald-400/30',
- runway: 'bg-violet-500/10 text-violet-300 ring-violet-400/30',
+ runway: 'bg-orange-500/10 text-orange-300 ring-orange-400/30',
leonardo: 'bg-amber-500/10 text-amber-300 ring-amber-400/30',
krea: 'bg-sky-500/10 text-sky-300 ring-sky-400/30',
imagine: 'bg-teal-500/10 text-teal-300 ring-teal-400/30',
- creativefabrica: 'bg-fuchsia-500/10 text-fuchsia-300 ring-fuchsia-400/30',
+ creativefabrica: 'bg-rose-500/10 text-rose-300 ring-rose-400/30',
}[t] || 'bg-white/[0.06] text-white/70 ring-white/15'
}
// 与后端 accountConcurrency 保持一致:adobe 普号固定 1 并发,会员号取配置值
@@ -339,7 +339,7 @@ onMounted(() => { loadAccounts(); loadModelList() })
{{ stats.total }}
成功/失败/限额
-
@@ -552,7 +552,7 @@ onMounted(() => { loadAccounts(); loadModelList() })
{{ a.in_flight || 0 }}
/
{{ a.success_total || 0 }}
@@ -645,10 +645,10 @@ onMounted(() => { loadAccounts(); loadModelList() })
color: rgb(253 224 71);
box-shadow: inset 0 0 0 1px rgb(253 224 71 / 0.4);
}
-.fp-violet {
- background: rgb(139 92 246 / 0.22);
- color: rgb(196 181 253);
- box-shadow: inset 0 0 0 1px rgb(196 181 253 / 0.45);
+.fp-orange {
+ background: rgb(249 115 22 / 0.22);
+ color: rgb(253 186 116);
+ box-shadow: inset 0 0 0 1px rgb(253 186 116 / 0.45);
}
.fp-sky {
background: rgb(56 189 248 / 0.22);
@@ -660,10 +660,10 @@ onMounted(() => { loadAccounts(); loadModelList() })
color: rgb(94 234 212);
box-shadow: inset 0 0 0 1px rgb(94 234 212 / 0.45);
}
-.fp-purple {
- background: rgb(168 85 247 / 0.22);
- color: rgb(216 180 254);
- box-shadow: inset 0 0 0 1px rgb(216 180 254 / 0.45);
+.fp-pink {
+ background: rgb(244 114 182 / 0.22);
+ color: rgb(249 168 212);
+ box-shadow: inset 0 0 0 1px rgb(249 168 212 / 0.45);
}
.fp-slate {
background: rgb(148 163 184 / 0.22);
@@ -725,10 +725,10 @@ onMounted(() => { loadAccounts(); loadModelList() })
background: rgb(244 63 94 / 0.8);
box-shadow: inset 0 0 0 1px rgb(244 63 94 / 0.6);
}
-/* pending (import quota probe in flight) — neutral indigo, thumb stays left */
+/* pending (import quota probe in flight) — neutral sky, thumb stays left */
.sw-pending {
- background: rgb(99 102 241 / 0.45);
- box-shadow: inset 0 0 0 1px rgb(99 102 241 / 0.4);
+ background: rgb(14 165 233 / 0.45);
+ box-shadow: inset 0 0 0 1px rgb(14 165 233 / 0.4);
}
/* quota exhausted — amber (NOT red/dead), thumb stays left, locked until reset */
.sw-quota {
diff --git a/frontend/src/views/AdminOrdersView.vue b/frontend/src/views/AdminOrdersView.vue
index 667f32c..f7712e1 100644
--- a/frontend/src/views/AdminOrdersView.vue
+++ b/frontend/src/views/AdminOrdersView.vue
@@ -116,7 +116,7 @@ function goPage(n) {
{{ fmt(o.created_at) }} |
{{ fmt(o.paid_at) }} |
{{ o.source && o.source !== 'epay' ? '—' : '¥' + o.amount }} |
- {{ o.points }} |
+ {{ o.points }} |
{{ STATUS[o.status] }}· {{ METHOD[o.pay_type] || o.pay_type }}
|
@@ -148,7 +148,7 @@ function goPage(n) {
.log-table { border-collapse: separate; border-spacing: 0; }
.log-row td { border-bottom: 1px solid rgb(255 255 255 / 0.04); transition: background-color 0.15s ease, box-shadow 0.15s ease; }
.log-row:hover td { background: rgb(255 255 255 / 0.025); }
-.log-row:hover td:first-child { box-shadow: inset 2px 0 0 rgb(167 139 250 / 0.55); }
+.log-row:hover td:first-child { box-shadow: inset 2px 0 0 rgb(253 186 116 / 0.55); }
.log-row:last-child td { border-bottom: none; }
.pg { min-width: 1.75rem; padding: 0.3rem 0.55rem; font-size: 0.72rem; font-weight: 500; text-align: center; border-radius: 0.45rem; color: rgb(255 255 255 / 0.7); background: rgb(255 255 255 / 0.04); box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.08); transition: background 0.15s, color 0.15s; }
.pg:hover:not(.pg-on) { background: rgb(255 255 255 / 0.1); color: white; }
diff --git a/frontend/src/views/BannedWordsView.vue b/frontend/src/views/BannedWordsView.vue
index f23addc..7a0cd3a 100644
--- a/frontend/src/views/BannedWordsView.vue
+++ b/frontend/src/views/BannedWordsView.vue
@@ -210,7 +210,7 @@ onMounted(load)
color: white;
background: rgb(244 63 94 / 0.25);
}
-.chk { accent-color: rgb(217 70 239); width: 0.9rem; height: 0.9rem; cursor: pointer; }
+.chk { accent-color: rgb(244 63 94); width: 0.9rem; height: 0.9rem; cursor: pointer; }
.pg { min-width: 1.75rem; padding: 0.3rem 0.55rem; font-size: 0.72rem; font-weight: 500; text-align: center; border-radius: 0.45rem; color: rgb(255 255 255 / 0.7); background: rgb(255 255 255 / 0.04); box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.08); transition: background 0.15s, color 0.15s; }
.pg:hover:not(.pg-on) { background: rgb(255 255 255 / 0.1); color: white; }
.pg-on { background: rgb(255 255 255 / 0.92); color: rgb(15 23 42); box-shadow: none; }
diff --git a/frontend/src/views/CdksView.vue b/frontend/src/views/CdksView.vue
index 3d6e9c5..c2d1f17 100644
--- a/frontend/src/views/CdksView.vue
+++ b/frontend/src/views/CdksView.vue
@@ -155,8 +155,8 @@ const pageNumbers = computed(() => {
{{ stats.redeemed }}
- 未使用面额
- {{ Number(stats.active_amount || 0).toLocaleString('en-US') }}
+ 未使用面额
+ {{ Number(stats.active_amount || 0).toLocaleString('en-US') }}
@@ -178,12 +178,12 @@ const pageNumbers = computed(() => {
-
+
- 营销兑换码:同一批次每个用户只能兑换一次。
+ 营销兑换码:同一批次每个用户只能兑换一次。
@@ -202,8 +202,8 @@ const pageNumbers = computed(() => {
-
@@ -266,7 +266,7 @@ const pageNumbers = computed(() => {
{{ c.code }}
- 营销
+ 营销
|
@@ -365,10 +365,10 @@ const pageNumbers = computed(() => {
color: rgb(110 231 183);
box-shadow: inset 0 0 0 1px rgb(110 231 183 / 0.45);
}
-.fp-fuchsia {
- background: rgb(217 70 239 / 0.22);
- color: rgb(245 208 254);
- box-shadow: inset 0 0 0 1px rgb(245 208 254 / 0.45);
+.fp-rose {
+ background: rgb(244 63 94 / 0.22);
+ color: rgb(254 205 211);
+ box-shadow: inset 0 0 0 1px rgb(254 205 211 / 0.45);
}
.pg {
diff --git a/frontend/src/views/ConcurrencyView.vue b/frontend/src/views/ConcurrencyView.vue
index d2a001a..11d0484 100644
--- a/frontend/src/views/ConcurrencyView.vue
+++ b/frontend/src/views/ConcurrencyView.vue
@@ -81,8 +81,8 @@ onMounted(load)
|
{{ g.user_count }} |
-
- 默认
+
+ 默认
设为默认
|
diff --git a/frontend/src/views/ConfigView.vue b/frontend/src/views/ConfigView.vue
index 07ba519..322477b 100644
--- a/frontend/src/views/ConfigView.vue
+++ b/frontend/src/views/ConfigView.vue
@@ -310,7 +310,7 @@ onMounted(() => { loadSite(); loadReg(); loadSmtp(); loadCredits(); loadAnnounce
+ :class="logoDragOver ? 'ring-2 ring-sky-400 bg-sky-50/40' : ''">
@@ -656,7 +656,7 @@ html.dark .hint b { color: rgb(253 164 175); } /* rose — visible warning, no
box-shadow: 0 1px 2px rgb(15 23 42 / 0.2);
transition: transform 0.18s ease;
}
-.sw:checked { background: #4f46e5; } /* indigo-600 — matches btn-primary */
+.sw:checked { background: #4f46e5; } /* sky-600 — matches btn-primary */
.sw:checked::after { transform: translateX(calc(2.25rem - 1.3rem)); }
.sw:focus-visible { box-shadow: 0 0 0 3px rgb(236 91 19 / 0.3); }
.sw:disabled { cursor: not-allowed; opacity: 0.55; }
diff --git a/frontend/src/views/DocsView.vue b/frontend/src/views/DocsView.vue
index 11354a6..b4d227a 100644
--- a/frontend/src/views/DocsView.vue
+++ b/frontend/src/views/DocsView.vue
@@ -273,7 +273,7 @@ async function copy(text) {
你的 Key{{ keyHint }}
- 还没有 Key?去 设置 → API Key 生成。
+ 还没有 Key?去 设置 → API Key 生成。
@@ -528,15 +528,15 @@ html.dark .badge-err { background: rgb(244 63 94 / 0.15); color: rgb(253 164 175
.cap { display: inline-flex; align-items: center; padding: 0.18rem 0.55rem; font-size: 0.7rem; border-radius: 9999px; white-space: nowrap; }
.cap-k { background: rgb(16 185 129 / 0.12); color: rgb(4 120 87); box-shadow: inset 0 0 0 1px rgb(16 185 129 / 0.3); }
-.cap-dur { background: rgb(99 102 241 / 0.12); color: rgb(55 48 163); box-shadow: inset 0 0 0 1px rgb(99 102 241 / 0.3); }
-.cap-frame { background: rgb(236 72 153 / 0.12); color: rgb(159 18 57); box-shadow: inset 0 0 0 1px rgb(236 72 153 / 0.3); }
+.cap-dur { background: rgb(14 165 233 / 0.12); color: rgb(55 48 163); box-shadow: inset 0 0 0 1px rgb(14 165 233 / 0.3); }
+.cap-frame { background: rgb(251 113 133 / 0.12); color: rgb(159 18 57); box-shadow: inset 0 0 0 1px rgb(251 113 133 / 0.3); }
.cap-ref { background: rgb(16 185 129 / 0.12); color: rgb(4 120 87); box-shadow: inset 0 0 0 1px rgb(16 185 129 / 0.3); }
.cap-media { background: rgb(245 158 11 / 0.12); color: rgb(146 64 14); box-shadow: inset 0 0 0 1px rgb(245 158 11 / 0.3); }
.cap-price { background: rgb(14 165 233 / 0.12); color: rgb(3 105 161); box-shadow: inset 0 0 0 1px rgb(14 165 233 / 0.3); font-variant-numeric: tabular-nums; }
.cap-ratio { background: rgb(100 116 139 / 0.1); color: rgb(51 65 85); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; box-shadow: inset 0 0 0 1px rgb(100 116 139 / 0.25); }
html.dark .cap-k { background: rgb(16 185 129 / 0.18); color: rgb(110 231 183); box-shadow: inset 0 0 0 1px rgb(52 211 153 / 0.4); }
-html.dark .cap-dur { background: rgb(99 102 241 / 0.18); color: rgb(165 180 252); box-shadow: inset 0 0 0 1px rgb(129 140 248 / 0.4); }
-html.dark .cap-frame { background: rgb(236 72 153 / 0.18); color: rgb(244 114 182); box-shadow: inset 0 0 0 1px rgb(244 114 182 / 0.45); }
+html.dark .cap-dur { background: rgb(14 165 233 / 0.18); color: rgb(147 197 253); box-shadow: inset 0 0 0 1px rgb(129 140 248 / 0.4); }
+html.dark .cap-frame { background: rgb(251 113 133 / 0.18); color: rgb(244 114 182); box-shadow: inset 0 0 0 1px rgb(244 114 182 / 0.45); }
html.dark .cap-ref { background: rgb(16 185 129 / 0.18); color: rgb(110 231 183); box-shadow: inset 0 0 0 1px rgb(52 211 153 / 0.4); }
html.dark .cap-media { background: rgb(245 158 11 / 0.18); color: rgb(252 211 77); box-shadow: inset 0 0 0 1px rgb(252 211 77 / 0.45); }
html.dark .cap-price { background: rgb(14 165 233 / 0.18); color: rgb(125 211 252); box-shadow: inset 0 0 0 1px rgb(56 189 248 / 0.45); }
diff --git a/frontend/src/views/ImagesView.vue b/frontend/src/views/ImagesView.vue
index d97a6b9..dff7f1c 100644
--- a/frontend/src/views/ImagesView.vue
+++ b/frontend/src/views/ImagesView.vue
@@ -215,12 +215,12 @@ onUnmounted(() => window.removeEventListener('keydown', onKey))
{{ stats.total }}
- 图像
- {{ stats.image }}
+ 图像
+ {{ stats.image }}
- 视频
- {{ stats.video }}
+ 视频
+ {{ stats.video }}
存储
@@ -293,7 +293,7 @@ onUnmounted(() => window.removeEventListener('keydown', onKey))
+ :class="f.kind === 'video' ? 'bg-rose-500/20 text-rose-200 ring-rose-400/30' : 'bg-sky-500/20 text-sky-200 ring-sky-400/30'">
{{ f.kind === 'video' ? '视频' : '图像' }}
@@ -327,8 +327,8 @@ onUnmounted(() => window.removeEventListener('keydown', onKey))
{{ f.resolution }}
{{ f.ratio }}
- {{ f.duration }}
- 去AI
+ {{ f.duration }}
+ 去AI
{{ fmtSize(f.size) }} · {{ fmtTs(f.mtime) }}
@@ -438,6 +438,6 @@ html.dark .pg-on { background: rgb(255 255 255 / 0.92); color: rgb(15 23 42); }
.pick svg { opacity: 0; transition: opacity 0.15s; }
.pick:hover { background: rgb(0 0 0 / 0.65); }
.pick:hover svg { opacity: 0.6; }
-.pick-on { background: rgb(217 70 239); box-shadow: inset 0 0 0 1.5px rgb(255 255 255 / 0.9); }
+.pick-on { background: rgb(244 63 94); box-shadow: inset 0 0 0 1.5px rgb(255 255 255 / 0.9); }
.pick-on svg { opacity: 1; }
diff --git a/frontend/src/views/InvitesAdminView.vue b/frontend/src/views/InvitesAdminView.vue
index ed2e760..b1612e2 100644
--- a/frontend/src/views/InvitesAdminView.vue
+++ b/frontend/src/views/InvitesAdminView.vue
@@ -36,8 +36,8 @@ onMounted(load)
{{ stats.pending }}
- 已发奖励
- {{ Number(stats.reward_paid || 0).toLocaleString('en-US') }}
+ 已发奖励
+ {{ Number(stats.reward_paid || 0).toLocaleString('en-US') }}
diff --git a/frontend/src/views/LogsView.vue b/frontend/src/views/LogsView.vue
index a8967c9..adb7fda 100644
--- a/frontend/src/views/LogsView.vue
+++ b/frontend/src/views/LogsView.vue
@@ -145,7 +145,7 @@ const statusDot = (s) => ({
// Source: backend stamps "v1" (API key), "user" (画图台), "admin" (后台测试模型).
const sourceLabel = (s) => ({ v1: 'API', user: '画图台', admin: '测试' }[s] || '画图台')
const sourcePill = (s) => ({
- v1: 'bg-violet-500/15 text-violet-300 ring-violet-400/30',
+ v1: 'bg-orange-500/15 text-orange-300 ring-orange-400/30',
admin: 'bg-amber-500/15 text-amber-300 ring-amber-400/30',
user: 'bg-sky-500/15 text-sky-300 ring-sky-400/30',
}[s] || 'bg-sky-500/15 text-sky-300 ring-sky-400/30')
@@ -254,7 +254,7 @@ const sourcePill = (s) => ({
|
+ class="block w-12 h-12 mx-auto rounded-lg overflow-hidden ring-1 ring-white/10 hover:ring-rose-400/60 transition-all">
@@ -291,7 +291,7 @@ const sourcePill = (s) => ({
{{ e.model }}
+ :class="e.kind === 'video' ? 'text-rose-300/80' : 'text-sky-300/80'">
{{ e.kind === 'video' ? '视频' : '图像' }}
· {{ e.provider }}
@@ -327,7 +327,7 @@ const sourcePill = (s) => ({
·
- 去AI特征
+ 去AI特征
|
@@ -437,7 +437,7 @@ const sourcePill = (s) => ({
.fade-enter-from, .fade-leave-to { opacity: 0; }
/* --- log table: subtle row separators + a barely-there hover tint that
- extends a soft violet accent on the left of the row (read as a
+ extends a soft orange accent on the left of the row (read as a
focus indicator without being noisy). --- */
.log-table { border-collapse: separate; border-spacing: 0; }
.log-row td {
@@ -446,7 +446,7 @@ const sourcePill = (s) => ({
}
.log-row:hover td { background: rgb(255 255 255 / 0.025); }
.log-row:hover td:first-child {
- box-shadow: inset 2px 0 0 rgb(167 139 250 / 0.55);
+ box-shadow: inset 2px 0 0 rgb(253 186 116 / 0.55);
}
.log-row:last-child td { border-bottom: none; }
diff --git a/frontend/src/views/ModelsView.vue b/frontend/src/views/ModelsView.vue
index a0bc7e9..fa819bb 100644
--- a/frontend/src/views/ModelsView.vue
+++ b/frontend/src/views/ModelsView.vue
@@ -96,12 +96,12 @@ onMounted(loadModels)
{{ stats.total }}
- 图像
- {{ stats.image }}
+ 图像
+ {{ stats.image }}
- 视频
- {{ stats.video }}
+ 视频
+ {{ stats.video }}
启用
@@ -187,8 +187,8 @@ onMounted(loadModels)
+ ? 'bg-rose-500/10 text-rose-300 ring-rose-400/30'
+ : 'bg-sky-500/10 text-sky-300 ring-sky-400/30'">
{{ TYPE_LABEL[m.type] || m.type }}
|
@@ -354,12 +354,12 @@ onMounted(loadModels)
white-space: nowrap;
}
.cap-dur {
- background: rgb(99 102 241 / 0.12);
- color: rgb(165 180 252);
+ background: rgb(14 165 233 / 0.12);
+ color: rgb(147 197 253);
box-shadow: inset 0 0 0 1px rgb(129 140 248 / 0.3);
}
.cap-frame {
- background: rgb(236 72 153 / 0.12);
+ background: rgb(251 113 133 / 0.12);
color: rgb(244 114 182);
box-shadow: inset 0 0 0 1px rgb(244 114 182 / 0.35);
}
diff --git a/frontend/src/views/OrdersView.vue b/frontend/src/views/OrdersView.vue
index 17d3d8a..4a996e3 100644
--- a/frontend/src/views/OrdersView.vue
+++ b/frontend/src/views/OrdersView.vue
@@ -140,7 +140,7 @@ async function cont(o) {
{{ fmt(o.created_at) }} |
{{ fmt(o.paid_at) }} |
¥{{ o.amount }} |
- {{ o.points }} |
+ {{ o.points }} |
{{ STATUS[o.status] }}
@@ -149,7 +149,7 @@ async function cont(o) {
|
+ class="rounded-lg bg-orange-600 text-white hover:bg-orange-500 disabled:opacity-60 disabled:cursor-not-allowed px-3 py-1.5 text-xs font-medium transition-colors inline-flex items-center gap-1.5">
{{ continuingId === o.id ? '处理中…' : '继续支付' }}
@@ -177,7 +177,7 @@ async function cont(o) {
.log-table { border-collapse: separate; border-spacing: 0; }
.log-row td { border-bottom: 1px solid rgb(15 23 42 / 0.06); transition: background-color 0.15s ease, box-shadow 0.15s ease; }
.log-row:hover td { background: rgb(15 23 42 / 0.025); }
-.log-row:hover td:first-child { box-shadow: inset 2px 0 0 rgb(124 58 237 / 0.6); }
+.log-row:hover td:first-child { box-shadow: inset 2px 0 0 rgb(234 88 12 / 0.6); }
.log-row:last-child td { border-bottom: none; }
.pg {
min-width: 1.75rem; padding: 0.3rem 0.55rem; font-size: 0.72rem; font-weight: 500; text-align: center;
diff --git a/frontend/src/views/OverviewView.vue b/frontend/src/views/OverviewView.vue
index 7165383..53c9562 100644
--- a/frontend/src/views/OverviewView.vue
+++ b/frontend/src/views/OverviewView.vue
@@ -162,7 +162,7 @@ onUnmounted(() => clearInterval(timer))
用户
-
+
@@ -197,7 +197,7 @@ onUnmounted(() => clearInterval(timer))
近 24 小时生成
-
+
@@ -223,7 +223,7 @@ onUnmounted(() => clearInterval(timer))
累计生成
-
+
@@ -317,7 +317,7 @@ onUnmounted(() => clearInterval(timer))
邀请
-
+
@@ -387,8 +387,8 @@ onUnmounted(() => clearInterval(timer))
24 小时生成趋势
- 图像
- 视频
+ 图像
+ 视频
峰值 {{ hourMax }}/h
@@ -402,8 +402,8 @@ onUnmounted(() => clearInterval(timer))
whitespace-nowrap rounded-md bg-black/90 ring-1 ring-white/10 px-2 py-1 text-[10px] text-white/90 tabular-nums">
{{ 23 - i }}h 前 · 图 {{ b.image }} / 视 {{ b.video }}
-
-
+
+
@@ -448,7 +448,7 @@ onUnmounted(() => clearInterval(timer))
@@ -544,7 +544,7 @@ onUnmounted(() => clearInterval(timer))
class="flex items-center gap-3 px-2 py-2 text-xs rounded-lg hover:bg-white/[0.03]">
+ :class="e.kind === 'video' ? 'text-rose-300' : 'text-sky-300'">
{{ e.kind === 'video' ? '视频' : '图像' }}
{{ e.model }}
diff --git a/frontend/src/views/PlaygroundView.vue b/frontend/src/views/PlaygroundView.vue
index d033798..1792dfe 100644
--- a/frontend/src/views/PlaygroundView.vue
+++ b/frontend/src/views/PlaygroundView.vue
@@ -889,7 +889,7 @@ onUnmounted(() => {
@@ -922,7 +922,7 @@ onUnmounted(() => {
@@ -1058,7 +1058,7 @@ onUnmounted(() => {
{{ item.prompt }}
- {{ item.model }} · 去AI · {{ (item.elapsed_ms / 1000).toFixed(1) }}s
+ {{ item.model }} · 去AI · {{ (item.elapsed_ms / 1000).toFixed(1) }}s
diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue
index 80006f1..c49f4ce 100644
--- a/frontend/src/views/SettingsView.vue
+++ b/frontend/src/views/SettingsView.vue
@@ -222,7 +222,7 @@ async function recharge() {
|
- {{ params(e) || '—' }} · 去AI特征 |
+ {{ params(e) || '—' }} · 去AI特征 |
{{ e.cost ? points(e.cost) : '—' }} |
{{ e.elapsed_ms ? (e.elapsed_ms / 1000).toFixed(1) + 's' : '—' }} |
@@ -299,14 +299,14 @@ const params = (e) => {
diff --git a/frontend/src/views/UsersView.vue b/frontend/src/views/UsersView.vue
index 4303aab..39a7710 100644
--- a/frontend/src/views/UsersView.vue
+++ b/frontend/src/views/UsersView.vue
@@ -221,8 +221,8 @@ async function doRecharge() {
{{ stats.active }}
- 管理员
- {{ stats.admins }}
+ 管理员
+ {{ stats.admins }}
总积分
@@ -234,8 +234,8 @@ async function doRecharge() {
roleFilter = '')" class="fp" :class="roleFilter === '' && 'fp-on'">全部角色
- roleFilter = 'admin')" class="fp" :class="roleFilter === 'admin' && 'fp-fuchsia'">
- 管理员
+ roleFilter = 'admin')" class="fp" :class="roleFilter === 'admin' && 'fp-orange'">
+ 管理员
roleFilter = 'agent')" class="fp" :class="roleFilter === 'agent' && 'fp-amber'">
代理
@@ -340,12 +340,12 @@ async function doRecharge() {
|
+ :class="u.role === 'admin' ? 'bg-rose-400' : u.role === 'agent' ? 'bg-amber-400' : 'bg-slate-400'">
{{ roleLabel(u.role) }}
|
@@ -596,10 +596,10 @@ async function doRecharge() {
color: rgb(253 164 175);
box-shadow: inset 0 0 0 1px rgb(253 164 175 / 0.45);
}
-.fp-fuchsia {
- background: rgb(217 70 239 / 0.22);
- color: rgb(245 208 254);
- box-shadow: inset 0 0 0 1px rgb(245 208 254 / 0.45);
+.fp-orange {
+ background: rgb(249 115 22 / 0.22);
+ color: rgb(253 186 116);
+ box-shadow: inset 0 0 0 1px rgb(253 186 116 / 0.45);
}
.fp-amber {
background: rgb(245 158 11 / 0.22);
|