Skip to content

Commit 9afe53f

Browse files
committed
style: 残留归位最终收尾 - 全部 AI 色类名换令牌类
1 parent b072318 commit 9afe53f

12 files changed

Lines changed: 27 additions & 27 deletions

File tree

‎client/src/features/assistant/components/BedtimeRoutine.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ export function BedtimeRoutine({ open, onClose, topDeckId }: Props) {
8585
exit={{ opacity: 0, y: -12 }}
8686
transition={{ duration: 0.4 }}
8787
>
88-
<div className="flex items-center gap-2 text-indigo-400">
88+
<div className="flex items-center gap-2 text-brand-400">
8989
<Moon className="w-5 h-5" strokeWidth={1.5} />
9090
<span className="text-b1 font-semibold text-text-primary">睡前仪式 · 第一步</span>
9191
</div>
@@ -123,7 +123,7 @@ export function BedtimeRoutine({ open, onClose, topDeckId }: Props) {
123123
exit={{ opacity: 0, y: -12 }}
124124
transition={{ duration: 0.4 }}
125125
>
126-
<div className="flex items-center gap-2 text-indigo-400">
126+
<div className="flex items-center gap-2 text-brand-400">
127127
<Check className="w-5 h-5" strokeWidth={1.5} />
128128
<span className="text-b1 font-semibold text-text-primary">睡前仪式 · 完成</span>
129129
</div>

‎client/src/features/classroom/components/SessionQAPanel.tsx‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export default function SessionQAPanel({ transcript, className }: SessionQAPanel
9999
<div className="px-4 py-3">
100100
<div className="mb-2 flex items-center justify-between">
101101
<h3 className="flex items-center gap-2 text-b3 font-semibold text-text-primary">
102-
<MessageCircleQuestion className="w-4 h-4 text-cyan-500" strokeWidth={1.5} />
102+
<MessageCircleQuestion className="w-4 h-4 text-cyber" strokeWidth={1.5} />
103103
问这节课
104104
</h3>
105105
<button
@@ -117,7 +117,7 @@ export default function SessionQAPanel({ transcript, className }: SessionQAPanel
117117
onChange={(e) => setQuestion(e.target.value)}
118118
onKeyDown={(e) => { if (e.key === 'Enter') void handleAsk(); }}
119119
placeholder="例如:老师刚才讲的那个定理怎么推导的?"
120-
className="min-w-0 flex-1 rounded-kb-lg border border-border/30 bg-bg-elevated/40 px-3 py-2 text-b3 text-text-primary placeholder:text-text-tertiary focus:border-cyan-400/50 focus:outline-none"
120+
className="min-w-0 flex-1 rounded-kb-lg border border-border/30 bg-bg-elevated/40 px-3 py-2 text-b3 text-text-primary placeholder:text-text-tertiary focus:border-cyber/50 focus:outline-none"
121121
aria-label="课堂问题输入"
122122
/>
123123
<button
@@ -126,7 +126,7 @@ export default function SessionQAPanel({ transcript, className }: SessionQAPanel
126126
className={cn(
127127
'flex items-center gap-1.5 rounded-kb-lg px-3 py-2 text-b3 font-medium transition-all active:scale-95',
128128
canAsk
129-
? 'bg-cyan-600 text-white hover:bg-cyan-500'
129+
? 'bg-cyber text-text-inverse hover:bg-cyber/90'
130130
: 'bg-bg-tertiary/40 text-text-tertiary cursor-not-allowed',
131131
)}
132132
aria-label="提问"
@@ -141,15 +141,15 @@ export default function SessionQAPanel({ transcript, className }: SessionQAPanel
141141
<motion.div
142142
initial={{ opacity: 0, y: 8 }}
143143
animate={{ opacity: 1, y: 0 }}
144-
className="mt-3 rounded-kb-lg border border-cyan-500/15 bg-cyan-500/[0.04] p-3"
144+
className="mt-3 rounded-kb-lg border border-cyber/15 bg-cyber/[0.04] p-3"
145145
>
146146
<p className="text-b3 text-text-primary leading-relaxed">{answer}</p>
147147
{references.length > 0 && (
148148
<ul className="mt-2 space-y-1 border-t border-border/20 pt-2">
149149
{references.map((ref, i) => (
150150
<li key={i} className="flex items-start gap-1.5 text-c1 text-text-tertiary">
151-
<Quote className="mt-0.5 w-3 h-3 flex-shrink-0 text-cyan-500/60" strokeWidth={1.5} />
152-
<span className="tabular-nums text-cyan-500/80">{ref.time}</span>
151+
<Quote className="mt-0.5 w-3 h-3 flex-shrink-0 text-cyber/60" strokeWidth={1.5} />
152+
<span className="tabular-nums text-cyber/80">{ref.time}</span>
153153
<span className="line-clamp-2">{ref.text}</span>
154154
</li>
155155
))}

‎client/src/features/inbox/types.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ export interface InboxItem {
2121

2222
/** 来源元信息(UI 徽章与筛选共用) */
2323
export const SOURCE_META: Record<InboxItem['source'], { label: string; badge: string }> = {
24-
clipboard: { label: '剪贴板', badge: 'bg-cyan-500/15 text-cyan-400' },
24+
clipboard: { label: '剪贴板', badge: 'bg-cyber/15 text-cyber' },
2525
inspiration: { label: '灵感', badge: 'bg-amber-500/15 text-amber-400' },
26-
import: { label: '导入', badge: 'bg-violet-500/15 text-violet-400' },
26+
import: { label: '导入', badge: 'bg-cyber/15 text-cyber' },
2727
};
2828

2929
/** 状态元信息 */

‎client/src/features/planner/types.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ export const PLAN_MODULE_META: Record<PlanModule, { label: string; route: string
4343
pomodoro: { label: '深潜', route: '/pomodoro', badge: 'bg-orange-500/15 text-orange-400' },
4444
notes: { label: '结礁', route: '/notes', badge: 'bg-blue-500/15 text-blue-400' },
4545
flashcards: { label: '呼吸', route: '/flashcards', badge: 'bg-emerald-500/15 text-emerald-400' },
46-
feynman: { label: '浮出水面', route: '/feynman', badge: 'bg-violet-500/15 text-violet-400' },
47-
inspiration: { label: '灵感', route: '/inspiration', badge: 'bg-pink-500/15 text-pink-400' },
46+
feynman: { label: '浮出水面', route: '/feynman', badge: 'bg-cyber/15 text-cyber' },
47+
inspiration: { label: '灵感', route: '/inspiration', badge: 'bg-amber/15 text-amber' },
4848
};

‎client/src/features/retention/components/DepthMeter.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function DepthMeter() {
3838
累计深度
3939
</span>
4040
{/* 浅色模式使用深蓝青色,保证在白底上可读 */}
41-
<span className="text-sm font-semibold text-cyan-600 dark:text-cyan-300">{depthLabel}</span>
41+
<span className="text-sm font-semibold text-cyber dark:text-cyber">{depthLabel}</span>
4242
</div>
4343

4444
{/* 当前分层 / Current zone —— 浅色模式文字颜色加深 */}

‎client/src/features/retention/components/LearningProfile.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function LearningProfile({
5353
{unlockedTags.map((tag) => (
5454
<span
5555
key={tag.key}
56-
className="px-2 py-0.5 rounded-full text-[10px] font-medium bg-cyan-100 dark:bg-cyan-400/10 text-cyan-700 dark:text-cyan-300 border border-cyan-200 dark:border-cyan-300/20"
56+
className="px-2 py-0.5 rounded-full text-[10px] font-medium bg-cyber/10 text-cyber border-cyber/30"
5757
title={tag.description}
5858
>
5959
{tag.title}
@@ -75,14 +75,14 @@ export function LearningProfile({
7575
'flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-[11px] font-medium transition-colors',
7676
/* 浅色模式在线时使用更深紫色,确保白底可读 */
7777
isOnline
78-
? 'text-violet-600 dark:text-violet-300 bg-violet-100 dark:bg-violet-400/10 hover:bg-violet-200 dark:hover:bg-violet-400/20'
78+
? 'text-cyber dark:text-cyber bg-cyber dark:bg-cyber/10 hover:bg-cyber dark:hover:bg-cyber/20'
7979
: 'text-gray-400 dark:text-white/30 bg-gray-100 dark:bg-white/5 cursor-not-allowed',
8080
)}
8181
title={isOnline ? 'AI 深度分析' : '需要网络连接'}
8282
>
8383
{aiLoading ? (
8484
/* 加载动画边框颜色在浅色模式下使用深紫 */
85-
<span className="w-3 h-3 border border-violet-400/50 dark:border-violet-300/50 border-t-violet-600 dark:border-t-violet-300 rounded-full animate-spin" />
85+
<span className="w-3 h-3 border border-cyber/50 dark:border-cyber/50 border-t-cyber dark:border-t-cyber rounded-full animate-spin" />
8686
) : isOnline ? (
8787
<Sparkles className="w-3 h-3" />
8888
) : (

‎client/src/features/retention/components/SocialProofBanner.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default function SocialProofBanner() {
3737
transition={{ duration: 0.5, delay: 0.35 }}
3838
className="mt-rhythm-md inline-flex items-center gap-2 rounded-kb-full border border-border/15 bg-bg-elevated/30 px-4 py-1.5 backdrop-blur-sm"
3939
>
40-
<Waves className="w-3.5 h-3.5 text-cyan-400/80" strokeWidth={1.5} />
40+
<Waves className="w-3.5 h-3.5 text-cyber/80" strokeWidth={1.5} />
4141
<span className="text-c1 text-text-tertiary">
4242
今日 <span className="text-text-secondary font-medium">{stats.activeUsers}</span> 位潜航员在学,累计
4343
<span className="text-text-secondary font-medium"> {minutes}</span> · 你也在这片海里

‎client/src/features/retention/components/StreakBubble.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export function StreakBubble({ streakState }: StreakBubbleProps) {
7979
<div
8080
className={cn(
8181
'w-5 h-5 rounded-full flex items-center justify-center text-[9px]',
82-
day.isActive && 'bg-cyan-400/30 text-cyan-200 shadow-[0_0_6px_rgba(34,211,238,0.3)]',
82+
day.isActive && 'bg-cyber/30 text-cyber shadow-[0_0_6px_rgba(74,155,217,0.3)]',
8383
day.isRestDay && !day.isActive && 'bg-blue-400/10 text-blue-300/50 border border-blue-300/20 border-dashed',
8484
!day.isActive && !day.isRestDay && 'bg-white/5 text-white/20',
8585
day.isToday && 'ring-1 ring-white/30',

‎client/src/features/settling/pages/SettlingPage.tsx‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ export default function SettlingPage() {
137137
const updateConcept = (i: number, patch: Partial<ConceptCandidate>) =>
138138
setConcepts((cs) => cs.map((c, j) => (j === i ? { ...c, ...patch } : c)));
139139

140-
const cardInput = 'w-full rounded-md border border-white/10 bg-white/5 px-3 py-2 text-sm text-slate-200 placeholder-slate-500 outline-none focus:border-cyan-400/60';
141-
const primaryBtn = 'rounded-md bg-cyan-500/20 px-5 py-2 text-sm text-cyan-200 hover:bg-cyan-500/30';
140+
const cardInput = 'w-full rounded-md border border-white/10 bg-white/5 px-3 py-2 text-sm text-slate-200 placeholder-slate-500 outline-none focus:border-cyber/60';
141+
const primaryBtn = 'rounded-md bg-cyber/20 px-5 py-2 text-sm text-cyber hover:bg-cyber/30';
142142
const ghostBtn = 'rounded-md px-4 py-2 text-sm text-slate-400 hover:text-slate-200';
143143

144144
/** 概念卡编辑(AI 候选可改可删可增) / Editable concept cards */
@@ -164,7 +164,7 @@ export default function SettlingPage() {
164164
</div>
165165
))}
166166
<button onClick={() => setConcepts((cs) => [...cs, emptyConcept()])}
167-
className="rounded-md border border-dashed border-white/15 py-2 text-sm text-slate-400 hover:border-cyan-400/50 hover:text-cyan-300">
167+
className="rounded-md border border-dashed border-white/15 py-2 text-sm text-slate-400 hover:border-cyber/50 hover:text-cyber">
168168
+ 添加概念
169169
</button>
170170
</div>
@@ -175,7 +175,7 @@ export default function SettlingPage() {
175175
<div className="flex gap-2">
176176
{SOURCE_TABS.map((t) => (
177177
<button key={t.id} onClick={() => { setTab(t.id); setError(null); }}
178-
className={`rounded-full px-4 py-1.5 text-sm transition-colors ${tab === t.id ? 'bg-cyan-500/20 text-cyan-300' : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`}>
178+
className={`rounded-full px-4 py-1.5 text-sm transition-colors ${tab === t.id ? 'bg-cyber/20 text-cyber' : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`}>
179179
{t.label}
180180
</button>
181181
))}
@@ -192,7 +192,7 @@ export default function SettlingPage() {
192192
{tab === 'pdf' && (
193193
<div onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }}
194194
onDragLeave={() => setIsDragging(false)} onDrop={handleDropPdf}
195-
className={`flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed px-6 py-14 text-center transition-colors ${isDragging ? 'border-cyan-400/70 bg-cyan-500/10' : 'border-white/15 bg-white/[0.02]'}`}>
195+
className={`flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed px-6 py-14 text-center transition-colors ${isDragging ? 'border-cyber/70 bg-cyber/10' : 'border-white/15 bg-white/[0.02]'}`}>
196196
<p className="text-sm text-slate-300">拖拽 PDF 到此处,或</p>
197197
<button onClick={handlePickPdf} className={primaryBtn}>选择 PDF 文件</button>
198198
<p className="text-xs text-slate-500">仅提取文本层;图片型扫描件可手动粘贴内容</p>
@@ -228,7 +228,7 @@ export default function SettlingPage() {
228228
<div className="mt-2 flex justify-end gap-3">
229229
<button onClick={() => setStep('source')} className={ghostBtn}>返回</button>
230230
<button onClick={handleSettle} disabled={concepts.length === 0 || isSettling}
231-
className="rounded-md bg-cyan-500/25 px-6 py-2 text-sm text-cyan-100 hover:bg-cyan-500/40 disabled:cursor-not-allowed disabled:opacity-40">
231+
className="rounded-md bg-cyber/25 px-6 py-2 text-sm text-cyber hover:bg-cyber/40 disabled:cursor-not-allowed disabled:opacity-40">
232232
{isSettling ? '正在安放…' : '安放入世界'}
233233
</button>
234234
</div>

‎client/src/features/sop/pages/SopListPage.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import type { SopRunRow, SopTemplate } from '../types';
2323

2424
const RUN_STATUS_META: Record<SopRunRow['status'], { label: string; cls: string }> = {
2525
running: { label: '进行中', cls: 'bg-emerald-500/15 text-emerald-400' },
26-
awaiting_module: { label: '模块中', cls: 'bg-violet-500/15 text-violet-400' },
26+
awaiting_module: { label: '模块中', cls: 'bg-cyber/15 text-cyber' },
2727
completed: { label: '已完成', cls: 'bg-blue-500/15 text-blue-400' },
2828
aborted: { label: '已中止', cls: 'bg-rose-500/15 text-rose-400' },
2929
};

0 commit comments

Comments
 (0)