/*
 * 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-preview-timing-margin-start: 11px;
}

body[dir=ltr] .bezier-editor {
    --bezier-editor-preview-translateX-animate: var(--bezier-editor-preview-translateX);
}

body[dir=rtl] .bezier-editor {
    --bezier-editor-preview-translateX-animate: calc(-1 * var(--bezier-editor-preview-translateX));
}

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

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

.bezier-editor > .bezier-preview-timing {
    position: absolute;
    top: 34px;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 4px solid black;
}

body[dir=ltr] .bezier-editor > .bezier-preview-timing {
    margin-left: var(--bezier-editor-preview-timing-margin-start);
}

body[dir=rtl] .bezier-editor > .bezier-preview-timing {
    margin-right: var(--bezier-editor-preview-timing-margin-start);
}

.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-animate)); }
    to { transform: translateX(var(--bezier-editor-preview-translateX-animate)); }
}

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

body[dir=rtl] .bezier-editor > .bezier-container {
    transform: scaleX(-1);
}

.bezier-editor > .bezier-container .linear-curve {
    fill: none;
    stroke:lightgrey;
    stroke-width: 2;
    stroke-linecap: round;
}

.bezier-editor > .bezier-container .bezier-curve {
    fill: none;
    stroke: black;
    stroke-width: 2;
    stroke-linecap: round;
}

.bezier-editor > .bezier-container .control-line {
    fill: none;
    stroke: hsl(210, 100%, 49%);
    stroke-width: 2;
    stroke-linecap: round;
}

.bezier-editor > .bezier-container .control-handle {
    r: 5px;
    fill: hsl(210, 100%, 49%);
}

.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 lightgrey;
}

.bezier-editor > .number-input-container > input {
    width: 100%;
    margin: 0 2px;
    padding: 1px 0 1px;
    text-align: right;
    font-size: 12px;
    background-color: white;
    border: 1px solid hsl(0, 0%, 60%);
    border-radius: 4px;
    box-shadow: inset 0 0 1px 1px hsl(0, 0%, 89%);
    outline: none;

    --bezier-editor-number-input-padding-start: 1px;
}

body[dir=ltr] .bezier-editor > .number-input-container > input {
    padding-left: var(--bezier-editor-number-input-padding-start);
}

body[dir=rtl] .bezier-editor > .number-input-container > input {
    padding-right: var(--bezier-editor-number-input-padding-start);
}
