/*
 * 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.
 */

body > .weex-list,
body > .weex-scroller,
body > .weex-waterfall {
  max-height: 100%;
}

.weex-list-wrapper,
.weex-scroller-wrapper,
.weex-waterfall-wrapper {
  -webkit-overflow-scrolling: touch;
}

.weex-list-wrapper,
.weex-waterfall-wrapper {
  overflow-y: scroll !important;
  overflow-x: hidden !important;
}

.weex-list-inner,
.weex-scroller-inner,
.weex-waterfall-inner {
  -webkit-overflow-scrolling: touch;
}

.weex-waterfall-inner-columns {
  -webkit-flex-direction: row;
  -moz-box-orient: horizontal;
  -moz-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-orient: horizontal;
}

.weex-scroller-wrapper.weex-scroller-vertical {
  overflow-x: hidden;
  overflow-y: scroll;
}

.weex-scroller-wrapper.weex-scroller-horizontal {
  overflow-x: scroll;
  overflow-y: hidden;
}

.weex-scroller-wrapper.weex-scroller-disabled {
  overflow-x: hidden;
  overflow-y: hidden;
}

.weex-scroller-horizontal .weex-scroller-inner {
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  -moz-box-orient: horizontal;
  -moz-box-direction: normal;
  flex-direction: row;
  -webkit-box-orient: horizontal;
  height: 100%;
}

.weex-cell {
  width: 100%;
}

.weex-refresh,
.weex-loading {
  -webkit-box-align: center;
  -webkit-align-items: center;
  -moz-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
  -moz-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 100%;
  overflow: hidden;
}
