/*
  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(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;
}



