       clearTimeout @_wakeCountdown
       @_sleepCountdown = setTimeout =>
         @onHide()
-        @$tip.stop().fadeOut @ms.duration.out, =>
+        @$tip.stop().fadeOut @animations.hide.duration, =>
           @_setState 'asleep'
           @afterHide()
-      , @ms.delay.out
+      , @animations.hide.delay
       yes
 
     # These methods are hooks for custom functionality from subclasses. Some are

      # - `triggerContent` can be the name of the trigger element's attribute or a
      #   function that provides custom content when given the trigger element.
      triggerContent: null
      # - `ms.duration` are the durations of sleep and wake animations.
      # - `ms.delay` are the delays before sleeping and waking.
      ms:
        duration:
          in: 200
          out: 200
          resize: 300
        delay:
          in: 300
          out: 300
      # - `easing` stores the custom easing for baked-in animation support. The
      #   keys are the same as those of `shouldAnimate` and work if they are
      #   specified, with `base` being the default easing
      easing:
        base: 'ease-in-out'
      # - `shouldAnimate` provides baked-in animation support. The `resize`
      #   animation is like `$.fn.show` but with CSS transitions.
      shouldAnimate:
        resize: on
      # - `cursorHeight` is the browser's cursor height. We need to know this to
      #   properly offset the tip to avoid cases of cursor-tip-stem overlap.
      cursorHeight: 12

    # binding event listeners to triggers, which can improve performance and
    # allow dynamic binding.
    constructor: (@$triggers, options, @$context) ->
      for name, animation of options.animations when name isnt 'base'
        _.defaults animation, options.animations.base

    init: ->
      # Bind handler methods here after class setup completes.
