/* 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:hover::shadow .polymer-tooltip,
.tooltip:focus::shadow .polymer-tooltip {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

.tooltip::shadow .polymer-tooltip {
  opacity: 0;
  transition: all 300ms cubic-bezier(0,1.92,.99,1.07);
  transition-delay: 0.5s;
  transform: translate3d(0, -10px, 0);
}

.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%;
}

.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);
}
