/*

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.

*/

#content #files #tree-holder
{
  float: left;
  width: 20%;
}

#content #files #tree-holder li
{
  overflow: hidden;
}

#content #files form .buttons button
{
  float: right;
}

#content #files #file-content
{
  float: right;
  position: relative;
  width: 78%;
  min-height: 100px
}

#content #files .show #file-content
{
  display: block;
}

#content #files #file-content .response
{
  border: 1px solid transparent;
  padding: 2px;
}
