diff --git a/gtk-3.20/scss/widgets/_choosers.scss b/gtk-3.20/scss/widgets/_choosers.scss
index 661785d..30f6949 100644
--- a/gtk-3.20/scss/widgets/_choosers.scss
+++ b/gtk-3.20/scss/widgets/_choosers.scss
@@ -4,85 +4,144 @@
 
 @include exports("colorchooser") {
     colorswatch {
-        &, &:selected {
-            border: 1px solid alpha($black, .1);
-            border-radius: $roundness - 1px;
-            background-color: transparent;
-            background-clip: border-box;
+        // This widget is made of two boxes one on top of the other, the lower box is colorswatch {} the other one
+        // is colorswatch overlay {}, colorswatch has the programmatically set background, so most of the style is
+        // applied to the overlay box.
 
-            &:hover { border-color: alpha($black, .3); }
-        }
+        &:drop(active), & { border-style: none; } // FIXME: implement a proper drop(active) state
 
-        &.color-light:selected:hover, &.color-dark:selected:hover { background-image: none; }
+        $_colorswatch_radius: $roundness;
 
-        &.left, &:first-child {
-            border-top-left-radius: $roundness;
-            border-bottom-left-radius: $roundness;
-        }
-
-        &.right, &:last-child {
-            border-top-right-radius: $roundness;
-            border-bottom-right-radius: $roundness;
-        }
-
-        &:only-child { border-radius: $roundness; }
+        // base color corners rounding
+        // to avoid the artifacts caused by rounded corner anti-aliasing the base color
+        // sports a bigger radius.
+        // nth-child is needed by the custom color strip.
 
         &.top {
-            border-top-left-radius: $roundness;
-            border-top-right-radius: $roundness;
+            border-top-left-radius: $_colorswatch_radius + .5px;
+            border-top-right-radius: $_colorswatch_radius + .5px;
+
+            overlay {
+                border-top-left-radius: $_colorswatch_radius;
+                border-top-right-radius: $_colorswatch_radius;
+            }
         }
 
         &.bottom {
-            border-bottom-left-radius: $roundness;
-            border-bottom-right-radius: $roundness;
-        }
+            border-bottom-left-radius: $_colorswatch_radius + .5px;
+            border-bottom-right-radius: $_colorswatch_radius + .5px;
 
-        coloreditor & {
-            border-radius: $roundness;
-
-            &.color-dark:hover, &.color-light:hover {
-                background-image: none;
-                border-color: alpha($black, .3);
-            }
-        }
-    }
-
-    GtkColorChooserWidget #add-color-button {
-        background-clip: padding-box;
-        border-color: alpha($black, .1);
-        background-color: shade($bg_color, .95);
-        color: $fg_color;
-
-        &:hover {
-            border-color: alpha($black, .3);
-            background-color: shade($bg_color, .9);
-            color: $fg_color;
-        }
-    }
-
-    .color-active-badge {
-        &, &:selected {
-            border-width: 2px;
-            border-style: solid;
-            background-color: transparent;
-        }
-
-        &.color-light {
-            &, &:hover {
-                border-color: alpha($black, .3);
-                color: alpha($black, .3);
+            overlay {
+                border-bottom-left-radius: $_colorswatch_radius;
+                border-bottom-right-radius: $_colorswatch_radius;
             }
         }
 
-        &.color-dark {
-            &, &:hover {
-                border-color: alpha($white, .3);
-                color: alpha($white, .3);
+        &.left,
+        &:first-child:not(.top) {
+            border-top-left-radius: $_colorswatch_radius + .5px;
+            border-bottom-left-radius: $_colorswatch_radius + .5px;
+
+            overlay {
+                border-top-left-radius: $_colorswatch_radius;
+                border-bottom-left-radius: $_colorswatch_radius;
             }
         }
+
+        &.right,
+        &:last-child:not(.bottom) {
+            border-top-right-radius: $_colorswatch_radius + .5px;
+            border-bottom-right-radius: $_colorswatch_radius + .5px;
+
+            overlay {
+                border-top-right-radius: $_colorswatch_radius;
+                border-bottom-right-radius: $_colorswatch_radius;
+            }
+        }
+
+        &.dark overlay {
+            color: $selected_fg_color;
+
+            &:hover { border-color: if($variant == 'light', transparentize($black, .2), $borders_color); }
+
+            &:backdrop { color: $backdrop_selected_fg_color; }
+        }
+
+        &.light overlay {
+            color: $text_color;
+
+            &:hover { border-color: if($variant == 'light', transparentize($black, .5), $borders_color); }
+
+            &:backdrop { color: $backdrop_text_color; }
+        }
+
+        &:drop(active) {
+            box-shadow: none;
+
+            &.light overlay {
+                border-color: $drop_target_color;
+                box-shadow: inset 0 0 0 2px if($variant == 'light', darken($drop_target_color, 7%), $borders_color),
+                            inset 0 0 0 1px $drop_target_color;
+            }
+
+            &.dark overlay {
+                border-color: $drop_target_color;
+                box-shadow: inset 0 0 0 2px if($variant == 'light', transparentize($black, .7), $borders_color),
+                            inset 0 0 0 1px $drop_target_color;
+            }
+        }
+
+        overlay {
+            border: 1px solid if($variant == 'light', transparentize($black, .7), $borders_color);
+
+            &:hover {
+                box-shadow: inset 0 1px transparentize($white, .6),
+                            inset 0 -1px transparentize($black, .8);
+            }
+
+            &:backdrop,
+            &:backdrop:hover {
+                border-color: if($variant == 'light', transparentize($black, .7), $borders_color);
+                box-shadow: none;
+            }
+        }
+
+        &:disabled {
+            opacity: .5;
+
+            overlay {
+                border-color: transparentize($black, .4);
+                box-shadow: none;
+            }
+        }
+
+        row:selected & { box-shadow: 0 0 0 2px $selected_fg_color; }
+
+        &#add-color-button {
+            border-radius: $_colorswatch_radius $_colorswatch_radius 0 0;
+
+            &:only-child { border-radius: $_colorswatch_radius; }
+
+            overlay {
+                background-color: shade($bg_color, .95);
+                color: $fg_color;
+
+                &:hover { background-color: shade($bg_color, .9); }
+
+                &:backdrop { background-color: shade($backdrop_bg_color, .95); }
+            }
+        }
+
+        &#editor-color-sample {
+            border-radius: $_colorswatch_radius;
+
+            overlay { border-radius: $_colorswatch_radius + .5px; }
+       }
     }
 
-    GtkColorButton.button { padding: $spacing; }
+    button.color { padding: $spacing; }
+
+    colorchooser .popover.osd { border-radius: $roundness; }
 }