diff --git a/docs/dev-notes/2026-04-15/relative_evalution_voting/plan.md b/docs/dev-notes/2026-04-15/relative_evalution_voting/plan.md
new file mode 100644
index 000000000..40eda90b0
--- /dev/null
+++ b/docs/dev-notes/2026-04-15/relative_evalution_voting/plan.md
@@ -0,0 +1,34 @@
+# 概要
+
+このタスクでは、投票(相対評価)の実装を行う。
+相対評価とは、既にグレードが確定している問題に対してもユーザーの投票が反映される仕組みである。
+
+# 仕組み
+
+まず、ユーザーが投票したグレードから中央値を取得する。この処理はすでに実装済みである。
+
+そして、中央値グレードと確定しているグレードの差を求める。
+差は `gradeOrder(中央値) − gradeOrder(確定グレード)` で計算する(Q11=1, ..., D6=17)。
+正値はユーザーが確定グレードより難しいと感じていることを意味し、負値は簡単と感じていることを意味する。
+
+投票数が最小閾値(`MIN_VOTES_FOR_STATISTICS`)未満の場合は中央値が算出されないため、バッジは表示しない。
+
+差に応じて、以下のように5段階評価を行う。
+
+- 差が-2以下: --
+- 差が-1: -
+- 差が0: 何もなし(バッジ非表示)
+- 差が1: +
+- 差が2以上: ++
+
+グレードが未定のものに対しては、これまでと同様絶対評価を行う。
+
+# UI
+
+グレードが確定している問題のグレードアイコンの右上に「++」、「+」、「何もなし」、「-」、「--」の5段階評価を表示することで、確定したグレードからの体感難易度の乖離を表す。
+
+投票の際のUIは既存のものから変更しない。
+
+# 作業ブランチ
+
+`feature/relative_evaluation_voting`
diff --git a/src/features/votes/components/RelativeEvaluationBadge.svelte b/src/features/votes/components/RelativeEvaluationBadge.svelte
new file mode 100644
index 000000000..cefff7294
--- /dev/null
+++ b/src/features/votes/components/RelativeEvaluationBadge.svelte
@@ -0,0 +1,57 @@
+
+
+{#if label}
+
+ {#if label === '--'}
+ - -
+ {:else if label === '++'}
+ + +
+ {:else}
+ {label}
+ {/if}
+
+ {#if showTooltip && tooltipText}
+
+ {tooltipText}
+
+ {/if}
+{/if}
diff --git a/src/features/votes/components/VotableGrade.svelte b/src/features/votes/components/VotableGrade.svelte
index 623692cd9..95fdf0eb2 100644
--- a/src/features/votes/components/VotableGrade.svelte
+++ b/src/features/votes/components/VotableGrade.svelte
@@ -1,5 +1,5 @@