diff --git a/src/renderer/ui/components/EventModal.tsx b/src/renderer/ui/components/EventModal.tsx index 2970b3b..fd53e57 100644 --- a/src/renderer/ui/components/EventModal.tsx +++ b/src/renderer/ui/components/EventModal.tsx @@ -17,7 +17,7 @@ const RES_NAME: Record = { function describeEff(eff: Record | { [k: string]: unknown }): string { const parts: string[] = [] - const e = eff as { res?: Record; rep?: number; relation?: Record; addBuilding?: string; pillGain?: Record; mission?: string; addTech?: string; raid?: { npcId: string }; trib?: { mode: string }; feisheng?: { stay: boolean }; techniqueChance?: number; artifactChance?: number; flag?: Record } + const e = eff as { res?: Record; rep?: number; relation?: Record; addBuilding?: string; pillGain?: Record; mission?: string; addTech?: string; raid?: { npcId: string }; trib?: { mode: string }; feisheng?: { stay: boolean }; ascension?: { stage: string; mode: string }; techniqueChance?: number; artifactChance?: number; flag?: Record } if (e.res) { for (const [k, v] of Object.entries(e.res)) { const name = RES_NAME[k] ?? k @@ -41,6 +41,12 @@ function describeEff(eff: Record | { [k: string]: unknown }): str parts.push(e.trib.mode === 'rash' ? '硬渡天劫' : e.trib.mode === 'guard' ? '护法渡劫' : '渡劫延一年') } if (e.feisheng) parts.push(e.feisheng.stay ? '留世不飞升' : '飞升离世') + // 0.1.39:飞升试炼效果描述 + if (e.ascension) { + const stageName = e.ascension.stage === 'heart' ? '心魔试炼' : e.ascension.stage === 'heaven' ? '天劫试炼' : '飞升抉择' + const modeName = e.ascension.mode === 'rash' ? '硬抗' : e.ascension.mode === 'guard' ? '护持' : '延后' + parts.push(`${stageName}·${modeName}`) + } return parts.join(' · ') } @@ -55,6 +61,9 @@ export function EventModal() { const [formation, setFormation] = useState('vanguard') if (!pendingEventId || !pendingEventDef || !world) return null + // 0.1.39:飞升事件视觉强化——金色辉光标题 + 仙韵边框 + 金边选项 + const isAscension = pendingEventId.startsWith('ev-ascension-') + const raidIdx = pendingEventDef.options.findIndex((o) => o.eff.raid || o.eff.tournament) const squadPool: Character[] = raidIdx >= 0 @@ -103,6 +112,7 @@ export function EventModal() { allowOuter={false} onClose={dorm} closeLabel="稍后再议" + className={isAscension ? 'modal-ascension' : undefined} footer={ squadPicking ? ( <> diff --git a/src/renderer/ui/components/ModalShell.tsx b/src/renderer/ui/components/ModalShell.tsx index cadf3c9..a8c1989 100644 --- a/src/renderer/ui/components/ModalShell.tsx +++ b/src/renderer/ui/components/ModalShell.tsx @@ -11,6 +11,7 @@ export interface ModalShellProps { footerAlign?: 'right' | 'center' | 'space' children: ReactNode closeLabel?: string + className?: string } /** @@ -29,7 +30,8 @@ export function ModalShell({ footer, footerAlign = 'right', children, - closeLabel = '关闭' + closeLabel = '关闭', + className }: ModalShellProps) { useEffect(() => { const onKey = (e: KeyboardEvent) => { @@ -46,7 +48,7 @@ export function ModalShell({ // 顶部菜单/主域均在其下(0.1.22 修复:弹框出现在宗族/谱系菜单下方的 z-index 越界)。 const shell = (
-
e.stopPropagation()} data-modal-kind="shell"> +
e.stopPropagation()} data-modal-kind="shell"> diff --git a/src/renderer/ui/styles.css b/src/renderer/ui/styles.css index 57b54d4..b517136 100644 --- a/src/renderer/ui/styles.css +++ b/src/renderer/ui/styles.css @@ -1910,3 +1910,35 @@ html[data-blade] .battle-lines { font-size: 0.8rem; color: #a8c2da; } + +/* ---------- 0.1.39 飞升叙事视觉强化 ---------- */ +.modal-ascension .modal-title { + color: #8a6d2f; + text-shadow: 0 0 12px rgba(201, 162, 39, 0.5), 0 1px 0 rgba(255, 250, 235, 0.8); + letter-spacing: 8px; +} +.modal-ascension .modal-text { + border-top-color: rgba(201, 162, 39, 0.4); + border-bottom-color: rgba(201, 162, 39, 0.3); + color: #3a2f1a; +} +.modal-ascension .modal-cat { + color: #a08540; +} +.modal-ascension .opt-btn { + border-color: #c9a227; + background: linear-gradient(180deg, #fbf8ee, #f5edda); +} +.modal-ascension .opt-btn:hover { + border-color: #8a6d2f; + background: #fbf5e0; + box-shadow: 0 0 0 1px rgba(201, 162, 39, 0.3), inset 0 1px 0 rgba(255, 255, 250, 0.6); +} +.modal-ascension .opt-btn .hint { + color: #8a6d2f; +} +.modal-ascension::before, +.modal-ascension::after { + background: linear-gradient(180deg, #3a3018, #241e0d); + border-color: #8a6d2f; +}