/**********************************************************************
* 
**********************************************************************/
/******************************************************** Settings ***/
/********************************************************** Mixins ***/
/********************************************************* utility ***/
.expanding-text .hidden {
  display: none;
}
.expanding-text:hover .shown {
  display: none;
}
.expanding-text .shown,
.expanding-text:hover .hidden {
  display: inline;
}
/* XXX cleanup and style... 
 	- make the arrow exact (like in .tooltip-right)
	- need to align correctly for really narrow elements...
*/
[tooltip] {
  position: relative;
  text-decoration: none;
}
[tooltip]:after {
  display: none;
  content: attr(tooltip);
  position: absolute;
  bottom: 130%;
  left: 20%;
  background: #ffcb66;
  padding: 5px 15px;
  color: black;
  border-radius: 10px;
  white-space: pre;
  text-align: left;
  font-size: 10px;
  opacity: 0;
  -webkit-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  transition: all 0.4s ease;
}
[tooltip]:before {
  display: none;
  content: "";
  position: absolute;
  width: 0;
  height: 0;
  border-top: 20px solid #ffcb66;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
  -webkit-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  transition: all 0.4s ease;
  opacity: 0;
  left: 30%;
  bottom: 90%;
}
[tooltip]:hover:after {
  display: block;
  bottom: 100%;
}
[tooltip]:hover:before {
  display: block;
  bottom: 70%;
}
[tooltip]:hover:after,
[tooltip]:hover:before {
  opacity: 1;
}
/* make this above everything else... 
* XXX not sure if this is the best way...
*/
[tooltip]:hover {
  z-index: 1000;
}
.tooltip-right[tooltip]:after {
  min-height: 30px;
  bottom: auto;
  top: -50%;
  left: 15px;
}
.tooltip-right[tooltip]:before {
  border-left: 5px solid transparent;
  border-right: 5px solid #ffcb66;
  border-bottom: 5px solid transparent;
  border-top: 5px solid transparent;
  bottom: auto;
  left: 5px;
  top: 25%;
}
.tooltip-right[tooltip]:hover:after {
  bottom: auto;
}
.tooltip-right[tooltip]:hover:before {
  bottom: auto;
}
/* XXX might be good to move this to forms... */
.tooltip-icon {
  font-size: small;
  opacity: 0.9;
}
/*********************************************************************/
body {
  font-family: sans-serif;
  padding: 0px;
  margin: 0px;
}
input,
button {
  border: solid silver 1px;
  border-radius: 3px;
}
button:hover {
  box-shadow: 0px 0px 7px 0px black;
}
/************************************************************** UI ***/
.title-bar {
  display: block;
  position: fixed;
  content: "";
  top: 0px;
  left: 0px;
  height: 20px;
  width: 100%;
  color: white;
  background: black;
  overflow: hidden;
  opacity: 0;
  z-index: 10000;
  /* node-webkit */

  -webkit-app-region: drag;
}
.title-bar:hover {
  opacity: 1;
}
.title-bar .title {
  display: inline-block;
  float: left;
  height: 20px;
  width: auto;
  color: white;
  background: transparent;
  font-size: 11px;
  font-style: italic;
  font-weight: bold;
  vertical-align: middle;
  text-align: left;
  margin: 2px;
  margin-left: 10px;
}
.title-bar .button {
  display: inline-block;
  float: right;
  width: 20px;
  height: 20px;
  color: white;
  background: transparent;
  font-size: 18px;
  vertical-align: middle;
  /* node-webkit */

  -webkit-app-region: no-drag;
}
.title-bar .button:hover {
  cursor: hand;
}
.title-bar .close:hover {
  color: red;
}
/*
.full-screen-mode .title-bar {
	display: none;
}
*/
/********************************************************** Viewer ***/
.viewer {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  /*border: solid blue 1px;*/

  box-sizing: border-box;
  -moz-user-select: none;
  -webkit-user-select: none;
  -o-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
/* XXX this is a stub for printing help/docs... */
@media print {
  .viewer {
    display: none;
  }
}
/****************************************************** Ribbon set ***/
.ribbon-set {
  position: absolute;
  display: block;
  /* NOTE: this needs for scaling/zooming to behave correctly and not 
		shift the element, when its dimensions change... 
		...this is because .ribbon-set will both be used for scaling 
		and aligning... */

  -webkit-transform-origin: top left;
  -ms-transform-origin: top left;
  transform-origin: top left;
}
/* empty ribbon set... */
.ribbon-set:empty {
  width: 100%;
  height: 100%;
}
.ribbon-set:empty:before,
.ribbon-set:empty:after {
  display: block;
  position: absolute;
  content: "Nothing loaded...";
  top: 50%;
  left: 0px;
  width: 100%;
  height: 20px;
  margin-top: -20px;
  text-align: center;
  vertical-align: center;
  font-size: 18px;
  font-weight: bold;
  color: silver;
  opacity: 0.9;
  cursor: hand;
}
.ribbon-set:empty:after {
  content: "Press 'O' to load, 'F1' for help or '?' for keyboard mappings.";
  margin-top: 5px;
  font-weight: normal;
  font-size: 16px;
  opacity: 0.5;
}
/********************************************************** Ribbon ***/
.ribbon {
  position: relative;
  display: block;
  height: auto;
  min-width: 0px;
  overflow: visible;
  white-space: nowrap;
  font-size: 0;
  margin-top: 20px;
  margin-bottom: 20px;
}
.ribbon:empty {
  display: none;
}
.ribbon:first-child {
  margin-top: 0px;
}
.ribbon:last-child {
  margin-bottom: 0px;
}
/*********************************************************** Image ***/
.image {
  position: relative;
  display: inline-block;
  vertical-align: middle;
  text-align: left;
  width: 300px;
  height: 300px;
  font-size: 12pt;
  overflow: hidden;
  box-sizing: border-box;
  color: white;
  text-shadow: black 0.1em 0.1em 0.4em, black 0.1em 0.1em;
  background: no-repeat 50% #000000;
  background-size: contain;
  /* XXX do we need this? */

  border: solid black 5px;
}
.current.image {
  background: no-repeat 50% #000000;
  background-size: contain;
  /* XXX remove this... */

  border: solid red 5px;
}
/* single image mode transitions */
/* XXX still buggy and not too needed...
.single-image-mode.viewer .image {
	position: absolute;
	top: 0px;
	left: 0px;

	opacity: 0;

	.transition(opacity);
}
.single-image-mode.viewer .current.image {
	opacity: 1;
}
*/
/* image turning... */
/* NOTE: need to account for proportions after turning... */
.image[orientation="90"] {
  -webkit-transform: rotate(90deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(90deg) scaleY(1) scaleX(1);
  -o-transform: rotate(90deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(90deg) scaleY(1) scaleX(1);
  transform: rotate(90deg) scaleY(1) scaleX(1);
}
.image[orientation="180"] {
  -webkit-transform: rotate(180deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(180deg) scaleY(1) scaleX(1);
  -o-transform: rotate(180deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(180deg) scaleY(1) scaleX(1);
  transform: rotate(180deg) scaleY(1) scaleX(1);
}
.image[orientation="270"] {
  -webkit-transform: rotate(270deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(270deg) scaleY(1) scaleX(1);
  -o-transform: rotate(270deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(270deg) scaleY(1) scaleX(1);
  transform: rotate(270deg) scaleY(1) scaleX(1);
}
/* Flipped vertically only... */
/* NOTE: wee need to do all possible combinations here as we can't 
 	combine different parts of a transform attr from different 
 	classes */
.image[flipped*="vertical"] {
  -webkit-transform: rotate(0deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(0deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(0deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(0deg) scaleY(-1) scaleX(1);
  transform: rotate(0deg) scaleY(-1) scaleX(1);
}
.image[orientation="90"][flipped="vertical"] {
  -webkit-transform: rotate(90deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(90deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(90deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(90deg) scaleY(-1) scaleX(1);
  transform: rotate(90deg) scaleY(-1) scaleX(1);
}
.image[orientation="180"][flipped="vertical"] {
  -webkit-transform: rotate(180deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(180deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(180deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(180deg) scaleY(-1) scaleX(1);
  transform: rotate(180deg) scaleY(-1) scaleX(1);
}
.image[orientation="270"][flipped="vertical"] {
  -webkit-transform: rotate(270deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(270deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(270deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(270deg) scaleY(-1) scaleX(1);
  transform: rotate(270deg) scaleY(-1) scaleX(1);
}
/* Flipped horizontally only... */
.image[flipped*="horizontal"] {
  -webkit-transform: rotate(0deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(0deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(0deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(0deg) scaleY(1) scaleX(-1);
  transform: rotate(0deg) scaleY(1) scaleX(-1);
}
.image[orientation="90"][flipped="horizontal"] {
  -webkit-transform: rotate(90deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(90deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(90deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(90deg) scaleY(1) scaleX(-1);
  transform: rotate(90deg) scaleY(1) scaleX(-1);
}
.image[orientation="180"][flipped="horizontal"] {
  -webkit-transform: rotate(180deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(180deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(180deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(180deg) scaleY(1) scaleX(-1);
  transform: rotate(180deg) scaleY(1) scaleX(-1);
}
.image[orientation="270"][flipped="horizontal"] {
  -webkit-transform: rotate(270deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(270deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(270deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(270deg) scaleY(1) scaleX(-1);
  transform: rotate(270deg) scaleY(1) scaleX(-1);
}
/* Flipped vertically and horizontally... */
.image[flipped*="vertical"][flipped*="horizontal"] {
  -webkit-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  transform: rotate(0deg) scaleY(-1) scaleX(-1);
}
.image[orientation="90"][flipped*="vertical"][flipped*="horizontal"] {
  -webkit-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  transform: rotate(90deg) scaleY(-1) scaleX(-1);
}
.image[orientation="180"][flipped*="vertical"][flipped*="horizontal"] {
  -webkit-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  transform: rotate(180deg) scaleY(-1) scaleX(-1);
}
.image[orientation="270"][flipped*="vertical"][flipped*="horizontal"] {
  -webkit-transform: rotate(270deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(270deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(270deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(270deg) scaleY(-1) scaleX(-1);
  transform: rotate(270deg) scaleY(-1) scaleX(-1);
}
/* default backgrounds */
/* XXX not sure if we need these... 
.image {
	background-image: url(images/loading.gif);
}
.image[orientation="90"] {
	background-image: url(images/loading-90deg.gif);
}
.image[orientation="180"] {
	background-image: url(images/loading-180deg.gif);
}
.image[orientation="270"] {
	background-image: url(images/loading-270deg.gif);
}
*/
/* separator test */
.image.red + .image:not(.red):before {
  display: inline-block;
  position: relative;
  content: "";
  top: 0px;
  left: -50px;
  width: 100px;
  height: 100%;
  background-color: yellow;
}
/***************************************************** Image marks ***/
.marks-visible.viewer .marked.image:after {
  display: block;
  position: absolute;
  content: "";
  font-size: 0pt;
  border: none;
  width: 10px;
  height: 10px;
  top: auto;
  bottom: 5px;
  left: auto;
  right: 5px;
  border-radius: 50%;
  background: blue;
  /* make the mark stand out if it is over an image with similar 
	color/density */

  box-shadow: 0px 0px 7px 0px black;
  /*border: solid 1px white;*/

  /*border: solid 1px black;*/

}
.marks-visible.viewer .marked.image[orientation="270"][flipped*="vertical"][flipped*="horizontal"]:after,
.marks-visible.viewer .marked.image:not([orientation])[flipped*="vertical"]:after,
.marks-visible.viewer .marked.image[orientation="0"][flipped*="vertical"]:after,
.marks-visible.viewer .marked.image[orientation="180"][flipped="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="90"]:not([flipped]):after {
  top: 5px;
  bottom: auto:
	left: auto;
  right: 5px;
}
.marks-visible.viewer .marked.image:not([orientation])[flipped*="vertical"][flipped*="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="0"][flipped*="vertical"][flipped*="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="270"][flipped="vertical"]:after,
.marks-visible.viewer .marked.image[orientation="90"][flipped="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="180"]:not([flipped]):after {
  top: 5px;
  bottom: auto;
  left: 5px;
  right: auto;
}
.marks-visible.viewer .marked.image[orientation="90"][flipped*="vertical"][flipped*="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="180"][flipped="vertical"]:after,
.marks-visible.viewer .marked.image:not([orientation])[flipped*="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="0"][flipped*="horizontal"]:after,
.marks-visible.viewer .marked.image[orientation="270"]:not([flipped]):after {
  top: auto;
  bottom: 5px;
  left: 5px;
  right: auto;
}
/* NOTE: we use a different mark representation for single image mode... */
.marks-visible.single-image-mode.viewer .marked.image:after {
  display: none;
}
/* corner mark... (a-la bookmarks in PortableMag) 
 * XXX account for flipping... */
/*
@ribbon-mark-offset: -15px;

.marks-visible.viewer .marked.image:after {
	display: block;
	position: absolute;
	content: "";
	font-size: 0pt;
	border: none;

	width: 30px;
	height: 30px;

	top: @ribbon-mark-offset;
	right: @ribbon-mark-offset;

	background: blue;

	.rotate(45deg)
}
.marks-visible.viewer .marked.image[orientation="90"]:after {
	top: @ribbon-mark-offset;
	left: @ribbon-mark-offset;
}
.marks-visible.viewer .marked.image[orientation="180"]:after {
	bottom: @ribbon-mark-offset;
	left: @ribbon-mark-offset;
}
.marks-visible.viewer .marked.image[orientation="270"]:after {
	bottom: @ribbon-mark-offset;
	right: @ribbon-mark-offset;
}
*/
/* XXX should we use opacity??? */
.marked-only-view.viewer:not(.marks-visible) .image:not(.marked) {
  opacity: 0.3;
}
/****************************************************** Image info ***/
.image .inline-image-info {
  display: none;
  position: absolute;
  bottom: 0px;
  width: 100%;
  background: black;
  opacity: 0.7;
}
.image .inline-image-info:hover {
  -moz-user-select: auto;
  -webkit-user-select: auto;
  -o-user-select: auto;
  -ms-user-select: auto;
  user-select: auto;
}
.image .inline-image-info::selection {
  color: white;
  background: red;
}
.image-info-visible.viewer .global-image-info,
.image-info-visible.viewer .image:hover .inline-image-info {
  display: block;
}
.single-image-mode.viewer .image:hover .inline-image-info {
  display: none;
}
.image[orientation="90"] .inline-image-info {
  top: auto;
  left: 100%;
  -webkit-transform-origin: bottom left;
  -ms-transform-origin: bottom left;
  transform-origin: bottom left;
  -webkit-transform: rotate(-90deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(-90deg) scaleY(1) scaleX(1);
  -o-transform: rotate(-90deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(-90deg) scaleY(1) scaleX(1);
  transform: rotate(-90deg) scaleY(1) scaleX(1);
}
.image[orientation="180"] .inline-image-info {
  top: 0px;
  bottom: auto;
  -webkit-transform: rotate(180deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(180deg) scaleY(1) scaleX(1);
  -o-transform: rotate(180deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(180deg) scaleY(1) scaleX(1);
  transform: rotate(180deg) scaleY(1) scaleX(1);
}
.image[orientation="270"] .inline-image-info {
  top: auto;
  left: auto;
  right: 100%;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(90deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(90deg) scaleY(1) scaleX(1);
  -o-transform: rotate(90deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(90deg) scaleY(1) scaleX(1);
  transform: rotate(90deg) scaleY(1) scaleX(1);
}
/* compensate for flipping... */
/* XXX START: I hate this code, will think if a better way to do this... */
.image:not([orientation="90"])[flipped*="horizontal"] .inline-image-info {
  -webkit-transform: rotate(0deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(0deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(0deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(0deg) scaleY(1) scaleX(-1);
  transform: rotate(0deg) scaleY(1) scaleX(-1);
}
.image[orientation="90"][flipped*="horizontal"] .inline-image-info {
  top: auto;
  bottom: 100%;
  left: -100%;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(90deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(90deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(90deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(90deg) scaleY(1) scaleX(-1);
  transform: rotate(90deg) scaleY(1) scaleX(-1);
}
.image[orientation="180"][flipped*="horizontal"] .inline-image-info {
  top: auto;
  bottom: 100%;
  left: 0px;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(180deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(180deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(180deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(180deg) scaleY(1) scaleX(-1);
  transform: rotate(180deg) scaleY(1) scaleX(-1);
}
.image[orientation="270"][flipped*="horizontal"] .inline-image-info {
  top: auto;
  bottom: 0px;
  left: 0px;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(270deg) scaleY(1) scaleX(-1);
  -moz-transform: rotate(270deg) scaleY(1) scaleX(-1);
  -o-transform: rotate(270deg) scaleY(1) scaleX(-1);
  -ms-transform: rotate(270deg) scaleY(1) scaleX(-1);
  transform: rotate(270deg) scaleY(1) scaleX(-1);
}
.image[flipped*="vertical"] .inline-image-info {
  top: 0px;
  bottom: auto;
  -webkit-transform: rotate(0deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(0deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(0deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(0deg) scaleY(-1) scaleX(1);
  transform: rotate(0deg) scaleY(-1) scaleX(1);
}
.image[orientation="90"][flipped*="vertical"] .inline-image-info {
  top: auto;
  bottom: 100%;
  left: 100%;
  right: auto;
  -webkit-transform-origin: bottom left;
  -ms-transform-origin: bottom left;
  transform-origin: bottom left;
  -webkit-transform: rotate(-270deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(-270deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(-270deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(-270deg) scaleY(-1) scaleX(1);
  transform: rotate(-270deg) scaleY(-1) scaleX(1);
}
.image[orientation="180"][flipped*="vertical"] .inline-image-info {
  top: auto;
  bottom: 0px;
  left: -100%;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(180deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(180deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(180deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(180deg) scaleY(-1) scaleX(1);
  transform: rotate(180deg) scaleY(-1) scaleX(1);
}
.image[orientation="270"][flipped*="vertical"] .inline-image-info {
  top: auto;
  bottom: 100%;
  left: -100%;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(270deg) scaleY(-1) scaleX(1);
  -moz-transform: rotate(270deg) scaleY(-1) scaleX(1);
  -o-transform: rotate(270deg) scaleY(-1) scaleX(1);
  -ms-transform: rotate(270deg) scaleY(-1) scaleX(1);
  transform: rotate(270deg) scaleY(-1) scaleX(1);
}
.image[flipped*="vertical"][flipped*="horizontal"] .inline-image-info {
  top: 0px;
  bottom: auto;
  -webkit-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(0deg) scaleY(-1) scaleX(-1);
  transform: rotate(0deg) scaleY(-1) scaleX(-1);
}
.image[orientation="90"][flipped*="vertical"][flipped*="horizontal"] .inline-image-info {
  top: auto;
  bottom: 0px;
  left: -100%;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(-90deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(-90deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(-90deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(-90deg) scaleY(-1) scaleX(-1);
  transform: rotate(-90deg) scaleY(-1) scaleX(-1);
}
.image[orientation="180"][flipped*="vertical"][flipped*="horizontal"] .inline-image-info {
  top: auto;
  bottom: 0px;
  left: auto;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(180deg) scaleY(-1) scaleX(-1);
  transform: rotate(180deg) scaleY(-1) scaleX(-1);
}
.image[orientation="270"][flipped*="vertical"][flipped*="horizontal"] .inline-image-info {
  top: auto;
  bottom: 100%;
  left: auto;
  right: auto;
  -webkit-transform-origin: bottom right;
  -ms-transform-origin: bottom right;
  transform-origin: bottom right;
  -webkit-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  -moz-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  -o-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  -ms-transform: rotate(90deg) scaleY(-1) scaleX(-1);
  transform: rotate(90deg) scaleY(-1) scaleX(-1);
}
/* XXX END */
.overlay-info {
  display: none;
  position: absolute;
  bottom: 0px;
  left: 0px;
  width: 100%;
  padding: 2px;
  padding-left: 10px;
  padding-right: 10px;
  box-sizing: border-box;
  background: black;
  color: white;
  opacity: 0.6;
}
.overlay-info:hover {
  -moz-user-select: auto;
  -webkit-user-select: auto;
  -o-user-select: auto;
  -ms-user-select: auto;
  user-select: auto;
}
.overlay-info .float-right {
  float: right;
}
.overlay-info .secondary {
  font-style: italic;
  font-size: small;
  color: silver;
}
.overlay-info::selection,
.overlay-info ::selection {
  color: white;
  background: red;
}
/*************************************************** Global status ***/
.global-status {
  display: block;
  opacity: 1;
  z-index: 1000;
}
/****************************************************** Indicators ***/
.up-indicator,
.down-indicator,
.start-indicator,
.end-indicator,
.top-indicator,
.bottom-indicator {
  display: block;
  position: absolute;
  content: "";
  top: 0px;
  left: 50%;
  height: 50px;
  width: 100px;
  margin-left: -50px;
  overflow: hidden;
  cursor: hand;
}
.up-indicator:after,
.down-indicator:after {
  display: inline-block;
  position: absolute;
  content: "";
  width: 50px;
  height: 50px;
  bottom: -25px;
  left: 25px;
  background: yellow;
  -webkit-transform: rotate(45deg) scaleY(1) scaleX(1);
  -moz-transform: rotate(45deg) scaleY(1) scaleX(1);
  -o-transform: rotate(45deg) scaleY(1) scaleX(1);
  -ms-transform: rotate(45deg) scaleY(1) scaleX(1);
  transform: rotate(45deg) scaleY(1) scaleX(1);
}
.down-indicator {
  top: auto;
  bottom: 0px;
}
.down-indicator:after {
  top: -25px;
  bottom: auto;
}
.start-indicator,
.end-indicator {
  left: 0px;
  width: 10px;
  height: 100%;
  margin: 0px;
  background: yellow;
}
.end-indicator {
  left: auto;
  right: 0px;
}
.top-indicator,
.bottom-indicator {
  left: 0px;
  height: 10px;
  width: 100%;
  margin: 0px;
  background: yellow;
}
.bottom-indicator {
  top: auto;
  bottom: 0px;
}
/* default state */
.up-indicator,
.down-indicator,
.start-indicator,
.end-indicator,
.top-indicator,
.bottom-indicator {
  display: none;
}
/* these are generic containers for indicators */
.global-mode-indicators,
.context-mode-indicators {
  position: absolute;
  height: 20px;
  width: auto;
  min-width: 300px;
  text-align: right;
  color: transparent;
}
.global-mode-indicators {
  top: 20px;
  right: 20px;
}
.context-mode-indicators {
  right: 20px;
  bottom: 20px;
}
.global-mode-indicators .mode-tip,
.context-mode-indicators .mode-tip {
  display: none;
  opacity: 0.5;
  font-weight: bold;
  color: gray;
}
.global-mode-indicators:hover .mode-tip,
.context-mode-indicators:hover .mode-tip {
  display: inline-block;
}
.global-mode-indicators > *,
.context-mode-indicators > * {
  font-size: small;
  vertical-align: center;
  margin-left: 10px;
}
.global-mode-indicators .circle,
.context-mode-indicators .circle {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
}
/* hide indicators in single image mode */
.single-image-mode.viewer .global-mode-indicators {
  opacity: 0.5;
}
.light.single-image-mode.viewer .global-mode-indicators {
  opacity: 0.1;
}
.dark.single-image-mode.viewer .global-mode-indicators {
  opacity: 0.6;
}
.single-image-mode.viewer .global-mode-indicators:hover {
  opacity: 1;
}
.global-mode-indicators .indicator,
.context-mode-indicators .indicator {
  display: none;
  height: 20px;
  vertical-align: center;
}
/* actual indicators */
/* marks... */
.global-mode-indicators .marked-only-visible,
.global-mode-indicators .marks-visible,
.context-mode-indicators .current-image-marked {
  color: blue;
}
.global-mode-indicators .marked-only-visible .shown,
.global-mode-indicators .marks-visible .shown,
.context-mode-indicators .current-image-marked .shown {
  display: none;
}
.global-mode-indicators .marked-only-visible:after,
.global-mode-indicators .marks-visible:after,
.context-mode-indicators .current-image-marked:after {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  content: "";
  background-color: blue;
  border: solid 2px blue;
  margin-left: 5px;
  margin-top: 3px;
  top: 50%;
}
.global-mode-indicators .marked-only-visible:after,
.global-mode-indicators .marks-visible:after,
.context-mode-indicators .current-image-marked:after {
  color: blue;
}
.marks-visible.viewer .global-mode-indicators .marks-visible {
  display: inline-block;
}
.marked-only-view.viewer .global-mode-indicators .marks-visible {
  display: none;
}
.marked-only-view.viewer .global-mode-indicators .marked-only-visible {
  display: inline-block;
}
.marked-only-view.viewer:not(.marks-visible) .global-mode-indicators .marked-only-visible:after {
  background-color: transparent;
}
/* image mark in single image mode... */
.context-mode-indicators .current-image-marked {
  display: none;
  color: blue;
}
.single-image-mode.marks-visible.viewer .context-mode-indicators .current-image-marked.shown {
  display: inline-block;
}
.single-ribbon-mode.viewer .global-mode-indicators .single-ribbon-mode {
  color: gray;
  display: inline-block;
}
.ribbon-indicator {
  display: none;
  position: absolute;
  top: 10px;
  left: 15px;
  color: white;
  font-size: 42px;
  font-weight: bold;
  font-style: italic;
  text-shadow: black 0.1em 0.1em 0.6em;
  opacity: 0.1;
}
.flashing-ribbon-indicator {
  display: inline-block;
}
.single-image-mode.marks-visible.viewer .ribbon-indicator {
  display: inline-block;
}
.ribbon-indicator:hover:after {
  display: inline-block;
  content: "ribbon number";
  font-size: 14px;
  opacity: 0.8;
}
/********************************************** Mode: single image ***/
.single-image-mode.viewer .image {
  background-color: transparent;
  /* NOTE: need to keep a distance from screen borders... */

  border: solid transparent 2px;
}
.single-image-mode.viewer .image:not(.current) {
  /* XXX for some reason this breaks the alignment on large magnifications...
	display: none;
	*/

  /* XXX this makes images pass through the :visible filter...
	opacity: 0;
	*/

  visibility: hidden;
}
/********************************************************** Themes ***/
/* XXX this is by no means final... */
.viewer,
.light.viewer,
.light.viewer .overlay-block .background {
  background: white;
}
.light.viewer .overlay-block:hover .background:after {
  color: black;
}
.light.viewer .ribbon-set:empty:before,
.light.viewer .ribbon-set:empty:after {
  color: gray;
}
.light.viewer .ribbon-indicator {
  color: silver;
  text-shadow: none;
  opacity: 0.3;
}
.light.viewer .ribbon-indicator:hover:after {
  color: gray;
  text-shadow: none;
  opacity: 0.8;
}
.gray.viewer,
.gray.viewer .overlay-block .background {
  background: #333;
}
.gray.viewer .overlay-block .dialog {
  background: #555;
}
.gray.viewer .overlay-block:hover .background:after {
  color: silver;
  opacity: 0.4;
}
.dark.viewer,
.dark.viewer .overlay-block .background {
  background: #0a0a0a;
}
.dark.viewer .overlay-block .dialog {
  background: #333;
}
.dark.viewer .overlay-block:hover .background:after {
  color: gray;
  opacity: 0.4;
}
.dark.viewer .ribbon-indicator {
  opacity: 0.2;
}
.dark.viewer .ribbon-indicator:hover:after {
  opacity: 0.8;
}
.large.viewer:not(.single-image-mode) .current.image {
  border-width: 3px;
}
.large.viewer:not(.single-image-mode) .marked.image:after {
  -webkit-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
  -moz-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
  -o-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
  -ms-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
  transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
}
.small.viewer:not(.single-image-mode) .marked.image:after {
  -webkit-transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
  -moz-transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
  -o-transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
  -ms-transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
  transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
}
/********************************************************* Overlay ***/
.overlay-block {
  display: none;
  position: absolute:
	top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
}
.viewer.overlay .overlay-block {
  display: block;
}
.overlay-block .content,
.overlay-block .background {
  /* XXX for some magical reason position and top are overwritten 
		with 'static' and 'auto' values respectively */

  position: absolute !important;
  top: 0px !important;
  left: 0px;
  height: 100%;
  width: 100%;
  cursor: auto;
  opacity: 0.9;
}
.overlay-block .content,
.overlay-block .content table {
  background: transparent;
}
.overlay-block .background {
  opacity: 0.7;
}
.overlay-block:hover .background:after {
  display: inline-block;
  position: absolute;
  content: 'Click background to close.';
  height: auto;
  width: auto;
  bottom: 20px;
  right: 20px;
  color: white;
  opacity: 0.7;
}
.overlay-block .dialog {
  display: inline-block;
  min-height: 50px;
  min-width: 300px;
  /* XXX for some reason this is not sized correctly... */

  max-height: 90%;
  max-width: 90%;
  /* XXX this needs to be lower priority than max-height... */

  /*overflow-y: auto;*/

  color: white;
  border: solid silver 1px;
  border-radius: 3px;
  background: gray;
  padding: 20px;
  vertical-align: center;
  box-shadow: 0px 5px 50px 0px black;
}
/* tables in dialogs... */
.overlay-block .dialog table {
  color: white;
  font-size: small;
  -moz-user-select: auto;
  -webkit-user-select: auto;
  -o-user-select: auto;
  -ms-user-select: auto;
  user-select: auto;
}
.overlay-block .dialog table tr td:first-child {
  text-align: right;
  font-weight: bold;
}
.overlay-block .dialog table tr td:last-child {
  color: silver;
}
/************************************************************ Help ***/
/* XXX make this more generic, and not just for the keyboard... */
/* this is for sliding stuff */
.viewer.drawer-mode {
  box-shadow: 0px 0px 50px 0px silver;
}
/* help */
.keyboard-help {
  width: 80%;
  margin-top: 20px;
  margin-left: 15%;
  margin-right: 5%;
  margin-bottom: 100px;
}
.keyboard-help .section-doc {
  font-size: small;
  vertical-align: top;
  font-style: italic;
}
.keyboard-help th {
  text-align: left;
  height: 50px;
  vertical-align: bottom;
  border-bottom: solid gray 1px;
}
.keyboard-help tr:hover {
  background: #eee;
  vertical-align: top;
}
.keyboard-help tr td:first-child {
  color: gray;
  font-style: italic;
  padding-right: 20px;
  padding-left: 10px;
}
.keyboard-help .section-doc td:only-child {
  padding-right: 0px;
  padding-left: 0px;
}
/**********************************************************************
* vim:set spell ft=css :                                             */
