diff --git a/assets/static/css/theme.css b/assets/static/css/theme.css
new file mode 100644
index 0000000..81024d1
--- /dev/null
+++ b/assets/static/css/theme.css
@@ -0,0 +1,45 @@
+/* ============================================================
+ * Gruvbox dark theme
+ * ------------------------------------------------------------
+ * Project-owned theme overrides. The vendored `app.css` is a
+ * pre-compiled Tailwind + DaisyUI bundle and is NOT edited.
+ * This file is loaded *after* it (see base.html / admin/base.html)
+ * and only redefines DaisyUI's built-in `dark` theme.
+ *
+ * DaisyUI consumes each variable as `oklch(var(--x))`, so values
+ * must be OKLch "L% C H" triplets (no function wrapper). The hex
+ * next to each line is the source color it was converted from.
+ *
+ * Palette: https://github.com/morhetz/gruvbox (dark, bright)
+ * To retune, change the hex, reconvert to OKLch, update the line.
+ * ============================================================ */
+
+[data-theme="dark"] {
+ /* --- surfaces ------------------------------------------------ */
+ --b1: 27.69% 0 0; /* #282828 bg0 page background */
+ --b2: 31.10% 0.003 49.7; /* #32302f bg0_s panels / elevated */
+ --b3: 34.40% 0.0066 48.7; /* #3c3836 bg1 borders / dividers */
+ --bc: 89.42% 0.0566 89.5; /* #ebdbb2 fg body text */
+
+ /* --- neutral ------------------------------------------------- */
+ --n: 34.40% 0.0066 48.7; /* #3c3836 bg1 */
+ --nc: 89.42% 0.0566 89.5; /* #ebdbb2 fg */
+
+ /* --- brand accents ------------------------------------------ */
+ --p: 73.10% 0.182 51.7; /* #fe8019 bright orange primary */
+ --pc: 27.69% 0 0; /* #282828 text on primary */
+ --s: 70.54% 0.097 2.3; /* #d3869b bright purple secondary */
+ --sc: 27.69% 0 0; /* #282828 text on secondary */
+ --a: 75.57% 0.108 137.6; /* #8ec07c bright aqua accent */
+ --ac: 27.69% 0 0; /* #282828 text on accent */
+
+ /* --- status colors ------------------------------------------ */
+ --in: 69.26% 0.042 169.8; /* #83a598 bright blue info */
+ --su: 76.52% 0.158 110.8; /* #b8bb26 bright green success */
+ --wa: 83.49% 0.160 83.6; /* #fabd2f bright yellow warning */
+ --er: 65.97% 0.217 30.4; /* #fb4934 bright red error */
+ --inc: 24.07% 0.005 220.9; /* #1d2021 bg0_h text on status */
+ --suc: 24.07% 0.005 220.9; /* #1d2021 */
+ --wac: 24.07% 0.005 220.9; /* #1d2021 */
+ --erc: 24.07% 0.005 220.9; /* #1d2021 */
+}
diff --git a/assets/views/admin/base.html b/assets/views/admin/base.html
index d85f0c4..6d9a3eb 100644
--- a/assets/views/admin/base.html
+++ b/assets/views/admin/base.html
@@ -32,6 +32,7 @@
});
+