/* TODO(aghassemi) move to some common CSS, ideally shared between apps */
@import "common-style/theme.css";
@import "common-style/sizes.css";

.layout-horizontal {
  display: flex;
  flex-direction: row;
}
.flex-1 {
  flex: 1;
}
.flex-2 {
  flex: 2;
}
.flex-3 {
  flex: 3;
}
.flex-4 {
  flex: 4;
}
.flex-5 {
  flex: 5;
}
.browse-toolbar {
  background-color: var(--color-grey-very-light);
  box-shadow: none;
}
.browse-details-sidebar::shadow #dropShadow {
  display: none;
}
.browse-details-sidebar::shadow #mainContainer {
  background-color: var(--color-grey-very-light);
  border-left: solid 1px var(--color-divider);
}
.items-container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  border-bottom: var(--border);
  padding-bottom: 0.5em;
}
.items-container:last-child {
  border-bottom: none;
}
.items-container paper-progress{
  position: absolute;
}
.items-container h2 {
  width: 100%;
  font-size: var(--size-font-large);
  color: var(--color-text-heading);
  padding: 0.5em 0em 0em 0.75em;
  text-decoration: none;
}
.item.card {
  box-sizing: border-box;
  background-color: var(--color-white);
  display: flex;
  flex-shrink: 0;
  flex-grow: 0;
  height: 2.5em;
  min-width: 8em;
  margin: 0.75em;
  border-radius: 3px;
  overflow: hidden;
  position: relative;
  box-shadow: var(--shadow-all-around);
  border: var(--border);
}
.item .label, .item .drill {
  display: flex;
  flex-direction: row;
  align-items: center;
  padding: 0.5em;
}
.item .label {
  text-decoration: none;
  flex: 1;
  overflow: hidden;
  white-space: nowrap;
}
.item .drill {
  width: 1.5em;
  background-color: var(--color-grey-light);
  border-left: var(--border);
}

.item.selected .drill {
  background-color: var(--color-bright);
}

.item a:hover, .item a:focus{
  opacity: 0.7;
}

.item.card .icon {
  align-self: center;
  padding-right: 0.5em;
}

.item.inaccessible {
  opacity: 0.5;
}

.item.selected.card {
  background-color: var(--color-bright);
  color: var(--color-text-primary-invert);
}

.tooltip::shadow .core-tooltip {
  width: 36em;
  line-height: 0.9em; /* overrides Polymer's 6px line-height */
  white-space: pre-wrap;
  font-size: var(--size-font-xsmall);
}

.breadcrumbs {
  margin: 0px;
  padding: 0px;
  display: flex;
  align-items: flex-start;
  list-style: none;
  width: 100%;
}

.breadcrumb-item {
  overflow: hidden;
  flex-shrink: 1;
  flex-grow: 0;
  justify-content: flex-start;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.breadcrumb-item a {
  display: inline-block;
  color: var(--color-text-link);
}

.breadcrumb-item a:hover, .breadcrumbs li a:focus {
  color: var(--color-text-link-hover);
}

.breadcrumb-item:before
{
  content: '/';
  padding:0 0.5em;
  display: inline-block;
  color: var(--color-text-secondary);
}
.breadcrumb-item:first-child:before
{
  content: ' ';
}

.empty {
  padding: 1em;
  text-align: center;
  color: var(--color-text-secondary);
}

.namespace-box {
  background: var(--color-white-transparent);
  font-size: var(--size-font-xsmall);
  height: 2.7em;
  padding: 0 0.8em;
  margin-left: 3em !important;
  border-radius: 1px;
}

.namespace-box /deep/ input {
  color: inherit
}

.search-box {
  white-space: nowrap;
  width: var(--size-input-width-normal);
}

.search-box core-tooltip {
  width: 100%;
  font-size: var(--size-font-xsmall);
}

.search-box .icon, .namespace-box .icon {
  align-self: flex-end;
  margin-right: 0.5em;
  color: var(--color-text-secondary);
}

.search-box .input {
  font-size: var(--size-font-xsmall);
}

/* Make space for the clear search icon */
.search-box .clear-search {
  margin-left: -25px;
}
.search-box paper-input::shadow /deep/ input {
  width: calc(100% - 25px);
}

.service-type-icon {
  transform: scale(0.7);
  padding-right: 0.75em;
}
/* The service icon is colored brightly if active. */
.service-type-icon:hover,
.service-type-icon.shortcut {
  color: var(--color-bright);
}
/* If the service item is selected and is also active, make the icon's colors deeper. */
.item.selected.card .service-type-icon:hover,
.item.selected.card .service-type-icon.shortcut {
  color: var(--color-bright-deep);
}
/* If hovering over a shortcut, use the parent's color. */
.service-type-icon.shortcut:hover,
.item.selected.card .service-type-icon.shortcut:hover {
  color: inherit;
}

paper-autocomplete {
  width: var(--size-input-width-normal);
}

paper-autocomplete::shadow #suggest-box {
  background-color: var(--color-grey-very-light);
}

paper-autocomplete::shadow #suggest-box {
  border: var(--border);
  box-shadow: var(--shadow-all-around);
}

paper-autocomplete paper-item.highlighted,
paper-autocomplete paper-item:hover {
  background-color: var(--color-bright);
}

paper-autocomplete paper-item {
  color: var(--color-text-primary);
}
