diff -u b/modules/color/color.module b/modules/color/color.module
--- b/modules/color/color.module
+++ b/modules/color/color.module
@@ -155,7 +155,7 @@
   $palette = $info['schemes']['default']['colors'];
 
   // Load variable.
-  return $default ? $palette : variable_get('color_' . $theme . '_palette', $palette);
+  return array_map('strtolower', $default ? $palette : variable_get('color_' . $theme . '_palette', $palette));
 }
 
 /**
@@ -449,6 +449,28 @@
   $themes = list_themes();
   // Prepare color conversion table.
   $conversion = $palette;
+
+  $indent = str_pad(' ', 6);
+  $lines = explode("\n", var_export($palette, TRUE));
+  array_shift($lines);
+  $message  = "    'PaletteName' => array(\n";
+  $message .= $indent . "'title' => t('PaletteName'),\n";
+  $message .= $indent . "'colors' => array(\n";
+  $last_line = $indent . array_pop($lines) . ',';
+  foreach ($lines as $line) {
+    if (strpos($line, ' => ') !== FALSE) {
+      $parts = explode(' => ', $line);
+      $message .= $indent . $parts[0] . str_pad(' ', (46 - strlen($line))) . '=> ' . $parts[1];
+    } else {
+      $message .=  "$indent  $line";
+    }
+    $message .=  "\n";
+  }
+  $message .= "$last_line\n";
+  $message .= "    ),\n";
+  $message = '<pre>' . $message . '</pre>';
+  watchdog('Custom color palette', $message);
+
   foreach ($conversion as $k => $v) {
     $conversion[$k] = drupal_strtolower($v);
   }
@@ -461,7 +483,7 @@
   }
 
   // Find all colors in the stylesheet and the chunks in between.
-  $style = preg_split('/(#[0-9a-f]{6}|#[0-9a-f]{3})/i', $style, -1, PREG_SPLIT_DELIM_CAPTURE);
+  $style = preg_split('/(#[0-9a-f]{6}|#[0-9a-f]{3}|rgba\(\s*([0-9]{1,3}[ ,]*){4}\))/i', $style, -1, PREG_SPLIT_DELIM_CAPTURE);
   $is_color = FALSE;
   $output = '';
   $base = 'base';
@@ -471,6 +493,10 @@
     if ($is_color) {
       $chunk = drupal_strtolower($chunk);
       // Check if this is one of the colors in the default palette.
+      if ($is_rgba = (strpos($chunk, 'rgba(') !== FALSE)) {
+        $rgba = $chunk;
+        $chunk = _color_rgba2hex($chunk);
+      }
       if ($key = array_search($chunk, $default)) {
         $chunk = $conversion[$key];
       }
@@ -478,6 +504,9 @@
       else {
         $chunk = _color_shift($palette[$base], $default[$base], $chunk, $info['blend_target']);
       }
+      if ($is_rgba) {
+        $chunk = _color_hex2rgba($rgba, $chunk);
+      }
     }
     else {
       // Determine the most suitable base color for the next color.
@@ -767,0 +797,43 @@
+
+/*
+ * Create a css hex string from a css rgba string
+ */
+function _color_rgba2hex($rgba) {
+  $re = <<<EOT
+/rgba\(
+  (\d{1,3}) \s*?,\s*? # Red (0 to 255) + space + comma separator + space
+  (\d{1,3}) \s*?,\s*? # Green
+  (\d{1,3}) \s*?,\s*? # Blue
+  \d+(?:\.\d+)?  \s*? # Transparency (0 to 1) + space
+\)/ix
+EOT
+;
+  preg_match($re,	$rgba, $rgb);
+  array_shift($rgb);
+  return '#' . implode(array_map('_color_byte2hex', $rgb));
+}
+
+/*
+ * Insert a 6 digit hex value into a css rgba string
+ */
+function _color_hex2rgba($rgba, $hex) {
+  $re = <<<EOT
+/rgba\(
+  (?:\d{1,3} \s*?,\s*?){3} # Throw away RGB
+  (\d+(?:\.\d+)?)          # Capture transparency (0 to 1)
+  \s*?
+\)/ix
+EOT
+;
+  preg_match($re,	$rgba, $a);
+  preg_match('/([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i', $hex, $hex2);
+  array_shift($hex2);
+  return 'rgba(' . implode(',', array_map('hexdec', $hex2)) . ",$a[1])";
+}
+
+/*
+ * Convert decimal value up to 255 to 2 digit hex notation
+ */
+function _color_byte2hex($dec) {
+  return str_pad(dechex($dec), 2, '0', STR_PAD_LEFT);
+}
