summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2019-06-13 08:00:33 -0400
committerNed Batchelder <ned@nedbatchelder.com>2019-06-13 08:00:33 -0400
commit8397587f7ab3621e11c93cc1a3684843c0dc4176 (patch)
tree7c8596fe707b68baf1a91e6fe0edd071f09e5082
parent77dc1d8c258f0a3d7dc640356b30d1f173faf68e (diff)
downloadpython-coveragepy-git-8397587f7ab3621e11c93cc1a3684843c0dc4176.tar.gz
Use sass for css generation, to get nice hover highlights on lines
-rw-r--r--.gitignore1
-rw-r--r--Makefile7
-rw-r--r--coverage/htmlfiles/style.css572
-rw-r--r--coverage/htmlfiles/style.scss463
4 files changed, 629 insertions, 414 deletions
diff --git a/.gitignore b/.gitignore
index ad586497..3a9af66f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,6 +28,7 @@ setuptools-*.egg
.cache
.pytest_cache
.hypothesis
+.ruby-version
# Stuff in the test directory.
zipmods.zip
diff --git a/Makefile b/Makefile
index dc2c2f96..d4b0270b 100644
--- a/Makefile
+++ b/Makefile
@@ -34,6 +34,13 @@ sterile: clean
-docker image rm -f quay.io/pypa/manylinux1_i686 quay.io/pypa/manylinux1_x86_64
+CSS = coverage/htmlfiles/style.css
+SCSS = coverage/htmlfiles/style.scss
+
+css: $(CSS)
+$(CSS): $(SCSS)
+ sass --style=compact --sourcemap=none --no-cache $(SCSS) $@
+
LINTABLE = coverage tests igor.py setup.py __main__.py
lint:
diff --git a/coverage/htmlfiles/style.css b/coverage/htmlfiles/style.css
index 27f0e47a..643183a3 100644
--- a/coverage/htmlfiles/style.css
+++ b/coverage/htmlfiles/style.css
@@ -1,419 +1,163 @@
+@charset "UTF-8";
/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */
+/* Don't edit this .css file. Edit the .scss file instead! */
+html, body, h1, h2, h3, p, table, td, th { margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; }
-/* CSS styles for coverage.py. */
-
-/* Page-wide styles */
-html, body, h1, h2, h3, p, table, td, th {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- font-weight: inherit;
- font-style: inherit;
- font-size: 100%;
- font-family: inherit;
- vertical-align: baseline;
- }
-
-/* Set baseline grid to 16 pt. */
-body {
- font-family: georgia, serif;
- font-size: 1em;
- }
-
-html>body {
- font-size: 16px;
- }
-
-/* Set base font size to 12/16 */
-p {
- font-size: .75em; /* 12/16 */
- line-height: 1.33333333em; /* 16/12 */
- }
-
-table {
- border-collapse: collapse;
- }
-td {
- vertical-align: top;
-}
-table tr.hidden {
- display: none !important;
- }
-
-p#no_rows {
- display: none;
- font-size: 1.2em;
- }
-
-a.nav {
- text-decoration: none;
- color: inherit;
- }
-a.nav:hover {
- text-decoration: underline;
- color: inherit;
- }
-
-/* Page structure */
-#header {
- background: #f8f8f8;
- width: 100%;
- border-bottom: 1px solid #eee;
- }
-
-#source {
- padding: 1em;
- font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
- }
-
-.indexfile #footer {
- margin: 1em 3em;
- }
-
-.pyfile #footer {
- margin: 1em 1em;
- }
-
-#footer .content {
- padding: 0;
- font-size: 85%;
- font-family: verdana, sans-serif;
- color: #666666;
- font-style: italic;
- }
-
-#index {
- margin: 1em 0 0 3em;
- }
+body { font-family: georgia, serif; font-size: 1em; }
+
+html > body { font-size: 16px; }
+
+p { font-size: .75em; line-height: 1.33333333em; }
+
+table { border-collapse: collapse; }
+
+td { vertical-align: top; }
+
+table tr.hidden { display: none !important; }
+
+p#no_rows { display: none; font-size: 1.2em; }
+
+a.nav { text-decoration: none; color: inherit; }
+
+a.nav:hover { text-decoration: underline; color: inherit; }
+
+#header { background: #f8f8f8; width: 100%; border-bottom: 1px solid #eee; }
+
+#source { padding: 1em; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
+
+.indexfile #footer { margin: 1em 3em; }
+
+.pyfile #footer { margin: 1em 1em; }
+
+#footer .content { padding: 0; font-size: 85%; font-family: verdana, sans-serif; color: #666666; font-style: italic; }
+
+#index { margin: 1em 0 0 3em; }
/* Header styles */
-#header .content {
- padding: 1em 3em;
- }
-
-h1 {
- font-size: 1.25em;
- display: inline-block;
-}
-
-#filter_container {
- display: inline-block;
- float: right;
- margin: 0 2em 0 0;
-}
-#filter_container input {
- width: 10em;
-}
-
-h2.stats {
- margin-top: .5em;
- font-size: 1em;
-}
-.stats span {
- border: 1px solid;
- padding: .1em .25em;
- margin: 0 .1em;
- cursor: pointer;
- border-color: #999 #ccc #ccc #999;
-}
-.stats span.hide_run, .stats span.hide_exc,
-.stats span.hide_mis, .stats span.hide_par,
-.stats span.par.hide_run.hide_par {
- border-color: #ccc #999 #999 #ccc;
-}
-.stats span.par.hide_run {
- border-color: #999 #ccc #ccc #999;
-}
-
-.stats span.run {
- background: #ddffdd;
-}
-.stats span.exc {
- background: #eeeeee;
-}
-.stats span.mis {
- background: #ffdddd;
-}
-.stats span.hide_run {
- background: #eeffee;
-}
-.stats span.hide_exc {
- background: #f5f5f5;
-}
-.stats span.hide_mis {
- background: #ffeeee;
-}
-.stats span.par {
- background: #ffffaa;
-}
-.stats span.hide_par {
- background: #ffffcc;
-}
-
-/* Help panel */
-#keyboard_icon {
- float: right;
- margin: 5px;
- cursor: pointer;
-}
-
-.help_panel {
- position: absolute;
- background: #ffffcc;
- padding: .5em;
- border: 1px solid #883;
- display: none;
-}
-
-.indexfile .help_panel {
- width: 20em; height: 4em;
-}
-
-.pyfile .help_panel {
- width: 16em; height: 8em;
-}
-
-.help_panel .legend {
- font-style: italic;
- margin-bottom: 1em;
-}
-
-#panel_icon {
- float: right;
- cursor: pointer;
-}
-
-.keyhelp {
- margin: .75em;
-}
-
-.keyhelp .key {
- border: 1px solid black;
- border-color: #888 #333 #333 #888;
- padding: .1em .35em;
- font-family: monospace;
- font-weight: bold;
- background: #eee;
-}
-
-/* Source file styles */
-.linenos p {
- text-align: right;
- margin: 0;
- padding: 0 .5em;
- color: #999999;
- font-family: verdana, sans-serif;
-}
-.linenos p.highlight {
- background: #ffdd00;
- }
-.linenos p a {
- text-decoration: none;
- color: #999999;
- font-size: .8333em; /* 10/12 */
- line-height: 1em;
- }
-.linenos p a:hover {
- text-decoration: underline;
- color: #999999;
- }
-
-td.text {
- width: 100%;
- }
-.text p {
- margin: 0;
- padding: 0 0 0 .5em;
- border-left: 2px solid #ffffff;
- white-space: pre;
- position: relative;
- }
-
-.text p.mis {
- background: #ffdddd;
- border-left: 2px solid #ff0000;
- }
-.text p.run, .text p.run.hide_par {
- background: #ddffdd;
- border-left: 2px solid #00ff00;
- }
-.text p.exc {
- background: #eeeeee;
- border-left: 2px solid #808080;
- }
-.text p.par, .text p.par.hide_run {
- background: #ffffaa;
- border-left: 2px solid #eeee99;
- }
-.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par,
-.text p.hide_run.hide_par {
- background: inherit;
- }
-
-.text span.annotate {
- font-family: georgia;
- color: #666;
- float: right;
- padding-right: .5em;
- }
-.text p.hide_par span.annotate {
- display: none;
- }
-.text span.annotate.long {
- display: none;
- }
-.text p:hover span.annotate.long {
- display: block;
- max-width: 50%;
- white-space: normal;
- float: right;
- position: absolute;
- top: 1.75em;
- right: 1em;
- width: 30em;
- height: auto;
- color: #333;
- background: #ffffcc;
- border: 1px solid #888;
- padding: .25em .5em;
- z-index: 999;
- border-radius: .2em;
- box-shadow: #cccccc .2em .2em .2em;
- }
-
-/* Syntax coloring */
-.text .com {
- color: green;
- font-style: italic;
- line-height: 1px;
- }
-.text .key {
- font-weight: bold;
- line-height: 1px;
- }
-.text .str {
- color: #000080;
- }
-
-/* Line contexts */
-td.contexts p {
- margin: 0;
- padding: 0 .5em;
- color: #999999;
- font-family: verdana, sans-serif;
- white-space: nowrap;
- position: relative;
- }
-td.contexts p:hover {
- background: #eee;
- }
-td.contexts p span.context-list {
- display: none;
- }
-td.contexts p:hover span.context-list {
- display: block;
- min-width: 30em;
- //max-width: 50%;
- white-space: normal;
- float: right;
- position: absolute;
- top: 1.75em;
- right: 1em;
- height: auto;
- color: #333;
- background: #ffffcc;
- border: 1px solid #888;
- padding: .25em .5em;
- z-index: 999;
- border-radius: .2em;
- box-shadow: #cccccc .2em .2em .2em;
- }
-span.context-list span.context-line {
- display: block;
- }
-td.contexts p span.context-button {
- display: inline-block;
- cursor: pointer;
- font-size: .8333em; /* 10/12 */
- line-height: 1em;
- }
-
-/* index styles */
-#index td, #index th {
- text-align: right;
- width: 5em;
- padding: .25em .5em;
- border-bottom: 1px solid #eee;
- }
-#index th {
- font-style: italic;
- color: #333;
- border-bottom: 1px solid #ccc;
- cursor: pointer;
- }
-#index th:hover {
- background: #eee;
- border-bottom: 1px solid #999;
- }
-#index td.left, #index th.left {
- padding-left: 0;
- }
-#index td.right, #index th.right {
- padding-right: 0;
- }
-#index th.headerSortDown, #index th.headerSortUp {
- border-bottom: 1px solid #000;
- white-space: nowrap;
- background: #eee;
- }
-#index th.headerSortDown:after {
- content: " ↓";
-}
-#index th.headerSortUp:after {
- content: " ↑";
-}
-#index td.name, #index th.name {
- text-align: left;
- width: auto;
- }
-#index td.name a {
- text-decoration: none;
- color: #000;
- }
-#index tr.total,
-#index tr.total_dynamic {
- }
-#index tr.total td,
-#index tr.total_dynamic td {
- font-weight: bold;
- border-top: 1px solid #ccc;
- border-bottom: none;
- }
-#index tr.file:hover {
- background: #eeeeee;
- }
-#index tr.file:hover td.name {
- text-decoration: underline;
- color: #000;
- }
-
-/* scroll marker styles */
-#scroll_marker {
- position: fixed;
- right: 0;
- top: 0;
- width: 16px;
- height: 100%;
- background: white;
- border-left: 1px solid #eee;
- will-change: transform; /* for faster scrolling of fixed element in Chrome */
- }
-
-#scroll_marker .marker {
- background: #eedddd;
- position: absolute;
- min-height: 3px;
- width: 100%;
- }
+#header .content { padding: 1em 3em; }
+
+h1 { font-size: 1.25em; display: inline-block; }
+
+#filter_container { display: inline-block; float: right; margin: 0 2em 0 0; }
+
+#filter_container input { width: 10em; }
+
+h2.stats { margin-top: .5em; font-size: 1em; }
+
+.stats span { border: 1px solid; padding: .1em .25em; margin: 0 .1em; cursor: pointer; border-color: #999 #ccc #ccc #999; }
+
+.stats span.hide_run, .stats span.hide_exc, .stats span.hide_mis, .stats span.hide_par, .stats span.par.hide_run.hide_par { border-color: #ccc #999 #999 #ccc; }
+
+.stats span.par.hide_run { border-color: #999 #ccc #ccc #999; }
+
+.stats span.run { background: #ddffdd; }
+
+.stats span.exc { background: #eeeeee; }
+
+.stats span.mis { background: #ffdddd; }
+
+.stats span.hide_run { background: #eeffee; }
+
+.stats span.hide_exc { background: #f5f5f5; }
+
+.stats span.hide_mis { background: #ffeeee; }
+
+.stats span.par { background: #ffffaa; }
+
+.stats span.hide_par { background: #ffffcc; }
+
+#keyboard_icon { float: right; margin: 5px; cursor: pointer; }
+
+.help_panel { position: absolute; background: #ffffcc; padding: .5em; border: 1px solid #883; display: none; }
+
+.indexfile .help_panel { width: 20em; height: 4em; }
+
+.pyfile .help_panel { width: 16em; height: 8em; }
+
+.help_panel .legend { font-style: italic; margin-bottom: 1em; }
+
+#panel_icon { float: right; cursor: pointer; }
+
+.keyhelp { margin: .75em; }
+
+.keyhelp .key { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: monospace; font-weight: bold; background: #eee; }
+
+.linenos p { text-align: right; margin: 0; padding: 0 .5em; color: #999999; font-family: verdana, sans-serif; }
+
+.linenos p.highlight { background: #ffdd00; }
+
+.linenos p a { text-decoration: none; color: #999999; font-size: .8333em; line-height: 1em; }
+
+.linenos p a:hover { text-decoration: underline; color: #999999; }
+
+td.text { width: 100%; }
+
+.text p { margin: 0; padding: 0 0 0 .5em; border-left: 2px solid #ffffff; white-space: pre; position: relative; }
+.text p:hover { background: #f2f2f2; }
+.text p.mis { background: #ffdddd; border-left: 2px solid #ff0000; }
+.text p.mis:hover { background: #f2d2d2; }
+.text p.run, .text p.run.hide_par { background: #ddffdd; border-left: 2px solid #00ff00; }
+.text p.run:hover, .text p.run.hide_par:hover { background: #d2f2d2; }
+.text p.exc { background: #eeeeee; border-left: 2px solid #808080; }
+.text p.exc:hover { background: #e2e2e2; }
+.text p.par, .text p.par.hide_run { background: #ffffaa; border-left: 2px solid #eeee99; }
+.text p.par:hover, .text p.par.hide_run:hover { background: #f2f2a2; }
+.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par, .text p.hide_run.hide_par { background: inherit; }
+.text p.hide_run:hover, .text p.hide_exc:hover, .text p.hide_mis:hover, .text p.hide_par:hover, .text p.hide_run.hide_par:hover { background: #f2f2f2; }
+
+.text span.annotate { font-family: georgia; color: #666; float: right; padding-right: .5em; }
+
+.text p.hide_par span.annotate { display: none; }
+
+.text span.annotate.long { display: none; }
+
+.text p:hover span.annotate.long { display: block; max-width: 50%; white-space: normal; float: right; position: absolute; top: 1.75em; right: 1em; width: 30em; height: auto; color: #333; background: #ffffcc; border: 1px solid #888; padding: .25em .5em; z-index: 999; border-radius: .2em; box-shadow: #cccccc .2em .2em .2em; }
+
+.text .com { color: green; font-style: italic; line-height: 1px; }
+
+.text .key { font-weight: bold; line-height: 1px; }
+
+.text .str { color: #000080; }
+
+td.contexts p { margin: 0; padding: 0 .5em; color: #999999; font-family: verdana, sans-serif; white-space: nowrap; position: relative; }
+
+td.contexts p:hover { background: #eee; }
+
+td.contexts p span.context-list { display: none; }
+
+td.contexts p:hover span.context-list { display: block; min-width: 30em; white-space: normal; float: right; position: absolute; top: 1.75em; right: 1em; height: auto; color: #333; background: #ffffcc; border: 1px solid #888; padding: .25em .5em; z-index: 999; border-radius: .2em; box-shadow: #cccccc .2em .2em .2em; }
+
+span.context-list span.context-line { display: block; }
+
+td.contexts p span.context-button { display: inline-block; cursor: pointer; font-size: .8333em; line-height: 1em; }
+
+#index td, #index th { text-align: right; width: 5em; padding: .25em .5em; border-bottom: 1px solid #eee; }
+
+#index th { font-style: italic; color: #333; border-bottom: 1px solid #ccc; cursor: pointer; }
+
+#index th:hover { background: #eee; border-bottom: 1px solid #999; }
+
+#index td.left, #index th.left { padding-left: 0; }
+
+#index td.right, #index th.right { padding-right: 0; }
+
+#index th.headerSortDown, #index th.headerSortUp { border-bottom: 1px solid #000; white-space: nowrap; background: #eee; }
+
+#index th.headerSortDown:after { content: " ↓"; }
+
+#index th.headerSortUp:after { content: " ↑"; }
+
+#index td.name, #index th.name { text-align: left; width: auto; }
+
+#index td.name a { text-decoration: none; color: #000; }
+
+#index tr.total td, #index tr.total_dynamic td { font-weight: bold; border-top: 1px solid #ccc; border-bottom: none; }
+
+#index tr.file:hover { background: #eeeeee; }
+
+#index tr.file:hover td.name { text-decoration: underline; color: #000; }
+
+#scroll_marker { position: fixed; right: 0; top: 0; width: 16px; height: 100%; background: white; border-left: 1px solid #eee; will-change: transform; }
+
+#scroll_marker .marker { background: #eedddd; position: absolute; min-height: 3px; width: 100%; }
diff --git a/coverage/htmlfiles/style.scss b/coverage/htmlfiles/style.scss
new file mode 100644
index 00000000..7b7d9b66
--- /dev/null
+++ b/coverage/htmlfiles/style.scss
@@ -0,0 +1,463 @@
+/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
+/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */
+
+// Ignore this comment, it's for the CSS output file:
+/* Don't edit this .css file. Edit the .scss file instead! */
+
+// CSS styles for coverage.py.
+
+// Page-wide styles
+html, body, h1, h2, h3, p, table, td, th {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+ }
+
+// Set baseline grid to 16 pt.
+body {
+ font-family: georgia, serif;
+ font-size: 1em;
+ }
+
+html>body {
+ font-size: 16px;
+ }
+
+// Set base font size to 12/16
+p {
+ font-size: .75em; // 12/16
+ line-height: 1.33333333em; // 16/12
+ }
+
+table {
+ border-collapse: collapse;
+ }
+td {
+ vertical-align: top;
+}
+table tr.hidden {
+ display: none !important;
+ }
+
+p#no_rows {
+ display: none;
+ font-size: 1.2em;
+ }
+
+a.nav {
+ text-decoration: none;
+ color: inherit;
+ }
+a.nav:hover {
+ text-decoration: underline;
+ color: inherit;
+ }
+
+// Page structure
+#header {
+ background: #f8f8f8;
+ width: 100%;
+ border-bottom: 1px solid #eee;
+ }
+
+#source {
+ padding: 1em;
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ }
+
+.indexfile #footer {
+ margin: 1em 3em;
+ }
+
+.pyfile #footer {
+ margin: 1em 1em;
+ }
+
+#footer .content {
+ padding: 0;
+ font-size: 85%;
+ font-family: verdana, sans-serif;
+ color: #666666;
+ font-style: italic;
+ }
+
+#index {
+ margin: 1em 0 0 3em;
+ }
+
+/* Header styles */
+#header .content {
+ padding: 1em 3em;
+ }
+
+h1 {
+ font-size: 1.25em;
+ display: inline-block;
+}
+
+#filter_container {
+ display: inline-block;
+ float: right;
+ margin: 0 2em 0 0;
+}
+#filter_container input {
+ width: 10em;
+}
+
+h2.stats {
+ margin-top: .5em;
+ font-size: 1em;
+}
+.stats span {
+ border: 1px solid;
+ padding: .1em .25em;
+ margin: 0 .1em;
+ cursor: pointer;
+ border-color: #999 #ccc #ccc #999;
+}
+.stats span.hide_run, .stats span.hide_exc,
+.stats span.hide_mis, .stats span.hide_par,
+.stats span.par.hide_run.hide_par {
+ border-color: #ccc #999 #999 #ccc;
+}
+.stats span.par.hide_run {
+ border-color: #999 #ccc #ccc #999;
+}
+
+.stats span.run {
+ background: #ddffdd;
+}
+.stats span.exc {
+ background: #eeeeee;
+}
+.stats span.mis {
+ background: #ffdddd;
+}
+.stats span.hide_run {
+ background: #eeffee;
+}
+.stats span.hide_exc {
+ background: #f5f5f5;
+}
+.stats span.hide_mis {
+ background: #ffeeee;
+}
+.stats span.par {
+ background: #ffffaa;
+}
+.stats span.hide_par {
+ background: #ffffcc;
+}
+
+// Help panel
+#keyboard_icon {
+ float: right;
+ margin: 5px;
+ cursor: pointer;
+}
+
+.help_panel {
+ position: absolute;
+ background: #ffffcc;
+ padding: .5em;
+ border: 1px solid #883;
+ display: none;
+}
+
+.indexfile .help_panel {
+ width: 20em; height: 4em;
+}
+
+.pyfile .help_panel {
+ width: 16em; height: 8em;
+}
+
+.help_panel .legend {
+ font-style: italic;
+ margin-bottom: 1em;
+}
+
+#panel_icon {
+ float: right;
+ cursor: pointer;
+}
+
+.keyhelp {
+ margin: .75em;
+}
+
+.keyhelp .key {
+ border: 1px solid black;
+ border-color: #888 #333 #333 #888;
+ padding: .1em .35em;
+ font-family: monospace;
+ font-weight: bold;
+ background: #eee;
+}
+
+// Source file styles
+.linenos p {
+ text-align: right;
+ margin: 0;
+ padding: 0 .5em;
+ color: #999999;
+ font-family: verdana, sans-serif;
+}
+.linenos p.highlight {
+ background: #ffdd00;
+ }
+.linenos p a {
+ text-decoration: none;
+ color: #999999;
+ font-size: .8333em; // 10/12
+ line-height: 1em;
+ }
+.linenos p a:hover {
+ text-decoration: underline;
+ color: #999999;
+ }
+
+td.text {
+ width: 100%;
+ }
+
+$mis-color: #ffdddd;
+$run-color: #ddffdd;
+$exc-color: #eeeeee;
+$par-color: #ffffaa;
+
+$hover-dark-amt: 95%;
+$plain-hover-color: mix(#ffffff, #000, $hover-dark-amt);
+$mis-hover-color: mix($mis-color, #000, $hover-dark-amt);
+$run-hover-color: mix($run-color, #000, $hover-dark-amt);
+$exc-hover-color: mix($exc-color, #000, $hover-dark-amt);
+$par-hover-color: mix($par-color, #000, $hover-dark-amt);
+
+.text p {
+ margin: 0;
+ padding: 0 0 0 .5em;
+ border-left: 2px solid #ffffff;
+ white-space: pre;
+ position: relative;
+
+ &:hover {
+ background: $plain-hover-color;
+ }
+
+ &.mis {
+ background: $mis-color;
+ border-left: 2px solid #ff0000;
+
+ &:hover {
+ background: $mis-hover-color;
+ }
+ }
+
+ &.run, &.run.hide_par {
+ background: $run-color;
+ border-left: 2px solid #00ff00;
+
+ &:hover {
+ background: $run-hover-color;
+ }
+ }
+
+ &.exc {
+ background: $exc-color;
+ border-left: 2px solid #808080;
+
+ &:hover {
+ background: $exc-hover-color;
+ }
+ }
+
+ &.par, &.par.hide_run {
+ background: $par-color;
+ border-left: 2px solid #eeee99;
+
+ &:hover {
+ background: $par-hover-color;
+ }
+ }
+
+ &.hide_run, &.hide_exc, &.hide_mis, &.hide_par, &.hide_run.hide_par {
+ background: inherit;
+
+ &:hover {
+ background: $plain-hover-color;
+ }
+ }
+}
+
+
+.text span.annotate {
+ font-family: georgia;
+ color: #666;
+ float: right;
+ padding-right: .5em;
+ }
+.text p.hide_par span.annotate {
+ display: none;
+ }
+.text span.annotate.long {
+ display: none;
+ }
+.text p:hover span.annotate.long {
+ display: block;
+ max-width: 50%;
+ white-space: normal;
+ float: right;
+ position: absolute;
+ top: 1.75em;
+ right: 1em;
+ width: 30em;
+ height: auto;
+ color: #333;
+ background: #ffffcc;
+ border: 1px solid #888;
+ padding: .25em .5em;
+ z-index: 999;
+ border-radius: .2em;
+ box-shadow: #cccccc .2em .2em .2em;
+ }
+
+// Syntax coloring
+.text .com {
+ color: green;
+ font-style: italic;
+ line-height: 1px;
+ }
+.text .key {
+ font-weight: bold;
+ line-height: 1px;
+ }
+.text .str {
+ color: #000080;
+ }
+
+// Line contexts
+td.contexts p {
+ margin: 0;
+ padding: 0 .5em;
+ color: #999999;
+ font-family: verdana, sans-serif;
+ white-space: nowrap;
+ position: relative;
+ }
+td.contexts p:hover {
+ background: #eee;
+ }
+td.contexts p span.context-list {
+ display: none;
+ }
+td.contexts p:hover span.context-list {
+ display: block;
+ min-width: 30em;
+ //max-width: 50%;
+ white-space: normal;
+ float: right;
+ position: absolute;
+ top: 1.75em;
+ right: 1em;
+ height: auto;
+ color: #333;
+ background: #ffffcc;
+ border: 1px solid #888;
+ padding: .25em .5em;
+ z-index: 999;
+ border-radius: .2em;
+ box-shadow: #cccccc .2em .2em .2em;
+ }
+span.context-list span.context-line {
+ display: block;
+ }
+td.contexts p span.context-button {
+ display: inline-block;
+ cursor: pointer;
+ font-size: .8333em; // 10/12
+ line-height: 1em;
+ }
+
+// index styles
+#index td, #index th {
+ text-align: right;
+ width: 5em;
+ padding: .25em .5em;
+ border-bottom: 1px solid #eee;
+ }
+#index th {
+ font-style: italic;
+ color: #333;
+ border-bottom: 1px solid #ccc;
+ cursor: pointer;
+ }
+#index th:hover {
+ background: #eee;
+ border-bottom: 1px solid #999;
+ }
+#index td.left, #index th.left {
+ padding-left: 0;
+ }
+#index td.right, #index th.right {
+ padding-right: 0;
+ }
+#index th.headerSortDown, #index th.headerSortUp {
+ border-bottom: 1px solid #000;
+ white-space: nowrap;
+ background: #eee;
+ }
+#index th.headerSortDown:after {
+ content: " ↓";
+}
+#index th.headerSortUp:after {
+ content: " ↑";
+}
+#index td.name, #index th.name {
+ text-align: left;
+ width: auto;
+ }
+#index td.name a {
+ text-decoration: none;
+ color: #000;
+ }
+#index tr.total,
+#index tr.total_dynamic {
+ }
+#index tr.total td,
+#index tr.total_dynamic td {
+ font-weight: bold;
+ border-top: 1px solid #ccc;
+ border-bottom: none;
+ }
+#index tr.file:hover {
+ background: #eeeeee;
+ }
+#index tr.file:hover td.name {
+ text-decoration: underline;
+ color: #000;
+ }
+
+// scroll marker styles
+#scroll_marker {
+ position: fixed;
+ right: 0;
+ top: 0;
+ width: 16px;
+ height: 100%;
+ background: white;
+ border-left: 1px solid #eee;
+ will-change: transform; // for faster scrolling of fixed element in Chrome
+ }
+
+#scroll_marker .marker {
+ background: #eedddd;
+ position: absolute;
+ min-height: 3px;
+ width: 100%;
+ }