|  | <!DOCTYPE html> | 
|  | <html> | 
|  | <title>The scroll() timeline source</title> | 
|  | <link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#scroll-notation"> | 
|  | <link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-timeline"> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  |  | 
|  | <style> | 
|  | @keyframes move { | 
|  | to { margin-left: 100px } | 
|  | } | 
|  |  | 
|  | .animated { | 
|  | animation: move 1s linear; | 
|  | } | 
|  |  | 
|  | #default { | 
|  | animation-timeline: scroll(); | 
|  | } | 
|  |  | 
|  | #root { | 
|  | animation-timeline: scroll(root); | 
|  | } | 
|  |  | 
|  | #nearest { | 
|  | animation-timeline: scroll(nearest); | 
|  | } | 
|  | </style> | 
|  |  | 
|  | <div class="animated" id="default"></div> | 
|  | <div class="animated" id="root"></div> | 
|  | <div class="animated" id="nearest"></div> | 
|  |  | 
|  | <script> | 
|  | "use strict"; | 
|  |  | 
|  | const timelineSourceTest = type => { | 
|  | test(() => { | 
|  | const target = document.getElementById(type); | 
|  | const animations = target.getAnimations(); | 
|  | assert_equals(animations.length, 1); | 
|  | assert_equals(animations[0].timeline.source, document.documentElement); | 
|  | }, `CSS animation correctly uses the <html> element as the source for the ${type} scroll() timeline`); | 
|  | }; | 
|  |  | 
|  | timelineSourceTest("default"); | 
|  | timelineSourceTest("root"); | 
|  | timelineSourceTest("nearest"); | 
|  |  | 
|  | </script> |