/*
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

@CHARSET "UTF-8";


/* DIV.CAS-HEADER */
div#cas-header {
    position:relative;
    height:56px;
    padding:5px;
    text-align:right;
    border-bottom:solid 1px #000;
    overflow:none;
    background:url(../../images/blackfade-syncd.jpg) scroll 0px 0px repeat-x;
}

/* DIV.CAS-LOGO-LEFT */
div#cas-logo-left {
    position:absolute;
    top:0px;
    left:0px;
    height:67px;
    width:500px;
}
/* DIV.CAS-LOGO-RIGHT */
div#cas-logo-right {
    position:absolute;
    top:0px;
    right:0px;
    height:67px;
    width:290px;
}

/* H2.APP-TITLE */
h2.app-title {
    position:absolute;
    top:67px;
    right:0px;
    margin:0px;
    width:100%;
    padding:5px;
    padding-left:0px;
    font-weight:normal;
    font-size:15px;
    letter-spacing:0.03em;
}
/* DIV.USERDETAILS */
div.userdetails {
    position:absolute;
    top:102px;
    right:5px;
    font-size:75%;
    z-index:10
}
div.userdetails a {
    
}

/* DIV#BREADCRUMBS */
div#breadcrumbs {
    position:relative;
    margin-top:30px;
    padding:4px;
    padding-right:5px;
    padding-left:5px;
    padding-bottom:5px;
    font-size:85%;
}
div#breadcrumbs ul {
    list-style:none;
    margin:0px;
    padding:0px;
}
div#breadcrumbs ul li {
    display:inline;
}

div#breadcrumbs ul li a {
    font-weight:normal;
    text-decoration:underline;  
}

/**
 * CAS Footer Styles
 *
 * These describe the basic layout of the footer code in /views/common/cas-curator-footer.jsp
 */
 
div#footer {
    font-size:90%;
    text-align:center;
    margin-top:35px;
    border-top:solid 1px #ddd;
    padding-top:15px;
    padding-bottom:8px;
}

div#footer img {
    border:none;
    padding-left:2px;
    margin-left:5px;    
}

/**
 * CAS Interface Styles
 *
 * These describe the layout of the main curator interface located at /main.jsp
 */
 
 
 
/* DIV.ERROR
 * A red 'error' box suitable for displaying error messages.
 */
div.error {
    background-color:#fcc;
    padding:5px;
    margin-right:15px;
    border:solid 1px #f44;
}

/* DIV.SUCCESS
 * A green 'success' box suitable for displaying success messages.
 */
div.success  {
    padding:5px;
    border:solid 1px green;
    background-color:#cfc;  
    margin-right:10px;
}

/* HEADERS (H1,H2,H3,......) */
h2.title {
    padding:5px;
    margin:0px;
    border-top:solid 2px #900;
    border-bottom:solid 1px #300;
    font-weight:normal;
    font-size:15px;
}

h4 {
    border-bottom:dotted 1px #888;
}


/**
 * PAGE STRUCTURE
 *
 */
 
/* LOGIN FORM */
form#login-form {
    border:solid 0px #f66;
    background-color:#fff;
    margin:5px;
    padding:3px;
    text-align:center;
}
form#login-form h3 {
    color:#333;
    margin-top:0px;
    border-bottom:dotted 0px #444;
        
}
form#login-form input[type=text], form#login-form input[type=password] {
    border:solid 1px #888;
    padding:3px;
    width:150px;
}
form#login-form table {
    color:#333;
    margin:5px;
    margin-top:0px;
    border:solid 1px #ccc;
    width:242px;
}
form#login-form input[type=submit] {
    padding:3px;
}

/* INFORMATIONAL MESSAGES */
/* all absolutely positioned infos are at z-index 1000-1100)
 */
div.info {
    font-size:13px;
    background-color:#acf;
    font-family:arial,sans-serif;
    color:#345; 
    display:none;   
}
div.info input[type=button] {
    padding:2px;
    margin:5px 0px;
}
div#infoNoMetadataExtractorDefined {
    position:absolute;
    border:solid 1px #ccc;
    top:28px;
    right:-2px;
    z-index:1000;
    width:60%;  
    line-height:18px;
}
div.infoContent {
    padding:5px;    
}

/* LINKS */

a {
    color:#222;
    text-decoration:none;
}
a:hover {
    text-decoration:underline;
}
a.actionlink {
    color:#48a;
    padding-left:5px;   
}
div#breadcrumbs a {
    color:#fff;
}



