/*
 * Default CSS style sheet for the ICU4C Open Source readme
 * Copyright (C) 2005-2011, International Business Machines
 * Corporation and others.  All Rights Reserved.
 */

/* Global styles */

body,p,li,ol,ul,th,td {
	font-size: 1em;
	font-family: "Arial", "Helvetica", sans-serif;
}

body {
	margin: 1em;
}

body.draft {
	background-image: url(images/draftbg.png);
}

.mainbody {
	padding: 1em;
}

/*
 * Customize the headers to have less space around them than usual
 */

h1 {
	margin-bottom: .5em;
	margin-top: .5em;
	padding-bottom: .5em;
	padding-top: .5em;
	font-weight: 700;
	font-size: 20pt;
	font-family: Georgia, "Times New Roman", Times, serif;
	border-width: 2px;
	border-style: solid;
	text-align: center;
	width: 100%;
	font-size: 200%;
	font-weight: bold;
}

h2 {
	border-top: 2px solid #22d;
	border-left: 2px solid #22d;
	margin-bottom: 0.5em;
	padding-left: 4px;
	margin-top: 12pt;
	font-weight: 700;
	font-size: 2em;
	font-family: Georgia, "Times New Roman", Times, serif;
	background-color: #eee;
	page-break-before: always;
}

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

h2 a:hover {
	color: blue;
	text-decoration: underline;
}

h3 {
	border-top: 1px solid gray;
	color: #1e1c46;
	margin-bottom: 0pt;
	margin-top: 12pt;
	padding-left: 0;
	margin-left: 1em;
	margin-top: 0.2em;
	padding-bottom: 0.4em;
	font-size: 1.5em;
	font-family: Georgia, "Times New Roman", Times, serif;
}

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

h3 a:hover {
	color: blue;
	text-decoration: underline;
}

h4 {
	margin-left: 1.5em;
	margin-bottom: 0pt;
	margin-top: 12pt;
	font-size: 1.0em;
	font-weight: bolder;
	font-family: Georgia, "Times New Roman", Times, serif;
}

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

h4 a:hover {
	color: blue;
	text-decoration: underline;
}

h5, h6 {
	margin-left: 1.8em;
	margin-bottom: 0pt;
	margin-top: 12pt;
	padding-left: 0.75em;
	font-size: x-small;
	font-family: Georgia, "Times New Roman", Times, serif;
}

p,pre,table,ul,ol,dl {
	margin-left: 2em;
}

/*
 * Navigation sidebar on the left hand of most pages
 */

td.sidebar1 {
	background-color: #99CCFF;
	font-weight: 700;
	margin-top: 0px;
	margin-bottom: 0px;
	padding-top: 1em;
	padding-left: 0.2em;
	white-space: nowrap;
}

td.sidebar2 {
	background-color: #99CCFF;
	margin-top: 0px;
	margin-bottom: 0px;
	margin-left: 0px;
	padding-top: 1px;
	padding-bottom: 1px;
	padding-left: 1px;
	padding-right: 0.5em;
	white-space: nowrap;
	text-decoration: none;
	display: block;
}

td.sidebar2:hover {
	background-color: #EEEEFF;
	padding-top: 1px;
	padding-bottom: 1px;
	padding-left: 1px;
	padding-right: 0.5em;
}

a.sidebar2 {
	text-decoration: none;
	display: block;
	width: 100%;
}

a.sidebar2:link {
	color: #000099;
	display: block;
}

a.sidebar2:hover {
	background-color: #EEEEFF;
	display: block;
}

.underlinehover:hover {
	background-color: #EEEEFF;
	text-decoration: underline;
}

/* This is the faded header at the top */

td.fadedtop {
	background-color: #006699;
	background-image: url(http://www.icu-project.org/images/gr100.gif);
}

/* Related site on the left */

p.relatedsite {
	color: White;
	font-weight: 700;
	font-size: 10pt;
	margin-top: 1em;
	margin-bottom: 0;
	padding-left: 0.2em;
	white-space: nowrap;
}

/* Related site on the left */

p.sidebar3 {
	margin-top: 0.75em;
	margin-bottom: 0;
	padding-left: 0.8em;
}

a.sidebar3 {
	font-size: 0.9em;
	text-decoration: none;
}

a.sidebar3:link {
	text-decoration: none;
	color: White;
}

a.sidebar3:hover {
	text-decoration: underline;
}

/* FAQ */

li.faq_contents {
	font-weight: 500;
}

p.faq_q {
	font-weight: 700;
	margin-bottom: 0px;
}

p.faq_a {
	margin-top: 0px;
}

/* News items */

table.newsItem {
	padding-left: 1em;
	padding-right: 1em;
	border-width: medium;
}

th.newsItem {
	background-color: #666666;
	color: White;
}

td.newsItem {
	background-color: #CCCCCC;
}

td.release-line,th.release-line {
	padding-left: 0.5em;
	padding-right: 0.5em;
	white-space: nowrap;
	border: 1px;
}

.note {
	font-style: italic;
	font-size: small;
	margin-left: 1em;
}

samp {
	margin-left: 1em;
	margin-right: 2em;
	border-style: groove;
	padding: 1em;
	display: block;
	background-color: #EEEEEE
}

table.rtable caption {
	margin-left: 2px;
	margin-right: 2px;
	padding: 3px;
	font-weight: bold;
	background-color: #dee2ff;
	text-align: left;
}

table.rtable tr th {
	background-color: #dee2ff;
	text-align: left;
}

table.rtable tr td {
	background-color: #c0c0fd;
	padding: 3px;
}

table.rtable tr.broken td {
	background-color: #fbb;
	border: 1px dashed gray;
	padding: 3px;
	font-weight: bold;
}

table.rtable tr.rarely td {
	background-color: #efe9c2;
	padding: 3px;
	font-style: italic;
}

/*  APIChangeReport specific things */

.row0 {
	background-color: white;
}

.row1 {
	background-color: #dfd;
}

.verchange {
	color: red;
	font-weight: bold;
	font-size: large;
}

.stabchange {
	color: red;
	font-size: large;
}

.bigwarn {
	color: red;
	background-color: white;
	font-size: large;
	margin: 0.5 em;
}


td.bornstable {
	
}
td.bornstable .bigwarn {
	font-size: small;
	white-space: nowrap;
}

table.genTable {
	border-collapse: collapse;
	border: 1px solid black;
}

/* 'everything inc version */

table.gentable td {
	border: 1px solid gray;
	padding: 0.25em;
	font-size: small;
}

/* not version */

table.genTable td.file,
table.genTable td.proto {
	border: none;
	font-size: medium;
}

table.genTable td.file {
	font-family: monospace;
	font-weight: bold;
}

div.other .row0 {
	background-color: white;
}

div.other .row1 {
	background-color: #ddf;
}

table.docTable {
	border-collapse: collapse;
	border: 1px solid black;
}

/* 'everything inc version */

table.docTable td,
table.docTable th {
	border: 1px solid gray;
	padding: 0.25em;
	font-size: small;
}

/* not version */

table.docTable td.file,
table.docTable td.proto {
	border: none;
	font-size: medium;
}

table.docTable td.file {
	font-family: monospace;
	font-weight: bold;
}

abbr {
	border-bottom: 1px dashed #0B0;
}

h2.TOC {
	page-break-before: auto;
}

body.readme {
	
}

caption {
	font-weight: bold;
	text-align: left
}

div.indent {
	margin-left: 2em
}

ul.TOC {
	list-style-type: none;
	padding-left: 1em;
	font-size: larger;
}

ul.TOC li a {
	font-weight: bold;
}

ul.TOC li ul li a {
	font-weight: normal;
	list-style-type: none;
	font-size: small;
}

ul.TOC li ul {
	margin-left: 0;
	padding-left: 2em;
	font-weight: normal;
	list-style-type: none;
}

pre.samp,samp {
	margin-left: 1em;
	border-style: groove;
	padding: 1em;
	display: block;
	background-color: #EEEEEE
}

td.proto {
	font-size: smaller;
}



@media print {
	div#toc {
		display: none;
	}
	
	table,tr,td,div {
		page-break-inside: auto;
	}
}
