/*
Licensed 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, td, th {
    font-size: 100%;
    font-family: Arial, Geneva, Helvetica, sans-serif;
    color: black;
    background-color: white;
}

h2 {
    font-size: 130%;
    font-weight: bold;
}

h3 {
    font-size: 110%;
    font-weight: bold;
}

h4 {
    font-size: 100%;
    font-weight: bold;
}

/* Audit data*/
.audit {
	font-size: 75%;
}

/* Name of the base directory scanned */
.base-dir {
	font-weight: bold;
}

/* When the audit was run */
.at {
	font-family: mono;
}

/* Name of directory */
.dir {
	font-weight: bold;
}

/* Name of resource */
.resource {
	font-family: mono;
}

/* SHA checksum */
.sha {
	font-size: 50%;
	font-family: mono;
}

/* MD5 checksum */
.md5 {
	font-size: 50%;
	font-family: mono;
}

/* RIPE checksum */
.ripe {
	font-size: 50%;
	font-family: mono;
}