<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html>
<head>
  <style>
  body {
      background: url('resources/Aurora.jpg');
      -webkit-background-size: 100% 100%;
      font-family: "Lucida Grande";
      height: 800px;
  }

  #features {
      position: relative;
      width: 400px;
      list-style: none;
  }

  #features > li > .picture {
      -webkit-transition-property: -webkit-transform;
      -webkit-transition-duration: 100ms;
      -webkit-transition-timing-function: ease-in;
      -webkit-transform: rotate(-5deg);
      opacity: 0.2;
      border: 5px solid white;
      background-color: gray;
      position: absolute;
      left: 20%;
      width: 380px;
      height: 180px;
      top: 30px;
  }

  #features > li.enabled > .picture {
      -webkit-transition-timing-function: ease-out;
      -webkit-transform:rotate(10deg);
  }

  #features > li > .description {
      -webkit-transition-property: -webkit-transform;
      -webkit-transition-duration: 160ms;
      -webkit-transition-timing-function: ease-in;
      line-height: 1.4em;
      position: absolute;
      background-color: black;
      color: white;
      margin: 10px;
      padding: 10px;
      border: 3px solid white;
      -webkit-border-radius: 9px;
      font-size: 16px;
      left: 20%;
      top: 330px;
      width: 350px;
  }

  #features > li.enabled > .description {
      -webkit-transform:translate3d(100px,0,0);
  }
  </style>
  <script>
  if (window.testRunner) {
    testRunner.waitUntilDone();
    testRunner.dumpAsText();
  }

  function init()
  {
      document.getElementById("item").className = "enabled";
      setTimeout(check, 1000);
  }
  
  function log(s)
  {
    var results = document.getElementById('results');
    results.innerHTML += s + '<br>';
  }

  function check()
  {
      var transform = window.getComputedStyle(document.getElementById('description')).webkitTransform;
      if (transform == "matrix(1, 0, 0, 1, 100, 0)")
          log('transform="'+transform+'" as expected: PASS');
        else
        log('transform="'+transform+'", expected "matrix(1, 0, 0, 1, 100, 0)": FAIL');

      if (window.testRunner)
        testRunner.notifyDone();
  }
  </script>
</head>
<body onload="init()">

<ul id="features">
<li id="item">
    <div class="picture"></div>
  <div id="description" class="description">
    <b>Spaces</b> lets you group your application windows and banish
    clutter completely. Leopard gives you a space for everything and
    makes it easy to switch between your spaces. Start by simply
    clicking the Spaces icon in the Dock.
  </div>
</li>
</ul>
<div id="results"></div>
</body>
</html>
