@layer starlight, nextjs;

@layer nextjs {
  :root {
    --sl-font: "Geist Sans", sans-serif;
    --sl-font-mono: "Geist Mono", monospace;
    --sl-mobile-toc-height: 3.5rem;
  }

  /* Dark mode colors. */
  :root {
    --sl-color-accent-low: #142245;
    --sl-color-accent: #305adf;
    --sl-color-accent-high: #b3c8f7;
    --sl-color-white: #ffffff;
    --sl-color-gray-1: #dcdcdc;
    --sl-color-gray-2: #a8a8a8;
    --sl-color-gray-3: #737373;
    --sl-color-gray-4: #4a4a4a;
    --sl-color-gray-5: #2f2f2f;
    --sl-color-gray-6: #1b1b1b;
    --sl-color-gray-7: #111111;
    --sl-color-black: #0e0e0e;

    --sl-color-bg-sidebar: var(--sl-color-black);
    --sl-nextjs-header-bg-color: rgba(14, 14, 14, 0.6);

    --sl-text-h1: var(--sl-text-3xl);
    --sl-text-h2: var(--sl-text-2xl);
    --sl-text-h3: var(--sl-text-xl);
    --sl-text-h4: var(--sl-text-lg);
    --sl-text-h5: unset;

    --temp--toc-total-width: calc(
      var(--__toc-width, var(--sl-sidebar-width))
        /* actual sidebar width or fallback */ +
        (2 * var(--__toc-width, 1.5rem))
        /* extra padding/margins for TOC area */
    );

    --temp--available-space: calc(
      100% - var(--temp--toc-total-width)
        /* subtract full sidebar+TOC width */ -
        var(--sl-content-inline-start, 0rem) /* subtract content indent */ -
        var(--sl-content-width) /* subtract content block width */
    );

    /* finally center that remaining space (divide by 2) and subtract fixed 1.5rem gap */
    --sidebar-margin-left: max(
      0rem,
      calc((var(--temp--available-space) / 2) - 1.5rem)
    );
  }

  @media (min-width: 800px) {
    :root {
      --sl-nav-pad-x: calc(1.5rem + var(--sidebar-margin-left));
    }
  }

  /* Light mode colors. */
  :root[data-theme="light"] {
    --sl-color-accent-low: #c7d7fa;
    --sl-color-accent: #325ce1;
    --sl-color-accent-high: #192d66;
    --sl-color-white: #181818;
    --sl-color-gray-1: #272727;
    --sl-color-gray-2: #383838;
    --sl-color-gray-3: #585858;
    --sl-color-gray-4: #8b8b8b;
    --sl-color-gray-5: #c2c2c2;
    --sl-color-gray-6: #eeeeee;
    --sl-color-gray-7: #f6f6f6;
    --sl-color-black: #ffffff;

    --sl-nextjs-header-bg-color: rgba(255, 255, 255, 0.5);
  }

  /* Header */

  header.header {
    -webkit-backdrop-filter: blur(1rem);
    backdrop-filter: blur(1rem);
    background-color: var(--sl-nextjs-header-bg-color);
    color: var(--sl-color-white);
    border-bottom: 1px solid var(--sl-color-hairline);
  }

  @media (min-width: 800px) {
    header.header > .header > div.sl-flex:has(site-search) {
      justify-self: end;
      min-width: 15rem;
    }

    header.header
      > .header
      > div.sl-flex:has(site-search)
      > site-search
      > button {
      color: var(--sl-color-gray-1);
    }

    header.header
      > .header
      > div.sl-flex:has(site-search)
      > site-search:hover
      > button {
      background-color: var(--sl-color-gray-6);
      border-color: var(--sl-color-gray-5);
      color: var(--sl-color-gray-1);
    }

    .social-icons {
      gap: 1.5rem;
      margin-right: 1rem;
    }

    .social-icons::after {
      display: none;
    }

    .social-icons > a {
      border: 1px solid var(--sl-color-gray-5);
      border-radius: 0.5rem;
      height: 100%;
      padding: 0.69rem;
      color: var(--sl-color-gray-1);
    }

    .social-icons > a:hover {
      opacity: 1;
      background-color: var(--sl-color-gray-6);
    }

    header.header > .header > .right-group {
      gap: 0;
    }

    :is(starlight-theme-select, starlight-lang-select) {
      color: var(--sl-color-gray-1);
      border-radius: 0.5rem;
      border: 1px solid var(--sl-color-gray-5);
      padding-inline-start: 0.5rem;
    }

    :is(starlight-theme-select, starlight-lang-select) > label > select {
      padding-block: 0.5rem;
    }

    :is(starlight-theme-select, starlight-lang-select):hover {
      background-color: var(--sl-color-gray-6);
    }

    :is(starlight-theme-select, starlight-lang-select):hover > label {
      color: var(--sl-color-gray-1);
    }
  }

  @media (min-width: 1152px) {
    .social-icons {
      gap: 2rem;
    }

    header.header > .header > .right-group {
      gap: 0.5rem;
    }
  }

  /* Sidebar */

  .sidebar-pane {
    border-inline-end: 0;
  }

  @media (min-width: 800px) {
    .sidebar-pane {
      margin-left: var(--sidebar-margin-left);
    }
  }

  @media (min-width: 50rem) {
    :root {
      --sl-sidebar-pad-x: 1.25rem;
    }
  }

  .sidebar-content {
    padding-top: 1.5rem;
  }

  .sidebar-content summary {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    gap: 0.25rem;
    padding-left: 0;
    padding-right: 0;
    font-weight: 700;
  }

  /* .sidebar-content .caret {
    display: none;
  }

  @media (min-width: 50rem) {
    .sidebar-content summary {
      --caret-adjustment: 0.5px;
      transform: translateY(var(--caret-adjustment));
    }

    .sidebar-content .group-label {
      transform: translateY(calc(-1 * var(--caret-adjustment)));
    }
  } */

  .sidebar-content li {
    border: 0;
    --sl-sidebar-item-padding-inline: 0.45rem;
    /* margin: 0; */
    padding: 0;
  }

  .sidebar-content .top-level {
    display: flex;
    flex-direction: column;
    gap: 4px;
  }

  .sidebar-content .top-level > * {
    margin-block: 0;
  }

  .sidebar-content .top-level > li:has(details) {
    margin-block: 0.5rem;
  }

  .sidebar-content .large {
    padding-left: 0.75rem;
    padding-right: 0.75rem;
    font-size: 0.875rem;
  }

  @media (min-width: 50rem) {
    .sidebar-content .large {
      font-size: var(--sl-text-sm);
    }
  }

  .sidebar-content a.large {
    font-size: 0.875rem;
  }

  .sidebar-content a {
    padding-left: 0.75rem;
    padding-right: 0.75rem;
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
    font-size: 0.875rem;
  }

  .sidebar-content a[aria-current="page"] {
    background-color: transparent;
    color: var(--sl-color-accent-high);
  }

  [data-theme="light"] .sidebar-content a[aria-current="page"] {
    color: var(--sl-color-accent);
  }

  .sidebar-content a[aria-current="page"]:hover {
    color: var(--sl-color-white);
  }

  main {
    position: relative;
  }

  /* Banner */

  .sl-banner {
    background-color: var(--sl-color-accent-low);
    border: 1px solid var(--sl-color-accent-high);
    border-radius: 0.5rem;
    box-shadow: none;
    color: var(--sl-color-white);
    line-height: 1.4;
    margin-block: 2rem -0.5rem;
    margin-inline: var(--sl-content-pad-x);
    max-width: var(--sl-content-width);
    padding: 1rem;
    text-align: start;
    text-wrap: initial;

    a {
      color: var(--sl-color-green-accent);
      text-underline-offset: 0.25em;

      &:is(:hover, :focus-visible) {
        color: var(--sl-color-accent-high);
      }
    }

    @media (min-width: 72rem) {
      margin-bottom: -1rem;
      margin-inline: auto;

      [data-has-sidebar] & {
        justify-self: end;
        margin-inline: var(--sl-content-pad-x);
      }
    }
  }

  [data-has-sidebar] main:has(.sl-banner) {
    display: grid;
  }

  /* Content */

  @media (min-width: 1152px) {
    :root {
      --sl-mobile-toc-height: 0rem;
    }
  }

  .main-pane > main > .content-panel:last-of-type {
    border-top: none;
    padding-top: 0;
  }

  .content-panel {
    padding-top: 1rem;
  }

  .content-panel + .content-panel {
    border-top: none;
    padding-top: 0;
  }

  .content-panel h1 {
    margin-top: 0.5rem;
  }

  @media (min-width: 72rem) {
    .content-panel h1 {
      margin-top: 1rem;
    }
  }

  .meta {
    align-items: center;
    flex-direction: row-reverse;
  }

  .meta a {
    border: 1px solid var(--sl-color-gray-5);
    border-radius: 0.5rem;
    padding: 0.25rem 0.5rem;
  }

  .meta a:is(:hover, :focus-visible) {
    border-color: var(--sl-color-gray-2);
    color: var(--sl-color-gray-2);
  }

  /* Markdown */

  .sl-markdown-content a:not(:where(.not-content *)) {
    color: var(--sl-color-white);
    text-underline-offset: 0.25em;
  }

  .sl-markdown-content
    a:is(:hover, :focus-visible):not(:where(.not-content *)) {
    color: var(--sl-color-accent-high);
  }

  .sl-markdown-content code:not(:where(.not-content *)) {
    border-radius: 5px;
  }

  .sl-markdown-content tr:nth-child(2n):not(:where(.not-content *)) {
    background-color: var(--sl-color-gray-7);
  }

  .sl-markdown-content :is(th, td):not(:where(.not-content *)) {
    border: none;
  }

  .sl-markdown-content th:not(:where(.not-content *)) {
    border-bottom: 1px solid var(--sl-color-white);
  }

  .sl-markdown-content td:not(:where(.not-content *)) {
    border-bottom: 1px solid var(--sl-color-gray-5);
  }

  .sl-markdown-content details:not(:where(.not-content *)) {
    --sl-details-border-color--hover: var(--sl-color-accent-high);

    border-inline-start-width: 1px;
  }

  .sl-markdown-content .expressive-code .has-title {
    --ec-uiPadBlk: 0.375rem;
  }

  .sl-markdown-content .expressive-code .frame.is-terminal .header {
    border-bottom: 1px solid var(--sl-color-gray-5);
  }

  /* Tabs */

  starlight-tabs .tablist-wrapper {
    overflow-y: hidden;
  }

  starlight-tabs ul[role="tablist"] {
    border-bottom-width: 1px;
  }

  starlight-tabs ul[role="tablist"] a[role="tab"] {
    padding-block: 0.25rem;
  }

  starlight-tabs
    ul[role="tablist"]
    a[role="tab"]:not([aria-selected="true"]):hover {
    border-color: var(--sl-color-white);
    color: var(--sl-color-white);
  }

  /* Cards */

  .sl-markdown-content .card-grid.stagger {
    --stagger-height: 2.5rem;
  }

  .sl-markdown-content .card {
    --sl-text-h1: var(--sl-text-4xl);
    --sl-text-h2: var(--sl-text-3xl);
    --sl-text-h3: var(--sl-text-2xl);
    --sl-text-h4: var(--sl-text-xl);
    --sl-text-h5: var(--sl-text-lg);

    border-radius: 0.5rem;
    padding: clamp(1rem, calc(0.125rem + 1.5vw), 2.5rem);
  }

  .sl-markdown-content .card .title .icon {
    font-size: 1.875rem;
  }

  .sl-markdown-content .sl-link-card {
    box-shadow: none;
  }

  .sl-markdown-content .sl-link-card:hover {
    background: initial;
  }

  .sl-markdown-content .sl-link-card .title {
    color: var(--sl-color-white);
  }

  .sl-markdown-content .sl-link-card .description {
    color: var(--sl-color-gray-3);
  }

  .sl-markdown-content .sl-link-card:is(:hover, :focus-visible) .description {
    color: var(--sl-color-gray-2);
  }

  .sl-markdown-content .sl-link-card .icon {
    color: var(--sl-color-gray-2);
  }

  /* Asides */

  .starlight-aside {
    border: 1px solid var(--sl-color-asides-border);
    border-radius: 0.5rem;
    color: var(--sl-color-asides-text-accent);
  }

  .starlight-aside tr:nth-child(2n) {
    background-color: color-mix(
      in srgb,
      var(--sl-color-asides-border) 25%,
      var(--sl-color-black)
    );
  }

  /* File Tree */

  .sl-markdown-content starlight-file-tree {
    background-color: var(--sl-color-black);
    border: 1px solid var(--sl-color-accent-high);
    border-radius: 0.5rem;
  }

  .sl-markdown-content
    starlight-file-tree
    .directory
    > details
    > summary:hover
    ~ ul {
    border-color: var(--sl-color-accent-high);
  }

  /* Notices */

  .content-panel:first-of-type p.sl-flex:not(:where(.sl-markdown-content *)) {
    border-radius: 0.5rem;
    padding: 1rem;
  }

  .content-panel:first-of-type
    p.sl-flex:not(:where(.sl-markdown-content *))
    svg {
    flex-shrink: 0;
  }

  /* Steps */

  .sl-steps > li:last-of-type::after {
    --guide-width: 1px;

    background: linear-gradient(
      to bottom,
      var(--sl-color-hairline-light),
      var(--sl-color-bg) 85%
    );
    bottom: var(--bullet-margin);
    content: "";
    inset-inline-start: calc((var(--bullet-size) - var(--guide-width)) / 2);
    position: absolute;
    top: calc(var(--bullet-size) + var(--bullet-margin));
    width: var(--guide-width);
  }

  /* Link Buttons */

  :is(.hero, .sl-markdown-content) .sl-link-button {
    padding: 0.75rem 1rem;
  }

  :is(.hero, .sl-markdown-content) .sl-link-button svg {
    font-size: 1.25rem;
  }

  :is(.hero, .sl-markdown-content) .sl-link-button.primary {
    background-color: var(--sl-color-accent-low);
    border: 1px solid var(--sl-color-accent);
    color: var(--sl-color-accent-high);
  }

  :is(.hero, .sl-markdown-content)
    .sl-link-button.primary:is(:hover, :focus-visible) {
    border-color: var(--sl-color-accent-low);
    color: var(--sl-color-white);
  }

  :is(.hero, .sl-markdown-content) .sl-link-button.secondary {
    border-color: var(--sl-color-gray-2);
    color: var(--sl-color-gray-2);
  }

  :is(.hero, .sl-markdown-content)
    .sl-link-button.secondary:is(:hover, :focus-visible) {
    border-color: var(--sl-color-accent-high);
    color: var(--sl-color-accent-high);
  }

  :is(.hero, .sl-markdown-content) .sl-link-button.minimal {
    padding-inline: 0.25rem;
  }

  :is(.hero, .sl-markdown-content)
    .sl-link-button.minimal:is(:hover, :focus-visible) {
    color: var(--sl-color-accent-high);
  }

  /* Pagination Links */

  .pagination-links {
    gap: 0;
  }

  .pagination-links > a {
    align-items: end;
    border: none;
    box-shadow: none;
    padding-inline: 0;
    color: var(--sl-color-gray-2);
  }

  [data-theme="light"] .pagination-links > a {
    color: var(--sl-color-gray-3);
  }

  .pagination-links > a > span {
    font-size: 0.85em;
  }

  .pagination-links > a > svg {
    margin-bottom: 0.15rem;
  }

  .pagination-links .link-title {
    font-size: var(--sl-text-lg);
  }

  /* Table of Contents */

  .right-sidebar {
    border-inline-start: none;
  }

  .right-sidebar h2 {
    font-size: var(--sl-text-xs);
    font-weight: 600;
    padding-left: 0.5rem;
    margin-bottom: 0.45rem;
    margin-top: 1rem;
  }

  .right-sidebar a {
    padding-bottom: 0.45rem;
  }

  .right-sidebar a[aria-current="true"] {
    font-weight: 500;
    color: var(--sl-color-accent-high);
  }

  [data-theme="light"] .right-sidebar a[aria-current="true"] {
    color: var(--sl-color-accent);
  }

  .right-sidebar a:hover {
    color: var(--sl-color-white);
  }

  .right-sidebar mobile-starlight-toc > nav {
    border-top: none;
    -webkit-backdrop-filter: blur(1rem);
    backdrop-filter: blur(1rem);
    background-color: var(--sl-nextjs-header-bg-color);
  }
}
