godoc: use relative css unit

To scale the website elements independently of the default font size,
we use the css rem unit. This scales the elements proportionally if the
user has set a different font size than the default.

We make all calculations assuming that 1rem=16px, which is the
default font size for browsers.

Tested manually on FF 59 and Chrome 65 with permutations of different
resolutions and different default font-sizes upto 36px.

Fixes golang/go#6150

Change-Id: I7ded227ee2c55178271667009ab98ee0b4e7e8b3
Reviewed-on: https://go-review.googlesource.com/94935
Run-TryBot: Andrew Bonventre <andybons@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/godoc/static/static.go b/godoc/static/static.go
index 3c3d85b..ee9ae25 100644
--- a/godoc/static/static.go
+++ b/godoc/static/static.go
@@ -3004,17 +3004,18 @@
 	"style.css": `body {
 	margin: 0;
 	font-family: Arial, sans-serif;
-	font-size: 16px;
 	background-color: #fff;
-	line-height: 1.3em;
+	line-height: 1.3;
+	text-align: center;
+	color: #222;
 }
 pre,
 code {
 	font-family: Menlo, monospace;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 pre {
-	line-height: 1.4em;
+	line-height: 1.4;
 	overflow-x: auto;
 }
 pre .comment {
@@ -3041,9 +3042,6 @@
 	user-select: none;
 }
 
-body {
-	color: #222;
-}
 a,
 .exampleHeading .text {
 	color: #375EAB;
@@ -3068,22 +3066,22 @@
 }
 
 p, li {
-	max-width: 800px;
+	max-width: 50rem;
 	word-wrap: break-word;
 }
 p,
 pre,
 ul,
 ol {
-	margin: 20px;
+	margin: 1.25rem;
 }
 pre {
 	background: #EFEFEF;
-	padding: 10px;
+	padding: 0.625rem;
 
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
+	-webkit-border-radius: 0.3125rem;
+	-moz-border-radius: 0.3125rem;
+	border-radius: 0.3125rem;
 }
 
 h1,
@@ -3091,22 +3089,22 @@
 h3,
 h4,
 .rootHeading {
-	margin: 20px 0 20px;
+	margin: 1.25rem 0 1.25rem;
 	padding: 0;
 	color: #375EAB;
 	font-weight: bold;
 }
 h1 {
-	font-size: 28px;
+	font-size: 1.75rem;
 	line-height: 1;
 }
 h1 .text-muted {
 	color:#777;
 }
 h2 {
-	font-size: 20px;
+	font-size: 1.25rem;
 	background: #E0EBF5;
-	padding: 8px;
+	padding: 0.5rem;
 	line-height: 1.25;
 	font-weight: normal;
 }
@@ -3114,47 +3112,46 @@
 	font-weight: bold;
 }
 h3 {
-	font-size: 20px;
+	font-size: 1.25rem;
 }
 h3,
 h4 {
-	margin: 20px 5px;
+	margin: 1.25rem 0.3125rem;
 }
 h4 {
-	font-size: 16px;
+	font-size: 1rem;
 }
 .rootHeading {
-	font-size: 20px;
+	font-size: 1.25rem;
 	margin: 0;
 }
 
 dl {
-	margin: 20px;
+	margin: 1.25rem;
 }
 dd {
-	margin: 0 0 0 20px;
+	margin: 0 0 0 1.25rem;
 }
 dl,
 dd {
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div#nav table td {
 	vertical-align: top;
 }
 
-
 #pkg-index h3 {
-	font-size: 16px;
+	font-size: 1rem;
 }
 .pkg-dir {
-	padding: 0 10px;
+	padding: 0 0.625rem;
 }
 .pkg-dir table {
 	border-collapse: collapse;
 	border-spacing: 0;
 }
 .pkg-name {
-	padding-right: 10px;
+	padding-right: 0.625rem;
 }
 .alert {
 	color: #AA0000;
@@ -3162,8 +3159,8 @@
 
 .top-heading {
 	float: left;
-	padding: 21px 0;
-	font-size: 20px;
+	padding: 1.313rem 0;
+	font-size: 1.25rem;
 	font-weight: normal;
 }
 .top-heading a {
@@ -3173,13 +3170,10 @@
 
 div#topbar {
 	background: #E0EBF5;
-	height: 64px;
+	height: 4rem;
 	overflow: hidden;
 }
 
-body {
-	text-align: center;
-}
 div#page {
 	width: 100%;
 }
@@ -3188,11 +3182,11 @@
 	text-align: left;
 	margin-left: auto;
 	margin-right: auto;
-	padding: 0 20px;
+	padding: 0 1.25rem;
 }
 div#topbar > .container,
 div#page > .container {
-	max-width: 950px;
+	max-width: 59.38rem;
 }
 div#page.wide > .container,
 div#topbar.wide > .container {
@@ -3201,14 +3195,14 @@
 div#plusone {
 	float: right;
 	clear: right;
-	margin-top: 5px;
+	margin-top: 0.3125rem;
 }
 
 div#footer {
 	text-align: center;
 	color: #666;
-	font-size: 14px;
-	margin: 40px 0;
+	font-size: 0.875rem;
+	margin: 2.5rem 0;
 }
 
 div#menu > a,
@@ -3217,20 +3211,20 @@
 div.play .buttons a,
 div#blog .read a,
 #menu-button {
-	padding: 10px;
+	padding: 0.625rem;
 
 	text-decoration: none;
-	font-size: 16px;
+	font-size: 1rem;
 
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
+	-webkit-border-radius: 0.3125rem;
+	-moz-border-radius: 0.3125rem;
+	border-radius: 0.3125rem;
 }
 div#playground .buttons a,
 div#menu > a,
 input#search,
 #menu-button {
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 }
 div#playground .buttons a,
 div#menu > a,
@@ -3247,16 +3241,16 @@
 div.play .buttons a,
 div#blog .read a {
 	color: #222;
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 	background: #E0EBF5;
 }
 .download {
-	width: 150px;
+	width: 9.375rem;
 }
 
 div#menu {
 	text-align: right;
-	padding: 10px;
+	padding: 0.625rem;
 	white-space: nowrap;
 	max-height: 0;
 	-moz-transition: max-height .25s linear;
@@ -3264,12 +3258,12 @@
 	width: 100%;
 }
 div#menu.menu-visible {
-	max-height: 500px;
+	max-height: 31.25rem;
 }
 div#menu > a,
 #menu-button {
-	margin: 10px 2px;
-	padding: 10px;
+	margin: 0.625rem 0.125rem;
+	padding: 0.625rem;
 }
 ::-webkit-input-placeholder {
 	color: #7f7f7f;
@@ -3281,7 +3275,7 @@
 }
 #menu .search-box {
 	display: inline-flex;
-	width: 140px;
+	width: 8.75rem;
 }
 input#search {
 	background: white;
@@ -3294,7 +3288,7 @@
 	margin-right: 0;
 	flex-grow: 1;
 	max-width: 100%;
-	min-width: 90px;
+	min-width: 5.625rem;
 }
 input#search:-moz-ui-invalid {
 	box-shadow: unset;
@@ -3304,11 +3298,11 @@
 	font-size: 1em;
 	background-color: #375EAB;
 	color: white;
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 	border-top-left-radius: 0;
-	border-top-right-radius: 5px;
+	border-top-right-radius: 0.3125rem;
 	border-bottom-left-radius: 0;
-	border-bottom-right-radius: 5px;
+	border-bottom-right-radius: 0.3125rem;
 	margin-left: 0;
 	cursor: pointer;
 }
@@ -3322,9 +3316,9 @@
 #menu-button {
 	display: none;
 	position: absolute;
-	right: 5px;
+	right: 0.3125rem;
 	top: 0;
-	margin-right: 5px;
+	margin-right: 0.3125rem;
 }
 #menu-button-arrow {
 	display: inline-block;
@@ -3350,71 +3344,72 @@
 
 div#learn,
 div#about {
-	padding-top: 20px;
+	padding-top: 1.25rem;
 }
 div#learn h2,
 div#about {
 	margin: 0;
 }
 div#about {
-	font-size: 20px;
-	margin: 0 auto 30px;
+	font-size: 1.25rem;
+	margin: 0 auto 1.875rem;
 }
 div#gopher {
 	background: url(/doc/gopher/frontpage.png) no-repeat;
 	background-position: center top;
-	height: 155px;
+	height: 9.688rem;
+	max-height: 200px; /* Setting in px to prevent the gopher from blowing up in very high default font-sizes */
 }
 a#start {
 	display: block;
-	padding: 10px;
+	padding: 0.625rem;
 
 	text-align: center;
 	text-decoration: none;
 
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
+	-webkit-border-radius: 0.3125rem;
+	-moz-border-radius: 0.3125rem;
+	border-radius: 0.3125rem;
 }
 a#start .big {
 	display: block;
 	font-weight: bold;
-	font-size: 20px;
+	font-size: 1.25rem;
 }
 a#start .desc {
 	display: block;
-	font-size: 14px;
+	font-size: 0.875rem;
 	font-weight: normal;
-	margin-top: 5px;
+	margin-top: 0.3125rem;
 }
 
 div#learn .popout {
 	float: right;
 	display: block;
 	cursor: pointer;
-	font-size: 12px;
+	font-size: 0.75rem;
 	background: url(/doc/share.png) no-repeat;
-	background-position: right top;
-	padding: 5px 27px;
+	background-position: right center;
+	padding: 0.375rem 1.688rem;
 }
 div#learn pre,
 div#learn textarea {
 	padding: 0;
 	margin: 0;
 	font-family: Menlo, monospace;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div#learn .input {
-	padding: 10px;
-	margin-top: 10px;
-	height: 150px;
+	padding: 0.625rem;
+	margin-top: 0.625rem;
+	height: 9.375rem;
 
-	-webkit-border-top-left-radius: 5px;
-	-webkit-border-top-right-radius: 5px;
-	-moz-border-radius-topleft: 5px;
-	-moz-border-radius-topright: 5px;
-	border-top-left-radius: 5px;
-	border-top-right-radius: 5px;
+	-webkit-border-top-left-radius: 0.3125rem;
+	-webkit-border-top-right-radius: 0.3125rem;
+	-moz-border-radius-topleft: 0.3125rem;
+	-moz-border-radius-topright: 0.3125rem;
+	border-top-left-radius: 0.3125rem;
+	border-top-right-radius: 0.3125rem;
 }
 div#learn .input textarea {
 	width: 100%;
@@ -3426,16 +3421,16 @@
 div#learn .output {
 	border-top: none !important;
 
-	padding: 10px;
-	height: 59px;
+	padding: 0.625rem;
+	height: 3.688rem;
 	overflow: auto;
 
-	-webkit-border-bottom-right-radius: 5px;
-	-webkit-border-bottom-left-radius: 5px;
-	-moz-border-radius-bottomright: 5px;
-	-moz-border-radius-bottomleft: 5px;
-	border-bottom-right-radius: 5px;
-	border-bottom-left-radius: 5px;
+	-webkit-border-bottom-right-radius: 0.3125rem;
+	-webkit-border-bottom-left-radius: 0.3125rem;
+	-moz-border-radius-bottomright: 0.3125rem;
+	-moz-border-radius-bottomleft: 0.3125rem;
+	border-bottom-right-radius: 0.3125rem;
+	border-bottom-left-radius: 0.3125rem;
 }
 div#learn .output pre {
 	padding: 0;
@@ -3452,23 +3447,24 @@
 }
 div#learn .input,
 div#learn .output {
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 }
 div#learn .buttons {
 	float: right;
-	padding: 20px 0 10px 0;
+	padding: 1.25rem 0 0.625rem 0;
 	text-align: right;
 }
 div#learn .buttons a {
-	height: 16px;
-	margin-left: 5px;
-	padding: 10px;
+	height: 1rem;
+	margin-left: 0.3125rem;
+	padding: 0.625rem;
 }
 div#learn .toys {
-	margin-top: 8px;
+	margin-top: 0.5rem;
 }
 div#learn .toys select {
-	border: 1px solid #375EAB;
+	font-size: 0.875rem;
+	border: 0.0625rem solid #375EAB;
 	margin: 0;
 }
 div#learn .output .exit {
@@ -3480,7 +3476,7 @@
 }
 div#blog,
 div#video {
-	margin-top: 40px;
+	margin-top: 2.5rem;
 }
 div#blog > a,
 div#blog > div,
@@ -3488,16 +3484,16 @@
 div#video > a,
 div#video > div,
 div#video > h2 {
-	margin-bottom: 10px;
+	margin-bottom: 0.625rem;
 }
 div#blog .title,
 div#video .title {
 	display: block;
-	font-size: 20px;
+	font-size: 1.25rem;
 }
 div#blog .when {
 	color: #666;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div#blog .read {
 	text-align: right;
@@ -3510,20 +3506,20 @@
 .toggleVisible > .expanded { display: block; }
 
 table.codetable { margin-left: auto; margin-right: auto; border-style: none; }
-table.codetable td { padding-right: 10px; }
-hr { border-style: none; border-top: 1px solid black; }
+table.codetable td { padding-right: 0.625rem; }
+hr { border-style: none; border-top: 0.0625rem solid black; }
 
 img.gopher {
 	float: right;
-	margin-left: 10px;
-	margin-bottom: 10px;
+	margin-left: 0.625rem;
+	margin-bottom: 0.625rem;
 	z-index: -1;
 }
 h2 { clear: right; }
 
 /* example and drop-down playground */
 div.play {
-	padding: 0 20px 40px 20px;
+	padding: 0 1.25rem 2.5rem 1.25rem;
 }
 div.play pre,
 div.play textarea,
@@ -3531,18 +3527,18 @@
 	padding: 0;
 	margin: 0;
 	font-family: Menlo, monospace;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div.play .input {
-	padding: 10px;
-	margin-top: 10px;
+	padding: 0.625rem;
+	margin-top: 0.625rem;
 
-	-webkit-border-top-left-radius: 5px;
-	-webkit-border-top-right-radius: 5px;
-	-moz-border-radius-topleft: 5px;
-	-moz-border-radius-topright: 5px;
-	border-top-left-radius: 5px;
-	border-top-right-radius: 5px;
+	-webkit-border-top-left-radius: 0.3125rem;
+	-webkit-border-top-right-radius: 0.3125rem;
+	-moz-border-radius-topleft: 0.3125rem;
+	-moz-border-radius-topright: 0.3125rem;
+	border-top-left-radius: 0.3125rem;
+	border-top-right-radius: 0.3125rem;
 
 	overflow: hidden;
 }
@@ -3562,16 +3558,16 @@
 div.play .output {
 	border-top: none !important;
 
-	padding: 10px;
-	max-height: 200px;
+	padding: 0.625rem;
+	max-height: 12.5rem;
 	overflow: auto;
 
-	-webkit-border-bottom-right-radius: 5px;
-	-webkit-border-bottom-left-radius: 5px;
-	-moz-border-radius-bottomright: 5px;
-	-moz-border-radius-bottomleft: 5px;
-	border-bottom-right-radius: 5px;
-	border-bottom-left-radius: 5px;
+	-webkit-border-bottom-right-radius: 0.3125rem;
+	-webkit-border-bottom-left-radius: 0.3125rem;
+	-moz-border-radius-bottomright: 0.3125rem;
+	-moz-border-radius-bottomleft: 0.3125rem;
+	border-bottom-right-radius: 0.3125rem;
+	border-bottom-left-radius: 0.3125rem;
 }
 div.play .output pre {
 	padding: 0;
@@ -3588,17 +3584,17 @@
 }
 div.play .input,
 div.play .output {
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 }
 div.play .buttons {
 	float: right;
-	padding: 20px 0 10px 0;
+	padding: 1.25rem 0 0.625rem 0;
 	text-align: right;
 }
 div.play .buttons a {
-	height: 16px;
-	margin-left: 5px;
-	padding: 10px;
+	height: 1rem;
+	margin-left: 0.3125rem;
+	padding: 0.625rem;
 	cursor: pointer;
 }
 .output .stderr {
@@ -3616,29 +3612,29 @@
 }
 div#playground {
 	position: absolute;
-	top: 63px;
-	right: 20px;
-	padding: 0 10px 10px 10px;
+	top: 3.938rem;
+	right: 1.25rem;
+	padding: 0 0.625rem 0.625rem 0.625rem;
 	z-index: 1;
 	text-align: left;
 	background: #E0EBF5;
 
-	border: 1px solid #B0BBC5;
+	border: 0.0625rem solid #B0BBC5;
 	border-top: none;
 
-	-webkit-border-bottom-left-radius: 5px;
-	-webkit-border-bottom-right-radius: 5px;
-	-moz-border-radius-bottomleft: 5px;
-	-moz-border-radius-bottomright: 5px;
-	border-bottom-left-radius: 5px;
-	border-bottom-right-radius: 5px;
+	-webkit-border-bottom-left-radius: 0.3125rem;
+	-webkit-border-bottom-right-radius: 0.3125rem;
+	-moz-border-radius-bottomleft: 0.3125rem;
+	-moz-border-radius-bottomright: 0.3125rem;
+	border-bottom-left-radius: 0.3125rem;
+	border-bottom-right-radius: 0.3125rem;
 }
 div#playground .code {
-	width: 520px;
-	height: 200px;
+	width: 32.5rem;
+	height: 12.5rem;
 }
 div#playground .output {
-	height: 100px;
+	height: 6.25rem;
 }
 
 /* Inline runnable snippets (play.js/initPlayground) */
@@ -3647,7 +3643,7 @@
         padding: 0;
         background: none;
         border: none;
-	outline: 0px solid transparent;
+	outline: 0 solid transparent;
         overflow: auto;
 }
 #content .playground .number, #content .code .number {
@@ -3655,11 +3651,11 @@
 }
 #content .code, #content .playground, #content .output {
 	width: auto;
-        margin: 20px;
-        padding: 10px;
-        -webkit-border-radius: 5px;
-        -moz-border-radius: 5px;
-        border-radius: 5px;
+        margin: 1.25rem;
+        padding: 0.625rem;
+        -webkit-border-radius: 0.3125rem;
+        -moz-border-radius: 0.3125rem;
+        border-radius: 0.3125rem;
 }
 #content .code, #content .playground {
         background: #e9e9e9;
@@ -3679,11 +3675,11 @@
 #content .buttons {
         position: relative;
         float: right;
-        top: -50px;
-        right: 30px;
+        top: -3.125rem;
+        right: 1.875rem;
 }
 #content .output .buttons {
-        top: -60px;
+        top: -3.75rem;
         right: 0;
         height: 0;
 }
@@ -3695,11 +3691,11 @@
 	font-weight: bold;
         color: white;
 	background-color: darkred;
-        border-bottom-left-radius: 4px;
-        border-bottom-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        padding: 2px 4px 2px 4px; /* TRBL */
+        border-bottom-left-radius: 0.25rem;
+        border-bottom-right-radius: 0.25rem;
+        border-top-left-radius: 0.25rem;
+        border-top-right-radius: 0.25rem;
+        padding: 0.125rem 0.25rem 0.125rem 0.25rem; /* TRBL */
 }
 
 
@@ -3709,12 +3705,12 @@
 
 .downloading {
 	background: #F9F9BE;
-	padding: 10px;
+	padding: 0.625rem;
 	text-align: center;
-	border-radius: 5px;
+	border-radius: 0.3125rem;
 }
 
-@media (max-width: 930px) {
+@media (max-width: 58.125em) {
 	#heading-wide {
 		display: none;
 	}
@@ -3723,8 +3719,7 @@
 	}
 }
 
-
-@media (max-width: 760px) {
+@media (max-width: 47.5em) {
 	.container .left,
 	.container .right {
 		width: auto;
@@ -3732,39 +3727,39 @@
 	}
 
 	div#about {
-		max-width: 500px;
+		max-width: 31.25rem;
 		text-align: center;
 	}
 }
 
-@media (min-width: 700px) and (max-width: 1000px) {
+@media (min-width: 43.75em) and (max-width: 62.5em) {
 	div#menu > a {
-		margin: 5px 0;
-		font-size: 14px;
+		margin: 0.3125rem 0;
+		font-size: 0.875rem;
 	}
 
 	input#search {
-		font-size: 14px;
+		font-size: 0.875rem;
 	}
 }
 
-@media (max-width: 700px) {
+@media (max-width: 43.75em) {
 	body {
-		font-size: 15px;
+		font-size: 0.9375rem;
 	}
 
 	pre,
 	code {
-		font-size: 13px;
+		font-size: 0.866rem;
 	}
 
 	div#page > .container {
-		padding: 0 10px;
+		padding: 0 0.625rem;
 	}
 
 	div#topbar {
 		height: auto;
-		padding: 10px;
+		padding: 0.625rem;
 	}
 
 	div#topbar > .container {
@@ -3781,7 +3776,7 @@
 	.top-heading {
 		float: none;
 		display: inline-block;
-		padding: 12px;
+		padding: 0.75rem;
 	}
 
 	div#menu {
@@ -3810,7 +3805,7 @@
 	pre,
 	ul,
 	ol {
-		margin: 10px;
+		margin: 0.625rem;
 	}
 
 	.pkg-synopsis {
@@ -3822,7 +3817,7 @@
 	}
 }
 
-@media (max-width: 480px) {
+@media (max-width: 30em) {
 	#heading-wide {
 		display: none;
 	}
@@ -3834,7 +3829,7 @@
 @media print {
 	pre {
 		background: #FFF;
-		border: 1px solid #BBB;
+		border: 0.0625rem solid #BBB;
 		white-space: pre-wrap;
 	}
 }
diff --git a/godoc/static/style.css b/godoc/static/style.css
index 79989ee..e406536 100644
--- a/godoc/static/style.css
+++ b/godoc/static/style.css
@@ -1,17 +1,18 @@
 body {
 	margin: 0;
 	font-family: Arial, sans-serif;
-	font-size: 16px;
 	background-color: #fff;
-	line-height: 1.3em;
+	line-height: 1.3;
+	text-align: center;
+	color: #222;
 }
 pre,
 code {
 	font-family: Menlo, monospace;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 pre {
-	line-height: 1.4em;
+	line-height: 1.4;
 	overflow-x: auto;
 }
 pre .comment {
@@ -38,9 +39,6 @@
 	user-select: none;
 }
 
-body {
-	color: #222;
-}
 a,
 .exampleHeading .text {
 	color: #375EAB;
@@ -65,22 +63,22 @@
 }
 
 p, li {
-	max-width: 800px;
+	max-width: 50rem;
 	word-wrap: break-word;
 }
 p,
 pre,
 ul,
 ol {
-	margin: 20px;
+	margin: 1.25rem;
 }
 pre {
 	background: #EFEFEF;
-	padding: 10px;
+	padding: 0.625rem;
 
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
+	-webkit-border-radius: 0.3125rem;
+	-moz-border-radius: 0.3125rem;
+	border-radius: 0.3125rem;
 }
 
 h1,
@@ -88,22 +86,22 @@
 h3,
 h4,
 .rootHeading {
-	margin: 20px 0 20px;
+	margin: 1.25rem 0 1.25rem;
 	padding: 0;
 	color: #375EAB;
 	font-weight: bold;
 }
 h1 {
-	font-size: 28px;
+	font-size: 1.75rem;
 	line-height: 1;
 }
 h1 .text-muted {
 	color:#777;
 }
 h2 {
-	font-size: 20px;
+	font-size: 1.25rem;
 	background: #E0EBF5;
-	padding: 8px;
+	padding: 0.5rem;
 	line-height: 1.25;
 	font-weight: normal;
 }
@@ -111,47 +109,46 @@
 	font-weight: bold;
 }
 h3 {
-	font-size: 20px;
+	font-size: 1.25rem;
 }
 h3,
 h4 {
-	margin: 20px 5px;
+	margin: 1.25rem 0.3125rem;
 }
 h4 {
-	font-size: 16px;
+	font-size: 1rem;
 }
 .rootHeading {
-	font-size: 20px;
+	font-size: 1.25rem;
 	margin: 0;
 }
 
 dl {
-	margin: 20px;
+	margin: 1.25rem;
 }
 dd {
-	margin: 0 0 0 20px;
+	margin: 0 0 0 1.25rem;
 }
 dl,
 dd {
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div#nav table td {
 	vertical-align: top;
 }
 
-
 #pkg-index h3 {
-	font-size: 16px;
+	font-size: 1rem;
 }
 .pkg-dir {
-	padding: 0 10px;
+	padding: 0 0.625rem;
 }
 .pkg-dir table {
 	border-collapse: collapse;
 	border-spacing: 0;
 }
 .pkg-name {
-	padding-right: 10px;
+	padding-right: 0.625rem;
 }
 .alert {
 	color: #AA0000;
@@ -159,8 +156,8 @@
 
 .top-heading {
 	float: left;
-	padding: 21px 0;
-	font-size: 20px;
+	padding: 1.313rem 0;
+	font-size: 1.25rem;
 	font-weight: normal;
 }
 .top-heading a {
@@ -170,13 +167,10 @@
 
 div#topbar {
 	background: #E0EBF5;
-	height: 64px;
+	height: 4rem;
 	overflow: hidden;
 }
 
-body {
-	text-align: center;
-}
 div#page {
 	width: 100%;
 }
@@ -185,11 +179,11 @@
 	text-align: left;
 	margin-left: auto;
 	margin-right: auto;
-	padding: 0 20px;
+	padding: 0 1.25rem;
 }
 div#topbar > .container,
 div#page > .container {
-	max-width: 950px;
+	max-width: 59.38rem;
 }
 div#page.wide > .container,
 div#topbar.wide > .container {
@@ -198,14 +192,14 @@
 div#plusone {
 	float: right;
 	clear: right;
-	margin-top: 5px;
+	margin-top: 0.3125rem;
 }
 
 div#footer {
 	text-align: center;
 	color: #666;
-	font-size: 14px;
-	margin: 40px 0;
+	font-size: 0.875rem;
+	margin: 2.5rem 0;
 }
 
 div#menu > a,
@@ -214,20 +208,20 @@
 div.play .buttons a,
 div#blog .read a,
 #menu-button {
-	padding: 10px;
+	padding: 0.625rem;
 
 	text-decoration: none;
-	font-size: 16px;
+	font-size: 1rem;
 
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
+	-webkit-border-radius: 0.3125rem;
+	-moz-border-radius: 0.3125rem;
+	border-radius: 0.3125rem;
 }
 div#playground .buttons a,
 div#menu > a,
 input#search,
 #menu-button {
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 }
 div#playground .buttons a,
 div#menu > a,
@@ -244,16 +238,16 @@
 div.play .buttons a,
 div#blog .read a {
 	color: #222;
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 	background: #E0EBF5;
 }
 .download {
-	width: 150px;
+	width: 9.375rem;
 }
 
 div#menu {
 	text-align: right;
-	padding: 10px;
+	padding: 0.625rem;
 	white-space: nowrap;
 	max-height: 0;
 	-moz-transition: max-height .25s linear;
@@ -261,12 +255,12 @@
 	width: 100%;
 }
 div#menu.menu-visible {
-	max-height: 500px;
+	max-height: 31.25rem;
 }
 div#menu > a,
 #menu-button {
-	margin: 10px 2px;
-	padding: 10px;
+	margin: 0.625rem 0.125rem;
+	padding: 0.625rem;
 }
 ::-webkit-input-placeholder {
 	color: #7f7f7f;
@@ -278,7 +272,7 @@
 }
 #menu .search-box {
 	display: inline-flex;
-	width: 140px;
+	width: 8.75rem;
 }
 input#search {
 	background: white;
@@ -291,7 +285,7 @@
 	margin-right: 0;
 	flex-grow: 1;
 	max-width: 100%;
-	min-width: 90px;
+	min-width: 5.625rem;
 }
 input#search:-moz-ui-invalid {
 	box-shadow: unset;
@@ -301,11 +295,11 @@
 	font-size: 1em;
 	background-color: #375EAB;
 	color: white;
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 	border-top-left-radius: 0;
-	border-top-right-radius: 5px;
+	border-top-right-radius: 0.3125rem;
 	border-bottom-left-radius: 0;
-	border-bottom-right-radius: 5px;
+	border-bottom-right-radius: 0.3125rem;
 	margin-left: 0;
 	cursor: pointer;
 }
@@ -319,9 +313,9 @@
 #menu-button {
 	display: none;
 	position: absolute;
-	right: 5px;
+	right: 0.3125rem;
 	top: 0;
-	margin-right: 5px;
+	margin-right: 0.3125rem;
 }
 #menu-button-arrow {
 	display: inline-block;
@@ -347,71 +341,72 @@
 
 div#learn,
 div#about {
-	padding-top: 20px;
+	padding-top: 1.25rem;
 }
 div#learn h2,
 div#about {
 	margin: 0;
 }
 div#about {
-	font-size: 20px;
-	margin: 0 auto 30px;
+	font-size: 1.25rem;
+	margin: 0 auto 1.875rem;
 }
 div#gopher {
 	background: url(/doc/gopher/frontpage.png) no-repeat;
 	background-position: center top;
-	height: 155px;
+	height: 9.688rem;
+	max-height: 200px; /* Setting in px to prevent the gopher from blowing up in very high default font-sizes */
 }
 a#start {
 	display: block;
-	padding: 10px;
+	padding: 0.625rem;
 
 	text-align: center;
 	text-decoration: none;
 
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
+	-webkit-border-radius: 0.3125rem;
+	-moz-border-radius: 0.3125rem;
+	border-radius: 0.3125rem;
 }
 a#start .big {
 	display: block;
 	font-weight: bold;
-	font-size: 20px;
+	font-size: 1.25rem;
 }
 a#start .desc {
 	display: block;
-	font-size: 14px;
+	font-size: 0.875rem;
 	font-weight: normal;
-	margin-top: 5px;
+	margin-top: 0.3125rem;
 }
 
 div#learn .popout {
 	float: right;
 	display: block;
 	cursor: pointer;
-	font-size: 12px;
+	font-size: 0.75rem;
 	background: url(/doc/share.png) no-repeat;
-	background-position: right top;
-	padding: 5px 27px;
+	background-position: right center;
+	padding: 0.375rem 1.688rem;
 }
 div#learn pre,
 div#learn textarea {
 	padding: 0;
 	margin: 0;
 	font-family: Menlo, monospace;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div#learn .input {
-	padding: 10px;
-	margin-top: 10px;
-	height: 150px;
+	padding: 0.625rem;
+	margin-top: 0.625rem;
+	height: 9.375rem;
 
-	-webkit-border-top-left-radius: 5px;
-	-webkit-border-top-right-radius: 5px;
-	-moz-border-radius-topleft: 5px;
-	-moz-border-radius-topright: 5px;
-	border-top-left-radius: 5px;
-	border-top-right-radius: 5px;
+	-webkit-border-top-left-radius: 0.3125rem;
+	-webkit-border-top-right-radius: 0.3125rem;
+	-moz-border-radius-topleft: 0.3125rem;
+	-moz-border-radius-topright: 0.3125rem;
+	border-top-left-radius: 0.3125rem;
+	border-top-right-radius: 0.3125rem;
 }
 div#learn .input textarea {
 	width: 100%;
@@ -423,16 +418,16 @@
 div#learn .output {
 	border-top: none !important;
 
-	padding: 10px;
-	height: 59px;
+	padding: 0.625rem;
+	height: 3.688rem;
 	overflow: auto;
 
-	-webkit-border-bottom-right-radius: 5px;
-	-webkit-border-bottom-left-radius: 5px;
-	-moz-border-radius-bottomright: 5px;
-	-moz-border-radius-bottomleft: 5px;
-	border-bottom-right-radius: 5px;
-	border-bottom-left-radius: 5px;
+	-webkit-border-bottom-right-radius: 0.3125rem;
+	-webkit-border-bottom-left-radius: 0.3125rem;
+	-moz-border-radius-bottomright: 0.3125rem;
+	-moz-border-radius-bottomleft: 0.3125rem;
+	border-bottom-right-radius: 0.3125rem;
+	border-bottom-left-radius: 0.3125rem;
 }
 div#learn .output pre {
 	padding: 0;
@@ -449,23 +444,24 @@
 }
 div#learn .input,
 div#learn .output {
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 }
 div#learn .buttons {
 	float: right;
-	padding: 20px 0 10px 0;
+	padding: 1.25rem 0 0.625rem 0;
 	text-align: right;
 }
 div#learn .buttons a {
-	height: 16px;
-	margin-left: 5px;
-	padding: 10px;
+	height: 1rem;
+	margin-left: 0.3125rem;
+	padding: 0.625rem;
 }
 div#learn .toys {
-	margin-top: 8px;
+	margin-top: 0.5rem;
 }
 div#learn .toys select {
-	border: 1px solid #375EAB;
+	font-size: 0.875rem;
+	border: 0.0625rem solid #375EAB;
 	margin: 0;
 }
 div#learn .output .exit {
@@ -477,7 +473,7 @@
 }
 div#blog,
 div#video {
-	margin-top: 40px;
+	margin-top: 2.5rem;
 }
 div#blog > a,
 div#blog > div,
@@ -485,16 +481,16 @@
 div#video > a,
 div#video > div,
 div#video > h2 {
-	margin-bottom: 10px;
+	margin-bottom: 0.625rem;
 }
 div#blog .title,
 div#video .title {
 	display: block;
-	font-size: 20px;
+	font-size: 1.25rem;
 }
 div#blog .when {
 	color: #666;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div#blog .read {
 	text-align: right;
@@ -507,20 +503,20 @@
 .toggleVisible > .expanded { display: block; }
 
 table.codetable { margin-left: auto; margin-right: auto; border-style: none; }
-table.codetable td { padding-right: 10px; }
-hr { border-style: none; border-top: 1px solid black; }
+table.codetable td { padding-right: 0.625rem; }
+hr { border-style: none; border-top: 0.0625rem solid black; }
 
 img.gopher {
 	float: right;
-	margin-left: 10px;
-	margin-bottom: 10px;
+	margin-left: 0.625rem;
+	margin-bottom: 0.625rem;
 	z-index: -1;
 }
 h2 { clear: right; }
 
 /* example and drop-down playground */
 div.play {
-	padding: 0 20px 40px 20px;
+	padding: 0 1.25rem 2.5rem 1.25rem;
 }
 div.play pre,
 div.play textarea,
@@ -528,18 +524,18 @@
 	padding: 0;
 	margin: 0;
 	font-family: Menlo, monospace;
-	font-size: 14px;
+	font-size: 0.875rem;
 }
 div.play .input {
-	padding: 10px;
-	margin-top: 10px;
+	padding: 0.625rem;
+	margin-top: 0.625rem;
 
-	-webkit-border-top-left-radius: 5px;
-	-webkit-border-top-right-radius: 5px;
-	-moz-border-radius-topleft: 5px;
-	-moz-border-radius-topright: 5px;
-	border-top-left-radius: 5px;
-	border-top-right-radius: 5px;
+	-webkit-border-top-left-radius: 0.3125rem;
+	-webkit-border-top-right-radius: 0.3125rem;
+	-moz-border-radius-topleft: 0.3125rem;
+	-moz-border-radius-topright: 0.3125rem;
+	border-top-left-radius: 0.3125rem;
+	border-top-right-radius: 0.3125rem;
 
 	overflow: hidden;
 }
@@ -559,16 +555,16 @@
 div.play .output {
 	border-top: none !important;
 
-	padding: 10px;
-	max-height: 200px;
+	padding: 0.625rem;
+	max-height: 12.5rem;
 	overflow: auto;
 
-	-webkit-border-bottom-right-radius: 5px;
-	-webkit-border-bottom-left-radius: 5px;
-	-moz-border-radius-bottomright: 5px;
-	-moz-border-radius-bottomleft: 5px;
-	border-bottom-right-radius: 5px;
-	border-bottom-left-radius: 5px;
+	-webkit-border-bottom-right-radius: 0.3125rem;
+	-webkit-border-bottom-left-radius: 0.3125rem;
+	-moz-border-radius-bottomright: 0.3125rem;
+	-moz-border-radius-bottomleft: 0.3125rem;
+	border-bottom-right-radius: 0.3125rem;
+	border-bottom-left-radius: 0.3125rem;
 }
 div.play .output pre {
 	padding: 0;
@@ -585,17 +581,17 @@
 }
 div.play .input,
 div.play .output {
-	border: 1px solid #375EAB;
+	border: 0.0625rem solid #375EAB;
 }
 div.play .buttons {
 	float: right;
-	padding: 20px 0 10px 0;
+	padding: 1.25rem 0 0.625rem 0;
 	text-align: right;
 }
 div.play .buttons a {
-	height: 16px;
-	margin-left: 5px;
-	padding: 10px;
+	height: 1rem;
+	margin-left: 0.3125rem;
+	padding: 0.625rem;
 	cursor: pointer;
 }
 .output .stderr {
@@ -613,29 +609,29 @@
 }
 div#playground {
 	position: absolute;
-	top: 63px;
-	right: 20px;
-	padding: 0 10px 10px 10px;
+	top: 3.938rem;
+	right: 1.25rem;
+	padding: 0 0.625rem 0.625rem 0.625rem;
 	z-index: 1;
 	text-align: left;
 	background: #E0EBF5;
 
-	border: 1px solid #B0BBC5;
+	border: 0.0625rem solid #B0BBC5;
 	border-top: none;
 
-	-webkit-border-bottom-left-radius: 5px;
-	-webkit-border-bottom-right-radius: 5px;
-	-moz-border-radius-bottomleft: 5px;
-	-moz-border-radius-bottomright: 5px;
-	border-bottom-left-radius: 5px;
-	border-bottom-right-radius: 5px;
+	-webkit-border-bottom-left-radius: 0.3125rem;
+	-webkit-border-bottom-right-radius: 0.3125rem;
+	-moz-border-radius-bottomleft: 0.3125rem;
+	-moz-border-radius-bottomright: 0.3125rem;
+	border-bottom-left-radius: 0.3125rem;
+	border-bottom-right-radius: 0.3125rem;
 }
 div#playground .code {
-	width: 520px;
-	height: 200px;
+	width: 32.5rem;
+	height: 12.5rem;
 }
 div#playground .output {
-	height: 100px;
+	height: 6.25rem;
 }
 
 /* Inline runnable snippets (play.js/initPlayground) */
@@ -644,7 +640,7 @@
         padding: 0;
         background: none;
         border: none;
-	outline: 0px solid transparent;
+	outline: 0 solid transparent;
         overflow: auto;
 }
 #content .playground .number, #content .code .number {
@@ -652,11 +648,11 @@
 }
 #content .code, #content .playground, #content .output {
 	width: auto;
-        margin: 20px;
-        padding: 10px;
-        -webkit-border-radius: 5px;
-        -moz-border-radius: 5px;
-        border-radius: 5px;
+        margin: 1.25rem;
+        padding: 0.625rem;
+        -webkit-border-radius: 0.3125rem;
+        -moz-border-radius: 0.3125rem;
+        border-radius: 0.3125rem;
 }
 #content .code, #content .playground {
         background: #e9e9e9;
@@ -676,11 +672,11 @@
 #content .buttons {
         position: relative;
         float: right;
-        top: -50px;
-        right: 30px;
+        top: -3.125rem;
+        right: 1.875rem;
 }
 #content .output .buttons {
-        top: -60px;
+        top: -3.75rem;
         right: 0;
         height: 0;
 }
@@ -692,11 +688,11 @@
 	font-weight: bold;
         color: white;
 	background-color: darkred;
-        border-bottom-left-radius: 4px;
-        border-bottom-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        padding: 2px 4px 2px 4px; /* TRBL */
+        border-bottom-left-radius: 0.25rem;
+        border-bottom-right-radius: 0.25rem;
+        border-top-left-radius: 0.25rem;
+        border-top-right-radius: 0.25rem;
+        padding: 0.125rem 0.25rem 0.125rem 0.25rem; /* TRBL */
 }
 
 
@@ -706,12 +702,12 @@
 
 .downloading {
 	background: #F9F9BE;
-	padding: 10px;
+	padding: 0.625rem;
 	text-align: center;
-	border-radius: 5px;
+	border-radius: 0.3125rem;
 }
 
-@media (max-width: 930px) {
+@media (max-width: 58.125em) {
 	#heading-wide {
 		display: none;
 	}
@@ -720,8 +716,7 @@
 	}
 }
 
-
-@media (max-width: 760px) {
+@media (max-width: 47.5em) {
 	.container .left,
 	.container .right {
 		width: auto;
@@ -729,39 +724,39 @@
 	}
 
 	div#about {
-		max-width: 500px;
+		max-width: 31.25rem;
 		text-align: center;
 	}
 }
 
-@media (min-width: 700px) and (max-width: 1000px) {
+@media (min-width: 43.75em) and (max-width: 62.5em) {
 	div#menu > a {
-		margin: 5px 0;
-		font-size: 14px;
+		margin: 0.3125rem 0;
+		font-size: 0.875rem;
 	}
 
 	input#search {
-		font-size: 14px;
+		font-size: 0.875rem;
 	}
 }
 
-@media (max-width: 700px) {
+@media (max-width: 43.75em) {
 	body {
-		font-size: 15px;
+		font-size: 0.9375rem;
 	}
 
 	pre,
 	code {
-		font-size: 13px;
+		font-size: 0.866rem;
 	}
 
 	div#page > .container {
-		padding: 0 10px;
+		padding: 0 0.625rem;
 	}
 
 	div#topbar {
 		height: auto;
-		padding: 10px;
+		padding: 0.625rem;
 	}
 
 	div#topbar > .container {
@@ -778,7 +773,7 @@
 	.top-heading {
 		float: none;
 		display: inline-block;
-		padding: 12px;
+		padding: 0.75rem;
 	}
 
 	div#menu {
@@ -807,7 +802,7 @@
 	pre,
 	ul,
 	ol {
-		margin: 10px;
+		margin: 0.625rem;
 	}
 
 	.pkg-synopsis {
@@ -819,7 +814,7 @@
 	}
 }
 
-@media (max-width: 480px) {
+@media (max-width: 30em) {
 	#heading-wide {
 		display: none;
 	}
@@ -831,7 +826,7 @@
 @media print {
 	pre {
 		background: #FFF;
-		border: 1px solid #BBB;
+		border: 0.0625rem solid #BBB;
 		white-space: pre-wrap;
 	}
 }