+ {/* Progress */}
+
+
+ Question {questionNumber} of {totalQuestions}
+
+
+
+
+ {Math.round((questionNumber / totalQuestions) * 100)}%
+
+
+
+
+ {/* Question */}
+
+ {question}
+
+
+ {/* Options */}
+
+ {options.map((option) => (
+
+ ))}
+
+
+ {/* Actions */}
+
+ {!showResult ? (
+
+ ) : (
+ <>
+
+ >
+ )}
+
+
+ {/* Result Banner */}
+ {showResult && (
+
+ {isCorrect ? (
+ <>
+
+ Correct! Well done.
+ >
+ ) : (
+ <>
+
+
+ {"Incorrect. The correct answer is "}{options.find(o => o.id === correctAnswer)?.text}.
+
+ >
+ )}
+
+ )}
+
+ {/* Explanation */}
+ {showExplanation && (
+
+
+
+ Explanation
+
+
{explanation}
+
+ )}
+
+ )
+}
diff --git a/src/client/certstack/components/practice/question-navigator.tsx b/src/client/certstack/components/practice/question-navigator.tsx
new file mode 100644
index 0000000..4e5a188
--- /dev/null
+++ b/src/client/certstack/components/practice/question-navigator.tsx
@@ -0,0 +1,92 @@
+"use client"
+
+import { cn } from "@/lib/utils"
+import { Clock, Flag } from "lucide-react"
+
+interface QuestionNavigatorProps {
+ totalQuestions: number
+ currentQuestion: number
+ answeredQuestions: number[]
+ flaggedQuestions: number[]
+ onSelect: (index: number) => void
+}
+
+export function QuestionNavigator({
+ totalQuestions,
+ currentQuestion,
+ answeredQuestions,
+ flaggedQuestions,
+ onSelect,
+}: QuestionNavigatorProps) {
+ return (
+
+ {/* Timer */}
+
+
+
+
Time Remaining
+
45:32
+
+
+
+ {/* Question Grid */}
+
Questions
+
+ {Array.from({ length: totalQuestions }, (_, i) => {
+ const num = i + 1
+ const isCurrent = num === currentQuestion
+ const isAnswered = answeredQuestions.includes(num)
+ const isFlagged = flaggedQuestions.includes(num)
+
+ return (
+
+ )
+ })}
+
+
+ {/* Legend */}
+
+
+ {/* Stats */}
+
+
+ Answered
+ {answeredQuestions.length}/{totalQuestions}
+
+
+ Flagged
+ {flaggedQuestions.length}
+
+
+
+ )
+}
diff --git a/src/client/certstack/components/theme-provider.tsx b/src/client/certstack/components/theme-provider.tsx
new file mode 100644
index 0000000..55c2f6e
--- /dev/null
+++ b/src/client/certstack/components/theme-provider.tsx
@@ -0,0 +1,11 @@
+'use client'
+
+import * as React from 'react'
+import {
+ ThemeProvider as NextThemesProvider,
+ type ThemeProviderProps,
+} from 'next-themes'
+
+export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
+ return