
/******** Eigen specific CSS code ************/

/**** Styles removing elements ****/

/* remove the "modules|classes" link for module pages (they are already in the TOC) */
div.summary {
  display:none;
}

/* remove */
div.contents hr {
  display:none;
}

/**** ****/

p, dl.warning, dl.attention, dl.note
{
  max-width:60em;
  text-align:justify;
}

li {
  max-width:55em;
  text-align:justify;  
}

img {
  border: 0;
}

div.fragment {
  display:table; /* this allows the element to be larger than its parent */
  padding: 0pt;
}
pre.fragment {
  border: 1px solid #cccccc;

  margin: 2px 0px 2px 0px;
  padding: 3px 5px 3px 5px;
}



/* Common style for all Eigen's tables */

table.example, table.manual, table.manual-vl, table.manual-hl {
    max-width:100%;
    border-collapse: collapse;
    border-style: solid;
    border-width: 1px;
    border-color: #cccccc;
    font-size: 1em;
    
    box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
    -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
}

table.example th, table.manual th, table.manual-vl th, table.manual-hl th {
  padding: 0.5em 0.5em 0.5em 0.5em;
  text-align: left;
  padding-right: 1em;
  color: #555555;
  background-color: #F4F4E5;
  
  background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.3,#FFFFFF), color-stop(0.30,#FFFFFF), color-stop(0.98,#F4F4E5), to(#ECECDE));
  background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 30%, #F4F4E5 98%, #ECECDE);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#F4F4E5');
}

table.example td, table.manual td, table.manual-vl td, table.manual-hl td {
  vertical-align:top;
  border-width: 1px;
  border-color: #cccccc;
}

/* header of headers */
table th.meta {
  text-align:center;
  font-size: 1.2em;
  background-color:#FFFFFF;
}

/* intermediate header */
table th.inter {
  text-align:left;
  background-color:#FFFFFF;
  background-image:none;
  border-style:solid solid solid solid;
  border-width: 1px;
	border-color: #cccccc;
}

/** class for example / output tables **/

table.example {
}

table.example th {
}

table.example td {
  padding: 0.5em 0.5em 0.5em 0.5em;
  vertical-align:top;
}

/* standard class for the manual */

table.manual, table.manual-vl, table.manual-hl {
    padding: 0.2em 0em 0.5em 0em;
}

table.manual th, table.manual-vl th, table.manual-hl th {
  margin: 0em 0em 0.3em 0em;
}

table.manual td, table.manual-vl td, table.manual-hl td {
  padding: 0.3em 0.5em 0.3em 0.5em;
  vertical-align:top;
  border-width: 1px;
}

table.manual td.alt, table.manual tr.alt, table.manual-vl td.alt, table.manual-vl tr.alt {
  background-color: #F4F4E5;
}

table.manual-vl th, table.manual-vl td, table.manual-vl td.alt {
  border-color: #cccccc;
  border-width: 1px;
  border-style: none solid none solid;
}

table.manual-vl th.inter {
  border-style: solid solid solid solid;
}

table.manual-hl td {
  border-color: #cccccc;
  border-width: 1px;
  border-style: solid none solid none;
}

table td.code {
  font-family: monospace;
}

h2 {
  margin-top:2em;
  border-style: none none solid none;
  border-width: 1px;
  border-color: #cccccc;
}

/**** Table of content in the side-nav ****/


div.toc {
  margin:0;
  padding: 0.3em 0 0 0;
  width:100%;
  float: none;
  border-radius:0px;
  border-style: solid none none none;
  max-height:50%;
  overflow-y: scroll;
}

div.toc h3 {
  margin-left: 0.5em;
  margin-bottom: 0.2em;
}

div.toc ul {
  margin: 0.2em 0 0.4em 0.5em;
}

span.cpp11,span.cpp14,span.cpp17 {
  color: #119911;
  font-weight: bold;
}

.newin3x {
  color: #a37c1a;
  font-weight: bold;
}

div.warningbox {
  max-width:60em;
  border-style: solid solid solid solid;
  border-color: red;
  border-width: 3px;
}

/**** old Eigen's styles ****/


table.tutorial_code td {
  border-color: transparent; /* required for Firefox */
  padding: 3pt 5pt 3pt 5pt;
  vertical-align: top;
}


/* Whenever doxygen meets a '\n' or a '<BR/>', it will put 
 * the text containing the character into a <p class="starttd">.
 * This little hack together with table.tutorial_code td.note
 * aims at fixing this issue. */
table.tutorial_code td.note p.starttd {
  margin: 0px;
  border: none;
  padding: 0px;
}

div.eimainmenu {
  text-align:     center;
}

/* center version number on main page */
h3.version { 
  text-align:     center;
}


td.width20em p.endtd {
  width:  20em;
}

/* needed for huge screens */
.ui-resizable-e {
  background-repeat: repeat-y;
}
