/* Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed 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.
 */

@external .cm-s-midnight;
@external .cm-s-night;
@external .cm-s-twilight;
@external .com-google-gerrit-client-diff-PublishedBox_BinderImpl_GenCss_style-name;
@external .com-google-gerrit-client-diff-CommentBox-Style-message;
@external .com-google-gerrit-client-diff-CommentBox-Style-date;
@external .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-range;
@external .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-rangeHighlight;
@external .net-codemirror-lib-CodeMirror-Style-activeLine;
@external .CodeMirror-linenumber;

.cm-s-midnight .com-google-gerrit-client-diff-PublishedBox_BinderImpl_GenCss_style-name { color: black }
.cm-s-midnight .com-google-gerrit-client-diff-CommentBox-Style-message { color: black }
.cm-s-midnight .com-google-gerrit-client-diff-CommentBox-Style-date { color: black }
.cm-s-midnight .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-range { color: #777 }
.cm-s-midnight .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-rangeHighlight { color: #777 }
.cm-s-midnight .net-codemirror-lib-CodeMirror-Style-activeLine .CodeMirror-linenumber { color: black }

.cm-s-night .com-google-gerrit-client-diff-PublishedBox_BinderImpl_GenCss_style-name { color: black }
.cm-s-night .com-google-gerrit-client-diff-CommentBox-Style-message { color: black }
.cm-s-night .com-google-gerrit-client-diff-CommentBox-Style-date { color: black }
.cm-s-night .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-range { color: #777 }
.cm-s-night .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-rangeHighlight { color: #777 }
.cm-s-night .net-codemirror-lib-CodeMirror-Style-activeLine .CodeMirror-linenumber { color: black }

.cm-s-twilight .com-google-gerrit-client-diff-PublishedBox_BinderImpl_GenCss_style-name { color: black }
.cm-s-twilight .com-google-gerrit-client-diff-CommentBox-Style-message { color: black }
.cm-s-twilight .com-google-gerrit-client-diff-CommentBox-Style-date { color: black }
.cm-s-twilight .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-range { color: #777 }
.cm-s-twilight .com-google-gerrit-client-diff-DiffTable_BinderImpl_GenCss_style-rangeHighlight { color: #777 }
.cm-s-twilight .net-codemirror-lib-CodeMirror-Style-activeLine .CodeMirror-linenumber { color: black }

.commentWidgets {
  max-width: 650px;

  font-family: sans-serif;
  background-color: #fcfa96;
  border: 1px solid black;
  -webkit-box-shadow: 3px 3px 3px #888888;
  -moz-box-shadow: 3px 3px 3px #888888;
  box-shadow: 3px 3px 3px #888888;

  /* margin-bottom is fixed in CommentGroup.computeHeight() */
  margin-bottom: 5px;
  margin-right: 5px;

  -webkit-touch-callout: initial;
  -webkit-user-select: initial;
  -khtml-user-select: initial;
  -moz-user-select: text;
  -ms-user-select: initial;
}

.commentBox {
  position: relative;
  min-height: 16px;
}

.header {
  cursor: pointer;
}

.summary {
  color: #777;
  position: absolute;
  top: 1px;
  left: 120px;
  width: 408px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding-bottom: 0.1em;
}

.date {
  white-space: nowrap;
  position: absolute;
  top: 2px;
  right: 5px;
}

.contents {
  margin-left: 28px;
  padding-top: 2px;
  position: relative;
}
.message {
  overflow-x: auto;
}
.message p,
.message ul,
.message blockquote {
  -webkit-margin-before: 0.2em;
  -webkit-margin-after: 0.3em;
}
.message {
  white-space: pre-wrap;
}
.commentBox button {
  margin-right: 3px;
  margin-bottom: 1px;
  padding: 1px;
  text-align: center;
  font-size: 8px;
  font-weight: bold;
  border: 1px solid black;
  cursor: pointer;
  color: #fff;
  background-color: #4d90fe;
  background-image: -webkit-linear-gradient(top, #4d90fe, #4d90fe);
  -webkit-border-radius: 2px;
  -webkit-box-sizing: content-box;
}
.commentBox button div {
  width: 25px;
  white-space: nowrap;
  color: #fff;
}

@sprite .goPrev {
  gwt-image: "goPrev";
  display: inline-block;
}
@sprite .goNext {
  gwt-image: "goNext";
  display: inline-block;
}
@sprite .goUp {
  gwt-image: "goUp";
  display: inline-block;
}
