     .attr("transform", "translate(200, 200)")
 
   redrawBackground = ->
-
-    pairs = _.map hs(L), (hrad) ->
-      C = $.husl._maxChroma L, hrad * 180 / Math.PI
-      return [hrad, C]
-
-    Cs = _.map pairs, (pair) -> pair[1]
-
-    maxC = Math.max Cs...
-    minC = Math.min Cs...
-
-    bounds = getBounds L
-
-    intersections = []
-    for i in getIntersections _.pairs bounds
-      good = true
-      for [name, bound] in _.pairs bounds
-        if name in i.names
-          continue
-        int = intersection2 bound, i.point
-        if int != null
-          good = false
-      if good
-        intersections.push(i)
-
-    cleanBounds = []
-    for {point, names} in intersections
-      cleanBounds = _.union cleanBounds, names
-
-    longest = 0
-    for {point} in intersections
-      length = distanceFromPole point
-      if length > longest
-        longest = length
-
-    scale = 190 / longest
-
-    sortedIntersections = _.pluck sortIntersections(intersections), 'point'
-
-    shape = d3.geom.polygon sortedIntersections
-    if shape.area() < 0
-      sortedIntersections.reverse()
+    if L != 0 and L != 100
+
+      pairs = _.map hs(L), (hrad) ->
+        C = $.husl._maxChroma L, hrad * 180 / Math.PI
+        return [hrad, C]
+
+      Cs = _.map pairs, (pair) -> pair[1]
+
+      maxC = Math.max Cs...
+      minC = Math.min Cs...
+
+      bounds = getBounds L
+
+      intersections = []
+      for i in getIntersections _.pairs bounds
+        good = true
+        for [name, bound] in _.pairs bounds
+          if name in i.names
+            continue
+          int = intersection2 bound, i.point
+          if int != null
+            good = false
+        if good
+          intersections.push(i)
+
+      cleanBounds = []
+      for {point, names} in intersections
+        cleanBounds = _.union cleanBounds, names
+
+      longest = 0
+      for {point} in intersections
+        length = distanceFromPole point
+        if length > longest
+          longest = length
+
+      scale = 190 / longest
+
+      sortedIntersections = _.pluck sortIntersections(intersections), 'point'
+
       shape = d3.geom.polygon sortedIntersections
-
-    contrasting = if L > 70 then '#1b1b1b' else '#ffffff'
-
-    pastelBoundary
-      .attr("r", scale * minC)
-      .attr("stroke", contrasting)
-
-    center
-      .attr("fill", contrasting)
+      if shape.area() < 0
+        sortedIntersections.reverse()
+        shape = d3.geom.polygon sortedIntersections
+
+      contrasting = if L > 70 then '#1b1b1b' else '#ffffff'
+
+      pastelBoundary
+        .attr("r", scale * minC)
+        .attr("stroke", contrasting)
+
+      center
+        .attr("fill", contrasting)
+
+    else
+      pastelBoundary
+        .attr("r", 0)
+        .attr("stroke", contrasting)
+
+      center
+        .attr("fill", contrasting)
+
 
   background.redraw = redrawBackground
 

    redrawSwatch()

sliderLightness = d3.slider()
  .min(1)
  .max(99)
  .on 'slide', (e, value) ->
    L = value
    background.redraw()


  redrawForeground = ->

    if L != 0 and L != 100

      maxChroma = $.husl._maxChroma L, H
      chroma = maxChroma * S / 100
      hrad = H / 360 * 2 * Math.PI

      pickerScope
        .attr("cx", chroma * Math.cos(hrad) * scale)
        .attr("cy", chroma * Math.sin(hrad) * scale)
        .attr("stroke", contrasting)
        .attr("style", "display:inline")

    else

      pickerScope
        .attr("style", "display:none")


    colors = d3.range(0, 360, 10).map (_) -> $.husl.toHex _, S, L
    d3.select("#picker div.control-hue").style {
