/*
 * API docs (/api/v1/docs) — Ledger theme for Swagger UI.
 *
 * Loaded after ninja's vendored swagger-ui.css, this maps Swagger UI's chrome
 * onto the site's design tokens (app.css) so the docs read as a first-class
 * site page in both themes: Newsreader for section titles, IBM Plex Mono for
 * paths/labels/badges, hairlines over boxes, leaf + brass + danger as the
 * only hue accents.
 *
 * Selectors are anchored on the #swagger-ui mount: the id out-specifies every
 * class chain in swagger-ui.css (including its per-method variants), so each
 * override needs stating only once. Code samples ("terminals") keep fixed
 * warm-ink colors in BOTH themes — like .status-pill--wishlist, a deliberate
 * always-dark surface — because Swagger UI syntax-highlights response bodies
 * with inline styles designed for a dark background.
 */

/* ---------------------------------------------------------------------------
 * Root, layout, info block
 * ------------------------------------------------------------------------- */

#swagger-ui {
  color: var(--text);
  font-family: var(--font-body);
}

/* The page already sits in main.container; drop Swagger's own gutters. */
#swagger-ui .wrapper {
  max-width: none;
  padding: 0;
}

/* The schema's own title/version pills duplicate the page-head; the rendered
   markdown description (auth instructions) stays. */
#swagger-ui .information-container hgroup.main {
  display: none;
}

#swagger-ui .info {
  margin: 0 0 0.5rem;
}

#swagger-ui .info li,
#swagger-ui .info p,
#swagger-ui .info table {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.9rem;
  max-width: 44rem;
}

#swagger-ui .info a,
#swagger-ui .markdown a,
#swagger-ui .renderedMarkdown a {
  color: var(--accent-text);
  font-family: var(--font-body);
}

#swagger-ui .info a:hover,
#swagger-ui .markdown a:hover,
#swagger-ui .renderedMarkdown a:hover {
  color: var(--accent-text-strong);
}

/* Swagger gives markdown paragraphs `margin: 1em auto` (which turns the
   max-width above into centering) and `word-break: break-all`; restore normal
   prose flow. */
#swagger-ui .markdown p,
#swagger-ui .renderedMarkdown p {
  margin: 0 0 0.6em;
  word-break: normal;
  overflow-wrap: break-word;
}

/* Inline code in rendered markdown: the site's quiet mono chip, not Swagger's
   purple-on-gray. */
#swagger-ui .markdown code,
#swagger-ui .renderedMarkdown code {
  background: var(--chip);
  border-radius: 3px;
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 0.82em;
  font-weight: 400;
  padding: 0.08em 0.45em;
}

/* Monochrome icons follow their text color (arrows, padlocks, close buttons).
   The id also out-specifies swagger's fixed green authorize-svg fill. */
#swagger-ui svg {
  fill: currentColor;
}

#swagger-ui label {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.8rem;
  font-weight: 500;
}

/* Loading spinner in the accent, caption in the mono label voice. */
#swagger-ui .loading-container .loading::before {
  border-color: var(--border);
  border-top-color: var(--accent-text);
}

#swagger-ui .loading-container .loading::after {
  color: var(--text-muted);
  font-family: var(--font-mono);
}

/* app.css's global element-button styling would inflate Swagger's bare icon
   buttons (expand arrows, clipboard); pin them back to icon dimensions. */
#swagger-ui .expand-operation,
#swagger-ui .expand-methods,
#swagger-ui .authorization__btn,
#swagger-ui .close-modal,
#swagger-ui .copy-to-clipboard button {
  background: transparent;
  border: 0;
  padding: 0;
}

/* ---------------------------------------------------------------------------
 * Authorize bar (scheme container)
 * ------------------------------------------------------------------------- */

/* Stock: a full-bleed white strip with a drop shadow. Here: no box at all —
   the Authorize button simply right-aligns under the intro. */
#swagger-ui .scheme-container {
  background: transparent;
  box-shadow: none;
  margin: 0;
  padding: 0 0 1.25rem;
}

#swagger-ui .scheme-container .schemes .auth-wrapper .authorize {
  padding-right: 0;
}

/* ---------------------------------------------------------------------------
 * Tag sections (catalog / collection / recommendations / account)
 * ------------------------------------------------------------------------- */

#swagger-ui .opblock-tag {
  border-bottom: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-display);
  font-size: 1.4rem;
  font-weight: 500;
  letter-spacing: -0.015em;
  margin: 0.5rem 0 0.85rem;
  padding: 0.5rem 0.25rem 0.5rem 0;
}

#swagger-ui .opblock-tag:hover {
  background: var(--row-hover);
}

#swagger-ui .opblock-tag small {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.85rem;
}

/* ---------------------------------------------------------------------------
 * Operation blocks
 * ------------------------------------------------------------------------- */

/* One neutral card per operation (hairlines over boxes) — the method badge,
   not the whole row, carries the color. */
#swagger-ui .opblock,
#swagger-ui .opblock.is-open {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: none;
  margin: 0 0 0.65rem;
}

#swagger-ui .opblock .opblock-summary {
  border-color: var(--border);
  padding: 0.45rem 0.6rem;
}

#swagger-ui .opblock.is-open .opblock-summary {
  border-bottom: 1px solid var(--border);
}

/* Method badges in the site's status-pill voice (mono caps, 3px radius):
   GET reads quiet, POST is the leaf fill (like OWNED), PATCH/PUT take the
   brass outline, DELETE the danger outline. */
#swagger-ui .opblock .opblock-summary-method {
  background: transparent;
  border: 1px solid var(--border-strong);
  border-radius: 3px;
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-size: 0.66rem;
  font-weight: 500;
  letter-spacing: 0.06em;
  min-width: 68px;
  padding: 0.3rem 0;
  text-shadow: none;
}

#swagger-ui .opblock.opblock-post .opblock-summary-method {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--accent-ink);
  font-weight: 600;
}

#swagger-ui .opblock.opblock-patch .opblock-summary-method,
#swagger-ui .opblock.opblock-put .opblock-summary-method {
  border-color: var(--brass);
  color: var(--brass);
}

#swagger-ui .opblock.opblock-delete .opblock-summary-method {
  border-color: var(--danger);
  color: var(--danger);
}

#swagger-ui .opblock .opblock-summary-path,
#swagger-ui .opblock .opblock-summary-operation-id,
#swagger-ui .opblock .opblock-summary-path__deprecated {
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 0.84rem;
  font-weight: 500;
}

#swagger-ui .opblock .opblock-summary-description {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.8rem;
}

/* "Parameters" / "Responses" bars: a raised hairline band with the header in
   the mono eyebrow voice. */
#swagger-ui .opblock .opblock-section-header {
  background: var(--surface-2);
  border-bottom: 1px solid var(--border);
  border-top: 1px solid var(--border);
  box-shadow: none;
  min-height: 0;
  padding: 0.5rem 1.25rem;
}

#swagger-ui .opblock .opblock-section-header h4 {
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

#swagger-ui .opblock .opblock-section-header > label {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.78rem;
  margin: 0 0 0 auto;
}

#swagger-ui .opblock-description-wrapper,
#swagger-ui .opblock-external-docs-wrapper,
#swagger-ui .opblock-title_normal {
  color: var(--text-muted);
  font-family: var(--font-body);
}

#swagger-ui .opblock-description-wrapper p,
#swagger-ui .opblock-external-docs-wrapper p,
#swagger-ui .opblock-title_normal p {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.88rem;
}

/* Request-body media-type tabs. */
#swagger-ui .tab li {
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-size: 0.72rem;
}

#swagger-ui .tab li:first-of-type::after {
  background: var(--border-strong);
}

#swagger-ui .tab li.active {
  color: var(--text);
}

#swagger-ui .tab-header .tab-item.active h4 span::after {
  background: var(--accent-text);
  height: 2px;
}

/* ---------------------------------------------------------------------------
 * Tables (parameters, responses)
 * ------------------------------------------------------------------------- */

/* Same header voice as the site's tables (thead th in app.css). */
#swagger-ui table thead tr td,
#swagger-ui table thead tr th {
  border-bottom: 1px solid var(--border);
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-size: 0.66rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

/* Data tables here are reference material, not hoverable row links. */
#swagger-ui tbody tr:hover {
  background: transparent;
}

#swagger-ui .parameter__name {
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 0.84rem;
  font-weight: 500;
}

#swagger-ui .parameter__name.required span,
#swagger-ui .parameter__name.required::after {
  color: var(--danger);
}

#swagger-ui .parameter__type,
#swagger-ui .parameter__extension,
#swagger-ui .parameter__in {
  color: var(--text-faint);
  font-family: var(--font-mono);
  font-size: 0.72rem;
}

#swagger-ui .parameter__deprecated {
  color: var(--danger);
  font-family: var(--font-mono);
}

#swagger-ui .response-col_status {
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 0.84rem;
}

#swagger-ui .response-col_links {
  color: var(--text-muted);
  font-family: var(--font-body);
}

#swagger-ui .response-col_status .response-undocumented,
#swagger-ui .response-col_links .response-undocumented {
  color: var(--text-faint);
  font-family: var(--font-mono);
}

#swagger-ui .responses-inner h4,
#swagger-ui .responses-inner h5 {
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

#swagger-ui .response-control-media-type--accept-controller select {
  border-color: var(--border-strong);
}

#swagger-ui .response-control-media-type__accept-message {
  color: var(--success);
  font-size: 0.74rem;
}

/* ---------------------------------------------------------------------------
 * Forms (inputs, selects, textareas)
 * ------------------------------------------------------------------------- */

#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"] {
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  color: var(--text);
  font-family: var(--font-body);
  font-size: 0.9rem;
  margin: 0;
  padding: 0.4rem 0.65rem;
}

#swagger-ui select {
  appearance: none;
  background: var(--surface) var(--select-caret) no-repeat right 0.7rem center;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  box-shadow: none;
  color: var(--text);
  font-family: var(--font-body);
  font-size: 0.85rem;
  font-weight: 400;
  padding: 0.4rem 2rem 0.4rem 0.65rem;
}

#swagger-ui input:focus,
#swagger-ui select:focus,
#swagger-ui textarea:focus {
  border-color: var(--accent-text);
  outline: none;
}

#swagger-ui input.invalid,
#swagger-ui select.invalid,
#swagger-ui textarea.invalid,
#swagger-ui button.invalid {
  background: var(--danger-dim);
  border-color: var(--danger);
}

#swagger-ui input[disabled],
#swagger-ui select[disabled],
#swagger-ui textarea[disabled] {
  background-color: var(--surface-2);
  border-color: var(--border);
  color: var(--text-muted);
}

/* Request-body editor ("try it out"): an editable terminal. */
#swagger-ui textarea {
  background: #16140f;
  border: 1px solid rgba(236, 232, 221, 0.14);
  border-radius: var(--radius-sm);
  color: #ece8dd;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 400;
  margin: 0;
}

#swagger-ui textarea:focus {
  border: 1px solid var(--accent-text);
}

#swagger-ui textarea[disabled] {
  background-color: #16140f;
  color: #a09a8a;
}

/* ---------------------------------------------------------------------------
 * Buttons
 * ------------------------------------------------------------------------- */

/* Base = the site's quiet hairline button. */
#swagger-ui .btn {
  background: transparent;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  box-shadow: none;
  color: var(--text);
  font-family: var(--font-body);
  font-size: 0.8rem;
  font-weight: 500;
  padding: 0.4rem 1rem;
}

#swagger-ui .btn:hover {
  background: var(--fill);
  box-shadow: none;
}

/* Execute = the primary neutral fill (spec 04: text-color fill). */
#swagger-ui .btn.execute {
  background: var(--text);
  border-color: var(--text);
  color: var(--bg);
  font-weight: 600;
}

#swagger-ui .btn.execute:hover {
  background: var(--text);
  opacity: 0.9;
}

/* Authorize = leaf outline (ghost-accent), like the site's quiet leaf actions. */
#swagger-ui .btn.authorize {
  background: transparent;
  border-color: var(--accent-text);
  color: var(--accent-text);
}

#swagger-ui .btn.authorize:hover {
  background: var(--accent-dim);
}

#swagger-ui .btn.authorize svg {
  fill: currentColor;
}

/* Cancel / Clear = danger outline, matching .btn-danger. */
#swagger-ui .btn.cancel {
  border-color: var(--danger);
  color: var(--danger);
}

#swagger-ui .btn.cancel:hover {
  background: var(--danger-dim);
}

#swagger-ui .btn-group {
  padding: 1rem 1.25rem;
}

/* Per-operation padlocks. */
#swagger-ui .authorization__btn {
  color: var(--text-faint);
}

/* ---------------------------------------------------------------------------
 * Code samples (curl, request URL, response bodies)
 * ------------------------------------------------------------------------- */

/* Always-dark warm-ink terminals (see the file header for why). */
#swagger-ui .opblock-body pre.microlight,
#swagger-ui .request-url pre {
  background: #16140f;
  border: 1px solid rgba(236, 232, 221, 0.14);
  border-radius: var(--radius-sm);
  color: #ece8dd;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 400;
  padding: 0.75rem 0.9rem;
}

#swagger-ui textarea.curl {
  background: #16140f;
  color: #ece8dd;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 400;
}

/* Floating copy/download controls over the terminals: fixed ink like the
   blocks they sit on. */
#swagger-ui .copy-to-clipboard,
#swagger-ui .download-contents {
  background: #3a362c;
  border-radius: 3px;
}

#swagger-ui .download-contents {
  color: #ece8dd;
  font-family: var(--font-body);
  font-size: 0.72rem;
  font-weight: 500;
}

#swagger-ui .copy-to-clipboard:active {
  background: #2a261c;
}

/* Response-description prose: swagger boxes it dark; make it plain muted text. */
#swagger-ui .response-col_description__inner div.markdown,
#swagger-ui .response-col_description__inner div.renderedMarkdown {
  background: transparent;
  color: var(--text-muted);
  font-family: var(--font-body);
  font-weight: 400;
  padding: 0;
}

/* ---------------------------------------------------------------------------
 * Schemas section (OpenAPI 3.1 json-schema-2020-12 renderer)
 * ------------------------------------------------------------------------- */

#swagger-ui section.models {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}

#swagger-ui section.models h4 {
  color: var(--text);
  font-family: var(--font-display);
  font-size: 1.15rem;
  font-weight: 500;
}

#swagger-ui section.models h4:hover {
  background: var(--row-hover);
}

#swagger-ui section.models.is-open h4 {
  border-bottom: 1px solid var(--border);
}

#swagger-ui .model-box {
  background: var(--fill);
}

#swagger-ui .model,
#swagger-ui .model-title {
  color: var(--text);
  font-family: var(--font-mono);
}

#swagger-ui .model .property,
#swagger-ui .model .property.primitive {
  color: var(--text-faint);
}

#swagger-ui table.model tr.description,
#swagger-ui .model .external-docs {
  color: var(--text-muted);
}

#swagger-ui table.model tr.property-row .star {
  color: var(--danger);
}

#swagger-ui .prop-type {
  color: var(--accent-text);
}

#swagger-ui .prop-format {
  color: var(--text-faint);
}

#swagger-ui .json-schema-2020-12 {
  background-color: var(--fill);
  border-radius: var(--radius-sm);
}

#swagger-ui .model-box .json-schema-2020-12 {
  background-color: transparent;
}

#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: 1px dashed var(--border);
}

#swagger-ui .json-schema-2020-12__title {
  color: var(--text);
  font-family: var(--font-mono);
}

#swagger-ui .json-schema-2020-12-property .json-schema-2020-12__title {
  color: var(--text);
  font-family: var(--font-mono);
}

#swagger-ui .json-schema-2020-12-property--required > .json-schema-2020-12:first-of-type > .json-schema-2020-12-head .json-schema-2020-12__title::after {
  color: var(--danger);
}

#swagger-ui .json-schema-2020-12-keyword__name--primary,
#swagger-ui .json-schema-2020-12-json-viewer__name--primary,
#swagger-ui .json-schema-2020-12-keyword__value--primary,
#swagger-ui .json-schema-2020-12-json-viewer__value--primary {
  color: var(--text);
}

#swagger-ui .json-schema-2020-12-keyword__name--secondary,
#swagger-ui .json-schema-2020-12-json-viewer__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__value,
#swagger-ui .json-schema-2020-12-json-viewer__value--secondary,
#swagger-ui .json-schema-2020-12-keyword--description {
  color: var(--text-muted);
}

#swagger-ui .json-schema-2020-12-keyword__name--extension,
#swagger-ui .json-schema-2020-12-json-viewer__name--extension,
#swagger-ui .json-schema-2020-12-keyword__value--extension,
#swagger-ui .json-schema-2020-12-json-viewer__value--extension,
#swagger-ui .json-schema-2020-12-expand-deep-button {
  color: var(--text-faint);
}

/* Type names ("string", "integer") in the accent; warnings in danger. */
#swagger-ui .json-schema-2020-12__attribute {
  color: var(--text-muted);
  font-family: var(--font-mono);
}

#swagger-ui .json-schema-2020-12__attribute--primary {
  color: var(--accent-text);
}

#swagger-ui .json-schema-2020-12__attribute--muted {
  color: var(--text-faint);
}

#swagger-ui .json-schema-2020-12__attribute--warning,
#swagger-ui .json-schema-2020-12-keyword__value--warning,
#swagger-ui .json-schema-2020-12-json-viewer__value--warning {
  color: var(--danger);
  border-color: var(--danger-border);
}

/* Constraint badges (maxLength: …, pattern: …): quiet mono chips, not purple. */
#swagger-ui .json-schema-2020-12__constraint,
#swagger-ui .json-schema-2020-12__constraint--string {
  background-color: var(--surface-3);
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-weight: 400;
}

/* The legacy model renderer's chevron is a fixed near-black data-URI; lift it
   in the dark theme (default = dark, so target "not light"). */
html:not([data-theme="light"]) #swagger-ui .model-toggle::after {
  filter: invert(0.85);
}

/* ---------------------------------------------------------------------------
 * Authorize dialog
 * ------------------------------------------------------------------------- */

#swagger-ui .dialog-ux .backdrop-ux {
  background: rgba(0, 0, 0, 0.55);
}

#swagger-ui .dialog-ux .modal-ux {
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius);
  box-shadow: var(--shadow-panel);
}

#swagger-ui .dialog-ux .modal-ux-header {
  border-bottom: 1px solid var(--border);
}

#swagger-ui .dialog-ux .modal-ux-header h3 {
  color: var(--text);
  font-family: var(--font-display);
  font-size: 1.25rem;
  font-weight: 500;
}

#swagger-ui .dialog-ux .modal-ux-content h4,
#swagger-ui .dialog-ux .modal-ux-content h6 {
  color: var(--text);
  font-family: var(--font-body);
}

#swagger-ui .dialog-ux .modal-ux-content p {
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.85rem;
}

#swagger-ui .dialog-ux .modal-ux-content code {
  background: var(--chip);
  color: var(--text);
}

#swagger-ui .close-modal {
  color: var(--text-muted);
}

#swagger-ui .auth-container {
  border-bottom: 1px solid var(--border);
}

#swagger-ui .auth-btn-wrapper {
  gap: 0.6rem;
}

#swagger-ui .auth-container .errors {
  background-color: var(--danger-dim);
  border-radius: var(--radius-sm);
  color: var(--danger);
  font-family: var(--font-mono);
}

/* ---------------------------------------------------------------------------
 * Errors
 * ------------------------------------------------------------------------- */

#swagger-ui .errors-wrapper {
  background: var(--danger-dim);
  border: 1px solid var(--danger-border);
  border-radius: var(--radius);
}

#swagger-ui .errors-wrapper .errors h4 {
  color: var(--text);
  font-family: var(--font-mono);
}

#swagger-ui .errors-wrapper .errors small {
  color: var(--text-muted);
}
