/*
 * 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.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-stylesheet, .stylesheet-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-stylesheet .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-stylesheet, .stylesheet-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-stylesheet .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);
}
