/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#process-group-configuration {
    display: none;
    position: absolute;
    top: 0px;
    bottom: 0px;
    left: 20px;
    right: 20px;
    overflow: auto;
}

#add-process-group-configuration-controller-service {
    float: right;
}

/* settings tabs */

#process-group-configuration-tabs {
    float: left;
}

#process-group-configuration-tabs-content {
    top: 53px;
    bottom: 52px;
}

#process-group-refresh-container {
    position: absolute;
    bottom: 20px;
    left: 0px;
    right: 0px;
    height: 32px;
}

#process-group-configuration-refresh-button {
    float: left;
}

#process-group-configuration-loading-container {
    float: left;
    width: 16px;
    height: 16px;
    background-color: transparent;
    margin-top: 4px;
    margin-left: 3px;
}

#process-group-configuration-last-refreshed {
    color: #775351;
    font-weight: 500;
}

#flow-cs-availability {
    float: right;
    margin-top: 8px;
    color: #775351;
    font-family: Roboto;
    font-size: 13px;
}

/* general */

#general-process-group-configuration input, #general-process-group-configuration textarea {
    width: 350px;
    vertical-align: middle;
}

#process-group-parameter-context-combo {
    width: 328px;
}

#process-group-flowfile-concurrency-combo {
    width: 328px;
}

#process-group-outbound-policy-combo {
    width: 328px;
}

#process-group-default-flowfile-expiration {
    width: 328px;
}

#process-group-default-back-pressure-object-threshold {
    width: 328px;
}

#process-group-default-back-pressure-data-size-threshold {
    width: 328px;
}

#process-group-comments {
    height: 100px;
}

#read-only-process-group-comments {
    white-space: pre-wrap;
}

#process-group-controller-services-tab-content {
    top: 32px;
}

#upload-process-group-link {
    float: right;
}