/*
 * Copyright (C) 2016 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.
 */

.heap-snapshot > .data-grid {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

.heap-snapshot > .data-grid td .sub-retained {
    color: hsl(0, 0%, 60%);
}

.heap-snapshot > .data-grid td .percentage {
    width: 45px;
    margin-left: 4px;
    display: inline-block;
}

.heap-snapshot .object-id {
    color: gray;
}

.heap-snapshot .object-id:hover {
    text-decoration: underline;
}

.heap-snapshot > .data-grid:focus tr.selected > td .sub-retained {
    color: var(--selected-secondary-text-color);
}

.heap-snapshot > .data-grid:focus tr.selected .object-id,
.heap-snapshot > .data-grid:focus tr.selected .object-preview > .size {
    color: var(--selected-secondary-text-color);
}

.heap-snapshot > .data-grid:focus tr.selected .formatted-string,
.heap-snapshot > .data-grid:focus tr.selected .object-preview span {
    color: var(--selected-foreground-color);
}

.heap-snapshot > .data-grid td .location {
    margin-left: 1ex;
    color: hsl(0, 0%, 60%);
}

.heap-snapshot > .data-grid:focus tr.selected td .location {
    color: hsl(0, 0%, 85%);
}

.heap-snapshot > .data-grid tr:matches(.selected, :hover) td .go-to-arrow {
    float: none;
    display: inline-block;
    vertical-align: top;
    position: relative;
    width: 16px;
    height: 16px;
    margin-left: 2px;
}

.heap-snapshot > .data-grid td .more {
    text-decoration: underline;
    margin-right: 1ex;
}

.heap-snapshot .icon {
    position: relative;
    width: 16px;
    height: 16px;
    margin-right: 4px;
    content: url(../Images/TypeUndefined.svg);
}

.heap-snapshot .icon.native {
    content: url(../Images/Native.svg);
}

.heap-snapshot .icon.boolean {
    content: url(../Images/TypeBoolean.svg);
}

.heap-snapshot .icon.function {
    content: url(../Images/Function.svg);
}

.heap-snapshot .icon.number {
    content: url(../Images/TypeNumber.svg);
}

.heap-snapshot .icon.bigint {
    content: url(../Images/TypeBigInt.svg);
}

.heap-snapshot .icon.object {
    content: url(../Images/TypeObject.svg);
}

.heap-snapshot .icon.node {
    content: url(../Images/DOMElement.svg);
}

.heap-snapshot .icon.regex {
    content: url(../Images/TypeRegex.svg);
}

.heap-snapshot .icon.string {
    content: url(../Images/TypeString.svg);
}

.heap-snapshot .icon.symbol {
    content: url(../Images/TypeSymbol.svg);
}

.heap-snapshot > .data-grid td .formatted-node-preview,
.heap-snapshot > .data-grid td .object-preview {
    text-indent: 0; /* Do not inherit the DataGrid's indent. */
    line-height: initial;
}

.heap-snapshot-instance-popover-content > .title {
    font-family: -webkit-system-font, sans-serif;
    text-align: center;
    border-bottom: 1px solid var(--border-color);
    padding: 0 5px 2px 5px;
    margin-bottom: 3px;
}

.heap-snapshot-instance-popover-content {
    white-space: pre;
    padding: 5px 0px;
}

.heap-snapshot-instance-popover-content > .table-container {
    padding-left: 10px;
    padding-right: 10px;
}

.heap-snapshot-instance-popover-content table {
    border-collapse: collapse;
}

.heap-snapshot-instance-popover-content tr {
    margin: 0;
    padding: 1px 0;
}

.heap-snapshot-instance-popover-content td {
    margin: 0;
    padding: 0;
}

.heap-snapshot-instance-popover-content td.edge-name {
    text-align: right;
    max-width: 110px;
    text-overflow: ellipsis;
    overflow: hidden;

    border-right: 1px solid var(--border-color);
    padding-right: 5px;
}

.heap-snapshot-instance-popover-content td.object-data {
    padding-left: 5px;
}

.heap-snapshot-instance-popover-content .node {
    height: 17px;
    line-height: 17px;
}

.heap-snapshot-instance-popover-content .node * {
    display: inline-block;
    vertical-align: top;
}

.heap-snapshot-instance-popover-content .node .go-to-link {
    position: relative;
    top: 1px;
}
