+ {/* Incident ID 搜尋 */}
+
+
+ onChange({ incident_id: e.target.value })}
+ placeholder={t('filters.incident_id_placeholder')}
+ className={cn(
+ 'w-full pl-9 pr-3 py-2 rounded-lg',
+ 'bg-white border border-nothing-gray-200',
+ 'font-body text-sm text-nothing-black',
+ 'placeholder:text-nothing-gray-400',
+ 'focus:outline-none focus:ring-2 focus:ring-claw-blue/30 focus:border-claw-blue',
+ 'transition-colors'
+ )}
+ aria-label={t('filters.incident_id')}
+ />
+
+
+ {/* 時間範圍 */}
+
+
+
+ {TIME_RANGES.map(({ value, labelKey }) => (
+
+ ))}
+
+
+
+ {/* 狀態過濾 */}
+
+
+
+ {STATUS_FILTERS.map(({ value, labelKey }) => (
+
+ ))}
+
+
+
+ {/* 結果計數 */}
+
+ {t('filters.incident_count', { count: incidentCount })}
+
+
+ )
+}
diff --git a/apps/web/src/components/aiops/timeline/TimelineStage.tsx b/apps/web/src/components/aiops/timeline/TimelineStage.tsx
new file mode 100644
index 00000000..62e0a508
--- /dev/null
+++ b/apps/web/src/components/aiops/timeline/TimelineStage.tsx
@@ -0,0 +1,279 @@
+'use client'
+
+// 2026-04-26 P2.5 by Claude — AIOps Timeline
+// ============================================================
+// TimelineStage — 單階段 Card
+// 顯示階段圖示 / 狀態 / 時間戳 / 摘要
+// 點擊展開 TimelineStageDetails
+// ============================================================
+
+import { useState } from 'react'
+import { useTranslations } from 'next-intl'
+import {
+ CircleAlert,
+ Search,
+ Brain,
+ Zap,
+ CheckCircle2,
+ GraduationCap,
+ ChevronDown,
+ ChevronRight,
+ Clock,
+ SkipForward,
+ Loader2,
+} from 'lucide-react'
+import { cn } from '@/lib/utils'
+import { TimelineStageDetails } from './TimelineStageDetails'
+import type { StageType, StageStatus, StageData } from './types'
+
+// ----- Config -----
+
+interface StageConfig {
+ Icon: typeof CircleAlert
+ accentClass: string // border-left色
+ iconBg: string // icon 背景色
+ iconColor: string // icon 前景色
+ labelKey: string
+}
+
+const STAGE_CONFIG: Record