/* Pontano+Sans */

@import url(//fonts.googleapis.com/css?family=Jura:400);
@import url(//fonts.googleapis.com/css?family=Pontano+Sans);

body {
	background: #fff;
	margin:0;
	padding:0;
	font-family: 'Pontano Sans', Arial, Helvetica, sans-serif;
	font-size: 16px;
	color: #242A75;
}

* {
	margin:0;
	padding:0;
}

/** element defaults **/
table {
	width: 95%;
	text-align: left;
}

table a {
	color: #4E387E;
	font-style: italic;
}

table a:hover {
	color: #242A75;
	font-style: italic;
}

article table {
	width: 100%;
	text-align: left;
	/**border:1px solid black;**/
	font-style: normal;
	font-size: 14px;
}

th, td {
	padding: 10px 10px;
}

th {
	color: #4E387E;
	background: #F8F8F8 none repeat-x scroll left top;
}

/**
td {
	border-bottom: 1px solid #ccc;
}
**/

code, blockquote {
	display: block;
	border-left: 5px solid #222;
	padding: 10px;
	margin-bottom: 20px;
}
code {
	background-color: #222;
	color:#ccc;
	border: none;
}
blockquote {
	border-left: 5px solid #222;
}

blockquote p {
	font-style: italic;
	font-family: Pontano Sans, "Times New Roman", Times, serif;
	margin: 0;
	color: #333;
	height: 1%;
}

p {
	/*line-height: 1.9em;*/
	margin-bottom: 20px;
}

a {
	text-decoration: none;
	color: #5E5A80;
}

a:hover {
	color: #4E387E;
}

a:focus {
	outline: none;
}

.box {
	color: #fff;
    background: #4E387E;
	padding: 10px 25px;
    border-radius: 6px
    transition-property: background, border-radius;
    transition-duration: 0.5s;
    transition-timing-function: linear;
	text-transform:none;
	margin-left: 285px;
  }
.box:hover {
	box-shadow: 0 200px 100px -100px white inset;
  }

a.button { 
	margin-right: 190px;
    background-color: #1791AB;
    border-radius: 8px 8px 8px 8px;
    color: #fff;
    display: inline-block;
    font-size: 13px;
    font-weight: bold;
    padding: 10px 25px;
    text-decoration: none;
}

.curl-top-right {
  display: inline-block;
  position: relative;
  -webkit-transform: translateZ(0);
  transform: translateZ(0);
  box-shadow: 0 0 1px rgba(0, 0, 0, 0);
}
.curl-top-right:before {
  pointer-events: none;
  position: absolute;
  content: '';
  height: 0;
  width: 0;
  top: 0;
  right: 0;
  background: white;
  /* IE9 */
  background: linear-gradient(225deg, white 45%, #aaaaaa 50%, #cccccc 56%, white 80%);
  box-shadow: -1px 1px 1px rgba(0, 0, 0, 0.4);
  -webkit-transition-duration: 0.3s;
  transition-duration: 0.3s;
  -webkit-transition-property: width, height;
  transition-property: width, height;
}
.curl-top-right:hover:before, .curl-top-right:focus:before, .curl-top-right:active:before {
  width: 25px;
  height: 25px;
}


fieldset {
	display: block;
	border: none;
	border-top: 1px solid #ccc;
}

fieldset legend {
	font-weight: bold;
	font-size: 13px;
	padding-right: 10px;
	color: #333;
}

fieldset form {
	padding-top: 15px;
}

fieldset p label {
	float: left;
	width: 150px;
}

form input, form select, form textarea {
	padding: 5px;
	color: #333333;
	border: 1px solid #ddd;
	border-right:1px solid #ccc;
	border-bottom:1px solid #ccc;
	background-color:#fff;
	font-family: Pontano Sans, Helvetica, sans-serif;
	font-size: 13px;
}

form input.formbutton {
	border: none;
	background: #1791AB;
	color: #ffffff;
	font-weight: bold;
	padding: 6px 10px;
	font-size: 12px;
	letter-spacing: 1px;
	width: auto;
	overflow: visible;
}

form.searchform input {
  font-size: 15px;
    padding: 6px;
}

form.searchform p {
	margin: 5px 0;
}


span.required {
	color: #ff0000;
}

h1 {
	color: #1791AB;
	font-size: 35px;
	font-family: 'Jura',Arial,sans-serif;
}

h2 {
	color: #1791AB;
	font-size: 24px;
	letter-spacing: 0px;
	font-weight: normal;
	padding: 0 0 5px;
	margin: 0;
	font-family: 'Jura',Arial,sans-serif;
}

h3 {/*
	color: #1791AB;
	font-size: 20px;
	font-weight: normal;
	margin-bottom: 10px;
	letter-spacing: -1px;
	font-family: 'Jura',Arial,sans-serif;
	*/
	
    display: block;
    font-family: 'Jura',Arial,sans-serif;
    font-size: 15px;
    letter-spacing: 0;
	margin: 0;
    padding: 15px 0px;
    text-decoration: none;
    text-transform: uppercase;
	color: #4B0082; 
	font-weight:bold;
}

h4 {
    font-family: 'Pontano Sans', Arial, sans-serif;
    color: #FF6D29;
    font-size: 18px;
    font-weight: normal;
    padding-bottom: 10px;
    text-transform: uppercase;
}

h5 {
	padding-bottom: 10px;
	font-size: 16px;
	color: #999;
}

ul, ol {
	margin: 0 0 35px 35px;
}

li {
	padding-bottom: 5px;
}

li ol, li ul {
	font-size: 1.0em;
	margin-bottom: 0;
	padding-top: 5px;
}

.width {
	width: 1100px;
	margin: 0 auto;
}

.width-started {
	width: 1100px;
	margin-left: 150px;
}

.logo {
	padding-top: 5px;
	padding-right: 5px;
}

.logo-left {
padding-top: 5px;
	text-align: left;
	padding-right: 5px;
}

.logo-right {
padding-top: 5px;
	text-align: right;
	padding-left: 5px;
}

#container {
	background-color: #fff; /* C5D6E8 */
	position:absolute;
	left:0;
	right:0;
}

header {
	padding: 2px 2px;
	/*background: #fff; /*  C5D6E8*/
	background-image:linear-gradient(to left, #5E5A80, white 95%);
	/* margin: 0 auto; */
	text-align:right;
}

header table td {
	border: none;
}

header h1 a, header h1 a:hover {
	color: #000;
    font-size: 55px;
    font-weight: normal;
    letter-spacing: -2px;
    line-height:45px;
    text-decoration: none;
    text-transform: lowercase;
}
header h1 a span { 
	color: #1791AB;
}

header h2 {
	color: #c0c0c0;
	font-size: 13px;
	position: relative;
	top: -5px;
	letter-spacing: 0;
}

/* background-color: #222 */
nav {
	background-image:linear-gradient(to left, #5E5A80, white 95%);
	/* background-color: #C5D6E8; /* fff */
	border-bottom: 5px solid #4E387E;
	height: 45px;
}

nav ul {
	list-style: none;
	padding: 0;
	margin: 0;
}

nav ul li {
	float: left;
	display: block;
	padding: 0;
}


nav ul li a {
    color: #707070;
    display: block;
    font-family: 'Jura',Arial,sans-serif;
    font-size: 15px;
    letter-spacing: 0;
	margin: 0;
    padding: 15px 17px;
    text-decoration: none;
    text-transform: uppercase;
}
nav ul li.selected a,
nav ul li.selected a:hover { 
	/*background-color: #1791AB;*/
	color: #4E387E; 
	background: url("images/arrow.png") no-repeat center bottom;
	background-position: 50% 93%;
	-webkit-transform: scale(1);
        -moz-transform: scale(1);
			-o-transform: scale(1);
				transform: scale(1);	
}


nav ul li a:hover {
	color: #4E387E;
	
	/*transition*/
	-webkit-transition:all 1s ease;
		-moz-transition:all 1s ease;
			-o-transition:all 1s ease;
				transition:all 1s ease;
	
}

.right-nav {
	text-align: right;
}

.divider-vertical-second-menu{
	height: 12px;
	width: 1px;
	padding-bottom: 4px;
	margin-top: 16px;
	overflow: hidden;
	background-color: #DDD;
	border-right: 2px solid #FFF;
	position: bottom;
}

#hrdiv {
	border-top: 2px solid #A4B0BE;
	background-image:url("images/bg_breadcrumb.jpg");
	background-repeat:repeat-x;
}


img.header-image { padding-top: 10px;
			margin-bottom: -3px; }

#body {
	background: none;
	margin: 5px auto 0;
 	padding: 0;
	clear: both;
}

#content {
    float: left;
    width: 71%;
}

article {
    padding: 10px 10px 20px 5px;
}

article h2 { 
	font-weight: bold;
    padding-bottom: 0;
}

article p {
	text-align: justify;
	font-style: normal;
	font-weight: normal;
}

article table li {
	text-align: justify;
	font-style: normal;
	font-weight: normal;
}

#construction ul {
	margin: 0 0 5px 25px;
}


article .article-info {
    color: #999999;
    font-size: 12px;
    font-style: italic;
    padding: 0 0 10px 0;
}

article .article-info a { 
	color: #666;
}


.sidebar {
    float: right;
    width: 28%;
	margin-top: 10px;
}

.sidebar h4 {
	padding-bottom: 0;
	font-size: 16px;
	text-decoration: none;
	text-transform: none;
	font-weight: normal;
	color: #1791AB;
	padding: 3px 3px;
	font-family: 'Jura',Arial,sans-serif;
	/*border-bottom: 6px solid #DFE8F2;*/
}

.sidebar ul {
	margin: 0;
	padding: 0;
	list-style: none;
	text-decoration: none;
}

.sidebar ul li {
	margin-bottom: 0px;
	line-height: 1.5em;
	text-decoration: none;
}

.sidebar li ul {
    list-style: none outside none;
	text-decoration: none;
    margin: 0px;
	border-top:1px solid #DFE8F2;
}

.sidebar li ul li {
	display: block;
	text-decoration: none;
	border-top: none;
	padding: 4px;
	margin: 0;
	line-height: 1.5em;
	font-size: 12px;
}

.sidebar li ul li.text { 
	border-bottom: none;
	text-decoration: none;
}

.sidebar a {
	font-weight: normal;
	color: #242A75;
	text-decoration: none;
	font-size: 13px;
}

.sidebar a:hover {
	color: #1791AB;
	text-decoration: none;
}

.sidebar li ul li a {
	font-weight: normal;
	color: #242A75;
	text-decoration: none;
}

.sidebar li ul li a:hover {
	color: #1791AB;
	text-decoration: none;
}


.sidebar li ul li a.readmore {
   color: #1791AB;
   font-weight: bold;
   text-decoration: none;
}


.sidebar li ul li a.readmore:hover {
	color: #FF6D29;
}

#about {
	color: #1791AB;
	font-size: 24px;
	letter-spacing: 0px;
	font-weight: normal;
	padding: 0 0 5px;
	margin: 0;
	font-family: 'Jura',Arial,sans-serif;
	font-weight: bold;
}

#about:hover {
	text-decoration: underline;
}

.clear {
	clear: both;
}

footer {
	/*margin:20px auto 0;*/
	/*background: #C5D6E8; /* fff */
	background-image:linear-gradient(to left, #5E5A80, white 95%);
	border-top: 8px solid #4E387E;
}

#footer-features {
	margin:450em auto 0;
	background-image:linear-gradient(to left, #C5D6E8, white 90%);
	border-top: 8px solid #1791AB;
}

#footer-start {
	margin: 50em auto 0;
	background-image:linear-gradient(to left, #C5D6E8, white 90%);
	border-top: 8px solid #4E387E;
}

footer p {
	text-align: right;
	color: #4E387E;
	font-size: 12px;
	margin: 0;
	padding: 0;
}

footer table {
	font-family: 'Jura',Arial,sans-serif;

}

footer p a {
	color: #ccc;
	font-weight: bold;
}

.footer-content {
	padding: 20px 25px 10px;
}

footer .footer-content ul {
	width: 220px;
	list-style: none;
	margin: 0 60px 0 0;
	padding: 0;
	float: left;
}

footer .footer-content li {
	padding: 5px 5px;
}

footer .footer-content li a, footer .footer-content h4 {
}

footer .footer-content li a {
	color: #4E387E;
    font-size: 13px;
    text-decoration: none;
	font-family: 'Jura',Arial,sans-serif;
}

footer .footer-content li a:hover { 
	color: #909090;
}

footer .footer-content h4 {
	color: #4E387E;
    font-size: 24px;
	font-family: 'Jura',Arial,sans-serif;
    font-weight: normal;
	text-transform: none;
    padding-bottom: 0;
	border-bottom:2px solid white;
}

footer .footer-content ul.endfooter {
	margin-right: 0;
}
footer .footer-bottom {
	padding: 10px;
	text-align: center;
	background-color: #000;
}

footer .footer-bottom p {
	text-align: right;
}

footer .footer-bottom p, footer .footer-bottom p a {
	color: #666;
}

footer .right-footer {
	text-align: right;
	color: #707070;
	font-size: 15px;
}

footer table td{
	border:none;
}

/*----- Tabs ----
.tabs {
    width:100%;
    display:inline-block;
}-*/
 
/*----- Tab Links -----
.tab-links {
	padding-bottom: 4px;
}*/
/* Clearfix */
/*.tab-links:after {
	display: block;
	clear: both;
	content:'';
	display: block;
	position: fixed;
	clear: both;
    content: "";
    width: 100%;
	padding: 5px;
    bottom: 0;
    left: 0;*/
    /*border-bottom: 1px solid #AAA;*/
	
	/*
    z-index: 1;
}
 
.tab-links li {
	margin: 0px 3px;
	float: left;
	list-style: none;	
}

.tab-links li.selected {
    z-index: 2;
    border-bottom-color: #FFF;
}
 
.tab-links a {

	
	padding: 11px 30px;
	margin: 0px -3px;
	display: inline-block;
	border-radius: 5px 5px 0px 0px;
	background: #C0C0C0;
	font-size: 14px;
	font-weight: bold;
	font-family: 'Jura',Arial,sans-serif;
	color: #fff;
	text-decoration: none;
	transition: all linear 0.15s;
	*/
	
	/*
	display: inline-block;
    border-radius: 5px 5px 0px 0px;
	font-family: 'Jura',Arial,sans-serif;
    font-size: 14px;
    letter-spacing: 0;
	margin: 10px -3px;
    padding: 5px 50px;
    text-decoration: none;
    text-transform: uppercase;
	color: #fff; 
	background: #C0C0C0;
	font-weight:normal;
	transition: all linear 0.15s;
}
 
.tab-links a:hover {
	background: #1791AB;
	color: #fff;
	text-decoration: none;
}
 
li.active a, li.active a:hover {
	background: #F8F8F8;
	color: #1791AB;
	font-weight: bold;
	padding: 6px 50px;
	box-shadow: -1px 1px 1px rgba(0,0,0,0.15);
} */
 

/**** center images *****/
img.center {
    display: block;
    margin-left: auto;
    margin-right: auto;
}


/******Download Page*****/
.features-table
{
  width: 90%;
  margin: 0 auto;
  border-collapse: separate;
  border-spacing: 0;
  text-shadow: 0 1px 0 #fff;
  color: #242A75;
  background: #fafafa;  
  background-image: -moz-linear-gradient(top, #fff, #eaeaea, #fff); /* Firefox 3.6 */
  background-image: -webkit-gradient(linear,center bottom,center top,from(#fff),color-stop(0.5, #eaeaea),to(#fff)); 
}

.features-table td
{
  height: 50px;
  line-height: 50px;
  padding: 0 20px;
  border-bottom: 1px solid #cdcdcd;
  box-shadow: 0 1px 0 white;
  -moz-box-shadow: 0 1px 0 white;
  -webkit-box-shadow: 0 1px 0 white;
  white-space: nowrap;
  text-align: center;
}


.features-table tbody td
{
  text-align: center;
  font: normal 14px 'Pontano Sans', Arial, Helvetica;
  width: 150px;
}

.features-table tbody td:first-child
{
  width: auto;
  text-align: left;
}

.features-table td:nth-child(2)
{
  background: #F8F8F8 ;
  /* background: rgba(144,144,144,0.15); */
  border-right: 1px solid white;
}

.features-table td:nth-child(3)
{
  background: #F8F8F8 ;
  /* background: rgba(144,144,144,0.15); */
  border-right: 1px solid white;
}

.features-table td:nth-child(4)
{
  background: #F8F8F8 ;  
  /* background: rgba(184,243,85,0.3); */
}

/*Header*/
.features-table thead td
{
  font: bold 1.2em 'Pontano Sans', Arial;  
  -moz-border-radius-topright: 10px;
  -moz-border-radius-topleft: 10px; 
  border-top-right-radius: 10px;
  border-top-left-radius: 10px;
  border-top: 1px solid #eaeaea; 
}

.features-table thead td:first-child
{
  border-top: none;
}

/*Footer*/
.features-table tfoot td
{
  font: 14px 'Pontano Sans';  
  -moz-border-radius-bottomright: 10px;
  -moz-border-radius-bottomleft: 10px; 
  border-bottom-right-radius: 10px;
  border-bottom-left-radius: 10px;
  border-bottom: 1px solid #dadada;
}

.features-table tfoot td:first-child
{
  border-bottom: none;
}
