/* CSS Document - Author: Shaibal Mandal */

/* Design:  Reflections, from OpenWebsiteDesign */

/* Main Styles that apply to body */

body {

	font-size: 11px;

	font-family: DejaVu Sans, Verdana, Arial, Sans-Serif;

	margin: 0px;

	padding-left: 50%;

	background: #f4f4f4 url(images/bg.gif) center repeat-y;

	position: absolute;

	width:350px;

}



/* This is the page container built and centered using -ve margins */

#container {

	width: 700px;

	margin-left: -350px;

}



/* The topmost faded bar */

#topbar {

    width:auto;

    background: #EEE;

    height: 20px;

    padding: 10px 5px 5px 2px;

    font: 9px verdana;

    font-weight: bold;

    color: #CCCCCC;

    text-align: right;

}



/* This holds the two heading blocks, the title and the login form */

#headerwrapper {

    width: auto;

    border-spacing: 0px;

}



/* class that styles the holder div of the forms */

.userform {

    width: auto;

    color: #0634bc;

    padding: 5px 0px 5px 3px;

    background: #fbfbfb;

    border:1px solid #efefef;

    border-top: none;

    text-align: justify;

    margin-bottom: 1px;

}



/* This will style the login and search */

.userform input {

    border: 1px solid #DDD;

    font-family: verdana;

    font-size: 10px;

    color: #BBB;

    font-weight: bold;

}

/*

 #EEE = light grey

 #DDD = dark grey

 #0634bc = dark purple

 #efefef = light grey

 #DBB7DB = light violet

 #663366 = deep purple

 #F7F4F7 = faint pinky grey

 #f1f1f1 = light grey

 #F7F4F7 = deep deep purple

 #591333 = deep purple

*/



/*

 #06348c = OOo dark blue

 #b7cad7 = OOo shady light blue

 #c4dae9 = OOo light blue

 #698ed1 = OOo lighter blue

 #ecf1f5 = OOo pale blue

*/



h1 {

  font: 48px verdana;

/*	color: #EEE; */
	color: #bababa;

	margin: 5px;

}



h6 {

    font: 10px verdana;

    font-weight: bold;

	color: #DDD;

	margin: 0px;

	padding: 0px;

	margin-left: 8px;

}



/* This holds the tabs */

#tabholder

{

    width: auto;

}



/* Container for the article box, and the pic box */
/* Issue 74175 (set this as comment markomlm) */

.articleboxouter { 

    width: auto;

    padding: 0px 6px 0px 5px;

    clear: both;

} 



/* Content holder for the articles */

.articleboxinner {

    width: auto;

    font-size: 12px;

    line-height: 20px;

    color: #06348c;

    padding: 15px 6px 0px 6px;

    background: #fbfbfb;

    border:1px solid #efefef;

    text-align: left;

    height: 220px;

}



/* The title style for the main article */

.articleheader

{

    font-size: 18px;

    font-weight: bold;

}



/* This will style the read more thing at the bottom */

.readmore {

    text-align: right;

    display: block;

    width: auto;

}



/* This controls the main pic in the main article box */

.mainpiccontrol

{

    border: 0px #c4dae9 solid;

    float: left;

    margin-right: 10px;

}



/* Container for the pic thumbnails */

.picboxouter {

    width: auto;

    padding: 0px 6px 0px 5px;

    clear: both;

}



/* Content holder for the pic box */

.picbox {

    width: auto;

    line-height: 20px;

    color: #06348c;

    padding: 2px 9px 2px 8px;

    border: 1px solid #efefef;

    text-align: center;

    float: left;

}



.picbox a:hover {

	border: none;

}

.picbox a:hover span {

	border-bottom: dashed 1px red;

}



/* This controls the thumbnails in the picbox div Issue 74175 */

.pickboxcontrol {

    vertical-align: middle;

    width: 95px; 

    height: 64px;

}



/* Content holder for the screen box */

.screenbox {

    width: auto;

    line-height: 20px;

    color: #06348c;

    padding: 2px 1px 2px 1px;

    border: 1px solid #efefef;

    text-align: center;

    float: left;

}

.screenbox a:hover {

	border: none;

}

.screenbox a:hover span {

	border-bottom: dashed 1px red;

}



.screenboxcontrol {

    vertical-align: middle;

    width: 120px; 

    height:86px;

}



/* Sometimes, I don't want borders around my hyperlink images */

.noborder {

    border: none;

}



/* For taming those leeeeeeetle arrows */

img {

    vertical-align: text-bottom;

}



/* Style-up those ugly default hyperlinks */

a {

	text-decoration: none;

	padding: 0;

	margin: 0;

	color: #663366;

}



/* And their ugly hover states too */

a:hover {

	border-bottom:dashed 1px red;

}



/* Why should the humble footer be left out? */

#myfooter {

	background-color: #ccc;

	color: #fff;

	text-align: center;

	vertical-align: middle;

/*	height: 150px; */

	padding-top: 5px;

	clear: both;

}



#myfooter td {

  border: 0px;

  padding: 0px;

  border-spacing: 0px; 

  text-align: center;

}



/* This will contain the three columns */

#newsContainer2

{

    width:auto;

    background-color: #ecf1f5;

}



/* First column of the three columns */

.c1

{

	width: 227px;

	background-color: #ecf1f5;

    border: 1px solid #DDD;

    border-top: none;

    line-height: 22px;

    color: #0634bc;

	float: left;

}



/* Second column of the three columns */

.c2

{

    width: 230px;

    float: left;

    border-bottom: 1px solid #DDD;

    line-height: 22px;

    color: #0634bc;

}



/* Third column of the three columns */

.c3

{

	width: 228px;

	background-color: #ecf1f5;

    border: 1px solid #DDD;

    border-top: none;

    line-height: 22px;

    color: #0634bc;

	float: right;

}



/* This controls the titles for each column */

.noteheader

{

    width:auto;

    border-bottom: 1px solid #DDD;

    border-top: none;

    color: #0634bc;

    height: 24px;

    font-family: verdana;

    font-size: 11px;

    font-weight: bold;

/*  background:url(images/headerBG.jpg) repeat-x; */

}



/* And this gives the column text some breathing space */

.spacy

{

    padding: 5px;

}



/* CSS Tabs */

#tabs8 {

    float:left;

    width:100%;

    background:#F1F1F1;

    font-size:93%;

    line-height:normal;

    border-bottom:1px solid #CCC;

}



#tabs8 ul {

    margin:0;

    padding:10px 10px 0 5px;

    list-style:none;

}



#tabs8 li {

    display:inline;

    margin:0;

    padding:0;

}



#tabs8 a {

    float:left;

    background:url("images/tableft8.gif") no-repeat left top;

    margin:0;

    padding:0 0 0 4px;

    text-decoration:none;

}



#tabs8 a span {

    float:left;

    display:block;

    background:url("images/tabright8.gif") no-repeat right top;

    padding:5px 15px 4px 6px;

    color:#eee;

    font-weight: bold;

}



/* Commented Backslash Hack hides rule from IE5-Mac \*/

#tabs8 a span {float:none;}

    /* End IE5-Mac hack */

    #tabs8 a:hover span {

/*  color:#591333; */

    color:#06348c;

}



#tabs8 a:hover {

    background-position:0% -42px;

  	border: none;

}



#tabs8 a:hover span {

    background-position:100% -42px;

    color: #888;

}



#tabs8 #current a {

    background-position:0% -42px;

}

#tabs8 #current a span {

    background-position:100% -42px;

    color: #888;

}

.boxes {
      display: none;
}

/* End of CSS Tabs */

