Index: /www/chrome/css/trac.css
===================================================================
--- /www/chrome/css/trac.css	(revision 2234)
+++ /www/chrome/css/trac.css	(revision 2234)
@@ -0,0 +1,451 @@
+/* Trac CSS */
+body {
+ background: #fff;
+ color: #000;
+ margin: 10px;
+ padding: 0;
+}
+body, th, td {
+ font: normal 13px verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif;
+}
+h1, h2, h3, h4 {
+ font-family: arial,verdana,'Bitstream Vera Sans',helvetica,sans-serif;
+ font-weight: bold;
+ letter-spacing: -0.018em;
+}
+h1 { font-size: 19px; margin: .15em 1em 0 0 }
+h2 { font-size: 16px }
+h3 { font-size: 14px }
+hr { border: none;  border-top: 1px solid #ccb; margin: 2em 0 }
+address { font-style: normal }
+img { border: none }
+tt { white-space: pre }
+
+.underline { text-decoration: underline }
+ol.loweralpha { list-style-type: lower-alpha }
+ol.upperalpha { list-style-type: upper-alpha }
+ol.lowerroman { list-style-type: lower-roman }
+ol.upperroman { list-style-type: upper-roman }
+ol.arabic     { list-style-type: decimal }
+
+/* Link styles */
+:link, :visited {
+ text-decoration: none;
+ color: #b00;
+ border-bottom: 1px dotted #bbb;
+}
+:link:hover, :visited:hover {
+ background-color: #eee;
+ color: #555;
+}
+h1 :link, h1 :visited ,h2 :link, h2 :visited, h3 :link, h3 :visited,
+h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited {
+ color: inherit;
+}
+
+/* Heading anchors */
+.anchor:link, .anchor:visited {
+ border: none;
+ color: #d7d7d7;
+ font-size: .8em;
+ vertical-align: text-top;
+}
+* > .anchor:link, * > .anchor:visited {
+ visibility: hidden;
+}
+h1:hover .anchor, h2:hover .anchor, h3:hover .anchor,
+h4:hover .anchor, h5:hover .anchor, h6:hover .anchor {
+ visibility: visible;
+}
+
+@media screen {
+ a.ext-link .icon {
+  background: url(../extlink.gif) left center no-repeat;
+  padding-left: 16px;
+ }
+ * html a.ext-link .icon { display: inline-block; }
+}
+
+/* Forms */
+input, textarea, select { margin: 2px }
+input, select { vertical-align: middle }
+input[type=button], input[type=submit], input[type=reset] {
+ background: #eee;
+ color: #222;
+ border: 1px outset #ccc;
+ padding: .1em .5em;
+}
+input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover {
+ background: #ccb;
+}
+input[type=button][disabled], input[type=submit][disabled],
+input[type=reset][disabled] {
+ background: #f6f6f6;
+ border-style: solid;
+ color: #999;
+}
+input[type=text], input.textwidget, textarea { border: 1px solid #d7d7d7 }
+input[type=text], input.textwidget { padding: .25em .5em }
+input[type=text]:focus, input.textwidget:focus, textarea:focus {
+ border: 1px solid #886;
+}
+option { border-bottom: 1px dotted #d7d7d7 }
+fieldset { border: 1px solid #d7d7d7; padding: .5em; margin: 0 }
+fieldset.iefix { background: transparent; border: none; padding: 0; margin: 0 }
+* html fieldset.iefix { width: 98% }
+fieldset.iefix p { margin: 0 }
+legend { color: #999; padding: 0 .25em; font-size: 90%; font-weight: bold }
+label.disabled { color: #d7d7d7 }
+.buttons { margin: .5em .5em .5em 0 }
+.buttons form, .buttons form div { display: inline }
+.buttons input { margin: 1em .5em .1em 0 }
+.inlinebuttons input { 
+ font-size: 70%;
+ border-width: 1px;
+ border-style: dotted;
+ margin: 0;
+ padding: 0.1em;
+ background: none;
+}
+
+/* Header */
+#header hr { display: none }
+#header h1 { margin: 1.5em 0 -1.5em; }
+#header img { border: none; margin: 0 0 -3em }
+#header :link, #header :visited, #header :link:hover, #header :visited:hover {
+ background: transparent;
+ color: #555;
+ margin-bottom: 2px;
+ border: none;
+}
+#header h1 :link:hover, #header h1 :visited:hover { color: #000 }
+
+/* Quick search */
+#search {
+ clear: both;
+ font-size: 10px;
+ height: 2.2em;
+ margin: 0 0 1em;
+ text-align: right;
+}
+#search input { font-size: 10px }
+#search label { display: none }
+
+/* Navigation */
+.nav h2, .nav hr { display: none }
+.nav ul { font-size: 10px; list-style: none; margin: 0; text-align: right }
+.nav li {
+ border-right: 1px solid #d7d7d7;
+ display: inline;
+ padding: 0 .75em;
+ white-space: nowrap;
+}
+.nav li.last { border-right: none }
+
+/* Main navigation bar */
+#mainnav {
+ background: #f7f7f7 url(../topbar_gradient.png) 0 0;
+ border: 1px solid #000;
+ font: normal 10px verdana,'Bitstream Vera Sans',helvetica,arial,sans-serif;
+ margin: .66em 0 .33em;
+ padding: .2em 0;
+}
+#mainnav li { border-right: none; padding: .25em 0 }
+#mainnav :link, #mainnav :visited {
+ background: url(../dots.gif) 0 0 no-repeat;
+ border-right: 1px solid #fff;
+ border-bottom: none;
+ border-left: 1px solid #555;
+ color: #000;
+ padding: .2em 20px;
+}
+* html #mainnav :link, * html #mainnav :visited { background-position: 1px 0 }
+#mainnav :link:hover, #mainnav :visited:hover {
+ background-color: #ccc;
+ border-right: 1px solid #ddd;
+}
+#mainnav .active :link, #mainnav .active :visited {
+ background: #333 url(../topbar_gradient2.png) 0 0 repeat-x;
+ border-top: none;
+ border-right: 1px solid #000;
+ color: #eee;
+ font-weight: bold;
+}
+#mainnav .active :link:hover, #mainnav .active :visited:hover {
+ border-right: 1px solid #000;
+}
+
+/* Context-dependent navigation links */
+#ctxtnav { height: 1em }
+#ctxtnav li ul {
+ background: #f7f7f7;
+ color: #ccc;
+ border: 1px solid;
+ padding: 0;
+ display: inline;
+ margin: 0;
+}
+#ctxtnav li li { padding: 0; }
+#ctxtnav li li :link, #ctxtnav li li :visited { padding: 0 1em }
+#ctxtnav li li :link:hover, #ctxtnav li li :visited:hover {
+ background: #bba;
+ color: #fff;
+}
+
+/* Alternate links */
+#altlinks { clear: both; text-align: center }
+#altlinks h3 { font-size: 12px; letter-spacing: normal; margin: 0 }
+#altlinks ul { list-style: none; margin: 0; padding: 0 0 1em }
+#altlinks li {
+ border-right: 1px solid #d7d7d7;
+ display: inline;
+ font-size: 11px;
+ line-height: 16px;
+ padding: 0 1em;
+ white-space: nowrap;
+}
+#altlinks li.last { border-right: none }
+#altlinks li :link, #altlinks li :visited {
+ background-position: 0 -1px;
+ background-repeat: no-repeat;
+ border: none;
+}
+#altlinks li a.ics { background-image: url(../ics.png); padding-left: 22px }
+#altlinks li a.rss { background-image: url(../xml.png); padding-left: 42px }
+
+/* Footer */
+#footer {
+  clear: both;
+  color: #bbb;
+  font-size: 10px;
+  border-top: 1px solid;
+  height: 31px;
+  padding: .25em 0;
+}
+#footer :link, #footer :visited { color: #bbb; }
+#footer hr { display: none }
+#footer #tracpowered { border: 0; float: left }
+#footer #tracpowered:hover { background: transparent }
+#footer p { margin: 0 }
+#footer p.left {
+  float: left;
+  margin-left: 1em;
+  padding: 0 1em;
+  border-left: 1px solid #d7d7d7;
+  border-right: 1px solid #d7d7d7;
+}
+#footer p.right {
+  float: right;
+  text-align: right;
+}
+
+#content { padding-bottom: 2em; position: relative }
+
+#help {
+ clear: both;
+ color: #999;
+ font-size: 90%;
+ margin: 1em;
+ text-align: right;
+}
+#help :link, #help :visited { cursor: help }
+#help hr { display: none }
+
+/* Page preferences form */
+#prefs {
+ background: #f7f7f0;
+ border: 1px outset #998;
+ float: right;
+ font-size: 9px;
+ padding: .8em;
+ position: relative;
+ margin: 0 1em 1em;
+}
+* html #prefs { width: 26em } /* Set width only for IE */
+#prefs input, #prefs select { font-size: 9px; vertical-align: middle }
+#prefs fieldset {
+ background: transparent;
+ border: none;
+ margin: .5em;
+ padding: 0;
+}
+#prefs fieldset legend {
+ background: transparent;
+ color: #000;
+ font-size: 9px;
+ font-weight: normal;
+ margin: 0 0 0 -1.5em;
+ padding: 0;
+}
+#prefs .buttons { text-align: right }
+
+/* Version information (browser, wiki, attachments) */
+#info {
+ margin: 1em 0 0 0;
+ background: #f7f7f0;
+ border: 1px solid #d7d7d7;
+ border-collapse: collapse;
+ border-spacing: 0;
+ clear: both;
+ width: 100%;
+}
+#info th, #info td { font-size: 85%; padding: 2px .5em; vertical-align: top }
+#info th { font-weight: bold; text-align: left; white-space: nowrap }
+#info td.message { width: 100% }
+#info .message ul { padding: 0; margin: 0 2em }
+#info .message p { margin: 0; padding: 0 }
+
+/* Wiki */
+.wikipage { padding-left: 18px }
+.wikipage h1, .wikipage h2, .wikipage h3 { margin-left: -18px }
+
+a.missing:link, a.missing:visited, span.missing { color: #998 }
+a.missing:link, a.missing:visited { background: #fafaf0 }
+a.missing:hover { color: #000 }
+a.closed:link, a.closed:visited { text-decoration: line-through }
+
+dl.wiki dt { font-weight: bold }
+dl.compact dt { float: left; padding-right: .5em }
+dl.compact dd { margin: 0; padding: 0 }
+
+pre.wiki, pre.literal-block {
+ background: #f7f7f7;
+ border: 1px solid #d7d7d7;
+ margin: 1em 1.75em;
+ padding: .25em;
+ overflow: auto;
+}
+
+blockquote.citation { 
+ margin: -0.6em 0;
+ border-style: solid; 
+ border-width: 0 0 0 2px; 
+ padding-left: .5em;
+ border-color: #b44; 
+}
+.citation blockquote.citation { border-color: #4b4; }
+.citation .citation blockquote.citation { border-color: #44b; }
+.citation .citation .citation blockquote.citation { border-color: #c55; }
+
+table.wiki {
+ border: 2px solid #ccc;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+table.wiki td { border: 1px solid #ccc;  padding: .1em .25em; }
+
+.wikitoolbar {
+ border: solid #d7d7d7;
+ border-width: 1px 1px 1px 0;
+ height: 18px;
+ width: 208px;
+}
+.wikitoolbar :link, .wikitoolbar :visited {
+ background: transparent url(../edit_toolbar.png) no-repeat;
+ border: 1px solid #fff;
+ border-left-color: #d7d7d7;
+ cursor: default;
+ display: block;
+ float: left;
+ width: 24px;
+ height: 16px;
+}
+.wikitoolbar :link:hover, .wikitoolbar :visited:hover {
+ background-color: transparent;
+ border: 1px solid #fb2;
+}
+.wikitoolbar a#em { background-position: 0 0 }
+.wikitoolbar a#strong { background-position: 0 -16px }
+.wikitoolbar a#heading { background-position: 0 -32px }
+.wikitoolbar a#link { background-position: 0 -48px }
+.wikitoolbar a#code { background-position: 0 -64px }
+.wikitoolbar a#hr { background-position: 0 -80px }
+.wikitoolbar a#np { background-position: 0 -96px }
+.wikitoolbar a#br { background-position: 0 -112px }
+
+/* Styles for the form for adding attachments. */
+#attachment .field { margin-top: 1.3em }
+#attachment label { padding-left: .2em }
+#attachment fieldset { margin-top: 2em }
+#attachment fieldset .field { float: left; margin: 0 1em .5em 0 }
+#attachment .options { float: left; padding: 0 0 1em 1em }
+#attachment br { clear: left }
+.attachment #preview { margin-top: 1em }
+
+/* Styles for the list of attachments. */
+#attachments { border: 1px outset #996; padding: 1em }
+#attachments .attachments { margin-left: 2em; padding: 0 }
+#attachments dt { display: list-item; list-style: square; }
+#attachments dd { font-style: italic; margin-left: 0; padding-left: 0; }
+
+
+/* Styles for tabular listings such as those used for displaying directory
+   contents and report results. */
+table.listing {
+ clear: both;
+ border-bottom: 1px solid #d7d7d7;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-top: 1em;
+ width: 100%;
+}
+table.listing th { text-align: left; padding: 0 1em .1em 0; font-size: 12px }
+table.listing thead { background: #f7f7f0 }
+table.listing thead th {
+ border: 1px solid #d7d7d7;
+ border-bottom-color: #999;
+ font-size: 11px;
+ font-weight: bold;
+ padding: 2px .5em;
+ vertical-align: bottom;
+}
+table.listing thead th :link:hover, table.listing thead th :visited:hover {
+ background-color: transparent;
+}
+table.listing thead th a { border: none; padding-right: 12px }
+table.listing th.asc a, table.listing th.desc a { font-weight: bold }
+table.listing th.asc a, table.listing th.desc a {
+ background-position: 100% 50%;
+ background-repeat: no-repeat;
+}
+table.listing th.asc a { background-image: url(../asc.png) }
+table.listing th.desc a { background-image: url(../desc.png) }
+table.listing tbody td, table.listing tbody th {
+ border: 1px dotted #ddd;
+ padding: .33em .5em;
+ vertical-align: top;
+}
+table.listing tbody td a:hover, table.listing tbody th a:hover {
+ background-color: transparent;
+}
+table.listing tbody tr { border-top: 1px solid #ddd }
+table.listing tbody tr.even { background-color: #fcfcfc }
+table.listing tbody tr.odd { background-color: #f7f7f7 }
+table.listing tbody tr:hover { background: #eed !important }
+
+/* Styles for the error page (and rst errors) */
+#content.error .message, div.system-message {
+ background: #fdc;
+ border: 2px solid #d00;
+ color: #500;
+ padding: .5em;
+ margin: 1em 0;
+}
+#content.error pre, div.system-message pre { margin-left: 1em; overflow: auto }
+div.system-message p { margin: 0; }
+div.system-message p.system-message-title { font-weight: bold; }
+
+/* Styles for search word highlighting */
+@media screen {
+ .searchword0 { background: #ff9 }
+ .searchword1 { background: #cfc }
+ .searchword2 { background: #cff }
+ .searchword3 { background: #ccf }
+ .searchword4 { background: #fcf }
+}
+
+@media print {
+ #header, #altlinks, #footer, #help { display: none }
+ .nav, form, .buttons form, form .buttons, form .inlinebuttons { display: none }
+ form.printableform { display: block }
+}
Index: /www/chrome/css/about.css
===================================================================
--- /www/chrome/css/about.css	(revision 2234)
+++ /www/chrome/css/about.css	(revision 2234)
@@ -0,0 +1,42 @@
+/* About config */
+#content.about_config table {
+ border-collapse: collapse;
+ margin: 2em 0;
+}
+#content.about_config th {
+ background: #f7f7f0;
+ font-weight: bold;
+ text-align: left;
+ vertical-align: top;
+}
+#content.about_config th.section {
+ text-align: right;
+}
+#content.about_config th, #content.about_config td {
+ border: 1px solid #ddd;
+ padding: 3px;
+}
+#content.about_config td.name { background:#f9f9f0; }
+#content.about_config td.value { background:#f9f9f0; font-weight: bold; }
+#content.about_config td.defaultvalue { font-family: monospace; background:#f9f9f0; }
+#content.about_config td.doc { padding: 3px 1em 3px 1em; }
+
+/* About plugins */
+#content.about_plugins h2 {
+ background: #f7f7f7;
+ border-bottom: 1px solid #d7d7d7;
+ margin: 2em 0 0;
+}
+#content.about_plugins table {
+ border-collapse: collapse;
+ margin: 1em 0;
+ table-layout: fixed;
+ width: 100%;
+}
+#content.about_plugins th, #content.about_plugins td { border: 1px solid #ddd; padding: 3px }
+#content.about_plugins th { background: #f7f7f0; font-weight: bold; text-align: right; vertical-align: top; width: 12em }
+#content.about_plugins td.module { font-family: monospace; }
+#content.about_plugins td.module .path { color: #999; font-size: 90%; }
+
+#content.about_plugins td.xtnpts { margin-top: 1em; }
+#content.about_plugins td.xtnpts ul { list-style: square; margin: 0; padding: 0 0 0 2em; }
Index: /www/chrome/css/code.css
===================================================================
--- /www/chrome/css/code.css	(revision 2234)
+++ /www/chrome/css/code.css	(revision 2234)
@@ -0,0 +1,161 @@
+div.code {
+ background: #f7f7f7;
+ border: 1px solid #d7d7d7;
+ margin: 1em 1.75em;
+ padding: .25em;
+ overflow: auto
+}
+
+div.code pre { margin: 0; }
+
+table.code {
+ border: 1px solid #ddd;
+ border-spacing: 0;
+ border-top: 0;
+ empty-cells: show;
+ font-size: 12px;
+ line-height: 130%;
+ padding: 0;
+ margin: 0 auto;
+ table-layout: fixed;
+ width: 100%;
+}
+table.code th {
+ border-right: 1px solid #d7d7d7;
+ border-bottom: 1px solid #998;
+ font-size: 11px;
+}
+table.code th.lineno { width: 4em }
+table.code thead th {
+ background: #eee;
+ border-top: 1px solid #d7d7d7;
+ color: #999;
+ padding: 0 .25em;
+ text-align: center;
+ white-space: nowrap;
+}
+table.code tbody th {
+ background: #eed;
+ color: #886;
+ font-weight: normal;
+ padding: 0 .5em;
+ text-align: right;
+ vertical-align: top;
+}
+table.code tbody th :link, table.code tbody th :visited {
+ border: none;
+ color: #886;
+ text-decoration: none;
+}
+table.code tbody th :link:hover, table.code tbody th :visited:hover {
+ color: #000;
+}
+table.code tbody td {
+ background: #fff;
+ font: normal 11px monospace;
+ overflow: hidden;
+ padding: 1px 2px;
+ vertical-align: top;
+}
+
+.image-file { background: #eee; padding: .3em }
+.image-file img { background: url(../imggrid.png) }
+
+/* Default */
+.code-block span {
+ font-family: monospace;
+}
+
+/* Comments */
+.code-comment, .css_comment, .c_comment, .c_commentdoc, .c_commentline,
+.c_commentlinedoc, .h_comment,.pl_commentline, .p_commentblock,
+.p_commentline, .hphp_comment, .hphp_commentblock, .hphp_commentline,
+.yaml_comment {
+ color: #998; 
+ font-style: italic;
+}
+
+/* Language keyword */
+.code-keyword, .pl_word  { color: #789; font-weight: bold }
+
+/* Type */
+.code-type, .c_word, .c_word2, .p_classname, .hphp_classname{
+ color: #468;
+ font-weight: bold;
+}
+
+/* Function */
+.code-func, .p_defname {
+ color: #900;
+ font-weight: bold;
+ border-bottom: none;
+}
+
+/* Pre-processor */
+.code-prep, .c_preprocessor, .pl_preprocessor, .yaml_identifier {
+ color: #999;
+ font-weight: bold;
+}
+
+/* Language construct */
+.code-lang, .p_word { color: #000; font-weight: bold }
+
+/* String */
+.code-string, .c_string, .c_stringeol, .css_doublestring, .css_singlestring,
+.h_singlestring, .h_doublestring, .pl_string, .pl_string_q, .pl_string_qq,
+.pl_string_qr, .pl_string_qw, .pl_string_qx, .pl_backticks, .pl_character,
+.p_string, .p_stringeol, .hphp_string, .hphp_stringeol, .hphp_triple,
+.hphp_tripledouble, .p_character, .p_triple, .p_tripledouble {
+ color: #b84;
+ font-weight: normal;
+}
+
+/* Variable name */
+.code-var { color: #f9f }
+
+/* SilverCity-specific styles */
+.css_id, .css_class, .css_pseudoclass, .css_tag { color: #900000 }
+.css_directive { color: #009000; font-weight: bold }
+.css_important { color: blue }
+.css_operator { color: #000090; font-weight: bold }
+.css_tag { font-weight: bold }
+.css_unknown_identifier, .css_unknown_pseudoclass { color: red }
+.css_value { color: navy }
+.c_commentdockeyword { color: navy; font-weight: bold }
+.c_commentdockeyworderror { color: red; font-weight: bold }
+.c_character, .c_regex, .c_uuid, .c_verbatim { color: olive }
+.c_number { color: #099 }
+.h_asp { color: #ff0 }
+.h_aspat { color: #ffdf00 }
+.h_attribute { color: teal }
+.h_attributeunknown { color: red }
+.h_cdata { color: #373 }
+.h_entity { color: purple }
+.h_number { color: #099 }
+.h_other { color: purple }
+.h_script, .h_tag, .h_tagend { color: navy }
+.h_tagunknown { color: red }
+.h_xmlend, .h_xmlstart { color: blue }
+.pl_datasection { color: olive }
+.pl_error { color: red; font-weight: bold }
+.pl_hash { color: #000 }
+.pl_here_delim, .pl_here_q, .pl_here_qq, .pl_here_qx, .pl_longquote { color: olive }
+.pl_number { color: #099 }
+.pl_pod { font-style: italic }
+.pl_regex, .pl_regsubst { color: olive }
+.p_number { color: #099 }
+.hphp_character { color: olive }
+.hphp_defname { color: #099; font-weight: bold }
+.hphp_number { color: #099 }
+.hphp_word { color: navy; font-weight: bold }
+.yaml_document { color: gray; font-style: italic }
+.yaml_keyword { color: #808 }
+.yaml_number { color: #800 }
+.yaml_reference { color: #088 }
+.v_comment { color: gray; font-style: italic }
+.v_commentline, .v_commentlinebang { color: red; font-style: italic }
+.v_number, .v_preprocessor { color: #099 }
+.v_string, .v_stringeol { color: olive }
+.v_user{ color: blue; font-weight: bold }
+.v_word, .v_word3 { color: navy; font-weight: bold }
+.v_word2 { color: green; font-weight: bold }
Index: /www/chrome/css/report.css
===================================================================
--- /www/chrome/css/report.css	(revision 2234)
+++ /www/chrome/css/report.css	(revision 2234)
@@ -0,0 +1,90 @@
+@import url(code.css);
+
+h1 .numrows, h2 .numrows {
+ margin-left: 1em;
+ color: #999; 
+ font-size: 65%; 
+ font-weight: normal; 
+}
+h2 {
+ background: #f7f7f7;
+ border-bottom: 1px solid #d7d7d7;
+ margin: 2em 0 0;
+ padding: 0 .33em;
+}
+#report-descr { margin: 0 2em; font-size: 90% }
+#report-notfound { margin: 2em; font-size: 110% }
+
+#query { clear: right }
+#query fieldset, #query fieldset input, #query fieldset select { font-size: 11px }
+#query fieldset { margin-top: 1em }
+#query .option, #query .option input, #query .option select { font-size: 11px }
+#query .option { float: left; line-height: 2em; margin: .9em 2.5em 0 .5em; padding: 0 0 .1em }
+#query .buttons { float: right; margin-top: .5em }
+#query .buttons input { margin: .5em }
+#query hr { clear: both; margin: 0; visibility: hidden }
+
+#filters table { width: 100% }
+#filters tr { height: 2em }
+#filters th, #filters td { padding: 0 .2em; vertical-align: middle }
+#filters th { font-size: 11px; text-align: right; white-space: nowrap; }
+#filters td label { font-size: 11px }
+#filters td.mode { text-align: right }
+#filters td.filter { width: 100% }
+#filters td.filter label { padding-right: 1em }
+#filters td.actions { text-align: right; white-space: nowrap }
+
+/* Styles for the report list and the report results table
+   (extends the styles for "table.listing") */
+.reports td.title { width: 100% }
+.reports tbody td :link, .reports tbody td :visited,
+.tickets tbody td :link, .tickets tbody td :visited { display: block }
+.tickets { border-bottom: none }
+.tickets thead th { text-transform: capitalize; white-space: nowrap; }
+.tickets tbody td, .reports tbody td { padding: .1em .5em !important }
+.tickets tbody td a, .reports tbody td a { border-bottom: none }
+.tickets tbody td.id :link, .tickets tbody td.id :visited {
+ font-weight: bold;
+}
+.tickets tbody tr:hover { background: #eed; color: #000 }
+.tickets tr.color1-odd  { background: #fdc; border-color: #e88; color: #a22 }
+.tickets tr.color1-even { background: #fed; border-color: #e99; color: #a22 }
+.tickets tr.color2-odd  { background: #ffb; border-color: #eea; color: #880 }
+.tickets tr.color2-even { background: #ffd; border-color: #dd8; color: #880 }
+.tickets tr.color3-odd  { background: #fbfbfb; border-color: #ddd; color: #444 }
+.tickets tr.color3-even { background: #f6f6f6; border-color: #ccc; color: #333 }
+.tickets tr.color4-odd { background: #e7ffff; border-color: #cee; color: #099 }
+.tickets tr.color4-even { background: #dff; border-color: #bee; color: #099 }
+.tickets tr.color5-odd { background: #e7eeff; border-color: #cde; color: #469 }
+.tickets tr.color5-even { background: #dde7ff; border-color: #cde; color: #469 }
+.tickets tr.color6-odd  { background: #f0f0f0; border-color: #ddd; color: #888 }
+.tickets tr.color6-even { background: #f7f7f7; border-color: #ddd; color: #888 }
+.tickets tr.color6-odd a, .color6-even a { color: #b66 }
+.tickets tbody tr.fullrow td, .tickets tbody td.fullrow {
+ border: none;
+ color: #333;
+ background: transparent;
+ padding: 0 1em 2em 2em !important;
+ font-size: 85%;
+}
+.tickets tbody tr.fullrow:hover { background: transparent !important }
+.tickets .fullrow :link, .tickets .fullrow :visited { display: inline }
+.tickets .fullrow .meta { color: #999; margin-bottom: -.5em; margin-left: -1em }
+.tickets .fullrow hr { display: none }
+
+/* Query results table */
+table.tickets tbody tr.added td { font-weight: bold }
+table.tickets tbody tr.changed td { font-style: italic }
+table.tickets tbody tr.removed td { color: #999 }
+table.tickets tbody tr.prio1 { background: #fdc; border-color: #e88 }
+table.tickets tbody tr.even.prio1 { background: #fed; border-color: #e99 }
+table.tickets tbody tr.prio2 { background: #ffb; border-color: #eea }
+table.tickets tbody tr.even.prio2 { background: #ffd; border-color: #dd8 }
+table.tickets tbody tr.prio3  { background: #fbfbfb; border-color: #ddd }
+table.tickets tbody tr.even.prio3 { background: #f6f6f6; border-color: #ccc }
+table.tickets tbody tr.prio4 { background: #e7ffff; border-color: #cee }
+table.tickets tbody tr.even.prio4 { background: #dff; border-color: #bee }
+table.tickets tbody tr.prio5 { background: #e7eeff; border-color: #cde }
+table.tickets tbody tr.even.prio5 { background: #dde7ff }
+table.tickets tbody tr.prio6 { background: #f0f0f0; border-color: #ddd }
+table.tickets tbody tr.even.prio6 { background: #f7f7f7 }
Index: /www/chrome/css/changeset.css
===================================================================
--- /www/chrome/css/changeset.css	(revision 2234)
+++ /www/chrome/css/changeset.css	(revision 2234)
@@ -0,0 +1,42 @@
+/* Changeset overview */
+#overview .files { padding-top: 1em }
+#overview .files ul { margin: 0; padding: 0 }
+#overview .files li { list-style-type: none }
+#overview .files li .comment { display: none }
+#overview .files li div {
+ border: 1px solid #999;
+ float: left;
+ margin: .2em .5em 0 0;
+ overflow: hidden;
+ width: .8em; height: .8em;
+}
+#overview div.add div, #overview div.cp div, #overview div.mv div {
+ border: 0;
+ margin: 0;
+ float: right;
+ width: .35em; 
+}
+
+#overview .changeset { padding: 0 0 1px }
+#overview dd.changeset p {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+#overview .files { padding: 1px 0 }
+
+.diff ul.props {
+ font-size: 90%;
+ list-style: disc;
+ margin: .5em 0 0;
+ padding: 0 .5em 1em 2em;
+}
+.diff ul.props li { margin: 0; padding: 0 }
+
+#title dl { display: inline; font-size: 110% }
+#title dt { 
+ display: inline; 
+ font-size: 110%;
+ font-weight: bold;
+ margin-left: 3em;
+}
+#title dd { display: inline; margin-left: 0.4em }
Index: /www/chrome/css/browser.css
===================================================================
--- /www/chrome/css/browser.css	(revision 2234)
+++ /www/chrome/css/browser.css	(revision 2234)
@@ -0,0 +1,127 @@
+#prefs { margin-top: -1.6em }
+* html #prefs { width: 34em } /* Set width only for IE */
+#prefs fieldset label { display: block }
+#prefs .buttons { margin-top: -1.6em }
+#prefs .choice { margin-top: -0.6em }
+
+#legend { clear: right; }
+
+/* Browser */
+h1 { margin: 0; padding: 0 0 .5em }
+h1 :link, h1 :visited, h1 .filename { border: none; padding: 0 .2em }
+h1 :link, h1 :visited { color: #b00 }
+h1 .first:link, h1 .first:visited { color: #998 }
+h1 .sep { color: #666; padding: 0 .1em }
+
+#jumprev { float: right; font-size: 10px; margin: 0 0 0 }
+#jumprev form { margin: 0 }
+#jumprev input { font-size: 10px; margin-right: 0 }
+
+/* Styles for the directory entries table
+   (extends the styles for "table.listing") */
+#dirlist { margin-top: 0 }
+#dirlist td.rev, #dirlist td.age, #dirlist td.change {
+ color: #888;
+ white-space: nowrap;
+ vertical-align: baseline;
+}
+#dirlist td.rev {
+ font-family: monospace;
+ letter-spacing: -0.08em;
+ font-size: 90%;
+ text-align: right;
+}
+#dirlist td.size {  
+ color: #888;
+ white-space: nowrap;
+ text-align: right;
+ vertical-align: middle;
+ font-size: 70%;
+}
+#dirlist td.name { width: 100% }
+#dirlist td.name a, #dirlist td.name span {
+ background-position: 0% 50%;
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+#dirlist td.name a.parent { background-image: url(../parent.png) }
+#dirlist td.name a.dir { background-image: url(../folder.png) }
+#dirlist td.name a.file { background-image: url(../file.png) }
+#dirlist td.name a, #dirlist td.rev a { border-bottom: none; display: block }
+#dirlist td.rev { text-align: right }
+#dirlist td.change { font-size: 85%; vertical-align: middle; white-space: nowrap }
+
+/* Style for the ''View Changes'' button */
+#anydiff { margin: 0 0 1em; float: left }
+#anydiff form, #anydiff div, #anydiff h2 { display: inline }
+#anydiff input {  vertical-align: baseline; margin: 0 -0.5em 0 1em }
+@media print {
+ #anydiff form { display:  none }
+}
+
+/* Log */
+tr.diff input { padding: 0 1em; margin: 0 }
+
+div.buttons { clear: left }
+@media print { 
+ th.diff, td.diff { display: none }
+}
+
+/* Styles for the revision log table (extends the styles for "table.listing") */
+#chglist { margin-top: 0 }
+#chglist td.change span { 
+ border: 1px solid #999;
+ display: block;
+ margin: .2em .5em 0 0;
+ width: .8em; height: .8em;
+}
+#chglist td.diff { white-space: nowrap }
+#chglist td.change .comment { display: none }
+#chglist td.old_path { font-style: italic }
+#chglist td.date {
+ font-size: 85%;
+ vertical-align: top;
+ padding-top: 0.55em;
+ white-space: nowrap;
+}
+#chglist td.author { font-size: 85%; vertical-align: top; padding-top: 0.55em }
+#chglist td.rev, #chglist td.chgset { 
+ font-family: monospace;  
+ letter-spacing: -0.08em;
+ font-size: 90%;
+ text-align: right; 
+}
+#chglist td.rev a, #chglist td.chgset a { border-bottom: none }
+#chglist td.summary { 
+ width: 100%; 
+ font-size: 85%; 
+ vertical-align: middle; 
+ white-space: nowrap 
+}
+#chglist .verbose td.summary {
+ border: none;
+ color: #333;
+ padding: .5em 1em 1em 2em;
+ font-size: 90%; 
+ white-space: normal 
+}
+
+#chglist td.summary * { margin-top: 0; margin-bottom: 0 }
+
+#paging { margin: 1em 0 }
+
+/* Styles for the revision info in the file view (see also trac.css) */
+#info { margin: 0; }
+#info .props {
+ color: #666;
+ list-style: square;
+ margin: 0 0 .4em 1.6em;
+ padding: 0;
+}
+#info .props li { padding: 0; overflow: auto; }
+
+/* Styles for the HTML preview */
+#preview { background: #fff; clear: both; margin: 0 }
+#preview .code-block { border-top: 1px solid #999; margin: 0 }
+#preview .image-file { overflow: hidden }
+#preview .image-file img { max-width: 100% }
Index: /www/chrome/css/roadmap.css
===================================================================
--- /www/chrome/css/roadmap.css	(revision 2234)
+++ /www/chrome/css/roadmap.css	(revision 2234)
@@ -0,0 +1,83 @@
+/* General styles for the progress bars */
+table.progress {
+ border: 1px solid #d7d7d7;
+ border-collapse: collapse;
+ border-spacing: 0;
+ float: left;
+ margin: 0;
+ padding: 0;
+ empty-cells: show;
+}
+table.progress a, table.progress :link, table.progress :visited,
+table.progress :link:hover, table.progress :visited:hover {
+ border: none;
+ display: block;
+ width: 100%;
+ height: 1.2em;
+ padding: 0;
+ margin: 0;
+ text-decoration: none
+}
+table.progress td { background: #fff; padding: 0 }
+table.progress td.closed { background: #bae0ba }
+table.progress td :hover { background: none }
+p.percent { font-size: 10px; line-height: 2.4em; margin: 0.9em 0 0 }
+
+/* Styles for the roadmap view */
+ul.milestones { margin: 2em 0 0; padding: 0 }
+li.milestone { list-style: none; margin-bottom: 4em }
+.milestone .info { white-space: nowrap }
+.milestone .info h2 {
+ background: #f7f7f7;
+ border-bottom: 1px solid #d7d7d7;
+ margin: 0;
+}
+.milestone .info h2 :link, .milestone .info h2 :visited {
+ color: #000;
+ display: block;
+ border-bottom: none;
+}
+.milestone .info h2 :link:hover, .milestone .info h2 :visited:hover {
+ color: #000;
+}
+.milestone .info h2 em { color: #b00; font-style: normal }
+.milestone .info .date {
+ color: #888;
+ font-size: 11px;
+ font-style: italic;
+ margin: 0;
+}
+.milestone .info .progress { margin: 1em 1em 0; width: 40em; max-width: 70% }
+.milestone .info dl {
+ font-size: 10px;
+ font-style: italic;
+ margin: 0 1em 2em;
+ white-space: nowrap;
+}
+.milestone .info dt { display: inline; margin-left: .5em }
+.milestone .info dd { display: inline; margin: 0 1em 0 .5em }
+.milestone .description { margin-left: 1em }
+
+/* Styles for the milestone view */
+.milestone .date { color: #888; font-style: italic; margin: 0 }
+.milestone .description { margin: 1em 0 2em }
+
+/* Styles for the milestone statistics table */
+#stats { float: right; margin: 0 0 2em 2em; width: 400px; max-width: 40% }
+#stats legend { white-space: nowrap }
+#stats table { border-collapse: collapse; width: 100% }
+#stats th, #stats td { font-size: 10px; padding: 0; white-space: nowrap }
+#stats th { text-align: right; text-transform: capitalize }
+#stats th :link, #stats th :visited { border: none }
+#stats td { padding-left: 0.5em; width: 100% }
+#stats td table.progress { margin: 3px 4px 3px 0 }
+#stats td table.progress td { padding: 0 }
+#stats td p.percent { line-height: 1.2em; margin-top: 3px }
+
+/* Styles for the milestone edit form */
+#edit fieldset { margin: 1em 0 }
+#edit em { color: #888; font-size: smaller }
+#edit .disabled em { color: #d7d7d7 }
+#edit .field { margin-top: 1.3em }
+#edit label { padding-left: .2em }
+#edit textarea#description { width: 97% }
Index: /www/chrome/css/ticket.css
===================================================================
--- /www/chrome/css/ticket.css	(revision 2234)
+++ /www/chrome/css/ticket.css	(revision 2234)
@@ -0,0 +1,98 @@
+@import url(code.css);
+
+#content { width: 700px; max-width: 100% }
+
+#newticket #description { width: 100% }
+#newticket #properties { width: 100% }
+
+#ticket {
+ background: #ffd;
+ border: 1px outset #996;
+ margin-top: 1em;
+ padding: .5em 1em;
+ position: relative;
+}
+h1 .status { color: #444; text-transform: lowercase; }
+#ticket h2.summary { margin: 0 0 .8em 0 }
+#ticket .date { color: #996; float: right; font-size: 85%; position: relative }
+#ticket .date p { margin: 0 }
+
+#ticket table.properties {
+ border-top: 1px solid #dd9;
+ border-collapse: collapse;
+ table-layout: fixed;
+ width: 100%;
+}
+#ticket table.properties tr { border-bottom: 1px dotted #eed }
+#ticket table.properties td, #ticket table.properties th {
+ font-size: 80%;
+ padding: .5em 1em;
+ vertical-align: top;
+}
+#ticket table.properties th {
+ color: #663;
+ font-weight: normal;
+ text-align: left;
+ width: 20%;
+}
+#ticket table.properties td { width: 30% }
+#ticket table.properties .description { border-top: 1px solid #dd9 }
+
+
+#ticket .description h3 {
+ border-bottom: 1px solid #dd9;
+ color: #663;
+ font-size: 100%;
+ font-weight: normal;
+}
+#ticket .description h3 .lastmod {
+ font-size: 90%;
+}
+#ticket .inlinebuttons { 
+ float: right;
+ position: relative;
+ bottom: 0.3em;
+}
+
+#changelog { border: 1px outset #996; padding: 1em }
+#changelog h3 {
+ border-bottom: 1px solid #d7d7d7;
+ color: #999;
+ font-size: 100%;
+ font-weight: normal;
+}
+#changelog .threading, #changelog .inlinebuttons {
+ float: right;
+ position: relative;
+ bottom: 0.3em;
+}
+
+#changelog .changes { list-style: square; margin-left: 2em; padding: 0 }
+#changelog .comment { margin-left: 2em }
+
+form .field { margin-top: .75em; width: 100% }
+form #comment { width: 100% }
+
+#properties { white-space: nowrap; line-height: 160%; padding: .5em }
+#properties table { border-spacing: 0; width: 100%; }
+#properties table th {
+ padding: .4em;
+ text-align: right;
+ width: 20%;
+ vertical-align: top;
+}
+#properties table th.col2 { border-left: 1px dotted #d7d7d7 }
+#properties table td { vertical-align: middle; width: 30% }
+#properties table td.fullrow { vertical-align: middle; width: 80% }
+
+#action { line-height: 2em }
+
+fieldset.radio { border: none; margin: 0; padding: 0 }
+fieldset.radio legend {
+ color: #000;
+ float: left;
+ font-size: 100%;
+ font-weight: normal;
+ padding: 0 1em 0 0;
+}
+fieldset.radio label { padding-right: 1em }
Index: /www/chrome/css/wiki.css
===================================================================
--- /www/chrome/css/wiki.css	(revision 2234)
+++ /www/chrome/css/wiki.css	(revision 2234)
@@ -0,0 +1,53 @@
+@import url(code.css);
+
+/* Styles for the page editing form */
+#edit #rows { float: right; font-size: 80% }
+#edit #rows select { font-size: 90% }
+#edit #text { clear: both; width: 100% }
+#edit .wikitoolbar { float: left; }
+#changeinfo { padding: .5em }
+#changeinfo .field { float: left; margin: 0 1em .5em 0 }
+#changeinfo br { clear: left }
+#changeinfo .options { padding: 0 0 1em 1em }
+#changeinfo .options, #changeinfo .buttons { clear: left }
+#delete { margin-left: 6em }
+#preview {
+ background: #f4f4f4 url(../draft.png);
+ margin: 1em 0 2em;
+ overflow: auto;
+}
+
+/* Diff view */
+#overview .multi { color: #999 }
+#overview .ipnr { color: #999; font-size: 80% }
+#overview .comment { padding: 1em 0 0 }
+
+/* Styles for the page history table
+   (extends the styles for "table.listing") */
+#wikihist td { padding: 0 .5em }
+#wikihist td.date, #wikihist td.diff, #wikihist td.version,
+#wikihist td.author {
+ white-space: nowrap;
+}
+#wikihist td.version { text-align: center }
+#wikihist td.comment { width: 100% }
+
+@media print { 
+ th.diff, td.diff { display: none }
+}
+
+/* Styles for the TracGuideToc wikimacro */
+.wiki-toc {
+ padding: .5em 1em;
+ margin: 0 0 2em 1em;
+ float: right;
+ border: 1px outset #ddc;
+ background: #ffd;
+ font-size: 85%;
+ position: relative;
+}
+.wiki-toc h4 { font-size: 12px; margin: 0 }
+.wiki-toc ul, .wiki-toc ol { list-style: none; padding: 0; margin: 0 }
+.wiki-toc ul ul, .wiki-toc ol ol { padding-left: 1.2em }
+.wiki-toc li { margin: 0; padding: 0 }
+.wiki-toc .active { background: #ff9; position: relative; }
Index: /www/chrome/css/search.css
===================================================================
--- /www/chrome/css/search.css	(revision 2234)
+++ /www/chrome/css/search.css	(revision 2234)
@@ -0,0 +1,14 @@
+#content form { margin: 1em 0 0 }
+#content form p { margin: .5em 0 }
+#content hr { clear: left; margin-bottom: 0 }
+#notfound { margin: 2em; font-size: 110% }
+
+#results { margin-right: 3em }
+#results dt { margin: 1.5em 0 0 }
+#results dt a { color: #33c }
+#results dd { font-size: 80%; margin: 0; padding: 0 }
+#results .author, #results .date, #results .keywords { color: #090 }
+
+#quickjump { font-style: italic; font-weight: bold; }
+
+#paging { margin: 0 0 2em; text-align: center }
Index: /www/chrome/css/timeline.css
===================================================================
--- /www/chrome/css/timeline.css	(revision 2234)
+++ /www/chrome/css/timeline.css	(revision 2234)
@@ -0,0 +1,71 @@
+/* Timeline */
+
+* html #prefs { width: 34em } /* Set width only for IE */
+#prefs fieldset label { display: block }
+#prefs .buttons { margin-top: -1.6em }
+
+h2 {
+ background: #f7f7f7;
+ border-bottom: 1px solid #d7d7d7;
+ font-size: 105%;
+ margin: 2em 0 .5em;
+}
+dl { line-height: 1.3em; margin-left: 1em }
+dt { background: 3px 4px no-repeat; padding: 0 }
+dt :link, dt :visited {
+ background: 3px 3px no-repeat;
+ border: none;
+ color: #000;
+ padding: 0 4px 2px 22px;
+}
+dt>:link, dt>:visited {
+ /* Hide from IE/Win */
+ background-position: 3px 4px;
+ display: block;
+}
+dt :link:hover, dt :visited:hover { background-color: #eed; color: #000 }
+dt em {
+ border-bottom: 1px dotted #bbb;
+ color: #b00;
+ font-style: normal;
+ text-decoration: none;
+}
+dt .time { color: #999; font-size: 80%; }
+dd { 
+ font-size: 80%;
+ margin: 0 0 .75em 5.5em;
+ padding: 0;
+ color: #776;
+}
+
+/* Apply icon background-image twice to avoid hover-flicker in IE/Win */
+dt.changeset, dt.changeset a { background-image: url(../changeset.png) !important }
+dt.newticket, dt.newticket a { background-image: url(../newticket.png) !important }
+dt.editedticket, dt.editedticket a { background-image: url(../editedticket.png) !important }
+dt.closedticket, dt.closedticket a { background-image: url(../closedticket.png) !important }
+dt.wiki, dt.wiki a { background-image: url(../wiki.png) !important }
+dt.milestone, dt.milestone a { background-image: url(../milestone.png) !important }
+dt.attachment, dt.attachment a { background-image: url(../attachment.png) !important }
+
+/* styles for the 'changeset_long_messages' option */
+dd.changeset p { margin: 0; padding: 0 }
+dd.changeset ul { padding-left: 15px; }
+
+/* Styles for the 'changeset_show_files' option */
+dd.changeset .changes { color: #aaa; font-size: 90%; }
+dd.changeset ul.changes { 
+ padding-left: 0;
+ list-style-type: none;
+}
+dd.changeset .changes li div {
+ border: 1px solid #999;
+ float: left;
+ margin: .4em .5em 0 0;
+ overflow: hidden;
+ width: .8em; height: .8em;
+}
+dd.changeset .changes .add     { background: #bfb }
+dd.changeset .changes .delete  { background: #f88 }
+dd.changeset .changes .edit    { background: #fd8 }
+dd.changeset .changes .copy    { background: #88f }
+dd.changeset .changes .move    { background: #ccc }
Index: /www/chrome/css/diff.css
===================================================================
--- /www/chrome/css/diff.css	(revision 2234)
+++ /www/chrome/css/diff.css	(revision 2234)
@@ -0,0 +1,163 @@
+/* Diff preferences */
+#prefs fieldset { margin: 1em .5em .5em; padding: .5em 1em 0 }
+
+/* Diff/change overview */
+#overview { line-height: 130%; margin-top: 1em; padding: .5em }
+#overview dt.property {
+ font-weight: bold;
+ padding-right: .25em;
+ position: absolute;
+ left: 0;
+ text-align: right;
+ width: 7.75em;
+}
+#overview dd { margin-left: 8em }
+
+#overview .message { padding: 1em 0 1px }
+#overview dd.message p, #overview dd.message ul, #overview dd.message ol,
+#overview dd.message pre { margin-bottom: 1em; margin-top: 0; }
+
+/* Colors for change types */
+#chglist .edit, #overview .mod, .diff #legend .mod { background: #fd8 }
+#chglist .delete, #overview .rem, .diff #legend .rem { background: #f88 }
+#chglist .add, #overview .add, .diff #legend .add { background: #bfb }
+#chglist .copy, #overview .cp, .diff #legend .cp { background: #88f }
+#chglist .move, #overview .mv, .diff #legend .mv { background: #ccc }
+#chglist .unknown { background: #fff }
+
+/* Legend for diff colors */
+.diff #legend {
+ float: left;
+ font-size: 9px;
+ line-height: 1em;
+ margin: 1em 0;
+ padding: .5em;
+}
+.diff #legend h3 { display: none; }
+.diff #legend dt {
+ background: #fff;
+ border: 1px solid #999;
+ float: left;
+ margin: .1em .5em .1em 2em;
+ overflow: hidden;
+ width: .8em; height: .8em;
+}
+.diff #legend dl, .diff #legend dd {
+ display: inline;
+ float: left;
+ padding: 0;
+ margin: 0;
+ margin-right: .5em;
+}
+
+/* Styles for the list of diffs */
+.diff ul.entries { clear: both; margin: 0; padding: 0 }
+.diff ul.entries ul.props li { overflow: auto; }
+.diff li.entry {
+ background: #f7f7f7;
+ border: 1px solid #d7d7d7;
+ list-style-type: none;
+ margin: 0 0 2em;
+ padding: 2px;
+ position: relative;
+ width: 100%;
+}
+.diff h2 {
+ color: #333;
+ font-size: 14px;
+ letter-spacing: normal;
+ margin: 0 auto;
+ padding: .1em 0 .25em .5em;
+}
+
+/* Styles for the actual diff tables (side-by-side and inline) */
+.diff table {
+ border: 1px solid #ddd;
+ border-spacing: 0;
+ border-top: 0;
+ empty-cells: show;
+ font-size: 12px;
+ line-height: 130%;
+ padding: 0;
+ margin: 0 auto;
+ table-layout: fixed;
+ width: 100%;
+}
+.diff table col.lineno { width: 4em }
+.diff table th {
+ border-right: 1px solid #d7d7d7;
+ border-bottom: 1px solid #998;
+ font-size: 11px;
+}
+.diff table thead th {
+ background: #eee;
+ border-top: 1px solid #d7d7d7;
+ color: #999;
+ padding: 0 .25em;
+ text-align: center;
+ white-space: nowrap;
+}
+.diff table tbody th {
+ background: #eed;
+ color: #886;
+ font-weight: normal;
+ padding: 0 .5em;
+ text-align: right;
+ vertical-align: top;
+}
+.diff table tbody td {
+ background: #fff;
+ font: normal 11px monospace;
+ overflow: visible;
+ padding: 1px 2px;
+ vertical-align: top;
+}
+.diff table tbody.skipped td {
+ background: #f7f7f7;
+ border: 1px solid #d7d7d7;
+}
+.diff td ins, .diff td del {text-decoration: none;}
+
+/* Styles for the inline diff */
+.diff table.inline tbody.mod td.l, .diff table.inline tbody.rem td.l {
+ background: #fdd;
+ border-color: #c00;
+ border-style: solid;
+ border-width: 0 1px 0 1px;
+}
+.diff table.inline tbody.mod td.r, .diff table.inline tbody.add td.r {
+ background: #dfd;
+ border-color: #0a0;
+ border-style: solid;
+ border-width: 0 1px 0 1px;
+}
+.diff table.inline tbody.mod tr.first td.l,
+.diff table.inline tbody.rem tr.first td.l { border-top-width: 1px }
+.diff table.inline tbody.mod tr.last td.l,
+.diff table.inline tbody.rem tr.last td.l { border-bottom-width: 1px }
+.diff table.inline tbody.mod tr.first td.r,
+.diff table.inline tbody.add tr.first td.r { border-top-width: 1px }
+.diff table.inline tbody.mod tr.last td.r,
+.diff table.inline tbody.add tr.last td.r { border-bottom-width: 1px }
+.diff table.inline tbody.mod td del { 
+ background: #e99; 
+ color: #000;
+ white-space: pre;
+}
+.diff table.inline tbody.mod td ins { 
+ background: #9e9; 
+ color: #000;
+ white-space: pre;
+}
+
+/* Styles for the side-by-side diff */
+.diff table.sidebyside colgroup.content { width: 50% }
+.diff table.sidebyside tbody.mod td.l { background: #fe9 }
+.diff table.sidebyside tbody.mod td.r { background: #fd8 }
+.diff table.sidebyside tbody.add td.l { background: #dfd }
+.diff table.sidebyside tbody.add td.r { background: #cfc }
+.diff table.sidebyside tbody.rem td.l { background: #f88 }
+.diff table.sidebyside tbody.rem td.r { background: #faa }
+.diff table.sidebyside tbody.mod del, .diff table.sidebyside tbody.mod ins {
+ background: #fc0; 
+}
Index: /www/chrome/README
===================================================================
--- /www/chrome/README	(revision 2234)
+++ /www/chrome/README	(revision 2234)
@@ -0,0 +1,5 @@
+This directory contains files used by Trac's default clearsilver templates.
+
+Local modifications to these files might be lost during the installation of 
+a new Trac version. This can be avoided by making a copy of this entire
+directory before beginning modifications.
Index: /www/chrome/js/query.js
===================================================================
--- /www/chrome/js/query.js	(revision 2234)
+++ /www/chrome/js/query.js	(revision 2234)
@@ -0,0 +1,271 @@
+function initializeFilters() {
+
+  // Bail early for Konqueror and IE5.2/Mac, which don't fully support dynamic
+  // creation of form controls
+  try {
+    var test = document.createElement("input");
+    test.type = "button";
+    if (test.type != "button") throw Error();
+  } catch (e) {
+    return;
+  }
+
+  // Removes an existing row from the filters table
+  function removeRow(button, propertyName) {
+    var tr = getAncestorByTagName(button, "tr");
+
+    var mode = null;
+    var selects = tr.getElementsByTagName("select");
+    for (var i = 0; i < selects.length; i++) {
+      if (selects[i].name == propertyName + "_mode") {
+        mode = selects[i];
+        break;
+      }
+    }
+    if (mode && (getAncestorByTagName(mode, "tr") == tr)) {
+      // Check whether there are more 'or' rows for this filter
+      var next = tr.nextSibling;
+      if (next && (next.className == propertyName)) {
+        function getChildElementAt(e, idx) {
+          e = e.firstChild;
+          var cur = 0;
+          while (cur <= idx) {
+            while (e && e.nodeType != 1) e = e.nextSibling;
+            if (cur++ == idx) break;
+            e = e.nextSibling;
+          }
+          return e;
+        }
+
+        var thisTh = getChildElementAt(tr, 0);
+        var nextTh = getChildElementAt(next, 0);
+        next.insertBefore(thisTh, nextTh);
+        nextTh.colSpan = 1;
+
+        thisTd = getChildElementAt(tr, 0);
+        nextTd = getChildElementAt(next, 1);
+        next.replaceChild(thisTd, nextTd);
+      }
+    }
+
+    var tBody = tr.parentNode;
+    tBody.deleteRow(tr.sectionRowIndex);
+    if (!tBody.rows.length) {
+        tBody.parentNode.removeChild(tBody);
+    }
+    
+    if (propertyName) {
+      var select = document.forms["query"].elements["add_filter"];
+      for (var i = 0; i < select.options.length; i++) {
+        var option = select.options[i];
+        if (option.value == propertyName) option.disabled = false;
+      }
+    }
+  }
+
+  // Initializes a filter row, the 'input' parameter is the submit
+  // button for removing the filter
+  function initializeFilter(input) {
+    var removeButton = document.createElement("input");
+    removeButton.type = "button";
+    removeButton.value = input.value;
+    if (input.name.substr(0, 10) == "rm_filter_") {
+      removeButton.onclick = function() {
+        var endIndex = input.name.search(/_\d+$/);
+        if (endIndex < 0) endIndex = input.name.length;
+        removeRow(removeButton, input.name.substring(10, endIndex));
+        return false;
+      }
+    } else {
+      removeButton.onclick = function() {
+        removeRow(removeButton);
+        return false;
+      }
+    }
+    input.parentNode.replaceChild(removeButton, input);
+  }
+
+  // Make the submit buttons for removing filters client-side triggers
+  var filters = document.getElementById("filters");
+  var inputs = filters.getElementsByTagName("input");
+  for (var i = 0; i < inputs.length; i++) {
+    var input = inputs[i];
+    if (input.type == "submit" && input.name
+     && input.name.match(/^rm_filter_/)) {
+      initializeFilter(input);
+    }
+  }
+
+  // Make the drop-down menu for adding a filter a client-side trigger
+  var addButton = document.forms["query"].elements["add"];
+  addButton.parentNode.removeChild(addButton);
+  var select = document.getElementById("add_filter");
+  select.onchange = function() {
+    if (select.selectedIndex < 1) return;
+
+    if (select.options[select.selectedIndex].disabled) {
+      // Neither IE nor Safari supported disabled options at the time this was
+      // written, so alert the user
+      alert("A filter already exists for that property");
+      return;
+    }
+
+    // Convenience function for creating a <label>
+    function createLabel(text, htmlFor) {
+      var label = document.createElement("label");
+      if (text) label.appendChild(document.createTextNode(text));
+      if (htmlFor) label.htmlFor = htmlFor;
+      return label;
+    }
+
+    // Convenience function for creating an <input type="checkbox">
+    function createCheckbox(name, value, id) {
+      var input = document.createElement("input");
+      input.type = "checkbox";
+      if (name) input.name = name;
+      if (value) input.value = value;
+      if (id) input.id = id;
+      return input;
+    }
+
+    // Convenience function for creating an <input type="radio">
+    function createRadio(name, value, id) {
+      var input = document.createElement("input");
+      input.type = "radio";
+      if (name) input.name = name;
+      if (value) input.value = value;
+      if (id) input.id = id;
+      return input;
+    }
+
+    // Convenience function for creating a <select>
+    function createSelect(name, options, optional) {
+      var e = document.createElement("select");
+      if (name) e.name = name;
+      if (optional) e.options[0] = new Option();
+      if (options) {
+        for (var i = 0; i < options.length; i++) {
+          var option;
+          if (typeof(options[i]) == "object") {
+            option = new Option(options[i].text, options[i].value);
+          } else {
+            option = new Option(options[i], options[i]);
+          }
+          e.options[e.options.length] = option;
+        }
+      }
+      return e;
+    }
+
+    var propertyName = select.options[select.selectedIndex].value;
+    var property = properties[propertyName];
+    var table = document.getElementById("filters").getElementsByTagName("table")[0];
+    var tr = document.createElement("tr");
+    tr.className = propertyName;
+
+    var alreadyPresent = false;
+    for (var i = 0; i < table.rows.length; i++) {
+      if (table.rows[i].className == propertyName) {
+        var existingTBody = table.rows[i].parentNode;
+        alreadyPresent = true;
+        break;
+      }
+    }
+
+    // Add the row header
+    var th = document.createElement("th");
+    th.scope = "row";
+    if (!alreadyPresent) {
+      th.appendChild(createLabel(property.label));
+    } else {
+      th.colSpan = 2;
+      th.appendChild(createLabel("or"));
+    }
+    tr.appendChild(th);
+
+    var td = document.createElement("td");
+    if (property.type == "radio" || property.type == "checkbox") {
+      td.colSpan = 2;
+      td.className = "filter";
+      if (property.type == "radio") {
+        for (var i = 0; i < property.options.length; i++) {
+          var option = property.options[i];
+          td.appendChild(createCheckbox(propertyName, option,
+            propertyName + "_" + option));
+          td.appendChild(document.createTextNode(" "));
+          td.appendChild(createLabel(option ? option : "none",
+            propertyName + "_" + option));
+        }
+      } else {
+        td.appendChild(createRadio(propertyName, "1", propertyName + "_on"));
+        td.appendChild(document.createTextNode(" "));
+        td.appendChild(createLabel("yes", propertyName + "_on"));
+        td.appendChild(createRadio(propertyName, "!1", propertyName + "_off"));
+        td.appendChild(document.createTextNode(" "));
+        td.appendChild(createLabel("no", propertyName + "_off"));
+      }
+      tr.appendChild(td);
+    } else {
+      if (!alreadyPresent) {
+        // Add the mode selector
+        td.className = "mode";
+        var modeSelect = createSelect(propertyName + "_mode",
+                                      modes[property.type]);
+        td.appendChild(modeSelect);
+        tr.appendChild(td);
+      }
+
+      // Add the selector or text input for the actual filter value
+      td = document.createElement("td");
+      td.className = "filter";
+      if (property.type == "select") {
+        var element = createSelect(propertyName, property.options, true);
+      } else if (property.type == "text") {
+        var element = document.createElement("input");
+        element.type = "text";
+        element.name = propertyName;
+        element.size = 42;
+      }
+      td.appendChild(element);
+      element.focus();
+      tr.appendChild(td);
+    }
+
+    // Add the add and remove buttons
+    td = document.createElement("td");
+    td.className = "actions";
+    var removeButton = document.createElement("input");
+    removeButton.type = "button";
+    removeButton.value = "-";
+    removeButton.onclick = function() { removeRow(removeButton, propertyName) };
+    td.appendChild(removeButton);
+    tr.appendChild(td);
+
+    if (alreadyPresent) {
+      existingTBody.appendChild(tr);
+    } else {
+      // Find the insertion point for the new row. We try to keep the filter rows
+      // in the same order as the options in the 'Add filter' drop-down, because
+      // that's the order they'll appear in when submitted.
+      var insertionPoint = getAncestorByTagName(select, "tbody");
+      outer: for (var i = select.selectedIndex + 1; i < select.options.length; i++) {
+        for (var j = 0; j < table.tBodies.length; j++) {
+          if (table.tBodies[j].rows[0].className == select.options[i].value) {
+            insertionPoint = table.tBodies[j];
+            break outer;
+          }
+        }
+      }
+      // Finally add the new row to the table
+      var tbody = document.createElement("tbody");
+      tbody.appendChild(tr);
+      insertionPoint.parentNode.insertBefore(tbody, insertionPoint);
+    }
+
+    // Disable the add filter in the drop-down list
+    if (property.type == "radio" || property.type == "checkbox") {
+      select.options[select.selectedIndex].disabled = true;
+    }
+    select.selectedIndex = 0;
+  }
+}
Index: /www/chrome/js/wikitoolbar.js
===================================================================
--- /www/chrome/js/wikitoolbar.js	(revision 2234)
+++ /www/chrome/js/wikitoolbar.js	(revision 2234)
@@ -0,0 +1,88 @@
+function addWikiFormattingToolbar(textarea) {
+  if ((typeof(document["selection"]) == "undefined")
+   && (typeof(textarea["setSelectionRange"]) == "undefined")) {
+    return;
+  }
+  
+  var toolbar = document.createElement("div");
+  toolbar.className = "wikitoolbar";
+
+  function addButton(id, title, fn) {
+    var a = document.createElement("a");
+    a.href = "#";
+    a.id = id;
+    a.title = title;
+    a.onclick = function() { try { fn() } catch (e) { } return false };
+    a.tabIndex = 400;
+    toolbar.appendChild(a);
+  }
+
+  function encloseSelection(prefix, suffix) {
+    textarea.focus();
+    var start, end, sel, scrollPos, subst;
+    if (typeof(document["selection"]) != "undefined") {
+      sel = document.selection.createRange().text;
+    } else if (typeof(textarea["setSelectionRange"]) != "undefined") {
+      start = textarea.selectionStart;
+      end = textarea.selectionEnd;
+      scrollPos = textarea.scrollTop;
+      sel = textarea.value.substring(start, end);
+    }
+    if (sel.match(/ $/)) { // exclude ending space char, if any
+      sel = sel.substring(0, sel.length - 1);
+      suffix = suffix + " ";
+    }
+    subst = prefix + sel + suffix;
+    if (typeof(document["selection"]) != "undefined") {
+      var range = document.selection.createRange().text = subst;
+      textarea.caretPos -= suffix.length;
+    } else if (typeof(textarea["setSelectionRange"]) != "undefined") {
+      textarea.value = textarea.value.substring(0, start) + subst +
+                       textarea.value.substring(end);
+      if (sel) {
+        textarea.setSelectionRange(start + subst.length, start + subst.length);
+      } else {
+        textarea.setSelectionRange(start + prefix.length, start + prefix.length);
+      }
+      textarea.scrollTop = scrollPos;
+    }
+  }
+
+  addButton("strong", "Bold text: '''Example'''", function() {
+    encloseSelection("'''", "'''");
+  });
+  addButton("em", "Italic text: ''Example''", function() {
+    encloseSelection("''", "''");
+  });
+  addButton("heading", "Heading: == Example ==", function() {
+    encloseSelection("\n== ", " ==\n", "Heading");
+  });
+  addButton("link", "Link: [http://www.example.com/ Example]", function() {
+    encloseSelection("[", "]");
+  });
+  addButton("code", "Code block: {{{ example }}}", function() {
+    encloseSelection("\n{{{\n", "\n}}}\n");
+  });
+  addButton("hr", "Horizontal rule: ----", function() {
+    encloseSelection("\n----\n", "");
+  });
+  addButton("np", "New paragraph", function() {
+    encloseSelection("\n\n", "");
+  });
+  addButton("br", "Line break: [[BR]]", function() {
+    encloseSelection("[[BR]]\n", "");
+  });
+
+  textarea.parentNode.insertBefore(toolbar, textarea);
+}
+
+// Add the toolbar to all <textarea> elements on the page with the class
+// 'wikitext'.
+var re = /\bwikitext\b/;
+var textareas = document.getElementsByTagName("textarea");
+for (var i = 0; i < textareas.length; i++) {
+  var textarea = textareas[i];
+  if (textarea.className && re.test(textarea.className)) {
+    addWikiFormattingToolbar(textarea);
+  }
+}
Index: /www/chrome/js/trac.js
===================================================================
--- /www/chrome/js/trac.js	(revision 2234)
+++ /www/chrome/js/trac.js	(revision 2234)
@@ -0,0 +1,131 @@
+// Used for dynamically updating the height of a textarea
+function resizeTextArea(id, rows) {
+  var textarea = document.getElementById(id);
+  if (!textarea || (typeof(textarea.rows) == "undefined")) return;
+  textarea.rows = rows;
+}
+
+// A better way than for example hardcoding foo.onload
+function addEvent(element, type, func){
+  if (element.addEventListener) {
+    element.addEventListener(type, func, false);
+    return true;
+  } else if (element.attachEvent) {
+    return element.attachEvent("on" + type, func);
+  }
+  return false;
+}
+
+// Convenience function for the nearest ancestor element with a specific tag
+// name
+function getAncestorByTagName(e, tagName) {
+  tagName = tagName.toLowerCase();
+  do {
+    e = e.parentNode;
+  } while ((e.nodeType == 1) && (e.tagName.toLowerCase() != tagName));
+  return (e.nodeType == 1) ? e : null;
+}
+
+// Adapted from http://www.kryogenix.org/code/browser/searchhi/
+function searchHighlight() {
+  if (!document.createElement) return;
+
+  var div = document.getElementById("searchable");
+  if (!div) return;
+
+  function getSearchWords(url) {
+    if (url.indexOf('?') == -1) return [];
+    var queryString = url.substr(url.indexOf('?') + 1);
+    var params = queryString.split('&');
+    for (var p in params) {
+      var param = params[p].split('=');
+      if (param.length < 2) continue;
+      if (param[0] == 'q' || param[0] == 'p') { // q= for Google, p= for Yahoo
+        var query = decodeURIComponent(param[1].replace(/\+/g, ' '));
+        if (query[0] == '!') query = query.slice(1);
+        words = query.split(/(".*?")|('.*?')|(\s+)/);
+        var words2 = new Array();
+        for (var w in words) {
+          words[w] = words[w].replace(/^\s+$/, '');
+          if (words[w] != '') {
+            words2.push(words[w].replace(/^['"]/, '').replace(/['"]$/, ''));
+          }
+        }
+        return words2;
+      }
+    }
+    return [];
+  }
+
+  function highlightWord(node, word, searchwordindex) {
+    // If this node is a text node and contains the search word, highlight it by
+    // surrounding it with a span element
+    if (node.nodeType == 3) { // Node.TEXT_NODE
+      var pos = node.nodeValue.toLowerCase().indexOf(word.toLowerCase());
+      if (pos >= 0 && !/^searchword\d$/.test(node.parentNode.className)) {
+        var span = document.createElement("span");
+        span.className = "searchword" + (searchwordindex % 5);
+        span.appendChild(document.createTextNode(
+          node.nodeValue.substr(pos, word.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(node.nodeValue.substr(pos + word.length)),
+            node.nextSibling));
+        node.nodeValue = node.nodeValue.substr(0, pos);
+        return true;
+      }
+    } else if (!node.nodeName.match(/button|select|textarea/i)) {
+      // Recurse into child nodes
+      for (var i = 0; i < node.childNodes.length; i++) {
+        if (highlightWord(node.childNodes[i], word, searchwordindex)) i++;
+      }
+    }
+    return false;
+  }
+
+  var words = getSearchWords(document.URL);
+  if (!words.length) words = getSearchWords(document.referrer);
+  if (words.length) {
+    for (var w in words) {
+      if (words[w].length) highlightWord(div, words[w], w);
+    }
+  }
+}
+
+function enableControl(id, enabled) {
+  if (typeof(enabled) == "undefined") enabled = true;
+  var control = document.getElementById(id);
+  if (!control) return;
+  control.disabled = !enabled;
+  var label = getAncestorByTagName(control, "label");
+  if (label) {
+    label.className = enabled ? "enabled" : "disabled";
+  } else {
+    var labels = document.getElementsByTagName("label");
+    for (var i = 0; i < labels.length; i++) {
+      if (labels[i].htmlFor == id) {
+        labels[i].className = enabled ? "enabled" : "disabled";
+        break;
+      }
+    }
+  }
+}
+
+function addHeadingLinks(container, title) {
+  var base = document.location.pathname;
+  function addLinks(elems) {
+    for (var i = 0; i < elems.length; i++) {
+      var hn = elems[i];
+      if (hn.id) {
+        var link = document.createElement('a');
+        link.href = base + '#' + hn.id;
+        link.className = 'anchor';
+        link.title = title.replace(/\$id/, hn.id);
+        link.appendChild(document.createTextNode(" \u00B6"));
+        hn.appendChild(link);
+      }
+    }
+  }
+  for (var lvl = 0; lvl <= 6; lvl++) {
+    addLinks(container.getElementsByTagName('h' + lvl));
+  }
+}
