[css-scroll-snap-1] Test propagation to viewport. https://github.com/w3c/csswg-drafts/issues/3740
diff --git a/css/css-scroll-snap/no-red-ref.html b/css/css-scroll-snap/no-red-ref.html
new file mode 100644
index 0000000..061454f
--- /dev/null
+++ b/css/css-scroll-snap/no-red-ref.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Reference: No Red</title>
+
+<p>Test passes if there is no red.
diff --git a/css/css-scroll-snap/scroll-snap-root-001-ref.html b/css/css-scroll-snap/scroll-snap-root-001-ref.html
new file mode 100644
index 0000000..88f028f
--- /dev/null
+++ b/css/css-scroll-snap/scroll-snap-root-001-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Scroll Snap Reference</title>
+<style>
+html, body { margin: 0; padding: 0; }
+
+:root {
+  overflow: hidden; /* hide scrollbars for reftest analysis */
+}
+
+#target {
+  position: absolute;
+  top: 25%;
+  width: 100%;
+  margin: 25vh 0;
+  border-top: solid blue;
+}
+</style>
+
+<div id="target">
+  <div>Test passes if the blue line above is centered in the viewport.</div>
+</div>
diff --git a/css/css-scroll-snap/scroll-snap-root-001.html b/css/css-scroll-snap/scroll-snap-root-001.html
new file mode 100644
index 0000000..43028cb
--- /dev/null
+++ b/css/css-scroll-snap/scroll-snap-root-001.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+<title>scroll-snap-type + scroll-padding propagates root to viewport</title>
+<link rel='author' title='Elika J. Etemad' href='http://fantasai.inkedblade.net/contact'>
+<link rel='help' href='https://drafts.csswg.org/css-scroll-snap-1/#scroll-snap-type'>
+<link rel='help' href='https://drafts.csswg.org/css-scroll-snap-1/#scroll-padding'>
+<link rel='match' href='scroll-snap-root-001-ref.html'>
+<meta name='assert'
+      content="Test passes if scroll snap properties on root are applied to viewport.">
+
+<style type='text/css'>
+html, body { margin: 0; padding: 0; }
+
+:root {
+  scroll-snap-type: block mandatory;
+  scroll-padding: 25%;
+  overflow: hidden; /* hide scrollbars for reftest analysis */
+}
+
+#fail {
+  font: bold 2em;
+  background: red;
+  height: 120vh;
+  margin-bottom: 60vh;
+}
+
+#target {
+  margin-bottom: 120vh;
+  scroll-margin: 25vh;
+  scroll-snap-align: start;
+  border-top: solid blue;
+}
+</style>
+
+<div id="fail">FAIL</div>
+
+<div id="target">
+  <div>Test passes if the blue line above is centered in the viewport.</div>
+</div>
+
+<script>
+  document.getElementById('target').scrollIntoView();
+</script>
diff --git a/css/css-scroll-snap/scroll-snap-root-002-ref.html b/css/css-scroll-snap/scroll-snap-root-002-ref.html
new file mode 100644
index 0000000..663b02b
--- /dev/null
+++ b/css/css-scroll-snap/scroll-snap-root-002-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Scroll Snap Reference</title>
+
+<style type='text/css'>
+html, body { margin: 0; padding: 0; }
+
+#target {
+  border-bottom: solid orange thick;
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
+
+<div id="target">
+  <div>Test passes if the orange stripe below is exactly at the bottom of the viewport.</div>
+</div>
diff --git a/css/css-scroll-snap/scroll-snap-root-002.html b/css/css-scroll-snap/scroll-snap-root-002.html
new file mode 100644
index 0000000..302c756
--- /dev/null
+++ b/css/css-scroll-snap/scroll-snap-root-002.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<title>scroll-padding does not propagate body to viewport</title>
+<link rel='author' title='Elika J. Etemad' href='http://fantasai.inkedblade.net/contact'>
+<link rel='help' href='https://drafts.csswg.org/css-scroll-snap-1/#scroll-snap-type'>
+<link rel='help' href='https://drafts.csswg.org/css-scroll-snap-1/#scroll-padding'>
+<link rel='match' href='scroll-snap-root-002-ref.html'>
+<meta name='assert'
+      content="Test passes if scroll-snap-padding on body is not applied to viewport.">
+
+<style type='text/css'>
+html, body { margin: 0; padding: 0; }
+
+:root {
+  scroll-snap-type: block mandatory;
+  overflow: hidden; /* hide scrollbars for reftest analysis */
+}
+
+body {
+  scroll-padding: 25%;
+}
+
+#fail {
+  height: 120vh;
+  font: bold 2em;
+  background: red;
+}
+
+#target {
+  margin: 120vh 0;
+  scroll-snap-align: end;
+  border-bottom: solid orange thick;
+}
+</style>
+
+<div id="fail">FAIL</div>
+
+<div id="target">
+  <div>Test passes if the orange stripe below is exactly at the bottom of the viewport.</div>
+</div>
+
+<script>
+  document.getElementById('target').scrollIntoView();
+</script>
diff --git a/css/css-scroll-snap/scroll-snap-root-003.html b/css/css-scroll-snap/scroll-snap-root-003.html
new file mode 100644
index 0000000..fc7b28f
--- /dev/null
+++ b/css/css-scroll-snap/scroll-snap-root-003.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<title>scroll-snap-type does not propagate body to viewport</title>
+<link rel='author' title='Elika J. Etemad' href='http://fantasai.inkedblade.net/contact'>
+<link rel='help' href='https://drafts.csswg.org/css-scroll-snap-1/#scroll-snap-type'>
+<link rel='help' href='https://drafts.csswg.org/css-scroll-snap-1/#scroll-padding'>
+<link rel='match' href='no-red-ref.html'>
+<meta name='assert'
+      content="Test passes if scroll-snap-type on body is not applied to viewport.">
+
+<style type='text/css'>
+:root {
+  overflow: hidden; /* hide scrollbars for reftest analysis */
+}
+
+body {
+  scroll-snap-type: block mandatory;
+}
+
+#pass {
+  height: 120vh;
+}
+
+#target {
+  scroll-snap-align: start;
+  height: 100vh;
+  background: red;
+}
+</style>
+
+<p id="pass">Test passes if there is no red.
+
+<div id="target">
+  <div>FAIL</div>
+</div>