Skip to content

Commit 0c92eac

Browse files
authored
Merge pull request #5 from Z4phxr/fix/color_change
style: improve task card and practice page UI for better accessibility
2 parents 3f9749f + 71c9415 commit 0c92eac

2 files changed

Lines changed: 40 additions & 23 deletions

File tree

LearningPlatform/app/(student)/practice/page.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,9 @@ function PracticeTaskCard({ task, index, total, onComplete }: PracticeTaskCardPr
221221
)}
222222
>
223223
{result?.isCorrect ? (
224-
<CheckCircle className="h-5 w-5 shrink-0 text-green-600" />
224+
<CheckCircle className="h-5 w-5 shrink-0 text-green-700 dark:text-green-400" />
225225
) : (
226-
<XCircle className="h-5 w-5 shrink-0 text-red-600" />
226+
<XCircle className="h-5 w-5 shrink-0 text-red-700 dark:text-red-400" />
227227
)}
228228
<div>
229229
<p
@@ -357,9 +357,11 @@ function Summary({ results, onRestart }: SummaryProps) {
357357
key={i}
358358
className={cn(
359359
'flex h-8 w-8 items-center justify-center rounded-full text-xs font-bold text-white',
360-
r.isCorrect === true && 'bg-green-500',
361-
r.isCorrect === false && 'bg-red-400',
362-
r.isCorrect === null && 'bg-gray-400',
360+
r.isCorrect === true &&
361+
'bg-green-600 text-white dark:bg-green-800 dark:text-green-100',
362+
r.isCorrect === false &&
363+
'bg-red-500 text-white dark:bg-red-900 dark:text-red-100',
364+
r.isCorrect === null && 'bg-gray-400 text-white dark:bg-gray-600 dark:text-gray-100',
363365
)}
364366
>
365367
{i + 1}

LearningPlatform/components/student/task-card.tsx

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -242,23 +242,26 @@ export function TaskCard({ task, index, lessonId, courseSlug, userProgress }: Ta
242242
setShowSolution(false)
243243
}
244244

245+
/** Match feedback banner tones: bg-green/red-50 + dark:bg-*-900/20 + readable text (not neon fills). */
245246
const getOptionClassName = (optionText: string) => {
246-
if (!hasChecked) return 'border-gray-300 hover:bg-[var(--block-bg)] cursor-pointer'
247-
247+
if (!hasChecked) {
248+
return 'border-gray-300 hover:bg-[var(--block-bg)] cursor-pointer dark:border-gray-600'
249+
}
250+
248251
const isSelected = selectedAnswer === optionText
249252
const isCorrectOption = optionText === task.correctAnswer
250-
253+
251254
if (isSelected && isCorrect) {
252-
return 'border-green-500 bg-green-50 text-green-900'
255+
return 'border-green-500 bg-green-50 text-green-900 dark:border-green-600 dark:bg-green-900/20 dark:text-green-100'
253256
}
254257
if (isSelected && !isCorrect) {
255-
return 'border-red-500 bg-red-50 text-red-900'
258+
return 'border-red-500 bg-red-50 text-red-900 dark:border-red-600 dark:bg-red-900/20 dark:text-red-100'
256259
}
257260
if (showSolution && isCorrectOption) {
258-
return 'border-green-500 bg-green-50 text-green-900'
261+
return 'border-green-500 bg-green-50 text-green-900 dark:border-green-600 dark:bg-green-900/20 dark:text-green-100'
259262
}
260-
261-
return 'border-gray-300 opacity-60'
263+
264+
return 'border-gray-300 opacity-60 dark:border-gray-600'
262265
}
263266

264267
return (
@@ -300,16 +303,20 @@ export function TaskCard({ task, index, lessonId, courseSlug, userProgress }: Ta
300303
'flex items-center border-2 rounded-lg transition-all',
301304
ui.choiceRow,
302305
getOptionClassName(choice.text),
303-
!hasChecked && 'hover:border-blue-300'
306+
!hasChecked && 'hover:border-blue-300 dark:hover:border-blue-500'
304307
)}
305308
onClick={() => !hasChecked && setSelectedAnswer(choice.text)}
306309
>
307310
<div className={cn(
308311
'rounded-full border-2 flex items-center justify-center font-semibold shrink-0',
309312
ui.radioCircle,
310-
selectedAnswer === choice.text && !hasChecked && 'border-blue-500 bg-blue-50',
311-
selectedAnswer === choice.text && isCorrect && 'border-green-600 bg-green-500 text-white',
312-
selectedAnswer === choice.text && isCorrect === false && 'border-red-600 bg-red-500 text-white'
313+
selectedAnswer === choice.text && !hasChecked && 'border-blue-500 bg-blue-50 dark:border-blue-500 dark:bg-blue-950/40',
314+
selectedAnswer === choice.text &&
315+
isCorrect &&
316+
'border-green-600 bg-green-50 text-green-700 dark:border-green-600 dark:bg-green-900/30 dark:text-green-200',
317+
selectedAnswer === choice.text &&
318+
isCorrect === false &&
319+
'border-red-600 bg-red-50 text-red-700 dark:border-red-600 dark:bg-red-900/30 dark:text-red-200'
313320
)}>
314321
{selectedAnswer === choice.text && hasChecked ? (
315322
isCorrect ? <CheckCircle className={ui.feedbackIcon} /> : <XCircle className={ui.feedbackIcon} />
@@ -333,16 +340,20 @@ export function TaskCard({ task, index, lessonId, courseSlug, userProgress }: Ta
333340
'flex items-center border-2 rounded-lg transition-all',
334341
ui.choiceRow,
335342
getOptionClassName(value),
336-
!hasChecked && 'hover:border-blue-300'
343+
!hasChecked && 'hover:border-blue-300 dark:hover:border-blue-500'
337344
)}
338345
onClick={() => !hasChecked && setSelectedAnswer(value)}
339346
>
340347
<div className={cn(
341348
'rounded-full border-2 flex items-center justify-center shrink-0',
342349
ui.radioCircle,
343-
selectedAnswer === value && !hasChecked && 'border-blue-500 bg-blue-50',
344-
selectedAnswer === value && isCorrect && 'border-green-600 bg-green-500 text-white',
345-
selectedAnswer === value && isCorrect === false && 'border-red-600 bg-red-500 text-white'
350+
selectedAnswer === value && !hasChecked && 'border-blue-500 bg-blue-50 dark:border-blue-500 dark:bg-blue-950/40',
351+
selectedAnswer === value &&
352+
isCorrect &&
353+
'border-green-600 bg-green-50 text-green-700 dark:border-green-600 dark:bg-green-900/30 dark:text-green-200',
354+
selectedAnswer === value &&
355+
isCorrect === false &&
356+
'border-red-600 bg-red-50 text-red-700 dark:border-red-600 dark:bg-red-900/30 dark:text-red-200'
346357
)}>
347358
{selectedAnswer === value && hasChecked ? (
348359
isCorrect ? <CheckCircle className={ui.feedbackIcon} /> : <XCircle className={ui.feedbackIcon} />
@@ -362,8 +373,12 @@ export function TaskCard({ task, index, lessonId, courseSlug, userProgress }: Ta
362373
'w-full border-2 rounded-lg p-3 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all',
363374
ui.textareaMinH,
364375
ui.sc.body,
365-
hasChecked && isCorrect === true && 'border-green-500 bg-green-50',
366-
hasChecked && isCorrect === false && 'border-red-500 bg-red-50'
376+
hasChecked &&
377+
isCorrect === true &&
378+
'border-green-500 bg-green-50 text-green-900 dark:border-green-600 dark:bg-green-900/20 dark:text-green-100',
379+
hasChecked &&
380+
isCorrect === false &&
381+
'border-red-500 bg-red-50 text-red-900 dark:border-red-600 dark:bg-red-900/20 dark:text-red-100'
367382
)}
368383
placeholder="Type your answer..."
369384
value={openAnswer}

0 commit comments

Comments
 (0)