/*
 * Shelf kit – Swagger UI on the kit. Link after swagger-ui.css (swagger-ui-dist 5.x):
 *
 *   <link rel="stylesheet" href="/kit/tokens.css"> … <link rel="stylesheet" href="…/swagger-ui.css">
 *   <link rel="stylesheet" href="/kit/swagger.css">
 *
 * and start Swagger UI with `syntaxHighlight: { activated: false }` (its highlighter paints inline
 * colours that no stylesheet can follow into the dark theme). Swagger's own top bar is not used: the
 * page has the sandbox's .topbar. Every colour and font below is a kit token, so both themes follow.
 *
 * Methods map to the kit's colours: GET violet (reads), POST ok, PUT warn and PATCH accent (the two
 * updates share a warm hue), DELETE danger.
 */

.swagger-ui {
  --sw-get: var(--violet);
  --sw-on-get: var(--on-violet);
  --sw-post: var(--ok);
  --sw-on-post: var(--on-ok);
  --sw-put: var(--warn);
  --sw-on-put: var(--on-warn);
  --sw-patch: var(--accent);
  --sw-on-patch: var(--on-accent);
  --sw-delete: var(--danger);
  --sw-on-delete: var(--on-danger);
  color: var(--ink);
  font-family: var(--font-sans);
}
.swagger-ui .wrapper {
  max-width: none;
  padding: 0;
}
.swagger-ui .topbar {
  display: none;
}

/* ── type: the kit's faces everywhere, monospace where Swagger shows code ── */
.swagger-ui,
.swagger-ui .opblock-tag,
.swagger-ui .opblock-tag small,
.swagger-ui .opblock .opblock-section-header > label,
.swagger-ui .opblock .opblock-section-header h4,
.swagger-ui .opblock .opblock-summary-method,
.swagger-ui .opblock .opblock-summary-description,
.swagger-ui .tab li,
.swagger-ui .opblock-description-wrapper,
.swagger-ui .opblock-description-wrapper h4,
.swagger-ui .opblock-description-wrapper p,
.swagger-ui .opblock-external-docs-wrapper,
.swagger-ui .opblock-title_normal,
.swagger-ui .opblock-title_normal p,
.swagger-ui .responses-inner h4,
.swagger-ui .responses-inner h5,
.swagger-ui .response-col_status,
.swagger-ui .response-col_links,
.swagger-ui .scheme-container .schemes > .schemes-server-container > label,
.swagger-ui .servers > label,
.swagger-ui section h3,
.swagger-ui .btn,
.swagger-ui label,
.swagger-ui .dialog-ux .modal-ux-content p,
.swagger-ui .dialog-ux .modal-ux-content h4,
.swagger-ui .dialog-ux .modal-ux-header h3,
.swagger-ui section.models h4,
.swagger-ui section.models h5,
.swagger-ui .model-title,
.swagger-ui .info h1,
.swagger-ui .info h2,
.swagger-ui .info h3,
.swagger-ui .info h4,
.swagger-ui .info h5,
.swagger-ui .info li,
.swagger-ui .info p,
.swagger-ui .info table,
.swagger-ui .info a,
.swagger-ui .info .title,
.swagger-ui .info .title small pre,
.swagger-ui table thead tr td,
.swagger-ui table thead tr th,
.swagger-ui .scopes h2,
.swagger-ui .errors-wrapper hgroup h4,
.swagger-ui .json-schema-2020-12__title,
.swagger-ui .json-schema-2020-12-expand-deep-button,
.swagger-ui .loading-container .loading:after,
.swagger-ui button,
.swagger-ui input,
.swagger-ui select {
  font-family: var(--font-sans);
}
.swagger-ui pre,
.swagger-ui code,
.swagger-ui textarea,
.swagger-ui .model,
.swagger-ui .opblock .opblock-summary-path,
.swagger-ui .opblock .opblock-summary-operation-id,
.swagger-ui .opblock .opblock-summary-path__deprecated,
.swagger-ui .info .base-url,
.swagger-ui .response-col_status .response-undocumented,
.swagger-ui .response-col_links .response-undocumented,
.swagger-ui .opblock-body pre.microlight,
.swagger-ui table.headers td,
.swagger-ui .parameter__type,
.swagger-ui .parameter__in,
.swagger-ui .prop-format,
.swagger-ui .json-schema-2020-12-property .json-schema-2020-12__title,
.swagger-ui .json-schema-2020-12__attribute,
.swagger-ui .json-schema-2020-12__constraint,
.swagger-ui .json-schema-2020-12-keyword__value--warning,
.swagger-ui .errors-wrapper .errors h4,
.swagger-ui .checkbox p {
  font-family: var(--font-mono);
}

/* ── text colours ── */
.swagger-ui .opblock-tag,
.swagger-ui .opblock-tag small,
.swagger-ui .opblock .opblock-section-header > label,
.swagger-ui .opblock .opblock-section-header h4,
.swagger-ui .opblock .opblock-summary-path,
.swagger-ui .opblock .opblock-summary-operation-id,
.swagger-ui .opblock .opblock-summary-path__deprecated,
.swagger-ui .tab li,
.swagger-ui .opblock-description-wrapper,
.swagger-ui .opblock-description-wrapper h4,
.swagger-ui .opblock-description-wrapper p,
.swagger-ui .opblock-title_normal,
.swagger-ui .opblock-title_normal p,
.swagger-ui .responses-inner h4,
.swagger-ui .responses-inner h5,
.swagger-ui .response-col_status,
.swagger-ui .response-col_links,
.swagger-ui .scheme-container .schemes > .schemes-server-container > label,
.swagger-ui .servers > label,
.swagger-ui section h3,
.swagger-ui label,
.swagger-ui .model,
.swagger-ui .info h1,
.swagger-ui .info h2,
.swagger-ui .info h3,
.swagger-ui .info h4,
.swagger-ui .info h5,
.swagger-ui .info li,
.swagger-ui .info p,
.swagger-ui .info table,
.swagger-ui .info .title,
.swagger-ui .info .base-url,
.swagger-ui table.headers td,
.swagger-ui table thead tr td,
.swagger-ui table thead tr th,
.swagger-ui .parameter__name,
.swagger-ui .markdown p,
.swagger-ui .markdown li,
.swagger-ui .renderedMarkdown p,
.swagger-ui .renderedMarkdown li,
.swagger-ui .dialog-ux .modal-ux-content p,
.swagger-ui .dialog-ux .modal-ux-content h4,
.swagger-ui .dialog-ux .modal-ux-header h3,
.swagger-ui .scopes h2,
.swagger-ui .errors-wrapper .errors h4,
.swagger-ui .errors-wrapper hgroup h4,
.swagger-ui .checkbox p,
.swagger-ui .json-schema-2020-12-property .json-schema-2020-12__title,
.swagger-ui .json-schema-2020-12-keyword__name--primary,
.swagger-ui .json-schema-2020-12-keyword__value--primary,
.swagger-ui .json-schema-2020-12-json-viewer__name--primary,
.swagger-ui .json-schema-2020-12-json-viewer__value--primary,
.swagger-ui .json-schema-2020-12__attribute,
.swagger-ui .json-schema-2020-12-keyword--const,
.swagger-ui .json-schema-2020-12-keyword--enum,
.swagger-ui .json-schema-2020-12-keyword--default,
.swagger-ui .loading-container .loading:after {
  color: var(--ink);
}
.swagger-ui .opblock .opblock-summary-description,
.swagger-ui .parameter__in,
.swagger-ui .parameter__deprecated,
.swagger-ui .prop-format,
.swagger-ui .model .property,
.swagger-ui .model .property.primitive,
.swagger-ui .model-title,
.swagger-ui section.models h4,
.swagger-ui section.models h5,
.swagger-ui .model .external-docs,
.swagger-ui table.model tr.description,
.swagger-ui table.model tr.extension,
.swagger-ui table.headers .header-example,
.swagger-ui .response-col_status .response-undocumented,
.swagger-ui .response-col_links .response-undocumented,
.swagger-ui .errors-wrapper .errors small,
.swagger-ui .json-schema-2020-12__title,
.swagger-ui .json-schema-2020-12-keyword--description,
.swagger-ui .json-schema-2020-12-keyword__name--secondary,
.swagger-ui .json-schema-2020-12-keyword__value,
.swagger-ui .json-schema-2020-12-keyword__value--secondary,
.swagger-ui .json-schema-2020-12-json-viewer__name--secondary,
.swagger-ui .json-schema-2020-12-json-viewer__value,
.swagger-ui .json-schema-2020-12-json-viewer__value--secondary,
.swagger-ui .json-schema-2020-12-expand-deep-button,
.swagger-ui .download-url-wrapper .loading,
.swagger-ui .fallback,
.swagger-ui span.token-string,
.swagger-ui span.token-not-formatted {
  color: var(--ink-2);
}
.swagger-ui .json-schema-2020-12-keyword__name--extension,
.swagger-ui .json-schema-2020-12-keyword__value--extension,
.swagger-ui .json-schema-2020-12-json-viewer__name--extension,
.swagger-ui .json-schema-2020-12-json-viewer__value--extension,
.swagger-ui .json-schema-2020-12-json-viewer-extension-keyword .json-schema-2020-12-json-viewer__name,
.swagger-ui .json-schema-2020-12-json-viewer-extension-keyword .json-schema-2020-12-json-viewer__value,
.swagger-ui .model .deprecated span,
.swagger-ui .model .deprecated td {
  color: var(--ink-3) !important;
}
.swagger-ui .prop-type,
.swagger-ui .parameter__type,
.swagger-ui .json-schema-2020-12__attribute--primary,
.swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:first-of-type::after {
  color: var(--violet);
}
.swagger-ui .parameter__name.required::after,
.swagger-ui .parameter__name.required span,
.swagger-ui .model-deprecated-warning,
.swagger-ui .response-col_description__inner .renderedMarkdown strong {
  color: var(--danger);
}
.swagger-ui a,
.swagger-ui .info a,
.swagger-ui .scopes h2 a,
.swagger-ui .nested-links a {
  color: var(--accent);
}
.swagger-ui a:hover,
.swagger-ui .info a:hover {
  color: var(--accent-hover);
}
.swagger-ui svg:not(:root) {
  fill: currentColor;
}
.swagger-ui .expand-methods svg,
.swagger-ui .expand-operation svg,
.swagger-ui .opblock-control-arrow,
.swagger-ui .authorization__btn,
.swagger-ui .opblock-summary-control svg {
  color: var(--ink-2);
  fill: currentColor;
}

/* ── inline code in descriptions ── */
.swagger-ui .markdown code,
.swagger-ui .renderedMarkdown code,
.swagger-ui .opblock-description-wrapper code,
.swagger-ui .version-pragma__message code {
  padding: 0.05em 0.35em;
  border-radius: var(--radius-sm);
  background: var(--sunken);
  color: var(--ink);
  font-size: 0.92em;
}

/* ── info block ── */
.swagger-ui .information-container,
.swagger-ui .info {
  margin: 0 0 var(--space-6);
  padding: 0;
}
.swagger-ui .info .title {
  font-family: var(--font-display);
  font-size: var(--text-xl);
}
.swagger-ui .info .title small {
  background: var(--sunken);
  vertical-align: middle;
}
.swagger-ui .info .title small pre {
  color: var(--ink-2);
  font-family: var(--font-label);
}
.swagger-ui .info .title small.version-stamp {
  background: var(--ok-soft);
}
.swagger-ui .info .title small.version-stamp pre {
  color: var(--ok);
}
.swagger-ui .info .description,
.swagger-ui .info .markdown {
  max-width: var(--measure);
}

/* ── servers + Authorize ── */
.swagger-ui .scheme-container {
  margin: 0 0 var(--space-6);
  padding: var(--space-4);
  border: 1px solid var(--line);
  border-radius: var(--radius-card);
  background: var(--raised);
  box-shadow: var(--shadow-card);
}
.swagger-ui .scheme-container .schemes {
  gap: var(--space-4);
}

/* ── buttons ── */
.swagger-ui .btn {
  border: 0;
  border-radius: var(--radius-control);
  background: transparent;
  color: var(--ink);
  box-shadow: inset 0 0 0 1px var(--edge);
  font-weight: 600;
}
.swagger-ui .btn:hover {
  background: var(--sunken);
  box-shadow: inset 0 0 0 1px var(--edge);
}
.swagger-ui .btn:focus-visible,
.swagger-ui button:focus-visible,
.swagger-ui .opblock-summary-control:focus-visible,
.swagger-ui .opblock-tag:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
}
.swagger-ui .btn.authorize {
  color: var(--ok);
  box-shadow: inset 0 0 0 1px var(--ok);
}
.swagger-ui .btn.authorize svg {
  color: var(--ok);
  fill: currentColor;
}
.swagger-ui .btn.execute,
.swagger-ui .btn.btn-primary {
  background: var(--accent);
  color: var(--on-accent);
  box-shadow: none;
}
.swagger-ui .btn.execute:hover {
  background: var(--accent-hover);
}
.swagger-ui .btn.cancel,
.swagger-ui .btn-clear {
  color: var(--danger);
  box-shadow: inset 0 0 0 1px var(--danger);
}
.swagger-ui .btn.modal-btn.auth {
  color: var(--ok);
  box-shadow: inset 0 0 0 1px var(--ok);
}
.swagger-ui .btn-group .btn:first-child,
.swagger-ui .btn-group .btn:last-child {
  border-radius: var(--radius-control);
}
.swagger-ui button.invalid {
  background: var(--danger-soft);
  box-shadow: inset 0 0 0 1px var(--danger);
}
.swagger-ui .copy-to-clipboard,
.swagger-ui .download-contents {
  border-radius: var(--radius-sm);
  background: var(--line-strong);
  color: var(--ink);
}
.swagger-ui .copy-to-clipboard:active {
  background: var(--field);
}
.swagger-ui .copy-to-clipboard button {
  filter: none;
}

/* ── fields ── */
.swagger-ui input[type="email"],
.swagger-ui input[type="file"],
.swagger-ui input[type="password"],
.swagger-ui input[type="search"],
.swagger-ui input[type="text"],
.swagger-ui textarea,
.swagger-ui select,
.swagger-ui .filter .operation-filter-input {
  border: 1px solid var(--line-strong);
  border-bottom-color: var(--field);
  border-radius: var(--radius-control);
  background-color: var(--raised);
  color: var(--ink);
  box-shadow: none;
}
.swagger-ui textarea:focus,
.swagger-ui input:focus,
.swagger-ui select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: inset 0 -2px 0 var(--accent);
}
.swagger-ui input.invalid,
.swagger-ui textarea.invalid,
.swagger-ui select.invalid {
  border-color: var(--danger);
  background: var(--danger-soft);
}
.swagger-ui input[disabled],
.swagger-ui select[disabled],
.swagger-ui textarea[disabled] {
  background-color: var(--sunken);
  color: var(--ink-2);
  border-color: var(--line);
}
.swagger-ui textarea.curl,
.swagger-ui textarea[disabled].curl {
  background: var(--sunken);
  color: var(--ink);
}
.swagger-ui select {
  background-image: linear-gradient(45deg, transparent 50%, var(--ink-2) 50%), linear-gradient(135deg, var(--ink-2) 50%, transparent 50%);
  background-position: calc(100% - 1.15rem) 55%, calc(100% - 0.8rem) 55%;
  background-size: 0.35rem 0.35rem;
  background-repeat: no-repeat;
  padding-right: 2.25rem;
}
.swagger-ui .checkbox input[type="checkbox"] + label > .item,
.swagger-ui .checkbox input[type="checkbox"]:checked + label > .item {
  background-color: var(--sunken);
  box-shadow: 0 0 0 2px var(--line-strong);
}
.swagger-ui .checkbox input[type="checkbox"]:checked + label > .item {
  background-color: var(--accent);
}

/* ── operation groups (tags) ── */
.swagger-ui .opblock-tag {
  border-bottom: 1px solid var(--line);
  font-family: var(--font-display);
  font-size: var(--text-lg);
}
.swagger-ui .opblock-tag small {
  color: var(--ink-2);
  font-size: var(--text-sm);
}
.swagger-ui .opblock-tag:hover {
  background: color-mix(in srgb, var(--sunken) 55%, var(--raised));
}

/* ── operations ── */
.swagger-ui .opblock {
  --m: var(--sw-get);
  --on-m: var(--sw-on-get);
  margin: 0 0 var(--space-2);
  border: 1px solid color-mix(in srgb, var(--m) 40%, var(--line));
  border-radius: var(--radius-control);
  background: color-mix(in srgb, var(--m) 6%, var(--raised));
  box-shadow: none;
}
.swagger-ui .opblock.opblock-post { --m: var(--sw-post); --on-m: var(--sw-on-post); }
.swagger-ui .opblock.opblock-put { --m: var(--sw-put); --on-m: var(--sw-on-put); }
.swagger-ui .opblock.opblock-patch { --m: var(--sw-patch); --on-m: var(--sw-on-patch); }
.swagger-ui .opblock.opblock-delete { --m: var(--sw-delete); --on-m: var(--sw-on-delete); }
.swagger-ui .opblock.opblock-head,
.swagger-ui .opblock.opblock-options,
.swagger-ui .opblock.opblock-query,
.swagger-ui .opblock.opblock-deprecated { --m: var(--ink-3); --on-m: var(--surface); }
.swagger-ui .opblock.opblock-get,
.swagger-ui .opblock.opblock-post,
.swagger-ui .opblock.opblock-put,
.swagger-ui .opblock.opblock-patch,
.swagger-ui .opblock.opblock-delete,
.swagger-ui .opblock.opblock-head,
.swagger-ui .opblock.opblock-options,
.swagger-ui .opblock.opblock-query,
.swagger-ui .opblock.opblock-deprecated {
  border-color: color-mix(in srgb, var(--m) 40%, var(--line));
  background: color-mix(in srgb, var(--m) 6%, var(--raised));
}
.swagger-ui .opblock .opblock-summary,
.swagger-ui .opblock.is-open .opblock-summary,
.swagger-ui .opblock[class*="opblock-"] .opblock-summary {
  border-color: color-mix(in srgb, var(--m) 40%, var(--line));
}
.swagger-ui .opblock .opblock-summary-method,
.swagger-ui .opblock[class*="opblock-"] .opblock-summary-method {
  min-width: 4.75rem;
  border-radius: var(--radius-sm);
  background: var(--m);
  color: var(--on-m);
  font-family: var(--font-label);
  font-size: var(--text-xs);
  letter-spacing: 0.04em;
  text-shadow: none;
}
.swagger-ui .opblock .opblock-summary-path {
  font-size: var(--text-sm);
}
.swagger-ui .opblock .opblock-section-header,
.swagger-ui .opblock[class*="opblock-"] .opblock-section-header {
  background: var(--raised);
  box-shadow: none;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.swagger-ui .opblock .tab-header .tab-item.active h4 span::after,
.swagger-ui .opblock[class*="opblock-"] .tab-header .tab-item.active h4 span::after {
  background: var(--m);
}
.swagger-ui .opblock-body > .opblock-description-wrapper {
  border-top: 0;
}
.swagger-ui .tab li:first-of-type::after {
  background: var(--line-strong);
}

/* code panes (syntax highlighting off) */
.swagger-ui .opblock-body pre.microlight,
.swagger-ui .highlight-code > .microlight,
.swagger-ui .highlight-code pre,
.swagger-ui .curl-command pre,
.swagger-ui .request-url pre,
.swagger-ui .responses-inner pre,
.swagger-ui .model-example pre {
  border: 1px solid var(--line);
  border-radius: var(--radius-control);
  background: var(--sunken);
  color: var(--ink);
  font-size: var(--text-xs);
  line-height: 1.6;
}
.swagger-ui .opblock-body pre.microlight span,
.swagger-ui .opblock-body pre.microlight code {
  color: inherit !important;
}

/* tables */
.swagger-ui table thead tr td,
.swagger-ui table thead tr th {
  border-bottom: 1px solid var(--line-strong);
  color: var(--label);
  font-family: var(--font-label);
  font-size: var(--text-2xs);
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
}
.swagger-ui .col_header,
.swagger-ui .responses-table .col_header {
  color: var(--label);
  font-family: var(--font-label);
  font-size: var(--text-2xs);
  font-weight: 600;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
}
.swagger-ui .responses-table td,
.swagger-ui .parameters td {
  border-color: var(--line);
}

/* ── schemas (models, JSON Schema 2020-12 for OpenAPI 3.1) ── */
.swagger-ui section.models {
  border: 1px solid var(--line);
  border-radius: var(--radius-card);
  background: var(--raised);
}
.swagger-ui section.models.is-open h4 {
  border-bottom: 1px solid var(--line);
}
.swagger-ui section.models h4 {
  font-family: var(--font-display);
}
.swagger-ui section.models h4:hover {
  background: color-mix(in srgb, var(--sunken) 55%, var(--raised));
}
.swagger-ui section.models .model-container,
.swagger-ui .json-schema-2020-12 {
  border-radius: var(--radius-control);
  background: var(--sunken);
}
.swagger-ui section.models .model-container:hover {
  background: color-mix(in srgb, var(--sunken) 80%, var(--line));
}
.swagger-ui .model-box {
  border-radius: var(--radius-control);
  background: var(--sunken);
}
.swagger-ui .model-hint {
  background: var(--top);
  color: var(--top-ink);
}
.swagger-ui .json-schema-2020-12-body,
.swagger-ui .json-schema-2020-12-keyword__children,
.swagger-ui .json-schema-2020-12-json-viewer__children,
.swagger-ui .json-schema-2020-12-keyword--\$vocabulary ul {
  border-left-color: var(--line-strong);
}
.swagger-ui .json-schema-2020-12__constraint {
  background-color: var(--violet-soft);
  color: var(--violet);
}
.swagger-ui .json-schema-2020-12__constraint--string {
  background-color: var(--warn-soft);
  color: var(--warn);
}
.swagger-ui .json-schema-2020-12-accordion,
.swagger-ui .json-schema-2020-12-expand-deep-button {
  background: transparent;
}

/* ── Authorize dialog ── */
.swagger-ui .dialog-ux .backdrop-ux {
  background: var(--scrim);
}
.swagger-ui .dialog-ux .modal-ux {
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-card);
  background: var(--raised);
  color: var(--ink);
  box-shadow: var(--shadow-pop);
}
.swagger-ui .dialog-ux .modal-ux-header,
.swagger-ui .auth-container {
  border-color: var(--line);
}
.swagger-ui .dialog-ux .modal-ux-header .close-modal svg {
  fill: var(--ink-2);
}
.swagger-ui .auth-container .errors {
  background: var(--danger-soft);
  color: var(--ink);
}

/* ── errors, loading ── */
.swagger-ui .errors-wrapper {
  border: 1px solid var(--danger);
  border-radius: var(--radius-control);
  background: var(--danger-soft);
}
.swagger-ui .loading-container .loading::before {
  border-color: var(--line-strong);
  border-top-color: var(--accent);
}
.swagger-ui .response-control-media-type--accept-controller select {
  border-color: var(--ok);
}
.swagger-ui .response-control-media-type__accept-message {
  color: var(--ok);
}

/* ── phones: no sideways scroll for the page ── */
@media (max-width: 639px) {
  .swagger-ui .opblock .opblock-summary {
    flex-wrap: wrap;
    gap: var(--space-1) var(--space-2);
  }
  .swagger-ui .opblock .opblock-summary-path {
    max-width: calc(100% - 6rem);
    word-break: break-all;
  }
  .swagger-ui .opblock .opblock-summary-description {
    flex-basis: 100%;
  }
  .swagger-ui .scheme-container .schemes {
    flex-direction: column;
    align-items: stretch;
  }
  .swagger-ui .table-container,
  .swagger-ui .responses-inner,
  .swagger-ui .opblock-body {
    overflow-x: auto;
  }
}
