/*
* 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 {
    padding-top: 60px;
    padding-bottom: 40px;
}

.sprite {
    display: inline-block;
    height: 20px;
    margin: 0 auto 4px;
    outline: medium none;
    text-indent: -999em;
    width: 24px;
    background-image: url('../images/sprites.png');
    background-repeat: no-repeat;
    overflow: hidden;
    cursor: pointer;
}

.edit-page {
    display: inline-block;
    height: 20px;
    margin: 0 auto 4px;
    outline: medium none;
    text-indent: -999em;
    width: 24px;
    background-image: url('../images/edit.png');
    background-repeat: no-repeat;
    overflow: hidden;
    cursor: pointer;
}

.fb-share {
    background-position: 0px -40px;
}

.gp-share {
    background-position: 0px 0px;
}

.tw-share {
    background-position: 0px -80px;
}

.pin-share {
    background-position: 0px -120px;
}

blockquote p {
    font-size: 14px;
}

.span-one-third {
    width: 300px;
    float: left;
	overflow:hidden;
}

.span-two-thirds {
    width: 620px;
}

.offset-one-third {
    margin-left: 340px;
}

.offset-two-thirds {
    margin-left: 660px;
}

.green {
    color: #0c0;
}

.contrast {
    background-color: #222222;
    color: #e6e7e8;
}
.text-center {
    text-align: center;
}

.text-left {
    text-align: left;
}
