@import 'config' /*  * Implicit color stop position.  */ pos-in-stops(i, stops)  len = length(stops)  if len - 1 == i  100%  else if i  unit(i / len * 100, '%')  else  0 /*  * Normalize color stops:  *  * - (color pos) -> (pos color)  * - (color) -> (implied-pos color)  *  */ normalize-stops(stops)  stops = clone(stops)  for stop, i in stops  if length(stop) == 1  color = stop[0]  stop[0] = pos-in-stops(i, stops)  stop[1] = color  else if typeof(stop[1]) == 'unit'  pos = stop[1]  stop[1] = stop[0]  stop[0] = pos  stops /*  * Join color stops with the given translation function.  */ join-stops(stops, translate)  str = ''  len = length(stops)  for stop, i in stops  str += ', ' if i  pos = stop[0]  color = stop[1]  str += translate(color, pos)  unquote(str) /*  * Standard color stop.  */ std-stop(color, pos)  '%s %s' % (color pos) /*  * Create a linear gradient with the given start position  * and variable number of color stops.  *  * Examples:  *  * background: linear-gradient(top, red, green, blue)  * background: linear-gradient(bottom, red, green 50%, blue)  * background: linear-gradient(bottom, red, 50% green, blue)  * background: linear-gradient(bottom, red, 50% green, 90% white, blue)  *  */ linear-gradient(start, stops...)  error('color stops required') unless length(stops)  unquote('linear-gradient(' + join(', ',arguments) + ')') /*  * Create a linear gradient image with the given start position  * and variable number of color stops.  */ linear-gradient-image(start, stops...)  error('node-canvas is required for linear-gradient-image()') unless has-canvas  stops = stops[0] if length(stops) == 1  error('gradient image size required') unless start[0] is a 'unit'  size = start[0]  start = start[1] or 'top'  grad = create-gradient-image(size, start)  stops = normalize-stops(stops)  add-color-stop(grad, stop[0], stop[1]) for stop in stops  'url(%s)' % gradient-data-uri(grad)