/*
 * Copyright (C) 2013 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

.content-view.resource.font {
    display: flex;

    justify-content: center;

    overflow-x: hidden;
    overflow-y: auto;
}

.content-view.resource.font .preview {
    font-size: 72px;
    font-family: serif;

    white-space: nowrap;

 /* A border is used instead of padding or margin so when there is scrolling
    overflow there will be space on all sides. It also avoids having to account
    for the padding/margin in FontResourceContentView.siteToFit. */
    border: 15px solid transparent;

    margin: auto 0;
}

.content-view.resource.font .preview > .line {
    border-left: 1px solid lightgrey;
    border-right: 1px solid lightgrey;

    margin-top: -1px; /* Causes adjacent .line elements to share one border instead of doubling up. */
}

.content-view.resource.font .preview > .line > .content {
    display: inline-block;

    width: 100%;

    text-align: center;
    text-rendering: optimizeLegibility;

    -webkit-user-select: text;
    cursor: text;
}

.content-view.resource.font .preview > .line > .metric {
    display: inline-block;
    width: 100%;
    height: 1px;
    -webkit-margin-end: -100%; /* Causes this element to be zero width and draw behind the text. */
}

body[dir=rtl] .content-view.resource.font .preview > .line > .metric {
    position: relative;
    z-index: -1;
}

.content-view.resource.font .metric.top {
    vertical-align: top;
    background-color: lightgrey;
}

.content-view.resource.font .metric.baseline {
    vertical-align: baseline;
    background-color: lightblue;
}

.content-view.resource.font .metric.middle {
    vertical-align: middle;
    background-color: lightgreen;
}

.content-view.resource.font .metric.xheight {
    vertical-align: 1ex;
    background-color: pink;
}

.content-view.resource.font .metric.bottom {
    vertical-align: bottom;
    background-color: lightgrey;
}

@media (prefers-color-scheme: dark) {
    .content-view.resource.font .preview > .line {
        border-left-color: var(--text-color-quaternary);
        border-right-color: var(--text-color-quaternary);
    }

    .content-view.resource.font .metric.top {
        background-color: var(--text-color-quaternary);
    }

    .content-view.resource.font .metric.baseline {
        background-color: hsl(195, 100%, 37%);
    }

    .content-view.resource.font .metric.middle {
        background-color: hsl(120, 100%, 35%);
    }

    .content-view.resource.font .metric.xheight {
        background-color: hsl(350, 100%, 40%);
    }

    .content-view.resource.font .metric.bottom {
        background-color: var(--text-color-quaternary);
    }
}
