/*
   Copyright 2009 The Go Authors. All rights reserved.
   Use of this source code is governed by a BSD-style
   license that can be found in the LICENSE file.
*/

/* ------------------------------------------------------------------------- */
/* Styles meant to help page authors achieve beauty. */

a {
  text-decoration: none;
}

code, .code {
  font-size: 100%;
  font-family: monospace;
  color: #0f398d;
}

kbd {
  font-size: 100%;
  font-family: monospace;
  font-weight: bold;
}

pre.ebnf {
  background-color: #ffffe9;
}

pre.grammar {
  background-color: #ffffe9;
}

p.rule {
  font-style: italic;
}

span.event {
  font-style: italic;
}

span.alert {
  color: #ff0000;
}

body {
  font: 13px Helvetica, Arial, sans-serif;
  margin-bottom: 0px;
}

h1 {
  margin-top: 0;
  padding-top: 0.75em;
  margin-bottom: 0.75em;
}

h2, h3, h4, h5, h6 {
  font-family: Helvetica, Arial, sans-serif;
  margin-bottom: 0.25em;
}

h2 {
  background-color: #e5ecf9;
  margin-top: 2em;
  border-top:1px solid #36C;
  padding-left: 0.2em;
}

pre {
  font-size: 9pt;
  background-color: #f8f8ff;
  margin: 1em 0 0 0;
  padding: .99em;
  line-height: 125%;
  overflow: auto;
  word-wrap: break-word;
}

li {
  padding-bottom: 0.5em;
}

li pre {
  margin: 0.5em 0px 1em 0px;
}

a:link {
  color: #0f398d
}

a:visited {
  color: #0b2455
}

a:hover {
  color: #0000ff
}

/* ------------------------------------------------------------------------- */
/* Styles used in the boilerplate-ish parts of pages. */

div#content {
  margin-left: 20%;
  padding: 0 1em 2em 1em;
  margin-top: 0px;
  margin-bottom: 0px;
/*
  border-left: 2px solid #e5ecf9;
  border-right: 2px solid #e5ecf9;
  border-bottom: 2px solid #e5ecf9;
*/
}

#topnav {
  margin: 0px;
  padding-top: 0.2em;
  width: 100%;
  white-space: nowrap;
  background-color: #ffffff;
  border-bottom: 2px solid #36C;
  font: bold 150% Helvetica, Arial, sans-serif;
}

div#linkList {
  margin-top: 1.5em;
  padding-left: 0.5em;
  font: 13px Helvetica, Arial, sans-serif;
  float: left;
  width: 18%;
  background-color: #fffff0;
  border: 2px solid #ba9836;
}

div#linkList ul {
  padding: 1px;
  list-style-type: none;
}

div#linkList li {
  margin-left: 1em;
  padding-bottom: 0.2em;
}

div#linkList li.navhead {
  font-weight: bold;
  margin-left: 0px;
  padding-bottom: 0.25em;
}

#nav dl {
  margin: 0 0.5em 0 0.5em;
  padding: 0px;
}

.navtop {
  font-size: xx-small;
  float: right;
}

#footer {
  margin: 2em 0 0 0;
  text-align: center;
  color: #555;
  font-size: small;
}

#footer p {
  margin: 0px;
}

#footer a {
  color: #555;
}

@media print {
  div#linkList {
    display: none;
  }
  .navtop {
    display: none;
  }
  div#content {
    margin-left: 0px;
    border: none;
  }
}


/* ------------------------------------------------------------------------- */
/* Styles used by godoc */

table.layout {
  border-width: 0px;
  border-spacing: 0px;
  padding: 0px;
}

span.comment {
  color: #0000a0;
}

span.highlight {
  font-weight: bold;
  background-color: #ffffa0;
}

span.subtitle {
  font-weight: bold;
  font-size: medium;
}

/* same style as for gettingStarted */
#menu {
  margin-top: 1.5em;
  margin-left: 1.75em;
  margin-right: 0em;
  float: right;
  background-color: #fffff0;
  padding-left: 1em;
  padding-right: 1em;
  padding-bottom: 0.75em;
  border: 2px solid #ba9836;
}

/* same color scheme as for gettingStarted */
#content .popup {
  position: absolute;
  border: 1px solid #ba9836;
  background-color: #fffff0;
  margin-top: 3em;
  padding: 3px;
}

#content .identifier,
#content .type {
  color: #008;
}

/* ------------------------------------------------------------------------- */
/* Styles for the frontpage */

#gettingStarted, #blog {
  margin-top: 1.5em;
  margin-left: 1.75em;
  margin-right: 0em;
  float: right;
  clear: right;
  background-color: #fffff0;
  padding-left: 1em;
  padding-right: 1em;
  padding-bottom: 0.75em;
  border: 2px solid #ba9836;
  width: 160px;
}

#blog { margin-bottom: 1.5em; }
#blog h1 { font-size: 1.2em; }
#blog #blogFeed a { font-size: 1.1em; display: block; margin-top: 1em; }

#gettingStarted h1 {
  padding-top: 0.3em;
  margin-bottom: 0.2em;
  font-size: 1.5em;
}

#gettingStarted ol {
  padding-left: 2em;
}

#gettingStarted a img {
  border: 1px solid blue;
}

#frontpage {
  width: 100%;
}

#frontpage h3 {
  margin-left: 3em;
  font-size: 1.5em;
  font-weight: normal;
}
