/*
 * Copyright (c) 2005, 2006 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 *
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * IBM Corporation - initial implementation
 */

body {
	background-image : url(../graphics/contentpage/whatsnew_wtr.jpg);
}

.page { min-height : 500px; }

/* show the "selected" image for this page */
#navigation-links a#news img, #navigation-links a#news:hover img { background-image : url(../graphics/icons/ctool/whatsnew48sel.gif); }

/* 
 * Set up the content of the Whats New page to be displayed in 
 * two columns that are centered in the middle of the page.
 */

#noteworthy-links {
	text-align : left;
	width : 760px;
	/* To center in Moz (have to use text-align for IE) */	
	margin: 0px auto;
}

#noteworthy-links a { 
	width : 370px;
	text-align : left; 
	margin-left : 5px;
	margin-right : 5px;
	margin-top : 5px;
	margin-bottom : -20px;
	vertical-align : top;
}

#noteworthy-links > a { vertical-align : middle; }

#noteworthy-links a img {
	height : 57px;
	width : 57px;
	vertical-align : middle;
}

#noteworthy-links a .link-label {
	display : block;
	width : 300px;
	position : relative;
	top : -50px;
	left : 60px;
}

#noteworthy-links a p .text {
	display : block;
	width : 300px;
	position : relative;
	top : -45px;
	left : 53px;
}

/* Special case for Mozilla, because the links are displayed
   in 1 vertical column instead of 2 centered columns */
#noteworthy-links > a { width : 700px; }
#noteworthy-links a > .link-label { width : 700px; }
#noteworthy-links a p > .text { width : 700px; }

#noteworthy-links a:hover { border-right : 5px; }

#noteworthy-links a img { background-image : url(../graphics/icons/obj48/new_obj.gif); }
#noteworthy-links a:hover img { background-image : url(../graphics/icons/obj48/newhov_obj.gif); }


#news-links {
	text-align : left;
	width : 760px;
	/* To center in Moz (have to use text-align for IE) */	
	margin: 0px auto;
}

#news-links a { 
	width : 370px;
	text-align : left; 
	margin-left : 5px;
	margin-right : 5px;
	margin-top : 5px;
	margin-bottom : -20px;
	vertical-align : top;
}

#news-links > a { vertical-align : middle; }

#news-links a img {
	height : 57px;
	width : 57px;
	vertical-align : middle;
}

#news-links a .link-label {
	display : block;
	width : 300px;
	position : relative;
	top : -50px;
	left : 60px;
}

#news-links a p .text {
	display : block;
	width : 300px;
	position : relative;
	top : -45px;
	left : 53px;
}

/* Special case for Mozilla, because the links are displayed
   in 1 vertical column instead of 2 centered columns */
#news-links > a { 	width : 700px; }
#news-links a > .link-label { width : 700px; }
#news-links a p > .text { width : 700px; }

#news-links a:hover { border-right : 5px; }

a#new-and-noteworthy img { background-image : url(../graphics/icons/obj48/new_obj.gif); }
a#new-and-noteworthy:hover img { background-image : url(../graphics/icons/obj48/newhov_obj.gif); }

a#migration img { background-image : url(../graphics/icons/obj48/migrate_obj.gif); }
a#migration:hover img { background-image : url(../graphics/icons/obj48/migratehov_obj.gif); }

a#updates img { background-image : url(../graphics/icons/obj48/updates_obj.gif); }
a#updates:hover img { background-image : url(../graphics/icons/obj48/updateshov_obj.gif); }

a#eclipse img { background-image : url(../graphics/icons/obj48/community_obj.gif); }
a#eclipse:hover img { background-image : url(../graphics/icons/obj48/communityhov_obj.gif); }


