diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
 Brick changelog
 ---------------
 
+0.29.1
+------
+
+Bug fixes:
+ * Mixed-case color names like "brightBlue" can now be parsed in theme
+   customization files.
+
 0.29
 ----
 
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.29
+version:             0.29.1
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
diff --git a/docs/guide.rst b/docs/guide.rst
--- a/docs/guide.rst
+++ b/docs/guide.rst
@@ -784,7 +784,7 @@
 the theme -- ``someAttribute`` and ``otherAttribute`` -- are also
 customized. This example shows that styles can be customized, too, and
 that a custom style can either be a single style (in this example,
-``underline``) or a collection of styles to be applied simutaneously
+``underline``) or a collection of styles to be applied simultaneously
 (in this example, ``underline`` and ``bold``). Lastly, the hierarchical
 attribute name ``otherAttribute.inner`` refers to an attribute name
 with two components, ``otherAttribute <> inner``, similar to the
@@ -832,9 +832,9 @@
        customizedTheme <- loadCustomizations "custom.ini" defaultTheme
        let mapping = themeToAttrMap customizedTheme
 
-The resulting ``AttrMap`` can then be returned by ``appAttrMap`` as
-described in (see `How Attributes Work`_ and `appAttrMap: Managing
-Attributes`_).
+The resulting ``AttrMap`` can then be returned by ``appAttrMap``
+as described in `How Attributes Work`_ and `appAttrMap: Managing
+Attributes`_.
 
 If the theme is further customized at runtime, any changes can be saved
 with ``Brick.Themes.saveCustomizations``.
diff --git a/src/Brick/Themes.hs b/src/Brick/Themes.hs
--- a/src/Brick/Themes.hs
+++ b/src/Brick/Themes.hs
@@ -191,10 +191,11 @@
 parseColor :: T.Text -> Either String (MaybeDefault Color)
 parseColor s =
     let stripped = T.strip $ T.toLower s
+        normalize (t, c) = (T.toLower t, c)
     in if stripped == "default"
        then Right Default
-       else maybe (Left $ "Invalid color: " <> show s) (Right . SetTo) $
-                  lookup stripped (swap <$> allColors)
+       else maybe (Left $ "Invalid color: " <> show stripped) (Right . SetTo) $
+                  lookup stripped (normalize <$> swap <$> allColors)
 
 allColors :: [(Color, T.Text)]
 allColors =
