/* =========================================================================
   @libraz/typedoc-theme
   An editorial, business-modern reading surface for TypeDoc's DefaultTheme.

   System: warm-neutral "paper & ink" base with one disciplined viridian
   accent; rational serif display headings over a Plex body/mono pair;
   hairline rules, letter-spaced micro-labels, and a multi-column index.

   Styling is expressed by overriding DefaultTheme's own CSS variables
   (--light-color-* / --dark-color-*), so both the prefers-color-scheme
   path and the [data-theme] toggle pick up every value. --lz-accent is
   injected inline by the plugin (configurable via the `accentColor`
   option); every accent tint below is derived from it with color-mix().
   Note: DefaultTheme uses --color-accent for borders/dividers, so that
   variable carries the hairline color, not the brand accent.
   ========================================================================= */

:root {
  /* Brand accent fallback; the plugin injects the configured value inline. */
  --lz-accent: #0e7364;

  /* Type system. Every stack ends with a Japanese face before the generic
     so mixed JA/Latin text renders consistently. */
  --lz-font-display: "Source Serif 4", "IBM Plex Sans JP", Georgia, serif;
  --lz-font-body: "IBM Plex Sans", "IBM Plex Sans JP", system-ui, sans-serif;
  --lz-font-mono:
    "IBM Plex Mono", "IBM Plex Sans JP", ui-monospace, SFMono-Regular, Menlo, monospace;

  --lz-radius: 6px;
  --lz-measure: 72ch;

  /* Airier sticky toolbar (consumed by DefaultTheme's header calc). */
  --dim-toolbar-contents-height: 3.25rem;

  /* ---- Light: paper white, ink text, hairline warm-gray rules ---- */
  --light-color-background: #fafaf8;
  --light-color-background-secondary: #f2f1ed;
  --light-color-background-active: #e8e7e1;
  --light-color-background-warning: #f6edd2;
  --light-color-warning-text: #5b4a14;
  --light-color-accent: #e3e2db; /* hairlines: table rules, dividers, borders */
  --light-color-active-menu-item: color-mix(in oklab, var(--lz-accent) 9%, #fafaf8);
  --light-color-text: #1d201e;
  --light-color-contrast-text: #0a0c0b;
  --light-color-text-aside: #5d6360;

  --light-color-icon-background: #f2f1ed;
  --light-color-icon-text: #5d6360;

  --light-color-comment-tag: #efeee9;
  --light-color-comment-tag-text: #4c524f;

  --light-color-link: var(--lz-accent);
  --light-color-focus-outline: var(--lz-accent);
  --light-color-document: #5a6672;

  --light-color-alert-note: #34618f;
  --light-color-alert-tip: var(--lz-accent);
  --light-color-alert-important: #4c5fa8;
  --light-color-alert-warning: #8a670f;
  --light-color-alert-caution: #a8402f;

  /* Member-kind tokens: muted, evenly weighted mid-tones, AA on paper. */
  --light-color-ts-keyword: #5c6663;
  --light-color-ts-project: #33403c;
  --light-color-ts-module: #44585c;
  --light-color-ts-namespace: #44585c;
  --light-color-ts-enum: #7a5a17;
  --light-color-ts-enum-member: #8a6410;
  --light-color-ts-variable: #47688c;
  --light-color-ts-function: #0e6e60;
  --light-color-ts-class: #1f5c99;
  --light-color-ts-interface: #47701f;
  --light-color-ts-constructor: #1f5c99;
  --light-color-ts-property: #7a563b;
  --light-color-ts-method: #0f6377;
  --light-color-ts-reference: #8a4d68;
  --light-color-ts-type-parameter: #5e6b3e;
  --light-color-ts-accessor: #a04a28;
  --light-color-ts-type-alias: #8a3d63;

  /* ---- Dark: warm graphite (not black), soft-white ink ---- */
  --dark-color-background: #171918;
  --dark-color-background-secondary: #101211;
  --dark-color-background-active: #262a28;
  --dark-color-background-warning: #3a331c;
  --dark-color-warning-text: #e5d28e;
  --dark-color-accent: #2b2f2d; /* hairlines */
  --dark-color-active-menu-item: color-mix(in oklab, var(--lz-accent) 22%, #171918);
  --dark-color-text: #dee1de;
  --dark-color-contrast-text: #f6f8f6;
  --dark-color-text-aside: #9ba29d;

  --dark-color-icon-background: #222523;
  --dark-color-icon-text: #9ba29d;

  --dark-color-comment-tag: #262a28;
  --dark-color-comment-tag-text: #b6bdb8;

  --dark-color-link: color-mix(in oklab, var(--lz-accent), #ffffff 45%);
  --dark-color-focus-outline: color-mix(in oklab, var(--lz-accent), #ffffff 30%);
  --dark-color-document: #a6b0ba;

  --dark-color-alert-note: #85aedc;
  --dark-color-alert-tip: color-mix(in oklab, var(--lz-accent), #ffffff 40%);
  --dark-color-alert-important: #9ba4de;
  --dark-color-alert-warning: #cfa84e;
  --dark-color-alert-caution: #d98a77;

  --dark-color-ts-keyword: #98a29d;
  --dark-color-ts-project: #c6d0cb;
  --dark-color-ts-module: #9fb4b0;
  --dark-color-ts-namespace: #9fb4b0;
  --dark-color-ts-enum: #c9a24d;
  --dark-color-ts-enum-member: #d3ac55;
  --dark-color-ts-variable: #93b3cf;
  --dark-color-ts-function: #5ebfae;
  --dark-color-ts-class: #7fb2e5;
  --dark-color-ts-interface: #9bc272;
  --dark-color-ts-constructor: #7fb2e5;
  --dark-color-ts-property: #c4a183;
  --dark-color-ts-method: #67b9cd;
  --dark-color-ts-reference: #d095b2;
  --dark-color-ts-type-parameter: #adb985;
  --dark-color-ts-accessor: #da9678;
  --dark-color-ts-type-alias: #d98ab2;
}

/* =========================================================================
   Base typography
   ========================================================================= */

body {
  font-family: var(--lz-font-body);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

::selection {
  background-color: color-mix(in oklab, var(--lz-accent) 22%, transparent);
}

a {
  text-underline-offset: 0.2em;
  text-decoration-thickness: 1px;
}

a:hover {
  text-decoration-color: color-mix(in oklab, currentColor 45%, transparent);
}

:focus-visible {
  outline: 2px solid var(--color-focus-outline);
  outline-offset: 2px;
}

/* Display headings: rational serif, tight but not cramped. */
h1,
h2,
h3 {
  font-family: var(--lz-font-display);
  font-weight: 600;
  letter-spacing: -0.01em;
}

/* Letter-spaced uppercase micro-label used for structural headings. */
.tsd-parameters-title,
.tsd-returns-title,
.tsd-index-heading,
.tsd-comment.tsd-typography > div > h4,
.tsd-navigation.settings .tsd-accordion-summary h3,
.tsd-page-navigation .tsd-accordion-summary h3,
.tsd-filter-visibility h4 {
  font-family: var(--lz-font-body);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-text-aside);
}

/* =========================================================================
   Frame: container, columns, whitespace
   ========================================================================= */

.container {
  max-width: 1480px;
  padding: 0 2.5rem;
}

@media (min-width: 770px) {
  .container-main {
    column-gap: 2.5rem;
    --dim-container-main-margin-y: 3rem;
  }

  .col-content {
    padding: 0;
    min-width: 0;
  }
}

@media (min-width: 1200px) {
  .container-main {
    grid-template-columns: minmax(0, 16.5rem) minmax(0, 1fr) minmax(0, 15rem);
    column-gap: 4rem;
  }
}

/* =========================================================================
   Toolbar
   ========================================================================= */

.tsd-page-toolbar {
  background-color: color-mix(in oklab, var(--color-background) 88%, transparent);
  backdrop-filter: saturate(1.2) blur(10px);
  -webkit-backdrop-filter: saturate(1.2) blur(10px);
  border-bottom: 1px solid var(--color-accent);
}

.tsd-page-toolbar .title {
  font-family: var(--lz-font-display);
  font-size: 1.0625rem;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: var(--color-contrast-text);
}

/* =========================================================================
   Page masthead: breadcrumb + title
   ========================================================================= */

.tsd-breadcrumb {
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.tsd-breadcrumb li:after {
  content: " / ";
  color: var(--color-accent);
}

.tsd-page-title {
  padding-bottom: 1.75rem;
  border-bottom: 1px solid var(--color-accent);
  margin-bottom: 2.25rem;
}

.tsd-page-title h1 {
  margin: 0.5rem 0 0 0;
  font-size: clamp(1.75rem, 1.35rem + 1.2vw, 2.375rem);
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.015em;
  color: var(--color-contrast-text);
}

/* =========================================================================
   Prose
   ========================================================================= */

.tsd-typography {
  line-height: 1.7;
}

/* Comfortable reading measure; wide artifacts (tables, code) are exempt. */
.tsd-typography p,
.tsd-typography ul,
.tsd-typography ol,
.tsd-typography blockquote {
  max-width: var(--lz-measure);
}

.tsd-panel.tsd-comment .lead {
  font-size: 1.0625rem;
  line-height: 1.7;
}

.tsd-typography h2 {
  max-width: var(--lz-measure);
  margin-top: 3rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--color-accent);
  font-size: 1.375rem;
  color: var(--color-contrast-text);
}

.tsd-typography h3 {
  margin-top: 2.25rem;
  font-size: 1.125rem;
  color: var(--color-contrast-text);
}

.tsd-typography hr {
  border: none;
  border-top: 1px solid var(--color-accent);
  margin: 2.5rem 0;
}

.tsd-typography blockquote {
  margin: 1.25em 0;
  padding: 0 0 0 1.25rem;
  border-left: 2px solid var(--color-accent);
  color: var(--color-text-aside);
}

/* Tables: editorial — horizontal hairlines only, quiet caps header. */
.tsd-typography table {
  font-variant-numeric: lining-nums tabular-nums;
  margin: 1.5em 0;
}

.tsd-typography th,
.tsd-typography td {
  border: none;
  border-bottom: 1px solid var(--color-accent);
  padding: 0.55rem 1.5rem 0.55rem 0;
  text-align: left;
}

.tsd-typography th {
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-text-aside);
  border-bottom-color: color-mix(in oklab, var(--color-text) 30%, var(--color-background));
}

.tsd-typography thead,
.tsd-typography tr:nth-child(even) {
  background-color: transparent;
}

/* GFM alerts: thin marginal rule, faint tint, square corners by design. */
.tsd-alert {
  border-left-width: 2px;
  border-radius: 0;
  padding: 0.875rem 1.25rem;
  background-color: color-mix(in oklab, var(--alert-color) 5%, var(--color-background));
}

.tsd-alert-title {
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* =========================================================================
   Code surfaces
   ========================================================================= */

code,
pre {
  font-family: var(--lz-font-mono);
  font-feature-settings: "liga" 0;
}

code:not(pre code) {
  padding: 0.1em 0.35em;
  border-radius: 4px;
  background-color: var(--color-background-secondary);
  font-size: 0.875em;
}

pre {
  padding: 1.125rem 1.375rem;
  border: 1px solid var(--color-accent);
  border-radius: var(--lz-radius);
  background-color: var(--color-background-secondary);
  font-size: 0.875rem;
  line-height: 1.65;
}

/* =========================================================================
   Signatures, members, parameters
   ========================================================================= */

.tsd-signature,
.tsd-signatures .tsd-signature {
  font-family: var(--lz-font-mono);
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1.7;
  padding: 0.875rem 1.125rem;
  border: 1px solid var(--color-accent);
  border-radius: var(--lz-radius);
  background-color: var(--color-background-secondary);
}

.tsd-signatures .tsd-signature {
  border-width: 1px;
  margin-bottom: 1rem;
}

.tsd-signature-type {
  font-style: normal;
}

/* Members read as editorial entries divided by hairlines, not cards. */
.tsd-panel.tsd-member {
  margin-bottom: 3.25rem;
}

.tsd-member + .tsd-member {
  border-top: 1px solid var(--color-accent);
  padding-top: 2.25rem;
}

.tsd-member .tsd-anchor + h3 {
  font-family: var(--lz-font-mono);
  font-size: 1.0625rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--color-contrast-text);
}

/* Member-group headings ("Constructors", "Methods", ...) */
.tsd-panel-group.tsd-member-group {
  margin-top: 3.5rem;
}

.tsd-panel-group > .tsd-accordion-summary {
  margin-bottom: 1.5rem;
}

.tsd-panel-group > .tsd-accordion-summary h2 {
  font-size: 1.375rem;
  color: var(--color-contrast-text);
}

.tsd-parameters-title,
.tsd-returns-title {
  margin: 1.75rem 0 0.75rem 0;
}

.tsd-returns-title > * {
  font-family: var(--lz-font-mono);
  font-size: 0.875rem;
  font-weight: 500;
  letter-spacing: normal;
  text-transform: none;
}

ul.tsd-parameter-list,
ul.tsd-type-parameter-list {
  list-style: none;
  padding-left: 0;
}

ul.tsd-parameter-list > li,
ul.tsd-type-parameter-list > li {
  padding: 0.55rem 0;
  border-bottom: 1px solid var(--color-accent);
}

/* Provenance line: quiet, small, tabular. */
.tsd-sources {
  font-size: 0.8125rem;
  font-variant-numeric: lining-nums tabular-nums;
  color: var(--color-text-aside);
}

.tsd-sources a {
  color: var(--color-text-aside);
}

.tsd-anchor-icon {
  color: var(--color-text-aside);
}

/* =========================================================================
   Index: refined multi-column layout with hairline column rules
   ========================================================================= */

.tsd-panel.tsd-index-panel {
  border: 1px solid var(--color-accent);
  border-radius: var(--lz-radius);
  padding: 1.75rem 2rem;
  background-color: color-mix(
    in oklab,
    var(--color-background-secondary) 55%,
    var(--color-background)
  );
}

.tsd-index-heading {
  margin: 0 0 0.5rem 0;
}

.tsd-index-summary {
  margin-top: 2rem;
  margin-bottom: 0.75rem;
}

.tsd-index-section:first-child .tsd-index-heading,
.tsd-index-content > .tsd-index-section:first-of-type .tsd-index-summary {
  margin-top: 0;
}

.tsd-index-panel .tsd-index-list {
  display: block;
  columns: 3;
  column-gap: 3rem;
  column-rule: 1px solid var(--color-accent);
  padding: 0.25rem 0 0 0;
  line-height: 1.5;
}

@media (max-width: 1024px) {
  .tsd-index-panel .tsd-index-list {
    columns: 2;
  }
}

@media (max-width: 768px) {
  .tsd-index-panel .tsd-index-list {
    columns: 1;
  }
}

.tsd-index-panel .tsd-index-list li {
  break-inside: avoid;
  padding: 0.2rem 0;
}

.tsd-index-link {
  font-family: var(--lz-font-mono);
  font-size: 0.875rem;
  text-decoration: none;
}

.tsd-index-link:hover {
  text-decoration: underline;
}

/* =========================================================================
   Navigation (left) and page TOC (right)
   ========================================================================= */

.site-menu {
  font-size: 0.875rem;
}

.tsd-navigation a,
.tsd-page-navigation a {
  padding: 0.3rem 0.55rem;
  border-radius: var(--lz-radius);
  color: var(--color-text-aside);
  transition:
    color 120ms ease,
    background-color 120ms ease;
}

.tsd-navigation a:hover,
.tsd-page-navigation a:hover {
  text-decoration: none;
  color: var(--color-text);
  background-color: var(--color-background-secondary);
}

.tsd-navigation a.current {
  background-color: var(--color-active-menu-item);
  color: var(--color-link);
  font-weight: 600;
}

.tsd-navigation .tsd-accordion-summary {
  color: var(--color-text);
}

/* Right-hand TOC: hairline spine, quiet links, accent current item. */
.page-menu {
  font-size: 0.8125rem;
}

.tsd-page-navigation .tsd-accordion-details > ul {
  border-left: 1px solid var(--color-accent);
  padding-left: 0.5rem;
  margin-top: 0.5rem;
}

.tsd-page-navigation ul ul {
  border-left: none;
}

.tsd-page-navigation a {
  border-radius: 0;
}

.tsd-page-navigation a:hover {
  background-color: transparent;
}

.tsd-page-navigation a.current {
  background-color: transparent;
  color: var(--color-link);
  font-weight: 600;
}

/* Settings block & filters: quiet by default. */
.tsd-navigation.settings {
  font-size: 0.8125rem;
}

/* =========================================================================
   Search
   ========================================================================= */

#tsd-search[open] {
  border: 1px solid var(--color-accent);
  border-radius: 8px;
  background-color: var(--color-background);
}

#tsd-search-input {
  border: 1px solid var(--color-accent);
  border-radius: var(--lz-radius);
  font-family: var(--lz-font-body);
}

#tsd-search-input:focus-visible {
  background-color: transparent;
  border-color: var(--lz-accent);
  outline: none;
}

/* =========================================================================
   Chips: flags and comment tags
   ========================================================================= */

.tsd-flag,
code.tsd-tag {
  font-family: var(--lz-font-body);
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.3em 0.6em;
  border-radius: 3px;
  border: none;
  color: var(--color-comment-tag-text);
  background-color: var(--color-comment-tag);
}

h1 code.tsd-tag:first-of-type {
  margin-left: 0.75em;
  vertical-align: middle;
}

/* =========================================================================
   Footer
   ========================================================================= */

.lz-footer {
  margin-top: 4rem;
  padding: 1.75rem 0;
  border-top: 1px solid var(--color-accent);
  text-align: center;
}

.lz-footer .tsd-generator {
  margin: 0;
  font-size: 0.75rem;
  letter-spacing: 0.02em;
  color: var(--color-text-aside);
}

.lz-footer a {
  color: var(--color-text-aside);
}
