/*

Copyright (c) 2005 Hakon Wium Lie and Bert Bos

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/
html { 
  margin: 0; padding: 0;
  font: 10pt/1.26 "Gill Sans", sans-serif;
}

h1, h2, h3, h4, h5, h6 { 
  font-family: "Gill Sans", sans-serif;
  margin: 2em 0 0.5em 0;
  page-break-after: avoid;
} 

h1 { 
  font-size: 2.0em;
  font-weight: 900;

  margin: 0;
  margin-left:-2cm;
  margin-top:-1cm;
  margin-bottom:1.5cm;
  top: 0cm;
  left: 0cm;
  padding: 2cm;
  padding-top: 0cm;
  padding-bottom: 1cm;
  background: #888;
  border-bottom-right-radius: 2cm;
  page-break-before: always;
  page-break-inside: avoid;
}

@media screen, handheld {
h1 { 
  margin-top:1cm;
  background-image: url("chapter-rounded-bottom.png");
  background-repeat: no-repeat;
  background-position: bottom right;
}
div.page-reset > h1 {
  margin-top:0cm;
}
}


h2 { 
  font-size: 1.2em;
  text-transform: uppercase;
  font-weight: bold;
}

h3 { 
  font-size: 1em;
  font-weight: bold;
}

q::before {
  content: "\201C";
}

q::after {
  content: "\201D";
}

p { margin: 0 }
p + p { text-indent: 1.3em ; margin-top: 0.2em; }
p.sidenote + p, p.caption, p.art { text-indent: 0 }

p.author {
  margin-top: 2em;
  text-indent: 0;
  text-align: right;
}

a { text-decoration: none; color: black }

/* cross-references */

a.pageref::after { content: " on page " target-counter(attr(href), page); }
a.chapref::before { content: " Chapter " target-counter(attr(href), chapter) ", "; }
a.figref { content: " Figure " target-counter(attr(href), figure); }
a.tableref { content: " Table " target-counter(attr(href), figure); }
a.listingref { content: " Listing " target-counter(attr(href), listing); }

/* sidenotes */

.sidenote {
  float: left;
  clear: left;
  margin: 0 0 1em -41%;
  width: 37%;
  font-size: 0.9em;
  font-style: normal;
  text-indent: 0;
  text-align: right;
  page-break-inside: avoid;
}

/* sidebars */

div.sidebar {
  float: top-next;
  margin: 1.2em 0 1.2em 0;
  border: thin solid;
  background: #CCC;
  padding: 0.5em 1em;
  page-break-inside: avoid;
  column-count: 2;
  column-gap: 1.5em;
}

div.sidebar h2 {
  margin-top: 0;
}

/* frontpage */

.title p{
	font-size:22pt;
  	font-family: "Gill Sans", sans-serif;
  	text-align: center;
}

.copyright-section {
	text-align: center;
	font-size: 9pt;
	page-break-after: always;
	margin-top: 50pt;
	margin-bottom: 20pt;
}

.toc-title {
	font-size:18pt;
  	font-family: "Gill Sans", sans-serif;
  	text-align: left;
  	margin-left:20pt;
  	margin-bottom: 40pt;
	
}

/* figures, tables, and listings */

div.confluenceTableSmall th.confluenceTh { 
  font-size: 11px;  	
}

div.confluenceTableSmall td.confluenceTd { 
  font-size: 7px;  	
}

div.figure {
  margin: 1em 0;
  counter-increment: figure;
}

div.figure .caption, div.table .caption {
  font-size: 0.9em;
  font-style: italic;
}

div.figure .caption::before {
  content: "Figure " counter(figure) ". ";
  font-weight: bold;
  font-style: normal;
}

div.table .caption::before {
  content: "Table " counter(table) ". ";
  font-weight: bold;
  font-style: normal;
}

div.table {
  margin: 1em 0;
  counter-increment: table;
}

div.table th {
  text-align: left;
}

table th, table td {
  text-align: left;
  padding-right: 1em;
  page-break-inside: avoid;
}

table th {
  border-top: thin solid;
  border-bottom: thin solid;
  padding-top: 0.2em;
  padding-bottom: 0.2em;
}
table td {
  border-top: none;
  border-bottom: thin dotted;
  padding-top: 0.2em;
  padding-bottom: 0.2em;
}

div.Scrollbar {
	display: none;
}


/* Weird div.codeHeader a b::before would be a better selection
   but prince does not properly match it.. Firefox does. */
div.codeHeader::before {
  content: "Listing " counter(listing) ". ";
  font-weight: bold;
  font-style: normal;
}
div.codeHeader a b {
  font-style: italic;
  font-weight: normal;
}
div.codeHeader {
  font-size: 0.9em;
  counter-increment: listing;
}
div.code {
	border: 1px dashed #c0c0c0;
    font-size: 12px;
	font-family: Courier;
    margin: 5px;
	line-height: 13px;
	padding: 3px;	
	background-color: #f8f8f8;
	
}


@page {
  margin: 2cm;
  size: 7in 9.25in;

  @footnotes {
    border-top: thin solid black;
    padding-top: 0.3em;
    margin-top: 0.6em;
  }
}


/* define default page and names pages: cover, blank, frontmatter */
div.page-reset {
    counter-reset: page 1;
}

@page :left {
  @top-left-corner {
    font-weight: 900; font: 9pt "Gill Sans", serif; 
    content: counter(page);
    text-align: left;
    margin-left: 1cm;
    visibility: hidden;
  }
  @top-left {
    font-weight: 900;
    font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
    content: string(header, first); 
    visibility: hidden;
  }
  @bottom-left-corner {
    font-weight: 900; font: 9pt "Gill Sans", serif; 
    content: counter(page);
    text-align: left;
    margin-left: 1cm;
  }
  @bottom-left {
    font-weight: 900;
    font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
    content: string(header, first); 
  }
}

@page :right {
  @top-right-corner {
    font-weight: 900; font: 9pt "Gill Sans", serif; 
    content: counter(page);
    text-align: left;
    margin-left: 1cm;
    visibility: hidden;
  }
  @top-right {
    font-weight: 900;
    font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
    content: string(header, first)
    visibility: hidden;
  }
  @bottom-right-corner {
    font-weight: 900; font: 9pt "Gill Sans", serif; 
    content: counter(page);
    text-align: right;
    margin-right: 1cm;
  }
  @bottom-right {
    font-weight: 900; font: 9pt "Gill Sans", serif; 
    white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
    content: string(header, first)
  }
}

/* 
  In theory we should be able to use the :first selector so taht 
  we can put the page numbering on the bottom of the first page of the chapter
  but have the rest of the pages number at the top.  But this does not seem
  to work.  See http://www.princexml.com/doc/6.0/page-selectors/

  So for now just always number at the bottom :(
*/
/*
div.chapter { page: bottom-number; }
@page bottom-number :first {
  @top-left {
    visibility: hidden;
  }
  @bottom-left {
    visibility: visible;
  }
  @top-right {
    visibility: hidden;
  }
  @bottom-right {
    visibility: visible;
  }
}
*/

@page cover { margin: 0; }

@page frontmatter :left {
  @bottom-left-corner {
    content: counter(page, lower-roman);
  }
  @bottom-left-corner {
    content: counter(page, lower-roman);
  }
}

@page frontmatter :right {
  @bottom-right-corner {
    content: counter(page, lower-roman);
  }
  @bottom-right-corner {
    content: counter(page, lower-roman);
  }
}

@page blank :left {
  @top-left { visibility: hidden; }
  @bottom-left { visibility: hidden; }
  @top-left-corner { visibility: hidden; }
  @bottom-left-corner { visibility: hidden; }
}

@page blank :right {
  @top-right { visibility: hidden; }
  @bottom-right { visibility: hidden; }
  @top-right-corner { visibility: hidden; }
  @bottom-right-corner { visibility: hidden; }
}

/* footnotes */
.footnote {
  display: none;                   /* default rule */

  display: prince-footnote;        /* prince-specific rules */
  position: footnote;
  footnote-style-position: inside;

  counter-increment: footnote;
  margin-left: 1.4em;
  font-size: 90%;
  line-height: 1.4;
}

.footnote::footnote-call {
  vertical-align: super;
  font-size: 80%;
}

.footnote::footnote-marker {
  vertical-align: super;
  color: green;
  padding-right: 0.4em;
}

/* Confluence contents to hide */
#labels-section {
	display: none;
}
#comments-section {
	display: none;
}
#footer {
	display: none;
}
.hidden {
	display: none;
}

/*
   A book consists of different types of sections. We propose to use
   DIV elements with these class names:

    frontcover
    halftitlepage: contains the title of the book
    titlepage: contains the title of the book, name of author(s) and publisher
    imprint: left page with copyright, publisher, library printing information
    dedication: right page with short dedication
    foreword: written by someone other than the author(s)
    toc: table of contents
    preface: preface, including acknowledgements
    chapter: each chapter is given its own DIV element
    references: contains list of references
    appendix: each appendix is given its own 
    bibliography
    glossary
    index
    colophon: describes how the book was produced
    backcover

   A book will use several of the types listed above, but few books
   will use all of them.
*/

/* which section uses which named page */

div.halftitlepage, div.titlepage, div.imprint, div.dedication { page: blank }
div.foreword, div.toc, div.preface { page: frontmatter }


/* page breaks */
div.frontcover, div.halftitlepage, div.titlepage { page-break-before: right }
div.imprint { page-break-before: always; }
div.chapter { page-break-before: always; }
div.dedication, div.foreword, div.toc, div.preface, div.reference, 
div.appendix, div.bibliography, div.glossary, div.index, div.colophon { 
  page-break-before: always 
}
div.backcover { page-break-before: left }

/* titlepage, halftitlepage */

div.titlepage h1, div.halftitlepage h1 { margin-bottom: 2em; }
div.titlepage h2, div.halftitlepage h2 { font-size: 1.2em; margin-bottom: 3em; }
div.titlepage h3, div.halftitlepage h3 { font-size: 1em; margin-bottom: 3em; }
div.titlepage p, div.halftitlepage p { 
  font-size: 1.4em;
  font-weight: bold;
  margin: 0; padding: 0;
}


/* TOC */

ul.toc, ul.toc ul { 
  list-style-type: none;
  margin: 0; padding: 0;
  margin-left: 3cm;
}
ul.toc ul {
  margin-left: 1em;
  font-weight: normal;
}
ul.toc > li { 
  font-weight: bold;
  margin-bottom: 0.5em;
}
ul.toc a::after {
  content: leader('.') target-counter(attr(href), page);
  font-style: normal;
}
ul.toc > li.frontmatter a::after {
  content: leader('.') target-counter(attr(href), page, lower-roman);
  font-style: normal;
}
ul.toc > li.endmatter a::after {
  content: leader('.') target-counter(attr(href), page);
  font-style: normal;
}
ul.toc > li.chapter::before {
  content: "Chapter " counter(toc-chapter, decimal);
  display: block;
  margin: 1em 0 0.1em -2.5cm;
  font-weight: normal;
  counter-increment: toc-chapter;
  page-break-after: avoid;
}

/* chapter numbers */

div.chapter { counter-increment: chapter; }
div.chapter h1::before { 
  text-transform: uppercase;
  letter-spacing: 0.15em;
  content: "Chapter  " counter(chapter) " \A\B0 \B0 \B0 \B0\A"; 
  white-space: pre;
  font-size: 50%;
}

div.frontcover h1::before, div.titlepage h1::before, div.halftitlepage h1::before {
  content: normal; /* that is, none */
}

h1 { string-set: header content();}
div.chapter h1 { string-set: header "Chapter " counter(chapter) " - " content(); }

/* index */

ul.index { 
  list-style-type: none;
  margin: 0; padding: 0;
  column-count: 2;
  column-gap: 1em;
}

ul.index a::after { content: ", " target-counter(attr(href), page); }


span.element, span.attribute {
  text-transform: uppercase;
  font-weight: bold;
  font-size: 80%;
}
span.property { font-weight: bold }
code, span.css, span.value, span.declaration {
  font: 90% "Lucida Console", "Lucida Sans Typewriter", monospace;
}


@media screen, handheld {
  html {font: 14px "Gill Sans", sans-serif; }
  h1 { margin-bottom: 0.5em }
  div.frontcover, div.halftitlepage, div.titlepage, div.imprint, 
  div.dedication, div.foreword, div.toc, div.index { display: none }
  body { 
      margin: 0cm; 
      margin-left: 2cm; 
      margin-right: 2cm; 
  }
}

/*
 * Enhancements to the take advantage of some of the style markup that
 * Confluence generates 
 */
a sup img { visibility: hidden; position: absolute;}

img { 
  prince-image-resolution:150dpi;
}

table {
  font: "Lucida Console", "Lucida Sans Typewriter", monospace;
}

table td {
  font-size: 10pt;
}

pre {  
   white-space: pre-wrap;
}

.codeContent {
  font-size: 80%;
}
.code {
}
.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.noteMacro { border-color: #F0C000; background-color: #FFFFCE;}
.warningMacro { border-color: #CC0000; background-color: #FFCCCC }
.infoMacro { border-color: #3c78b5; background-color: #D8E4F1; }
.tipMacro { border-color: #090; background-color: #dfd;}
.noteMacro, .warningMacro, .infoMacro, .tipMacro, .informationMacroPadding { 
  border: thin solid;
  float: top-next;
  margin: 1em 0 1.2em 0;
  padding: 0.5em;
  column-count: 2;
  column-gap: 1.5em;
  width: 100%;
}
table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}
table.infoMacro p, table.warningMacro p, table.tipMacro p, table.noteMacro p, table.sectionMacro p {
    font-size:x-small;
    margin-top: 1em; 
}

