/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 * 
 * The contents of this file are subject to the terms of either the GNU General
 * Public License Version 2 only ("GPL") or the Common Development and Distribution
 * License("CDDL") (collectively, the "License"). You may not use this file except in
 * compliance with the License. You can obtain a copy of the License at
 * https://netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
 * License for the specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header Notice in
 * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Sun
 * designates this particular file as subject to the "Classpath" exception as
 * provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the License Header,
 * with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyrighted [year] [name of copyright owner]"
 * 
 * Contributor(s):
 * 
 * The Original Software is NetBeans. The Initial Developer of the Original Software
 * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
 * Rights Reserved.
 * 
 * If you wish your version of this file to be governed by only the CDDL or only the
 * GPL Version 2, indicate your decision by adding "[Contributor] elects to include
 * this software in this distribution under the [CDDL or GPL Version 2] license." If
 * you do not indicate a single choice of license, a recipient has the option to
 * distribute your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above. However, if
 * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then
 * the option applies only if the new code is made subject to such option by the
 * copyright holder.
 */

/* Top header *****************************************************************/
table.top_header {
    margin:             0px auto 0px auto;
    width:                    100%;
    height:                   57px;
    border-collapse:      collapse;
    background-image:      url('/images_www/v6/products-top-bg.gif');
    background-repeat:   no-repeat;
    background-position:     right;
}

table.top_header td {
	padding:     25px 23px 0px 23px;        
	color:			#D5D5D5;
}

table.top_header td.title {
	width:				100%;
	font-size:			1.8em;
	color:				#0e1b55;	
}

table.top_header td.menu {
	white-space:		nowrap;
	font-size:		1.2em;
}

table.subscription_selects {	
    margin:             10px auto 0px auto;
    padding-bottom:      7px;
    width:              95%;
    empty-cells:        show;
    align: left;
}

table.subscription {	
	padding: 0px 0px 0px 0px;
	width: 430px;
}

table.l_p_select_note {
	margin: 0px 0px 0px 0px;
}

/* Language/platform selection ************************************************/
table.l_p_select {
	margin:				0px 0px 0px 0px;
	padding-top: 0px;
	width:				100%;
	border-collapse:	collapse;	
}

table.l_p_select td {
	padding:			0px 0px 0px 0px;
}

table.l_p_select td.spacer {
	width:		100%;
}

table.l_p_select td.label {
	padding-left:		15px;
	padding-right:		5px;
}


/* Missing components warning ************************************************/
table.missing_components {
	width:				100%;
	border-collapse: 	 collapse;
}

table.missing_components td.label {
	text-align:         	    right;
	color:          	  #808080;
	padding-top: 5px;
}

/* Components table ***********************************************************/
table.components_table {
    margin:             0px auto 0px auto;
    width:              95%;
    border-collapse:    collapse;
    empty-cells:        show;
}

table.components_table th {
    padding:            2px 5px 2px 5px;
    text-align:         center;
    color:              #333333;
    font-family:        Arial, sans-serif;
    font-weight:        normal;
    font-size:          1.1em;
    cursor:             default;
}

table.components_table th.over {
    background:        #eeeeee;
}


table.components_table .star {
    padding:            0px 0px 0px 5px;
    text-align:         center;
    color:              #333333;
    font-family:        Arial, sans-serif;
    font-weight:        bold;
    font-size:          1.2em;
    cursor:             default;
}


table.components_table td {
    border-top:         1px solid #D5D5D5;
    border-bottom:      1px solid #D5D5D5;
    padding:            2px 5px 2px 5px;
    text-align:         center;
    font-family:        Verdana, Arial, sans-serif;
    font-size:          1em;
    cursor:             default;
}

table.components_table td.over {
    background:        #eeeeee;
}


table.components_table .header {
    border-width:       0px;
    padding:            0px 0px 5px 0px;
    font-weight:       bold;
    color:          #FF8E00;
    font-size:        1.1em;
}


table.components_table .left {
    text-align:         left;
}

table.components_table .no_border {
    border-width:       0px;
}

table.components_table .download_button {
    padding:            5px 9px 2px 9px;
}

table.components_table .no_padding {
    padding:            0px 0px 0px 0px;
}

table.components_table .left_border {
    border-left:        1px solid #D5D5D5;
}

table.components_table .right_border {
    border-right:       1px solid #D5D5D5;
}

table.components_table .bottom_border {
    border-bottom:      1px solid #D5D5D5;
}

table.components_table .wide {
    width:              100%;
}

table.components_table .bottom {
    vertical-align:     bottom;
}

table.components_table .beige {
    background-color:   #FFF4E5;
}

table.components_table .comment {
    
}

table.components_table .bold_comment {
    color:              #ff5e08;
    font-family:        Arial, sans-serif;
    font-weight:        bold;
}

table.components_table .warning {
    color:              #cc9900;
}

table.components_table .product_note {
    color:              #D5D5D5;
    font-size:          0.85em;
}

table.components_table .product_display_name {
    padding:		0px 0px 0px 8px;
    color:              #333333;
}

table.components_table .product_display_name_no {
    padding:   0px 0px 0px 8px;
    color:              #808080;    
}


table.components_table .bundle_display_name {
    color:              #333333;
}

table.components_table .bundle_display_name_no {
    color:              #808080;
}

table.components_table .community_note_number {
    color:              #FF0000;
    position:           relative;
    bottom: 		4px;
}


table.components_table .title {
    font-size:			1.3em;
	white-space:		nowrap;
}

div.files_list {
	margin-left:	8px;
}

.pop_up {
    color:		#333333;
    width:              250px;
    min-height:         10px;    
    margin-top:         1.2em;
    margin-left:        30px;
    padding:            5px 5px 5px 5px;
    border:             1px solid #6B6B6B;
    position:           absolute; 
    z-index:            100;
    visibility:         hidden;
    background-color:   #E6F6FE;
}

.noscript_warning {
    font-size:          1.2em;
    color:              #ff0000;
    font-weight:        bold;
    margin:             20px 40px 20px 40px;
}

.special_message_number {
	margin: 0px 0px 0px 0px;
        color:            #FF5E08; 
}
.special_message_text {
}

.bold {font-weight:bold;}

.legal_box {
     padding: 4px 5px 10px 10px;
     margin-right: 25px;
     background-color:#E6F6FE;
}

.download_tab_active {
     color: #999999;
}
