       @_setState 'sleeping'
       @_sleepCountdown = setTimeout =>
         @onHide() # Hook in custom logic.
-        @$tip.stop().fadeOut @animations.hide.duration, =>
+        options = _.clone @animations.hide
+        options.done = =>
           @_setState 'asleep'
           deferred.resolve()
+        options.fail = -> deferred.reject()
+        @animator.hide @$tip, options
       , @animations.hide.delay
 
       promise

          delay: 200
        resize:
          delay: 300

  hlf.tip.snap =
    debug: off

        (classNames[key] = "#{pre}#{key}") for key in keys
        classNames.tip = 'js-tip'
        classNames
      # - `animator` by default uses the stock jQuery animation system. If you
      #   want a more performant system, like GreenSock or Velocity, replace
      #   this with a custom implementation.
      animator:
        show: ($el, options) -> $el.stop().fadeIn options
        hide: ($el, options) -> $el.stop().fadeOut options
      # - `animations` are very configurable. Individual animations can be
      #   customized and will default to the base animation settings as needed.
      animations:
        base:
          delay: 0
          duration: 200
          enabled: yes
        show:
          delay: 200
