/*
 * 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.
 */

.resource-icon .icon {
    content: image-set(url(../Images/DocumentGeneric.png) 1x, url(../Images/DocumentGeneric@2x.png) 2x);
}

.resource-icon.override .icon {
    filter: invert() hue-rotate(260deg);
}

.resource-icon.resource-type-document .icon {
    content: image-set(url(../Images/DocumentMarkup.png) 1x, url(../Images/DocumentMarkup@2x.png) 2x);
}

.resource-icon.resource-type-image .icon {
    content: image-set(url(../Images/DocumentImage.png) 1x, url(../Images/DocumentImage@2x.png) 2x);
}

.resource-icon.resource-type-font .icon {
    content: image-set(url(../Images/DocumentFont.png) 1x, url(../Images/DocumentFont@2x.png) 2x);
}

:matches(.resource-icon.resource-type-style-sheet, .style-sheet-icon) .icon {
    content: image-set(url(../Images/DocumentCSS.png) 1x, url(../Images/DocumentCSS@2x.png) 2x);
}

.resource-icon.resource-type-script .icon {
    content: image-set(url(../Images/DocumentJS.png) 1x, url(../Images/DocumentJS@2x.png) 2x);
}

.anonymous-script-icon .icon {
    content: image-set(url(../Images/ClippingJS.png) 1x, url(../Images/ClippingJS@2x.png) 2x);
}

.source-map-resource.resource-icon .icon {
    content: image-set(url(../Images/ClippingGeneric.png) 1x, url(../Images/ClippingGeneric@2x.png) 2x);
}

.source-map-resource.resource-icon.resource-type-style-sheet .icon {
    content: image-set(url(../Images/ClippingCSS.png) 1x, url(../Images/ClippingCSS@2x.png) 2x);
}

.source-map-resource.resource-icon.resource-type-script .icon {
    content: image-set(url(../Images/ClippingJS.png) 1x, url(../Images/ClippingJS@2x.png) 2x);
}

.script.worker-icon .icon {
    content: image-set(url(../Images/WorkerScript.png) 1x, url(../Images/WorkerScript@2x.png) 2x);
}

.resource-icon.resource-type-websocket .icon {
    content: image-set(url(../Images/WebSocket.png) 1x, url(../Images/WebSocket@2x.png) 2x);
}

.resource-icon.resource-type-ping .icon,
.resource-icon.resource-type-beacon .icon,
.large .resource-icon.resource-type-ping .icon,
.large .resource-icon.resource-type-beacon .icon {
    content: url(../Images/Beacon.svg);
}

.resource-icon.resource-type-range .icon {
    content: url(../Images/Range.svg);
}

.large .resource-icon .icon {
    content: image-set(url(../Images/DocumentGenericLarge.png) 1x, url(../Images/DocumentGenericLarge@2x.png) 2x);
}

.large .resource-icon.resource-type-document .icon {
    content: image-set(url(../Images/DocumentMarkupLarge.png) 1x, url(../Images/DocumentMarkupLarge@2x.png) 2x);
}

.large .resource-icon.resource-type-image .icon {
    content: image-set(url(../Images/DocumentImageLarge.png) 1x, url(../Images/DocumentImageLarge@2x.png) 2x);
}

.large .resource-icon.resource-type-font .icon {
    content: image-set(url(../Images/DocumentFontLarge.png) 1x, url(../Images/DocumentFontLarge@2x.png) 2x);
}

.large :matches(.resource-icon.resource-type-style-sheet, .style-sheet-icon) .icon {
    content: image-set(url(../Images/DocumentCSSLarge.png) 1x, url(../Images/DocumentCSSLarge@2x.png) 2x);
}

.large .resource-icon.resource-type-script .icon {
    content: image-set(url(../Images/DocumentJSLarge.png) 1x, url(../Images/DocumentJSLarge@2x.png) 2x);
}

.large .anonymous-script-icon .icon {
    content: image-set(url(../Images/ClippingJSLarge.png) 1x, url(../Images/ClippingJSLarge@2x.png) 2x);
}

.large .source-map-resource.resource-icon .icon {
    content: image-set(url(../Images/ClippingGenericLarge.png) 1x, url(../Images/ClippingGenericLarge@2x.png) 2x);
}

.large .source-map-resource.resource-icon.resource-type-style-sheet .icon {
    content: image-set(url(../Images/ClippingCSSLarge.png) 1x, url(../Images/ClippingCSSLarge@2x.png) 2x);
}

.large .source-map-resource.resource-icon.resource-type-script .icon {
    content: image-set(url(../Images/ClippingJSLarge.png) 1x, url(../Images/ClippingJSLarge@2x.png) 2x);
}

.large .script.worker-icon .icon {
    content: image-set(url(../Images/WorkerScriptLarge.png) 1x, url(../Images/WorkerScriptLarge@2x.png) 2x);
}

.large .resource-icon.resource-type-websocket .icon {
    content: image-set(url(../Images/WebSocketLarge.png) 1x, url(../Images/WebSocketLarge@2x.png) 2x);
}

.large .resource-icon.resource-type-range .icon {
    content: url(../Images/RangeLarge.svg);
}
