/***********************************************
APACHE OPEN FOR BUSINESS
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.
***********************************************/
body {background:transparent url(/images/ofbiz_logo.gif) no-repeat scroll left top;
    color: #000;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size:.75em;
    line-height:1.5em;padding:50px 0 0;
    bgcolor: #ffffcc;

}

a:hover {
    color:#111111;
    text-decoration:underline;
}
a:visited {
    color:#000;
    text-decoration:underline;
}
a {
    color:#555;
    text-decoration:underline;
}



div.abstract
{
        border: solid 2px;
        padding-left: 10pt;
        padding-right: 10pt;
        background-color: #ffffcc;
}
pre.screen
{
        font-family:monospace;
        white-space: pre;
        width: 100%;
        background-color: #ffffcc;
        border:solid;
        color: #000000;
        border-color: #009999;
        border-left: solid #009999 2px;
        border-right: solid #009999 2px;
        border-top: solid #009999 2px;
        border-bottom: solid #009999 2px;

        padding-left: 15pt;
}
pre.programlisting
{
        font-family:monospace;
        white-space: pre;
        width: 100%;
        background-color: #ffffcc;
        border:solid;
        color: #000000;
        border-color: #009999;
        border-left: solid #009999 2px;
        border-right: solid #009999 2px;
        border-top: solid #009999 2px;
        border-bottom: solid #009999 2px;

        padding-left: 15pt;
}

h1
{
        color: #ffffff;
        border: solid 3px #a0a0d0;
        background-color: #606090;
        font-variant: small-caps;
        width: 100%;
}

h1.title
{
        color: #ffffff;
        border: solid 3px #a0a0d0;
        background-color: #606090;
        font-variant: small-caps;
        width: 100%;
}

.title a {
        color: #fffffc; 
        text-decoration: none;
}

.title a:active {
        color: #ffffff; 
        text-decoration: none;
}

.title a:visited {
        color: #ffffff; 
        text-decoration: none;
}

h2
{       
        color: #ffffff ;
        font-style: italic;
        background-color: #a0a0d0;
        border: solid 3px #606090;
        padding: 1px
}

table.important
{
        font-style:italic;
        border: solid 2px #ff0000;
        width: 70%;
        margin-left: 15%;       
}
table.caution
{
        font-style:italic;
        border: ridge 2px #ffff00;
        width: 70%;
        margin-left: 15%;       
}

table.note
{
        font-style:italic;
        border: solid 1px #000000;
        width: 70%;
        margin-left: 15%;       
}
table.tip
{
        font-style:italic;
        border: solid 1px #000000;
        width: 70%;
        margin-left: 15%;       
}

table.warning
{
        font-style:italic;
        font-weight: bold;
        border: ridge 4px #ff0000;
        
        width: 70%;
        margin-left: 15%;       
}

div.variablelist {
        font-family: sans-serif;
        font-style: normal;
        font-weight: normal;
        padding-left: 20px;
}

.varlistentry {
        font-weight: bold;
        margin-top: 10px;
        color: #ffffff ;
        background-color: #a0a0d0;
        border: solid 1px #606090;
        padding: 1px
}

/*
 * see http://diveintoaccessibility.org/day_26_using_relative_font_sizes.html
 * for an explanation of the following few commands.
 * they are really too complicated to explain here in all depth. ;-)
*/

p {
        font-size: 12px;
}

/*a{}
body p {
        font-size: x-small;
        voice-family: "\"}\"";
        voice-family: inherit;
        font-size: small;
}

html>body p {
        font-size: small;
}
*/

/* add an external-link icon to absolute links */
a[href^="http:"] {
        background: url(images/remote.gif) right center no-repeat;
        padding-right: 12px;
}

a[href^="http:"]:hover {
        background: url(images/remote_a.gif) right center no-repeat;
}

/* add a note icon to footnote links */
a[href^="#ftn"] {
        background: url(images/qbullet-note.gif) right center no-repeat;
        padding-right: 12px;
}

a[href^="#ftn"]:hover {
        background: url(images/qbullet-note_a.gif) right center no-repeat;
}

/* ...and a back icon to the backlinks in the footnotes themselves */
a[name^="ftn"] {
        background: url(images/scrollup.gif) right center no-repeat;
        padding-right: 12px;
}

a[name^="ftn"]:hover {
        background: url(images/scrollup_a.gif) right center no-repeat;
}

/* add a download icon to .gz links */
a[href$=".gz"],a[href$=".tar"],a[href$=".zip"] {
        background: url(images/disk.gif) right center no-repeat;
        padding-right: 12px;
}


/* add an acrobat reader icon to pdf links */
a[href$=".pdf"] {
        background: url(images/acrobat.gif) right center no-repeat;
        padding-right: 12px;
}

a[href$=".pdf"]:hover {
        background: url(images/acrobat_a.gif) right center no-repeat;
}

/* add a word icon to rtf links */
a[href$=".rtf"] {
        background: url(images/word.gif) right center no-repeat;
        padding-right: 12px;
}


/* ...but not to absolute links in this domain... */
a[href^="http://www.karakas-online.de"] {
        background: transparent;
        padding-right: 0px;
}

a[href^="http://www.karakas-online.de"]:hover {
        background: transparent;
}

/* ...or to the translation links on each page */
div.translatelink > a[href^="http:"] {
        background: transparent;
        padding-right: 0px;
}

div.translatelink > a[href^="http:"]:hover {
        background: transparent;
}

/* ...or to any images  */
div.imagelink  a[href^="http:"] {
        background: transparent;
        padding-right: 0px;
}

div.imagelink  a[href^="http:"]:hover {
        background: transparent;
}


p.c2 {
        color: #ffffff ;
        background-color: #a0a0d0;
        border: solid 1px #606090;
        padding: 1px
}


div.navfooter {
        color: #000000;
        background-color: #efeff8;
        padding: 5px;
        margin-top: 10px;
        width: 100%;
        border: thin solid #a0a0d0;
}

div.nukefooter {
        color: #000000;
        background-color: #b0e0e6;
        padding: 5px;
        margin-top: 10px;
        width: 100%;
        border: thin solid #a0a0d0;
}

div.navheader {
        color: #000000;
        background-color: #efeff8;
        padding: 5px;
        margin-bottom: 10px;
        width: 100%;
        border: thin solid #a0a0d0;
}

div.sect1,div.sect2,div.sect3 {
        margin-left: 20px;
}

div.example,div.toc {
        border: thin dotted #70aae5;
        padding-left: 10px;
        padding-right: 10px;
        color: #000000;
        background-color: #eff8f8;
}

div.toc {
        margin-left: 20px;
        margin-right: 20px;
        width: 95%;
}

ul  {
        list-style: url("images/tux-bullet.png") disc;
    }

div.example,div.toc {
        border: thin dotted #70aae5;
        padding-left: 10px;
        padding-right: 10px;
        color: #000000;
        background-color: #eff8f8;
}
div.toc {
        margin-left: 20px;
        margin-right: 20px;
        width: 95%;
}

