/*!
 * Copyright 2021 The Go Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style
 * license that can be found in the LICENSE file.
 */

@import url('../unit/main/_meta.css');

.StyleGuide {
  background-color: var(--color-background);
}

.StyleGuide > section {
  align-items: center;
  display: grid;
  gap: 1rem 2rem;
  grid-template-columns: 100%;
  margin-bottom: 1rem;
}

.StyleGuide > section > header {
  border-bottom: var(--border);
  grid-column: 1/-1;
  margin-bottom: 1rem;
  padding-bottom: 1rem;
}

.StyleGuide > section > h2 {
  grid-column: 1/-1;
  width: max-content;
}

.StyleGuide > section > hr {
  grid-column: 1/-1;
}

.StyleGuide > section > h3 {
  grid-column: 1/-1;
  margin: 1rem 0;
}

.StyleGuide > section > p {
  grid-column: 1/-1;
}

.StyleGuide .Color,
.StyleGuide .ColorIntent {
  grid-template-columns: repeat(auto-fit, 5rem [col-start] minmax(12rem, auto) [col-end]);
}

.StyleGuide .Outline {
  align-items: flex-start;
}

.StyleGuide .Outline > span {
  margin-top: 0.5rem;
}
@media (min-width: 80rem) {
  .StyleGuide .Icon {
    grid-template-columns: 10rem 8rem auto;
  }

  .StyleGuide .Typography,
  .StyleGuide .Button,
  .StyleGuide .Carousel,
  .StyleGuide .Form,
  .StyleGuide .Modal,
  .StyleGuide .Message,
  .StyleGuide .Breadcrumb,
  .StyleGuide .Chip,
  .StyleGuide .Tooltip,
  .StyleGuide .Outline,
  .StyleGuide .Clipboard {
    grid-template-columns: 20rem auto;
  }
}
@media (min-width: 112rem) {
  .StyleGuide .Icon {
    grid-template-columns: 10rem auto 50%;
  }

  .StyleGuide .Typography,
  .StyleGuide .Button,
  .StyleGuide .Carousel,
  .StyleGuide .Form,
  .StyleGuide .Modal,
  .StyleGuide .Message,
  .StyleGuide .Breadcrumb,
  .StyleGuide .Chip,
  .StyleGuide .Tooltip,
  .StyleGuide .Outline,
  .StyleGuide .Clipboard {
    grid-template-columns: auto 50%;
  }
}

.StringifyElement {
  align-items: baseline;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 0.25rem;
}

.ElementMarkup > pre,
.StringifyElement-markup {
  color: var(--color-text-subtle);
  font-size: 0.875rem;
  margin-top: 0.5rem;
  max-width: 100%;
  padding-left: 2rem;
  position: relative;
}

.ElementMarkup > pre::before,
.StringifyElement-markup::before {
  background: url('/static/shared/icon/content_copy_gm_grey_24dp.svg');
  background-repeat: no-repeat;
  background-size: contain;
  content: ' ';
  left: 0.5rem;
  padding-left: 1rem;
  position: absolute;
  width: 1rem;
}

.StringifyElement-markup:active {
  filter: contrast(0.9);
}

.StringifyElement-details {
  color: var(--color-text-subtle);
  font-size: 0.8125rem;
  overflow-x: auto;
}

.GoColor-circle {
  background-color: var(--color);
  border: var(--border);
  border-radius: 2rem;
  height: 3rem;
  margin: auto;
  margin-bottom: 0.5rem;
  width: 3rem;
}

.GoIcon-title,
.GoColor-title {
  text-transform: capitalize;
}

.go-Main-navDesktop a + ul {
  text-transform: capitalize;
}

.MainHeader-toggle {
  display: flex;
}
