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

.bezier-editor {
    width: 200px;
    height: 258px;

    --bezier-editor-preview-translateX: 170px;
}

.bezier-editor > .bezier-preview {
    width: calc(100% - 10px);
    height: 25px;
    margin: 5px 5px 0;
    border-bottom: 1px solid var(--border-color);
}

.bezier-editor > .bezier-preview > div {
    width: 20px;
    height: 20px;
    background-color: var(--glyph-color-active);
    border-radius: 50%;
}

.bezier-editor > .bezier-preview-timing {
    position: absolute;
    top: 34px;
    -webkit-margin-start: 11px;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 4px solid var(--text-color);
}

.bezier-editor > .bezier-preview.animate > div,
.bezier-editor > .bezier-preview-timing.animate {
    animation: bezierPreview 2.5s linear 250ms infinite;
}

@keyframes bezierPreview {
    from { transform: translateX(0); }
    10% { transform: translateX(0); }
    90% { transform: translateX(var(--bezier-editor-preview-translateX)); }
    to { transform: translateX(var(--bezier-editor-preview-translateX)); }
}

.bezier-editor > .bezier-container {
    margin: 0 8px;
}

.bezier-editor > .bezier-container .linear-curve {
    fill: none;
    stroke: var(--text-color-quaternary);
    stroke-width: 2;
    stroke-linecap: round;
}

.bezier-editor > .bezier-container .bezier-curve {
    fill: none;
    stroke: var(--text-color);
    stroke-width: 2;
    stroke-linecap: round;
}

.bezier-editor > .bezier-container .control-line {
    fill: none;
    stroke: var(--glyph-color-active);
    stroke-width: 2;
    stroke-linecap: round;
}

.bezier-editor > .bezier-container .control-handle {
    r: 5px;
    fill: var(--glyph-color-active);
}

.bezier-editor > .bezier-container .control-handle.selected {
    r: 7px;
}

.bezier-editor > .number-input-container {
    display: flex;
    width: calc(100% - 10px);
    margin: 0 5px;
    padding-top: 7px;
    border-top: 1px solid var(--border-color);
}

.bezier-editor > .number-input-container > input {
    width: 100%;
    margin: 0 2px;
    padding: 1px 0 1px;
    text-align: end;
}
