puredocs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +46 -0
- package/README.md +153 -0
- package/dist/index.d.ts +31 -0
- package/dist/puredocs.css +1 -0
- package/dist/puredocs.js +6594 -0
- package/dist/puredocs.js.map +1 -0
- package/dist/puredocs.umd.cjs +37 -0
- package/dist/puredocs.umd.cjs.map +1 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
PureDocs Non-Commercial License v1.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 esurkov1
|
|
4
|
+
|
|
5
|
+
1. Grant of Rights
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
of this software and associated documentation files (the "Software"), to use,
|
|
9
|
+
copy, modify, and distribute the Software for non-commercial purposes only,
|
|
10
|
+
subject to the conditions below.
|
|
11
|
+
|
|
12
|
+
2. Conditions
|
|
13
|
+
|
|
14
|
+
- The above copyright notice and this license text must be included in all
|
|
15
|
+
copies or substantial portions of the Software.
|
|
16
|
+
- Any modified version must clearly indicate that changes were made.
|
|
17
|
+
- Distribution of modified versions must remain under this license.
|
|
18
|
+
|
|
19
|
+
3. Commercial Use
|
|
20
|
+
|
|
21
|
+
Commercial use is not permitted under this license.
|
|
22
|
+
|
|
23
|
+
"Commercial use" means use of the Software in exchange for money, to provide a
|
|
24
|
+
paid service, as part of a paid product, or in any activity primarily intended
|
|
25
|
+
for commercial advantage or monetary compensation.
|
|
26
|
+
|
|
27
|
+
For commercial licensing terms, contact the author:
|
|
28
|
+
https://github.com/esurkov1
|
|
29
|
+
|
|
30
|
+
4. Trademark
|
|
31
|
+
|
|
32
|
+
This license does not grant permission to use the project name, brand, or logo
|
|
33
|
+
except as necessary for fair attribution.
|
|
34
|
+
|
|
35
|
+
5. Warranty Disclaimer
|
|
36
|
+
|
|
37
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
38
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
39
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
|
|
40
|
+
|
|
41
|
+
6. Limitation of Liability
|
|
42
|
+
|
|
43
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
44
|
+
DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR
|
|
45
|
+
OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
|
46
|
+
OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# PureDocs
|
|
2
|
+
|
|
3
|
+
`PureDocs` is a UI portal for OpenAPI that makes API documentation visually clean, fast, and convenient for developers' daily work.
|
|
4
|
+
|
|
5
|
+
PureDocs transforms an OpenAPI specification into a full-featured interactive portal:
|
|
6
|
+
|
|
7
|
+
- API overview with groups, schemas, and webhooks
|
|
8
|
+
- Convenient navigation through routes
|
|
9
|
+
- Built-in `Try It` console for sending requests directly from documentation
|
|
10
|
+
- Automatic code snippet generation (`cURL`, `JavaScript`, `Python`, `Go`)
|
|
11
|
+
- Search across endpoints/tags/schemas/webhooks (`Cmd/Ctrl + K`)
|
|
12
|
+
- Support for auth schemes (Bearer, Basic, API Key, OAuth2/OpenID Connect)
|
|
13
|
+
- Support for JSON and YAML specifications
|
|
14
|
+
|
|
15
|
+
## Key Advantages
|
|
16
|
+
|
|
17
|
+
- Minimal integration: one `<pure-docs>` tag and the documentation is ready
|
|
18
|
+
- Framework-agnostic: works as a Web Component, suitable for React/Vue/vanilla
|
|
19
|
+
- Designed for real development: environments, authorization, live requests, copying ready-to-use URLs/examples
|
|
20
|
+
- Support for complex API structures: callbacks, webhooks, schemas, security requirements
|
|
21
|
+
- Quick customization of appearance: theme, accent color, and portal title
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
### 1. Installation
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install puredocs
|
|
29
|
+
# or
|
|
30
|
+
bun add puredocs
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Integration (ESM)
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<pure-docs spec-url="/openapi.json" theme="auto"></pure-docs>
|
|
37
|
+
|
|
38
|
+
<script type="module">
|
|
39
|
+
import 'puredocs';
|
|
40
|
+
import 'puredocs/style.css';
|
|
41
|
+
</script>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 3. Done
|
|
45
|
+
|
|
46
|
+
If `spec-url` points to a valid OpenAPI (JSON/YAML), the portal will render automatically.
|
|
47
|
+
|
|
48
|
+
## Integration into Project
|
|
49
|
+
|
|
50
|
+
### HTML + script (UMD)
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<link rel="stylesheet" href="/assets/puredocs.css" />
|
|
54
|
+
<pure-docs spec-url="/openapi.yaml"></pure-docs>
|
|
55
|
+
<script src="/assets/puredocs.umd.cjs"></script>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### React
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import 'puredocs';
|
|
62
|
+
import 'puredocs/style.css';
|
|
63
|
+
|
|
64
|
+
export function ApiDocsPage() {
|
|
65
|
+
return <pure-docs spec-url="/openapi.json" theme="auto" />;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Vue
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<template>
|
|
73
|
+
<pure-docs spec-url="/openapi.json" theme="auto" />
|
|
74
|
+
</template>
|
|
75
|
+
|
|
76
|
+
<script setup lang="ts">
|
|
77
|
+
import 'puredocs';
|
|
78
|
+
import 'puredocs/style.css';
|
|
79
|
+
</script>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Programmatic Integration (JS API)
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import PureDocs from 'puredocs';
|
|
86
|
+
import 'puredocs/style.css';
|
|
87
|
+
|
|
88
|
+
PureDocs.mount({
|
|
89
|
+
mount: '#docs',
|
|
90
|
+
specUrl: '/openapi.yaml',
|
|
91
|
+
theme: 'auto',
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Configuration via Attributes
|
|
96
|
+
|
|
97
|
+
Element: `pure-docs`
|
|
98
|
+
|
|
99
|
+
- `spec-url`: OpenAPI file URL
|
|
100
|
+
- `spec-json`: embedded JSON spec (JSON string)
|
|
101
|
+
- `default-environment`: default environment
|
|
102
|
+
- `environments-array`: JSON array of URLs for environments
|
|
103
|
+
- `base-path`: router base path
|
|
104
|
+
- `theme`: `light` | `dark` | `auto`
|
|
105
|
+
- `primary-color`: accent color
|
|
106
|
+
- `title`: navigation title
|
|
107
|
+
|
|
108
|
+
Example:
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<pure-docs
|
|
112
|
+
spec-url="/openapi.json"
|
|
113
|
+
environments-array='["https://api.dev.example.com","https://api.example.com"]'
|
|
114
|
+
default-environment="api.dev.example.com"
|
|
115
|
+
theme="auto"
|
|
116
|
+
primary-color="#0ea5e9"
|
|
117
|
+
title="Example API"
|
|
118
|
+
></pure-docs>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Element Runtime API
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
const docs = document.querySelector('pure-docs');
|
|
125
|
+
|
|
126
|
+
docs.reload();
|
|
127
|
+
docs.getState();
|
|
128
|
+
docs.subscribe((state) => console.log(state));
|
|
129
|
+
docs.navigate('/operations/auth/post/auth%2Flogin');
|
|
130
|
+
docs.setToken('token');
|
|
131
|
+
docs.setEnvironment('api.example.com');
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Development
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
bun run dev
|
|
138
|
+
bun run typecheck
|
|
139
|
+
bun run build
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Important to Know
|
|
143
|
+
|
|
144
|
+
- Only one `<pure-docs>` can be mounted at a time
|
|
145
|
+
- Environment and authorization state is saved in `localStorage`
|
|
146
|
+
- Routing is based on the `history` API
|
|
147
|
+
|
|
148
|
+
## License
|
|
149
|
+
|
|
150
|
+
See the [`LICENSE`](./LICENSE) file.
|
|
151
|
+
PureDocs is free for non-commercial use.
|
|
152
|
+
|
|
153
|
+
Developed by [esurkov1](https://github.com/esurkov1).
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import './styles/index.css';
|
|
2
|
+
import type { PortalConfig, PortalApi, PortalState } from './core/types';
|
|
3
|
+
/** Mount the portal into the DOM */
|
|
4
|
+
declare function mount(config: PortalConfig): Promise<PortalApi>;
|
|
5
|
+
/** Unmount portal and cleanup */
|
|
6
|
+
declare function unmount(): void;
|
|
7
|
+
export declare class PureDocsElement extends HTMLElement {
|
|
8
|
+
private static activeElement;
|
|
9
|
+
private api;
|
|
10
|
+
private reloadTimer;
|
|
11
|
+
static get observedAttributes(): string[];
|
|
12
|
+
connectedCallback(): Promise<void>;
|
|
13
|
+
disconnectedCallback(): void;
|
|
14
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
15
|
+
reload(): Promise<void>;
|
|
16
|
+
getState(): PortalState | null;
|
|
17
|
+
subscribe(fn: (state: PortalState) => void): () => void;
|
|
18
|
+
navigate(path: string): void;
|
|
19
|
+
setToken(token: string): void;
|
|
20
|
+
setEnvironment(name: string): void;
|
|
21
|
+
private mountFromAttributes;
|
|
22
|
+
private parseConfig;
|
|
23
|
+
private renderSingletonError;
|
|
24
|
+
}
|
|
25
|
+
export declare const PureDocs: {
|
|
26
|
+
mount: typeof mount;
|
|
27
|
+
unmount: typeof unmount;
|
|
28
|
+
version: string;
|
|
29
|
+
};
|
|
30
|
+
export type { PortalConfig, PortalApi, PortalState } from './core/types';
|
|
31
|
+
export default PureDocs;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap";:root,.root{--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--space-3xl: 64px;--page-x: var(--space-xl);--page-y: var(--space-xl);--page-bottom: 80px;--radius-sm: 6px;--radius: 8px;--radius-lg: 10px;--radius-xl: 12px;--transition: .2s ease;--leading-relaxed: 1.625;--leading-normal: 1.4;--method-fixed-width: 56px;--text-xs: 10px;--text-sm: 12px;--text-md: 14px;--text-lg: 16px;--text-xl: 18px;--text-2xl: 22px;--text-3xl: 28px}:root,.root,.root.light{--surface-base-color: #FAFBFC;--surface-raised-color: #FFFFFF;--surface-hover-color: #F3F4F6;--surface-active-color: #EBF0FF;--border-base-color: #E5E7EB;--border-strong-base-color: #D1D5DB;--text-primary-color: #1F2937;--text-muted-color: #6B7280;--text-subtle-color: #9CA3AF;--text-on-solid-color: #FFFFFF;--shadow-sm: 0 1px 2px rgba(0,0,0,.05);--shadow-md: 0 4px 12px rgba(0,0,0,.08);--shadow-lg: 0 12px 40px rgba(0,0,0,.12);--overlay-color: rgba(0,0,0,.4);--scrollbar-thumb-color: #D1D5DB;--scrollbar-track-color: transparent;--surface-elevated-color: var(--surface-raised-color);--surface-code-color: color-mix(in srgb, var(--surface-base-color) 70%, var(--surface-raised-color));--surface-inline-code-color: color-mix(in srgb, var(--surface-hover-color) 65%, var(--surface-raised-color));--primary-color: #2563EB;--primary-hover-color: color-mix(in srgb, var(--primary-color) 90%, #000000);--primary-light-color: color-mix(in srgb, var(--primary-color) 10%, transparent);--font-family-base: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-family-mono: "JetBrains Mono", "Fira Code", "SF Mono", Menlo, monospace;--color-green: #22c55e;--color-blue: #3b82f6;--color-orange: #f59e0b;--color-purple: #8b5cf6;--color-red: #ef4444}.root.dark{--surface-base-color: #0F1117;--surface-raised-color: #161B22;--surface-hover-color: #21262D;--surface-active-color: #1A2233;--border-base-color: #30363D;--border-strong-base-color: #484F58;--text-primary-color: #E6EDF3;--text-muted-color: #8B949E;--text-subtle-color: #6E7681;--text-on-solid-color: #0D1117;--shadow-sm: 0 1px 2px rgba(0,0,0,.3);--shadow-md: 0 4px 12px rgba(0,0,0,.4);--shadow-lg: 0 12px 40px rgba(0,0,0,.5);--overlay-color: rgba(0,0,0,.6);--scrollbar-thumb-color: #484F58;--scrollbar-track-color: transparent;--surface-elevated-color: color-mix(in srgb, var(--surface-raised-color) 65%, var(--surface-hover-color));--surface-code-color: var(--surface-raised-color);--surface-inline-code-color: color-mix(in srgb, var(--surface-hover-color) 70%, var(--surface-raised-color));--primary-hover-color: color-mix(in srgb, var(--primary-color) 88%, #FFFFFF);--primary-light-color: color-mix(in srgb, var(--primary-color) 15%, transparent)}.u-text-primary{color:var(--text-primary-color)}.u-text-muted{color:var(--text-muted-color)}.u-text-subtle{color:var(--text-subtle-color)}.u-text-on-solid{color:var(--text-on-solid-color)}.u-text-accent{color:var(--primary-color)}.u-bg-surface-base{background:var(--surface-base-color)}.u-bg-surface-raised{background:var(--surface-raised-color)}.u-bg-surface-hover{background:var(--surface-hover-color)}.u-bg-surface-active{background:var(--surface-active-color)}.u-bg-surface-elevated{background:var(--surface-elevated-color)}.u-bg-surface-code{background:var(--surface-code-color)}.u-bg-surface-inline-code{background:var(--surface-inline-code-color)}.u-bg-accent-soft{background:var(--primary-light-color)}.u-bg-accent-hover{background:var(--primary-hover-color)}.u-bg-transparent{background:transparent}.u-border-base{border-color:var(--border-base-color)}.u-border-strong{border-color:var(--border-strong-base-color)}.u-text-green{color:var(--color-green)}.u-bg-green-soft{background:color-mix(in srgb,var(--color-green) 16%,transparent)}.u-text-blue{color:var(--color-blue)}.u-bg-blue-soft{background:color-mix(in srgb,var(--color-blue) 16%,transparent)}.u-text-orange{color:var(--color-orange)}.u-bg-orange-soft{background:color-mix(in srgb,var(--color-orange) 16%,transparent)}.u-text-purple{color:var(--color-purple)}.u-bg-purple-soft{background:color-mix(in srgb,var(--color-purple) 16%,transparent)}.u-text-red{color:var(--color-red)}.u-bg-red-soft{background:color-mix(in srgb,var(--color-red) 16%,transparent)}.root *,.root *:before,.root *:after{box-sizing:border-box;margin:0;padding:0}.root button{border:none;cursor:pointer;appearance:none}@media(prefers-reduced-motion:reduce){.root *,.root *:before,.root *:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}pure-docs{height:100dvh;display:block;overflow:hidden}.root{all:initial;display:flex;flex-direction:row;height:100%;width:100%;min-height:0;position:relative;overflow:hidden;font-family:var(--font-family-base);font-size:var(--text-md);line-height:var(--leading-relaxed);color:var(--text-primary-color);background:var(--surface-base-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}.root ::-webkit-scrollbar{width:6px;height:6px}.root ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.root ::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color);border-radius:3px}.root ::-webkit-scrollbar-thumb:hover{background:var(--text-subtle-color)}.page>.main,.page>.aside,.sidebar .nav{-ms-overflow-style:none;scrollbar-width:none}.page>.main::-webkit-scrollbar,.page>.aside::-webkit-scrollbar,.sidebar .nav::-webkit-scrollbar{display:none;width:0;height:0}:is(h1,h2,h3,h4,p,small){margin:0}h1{font-size:var(--text-2xl);font-weight:600;color:var(--text-primary-color);line-height:var(--leading-normal)}h2,h3{font-size:var(--text-sm);font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted-color);line-height:1.35}h4{font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.35px;color:var(--text-subtle-color);line-height:1.3}p{color:var(--text-muted-color);font-size:13px;line-height:1.5}small{font-size:11px;font-weight:500;color:var(--text-subtle-color);line-height:1.2}.section-head{display:flex;align-items:center;gap:var(--space-sm)}input,textarea,select{width:100%;height:36px;background:var(--surface-base-color);border:1px solid var(--border-base-color);border-radius:var(--radius);color:var(--text-primary-color);font-size:var(--text-md);padding:var(--space-sm);text-indent:var(--space-sm);outline:none}input:focus,textarea:focus,select:focus{border-color:var(--primary-color);color:var(--text-primary-color)}input:hover,textarea:hover,select:hover{border-color:var(--border-strong-base-color);color:var(--text-primary-color)}input:not([type=file]):read-only,textarea:read-only,select:read-only{background:var(--surface-code-color);color:var(--text-muted-color)}input::placeholder,textarea::placeholder,select::placeholder{color:var(--text-muted-color)}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;-moz-appearance:textfield}input[type=file]{padding-top:var(--space-sm);color:var(--text-muted-color)}input[type=file]::file-selector-button{display:none}textarea{min-height:60px;resize:vertical}select{appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:32px;background:var(--surface-base-color) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%234B5563' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right var(--space-sm) center!important;background-size:16px}.dark select{background:var(--surface-base-color) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%238B949E' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right var(--space-sm) center!important}input.invalid,textarea.invalid,select.invalid{border-color:var(--color-red);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-red) 16%,transparent)}.sidebar .search-input{padding:0 30px}:where(.badge){display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-family-mono);line-height:1.2;font-weight:600;font-variant-numeric:tabular-nums;border-radius:var(--radius-sm);flex-shrink:0;white-space:nowrap;color:var(--text-muted-color);background:var(--surface-hover-color);text-transform:uppercase}.badge.s{font-size:var(--text-xs);padding:var(--space-xs) var(--space-sm)}.badge.m{font-size:var(--text-sm);padding:var(--space-xs) var(--space-sm)}.badge.l{font-size:var(--text-md);padding:var(--space-xs) var(--space-sm)}.badge.placeholder{visibility:hidden;pointer-events:none}.badge.interactive{cursor:pointer;border:none;transition:background .12s,color .12s,opacity .12s}.badge.interactive:not([data-badge-group=response-code]):hover{background:var(--surface-hover-color);color:var(--text-primary-color)}.badge.interactive.is-active:not([data-badge-group=response-code]){background:var(--primary-light-color);color:var(--primary-color)}.badge.interactive[data-badge-context=true]{background:var(--surface-hover-color)}.badge.interactive[data-badge-context=true].is-active{background:color-mix(in srgb,var(--primary-color) 12%,transparent);color:var(--primary-color)}.badge.interactive[data-badge-group=response-code]:not(.is-active){background:transparent;opacity:.95}.badge.interactive[data-badge-group=response-code]:hover:not(.is-active){background:transparent;opacity:1}.badge.interactive:focus-visible{box-shadow:0 0 0 3px var(--primary-light-color);outline:none}.nav-item>.badge:first-child{min-width:var(--method-fixed-width);width:var(--method-fixed-width)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-xs);flex-shrink:0;white-space:nowrap;height:36px;padding:0 var(--space-md);border-radius:var(--radius);font-family:var(--font-family-base);font-size:var(--text-sm);font-weight:500;background:transparent;color:var(--text-primary-color);cursor:pointer;outline:none;transition:background .15s,color .15s,box-shadow .15s,border-color .15s,opacity .15s}.btn .btn-icon-slot{display:inline-flex;align-items:center}.btn svg{width:16px;height:16px;flex-shrink:0}.btn.s{height:32px;padding:0 var(--space-sm)}.btn.m{height:36px;padding:0 var(--space-md)}.btn.l{height:40px;padding:0 var(--space-md);border-radius:var(--radius-lg)}.btn.icon.m{width:36px;min-width:36px;min-height:36px}.btn.icon.l{width:40px;min-width:40px;min-height:40px}.btn.l svg,.btn.icon.m svg{width:18px;height:18px}.btn:hover:not(:disabled){background:var(--surface-hover-color);color:var(--text-primary-color)}.btn:active:not(:disabled){background:var(--surface-active-color);color:var(--text-primary-color)}.btn:focus-visible{box-shadow:0 0 0 3px var(--primary-light-color);outline:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--primary-color);color:var(--text-on-solid-color)}.btn.primary:hover:not(:disabled){background:var(--primary-hover-color);color:var(--text-on-solid-color)}.btn.primary:active:not(:disabled){background:color-mix(in srgb,var(--primary-color) 84%,var(--surface-base-color));color:var(--text-on-solid-color)}.btn.secondary{background:var(--surface-hover-color)}.btn.secondary:hover:not(:disabled){background:var(--border-base-color)}.btn.secondary:active:not(:disabled){background:var(--surface-active-color)}.btn.icon{padding:0;width:32px;min-width:32px;min-height:32px}.btn.soft{background:color-mix(in srgb,var(--text-subtle-color) 8%,transparent)}.btn.soft:hover:not(:disabled){background:var(--surface-hover-color)}.btn.soft:active:not(:disabled){background:color-mix(in srgb,var(--text-subtle-color) 14%,transparent)}.btn.active{color:var(--color-green);background:color-mix(in srgb,var(--color-green) 12%,transparent)}.btn.active:hover:not(:disabled){color:var(--color-green);background:color-mix(in srgb,var(--color-green) 16%,transparent)}.btn.active:active:not(:disabled){color:var(--color-green);background:color-mix(in srgb,var(--color-green) 22%,transparent)}.breadcrumb{display:flex;align-items:center;gap:var(--space-md);font-size:var(--text-md);min-width:0;flex:1}.breadcrumb-main{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;min-width:0;flex:1}.page .main .breadcrumb-main{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.page .main .breadcrumb-main::-webkit-scrollbar{display:none}.page .main .breadcrumb-main>*{flex-shrink:0}.breadcrumb-trailing{display:flex;align-items:flex-start;align-self:flex-start;margin-inline-start:auto;flex-shrink:0}.breadcrumb-wrap{margin:0;min-height:26px;display:flex;align-items:center}.breadcrumb-item{font-family:var(--font-family-mono);color:var(--text-muted-color);cursor:pointer;transition:color .12s;text-decoration:none}.breadcrumb-item:hover{color:var(--primary-color)}.breadcrumb-sep{color:var(--text-subtle-color);font-size:14px}.breadcrumb-segment{font-family:var(--font-family-mono);color:var(--text-primary-color)}.breadcrumb-param{font-family:var(--font-family-mono);color:var(--primary-color)}.breadcrumb-copy{flex-shrink:0;width:26px;height:26px;padding:0;min-width:26px}.breadcrumb-copy svg{width:14px;height:14px}.breadcrumb-current{font-family:var(--font-family-mono);color:var(--text-primary-color);font-weight:500}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.grid{display:grid}.items-center{align-items:center}.justify-between{justify-content:space-between}.grow{flex:1}.shrink-0{flex-shrink:0}.min-w-0{min-width:0}.min-h-0{min-height:0}.ml-auto{margin-inline-start:auto}.w-full{width:100%}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row{display:flex;align-items:center;gap:var(--space-sm)}.row-md{display:flex;align-items:center;gap:var(--space-md)}.row-wrap{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:var(--space-sm)}.col-md{display:flex;flex-direction:column;gap:var(--space-md)}.hover-surface:hover{background:var(--surface-hover-color);border-color:var(--border-strong-base-color)}.focus-ring:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-light-color)}.nav-item-lock,.search-result-lock,.tag-op-lock{display:inline-flex;align-items:center;flex-shrink:0;margin-left:auto}.nav-item-lock svg,.search-result-lock svg,.tag-op-lock svg{width:12px;height:12px}.nav-item-lock--required,.search-result-lock--required,.tag-op-lock--required{color:var(--color-red);opacity:.9}.nav-item-lock--configured,.search-result-lock--configured,.tag-op-lock--configured{color:var(--color-green);opacity:.9}.page{--aside-width: clamp(340px, 36vw, 510px);flex:1 1 0;min-width:0;min-height:0;display:flex;flex-direction:column;gap:var(--page-x);padding:0 var(--page-x);box-sizing:border-box;overflow:visible}.page>.main{flex:1 1 auto;min-width:0;min-height:0;overflow-y:auto}.page>.aside{min-width:0;min-height:0;overflow-y:auto}.page>.main>.content,.page>.aside>.content{width:100%;max-width:1024px;margin:0;padding:var(--page-y) 0;display:flex;flex-direction:column;gap:var(--space-xl)}.page>.aside[hidden]{display:none!important}.card{border:1px solid var(--border-base-color);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface-raised-color)}.card.simple{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius);background:var(--surface-code-color)}.card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);min-height:44px;padding:var(--space-md);border-bottom:1px solid var(--border-base-color);background:var(--surface-raised-color)}.card-row{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;flex:1;min-width:0}.card-row>.badge{font-size:var(--text-sm);padding:var(--space-xs) var(--space-sm)}.card-row>.badge:first-of-type{margin-inline-start:auto}.card-content{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);background:var(--surface-raised-color)}.card-content.code{display:block;gap:0;padding:0;background:var(--surface-code-color)}.card-content.flush{gap:0;padding:0}.card-group{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-md)}.card-info{display:flex;flex-direction:column;gap:var(--space-xs);flex:1;min-width:0}.card-info>h3{font-size:13px;font-weight:600;line-height:1.35;color:var(--text-primary-color);text-transform:none}.card-info>h3 code{font-family:var(--font-family-mono);font-size:inherit;color:inherit;word-break:break-all}.card-info .inline-cluster code{font-family:var(--font-family-mono);font-size:var(--text-sm);color:var(--primary-color);word-break:break-all}.card-badges{display:flex;gap:var(--space-xs);flex-wrap:wrap;flex-shrink:0}.card-auth-main{display:flex;align-items:flex-start;gap:var(--space-sm);min-width:0;flex:1}.card-auth-info{flex:1}.card-auth-type{font-family:var(--font-family-mono);font-size:11px;line-height:1.35;color:var(--text-subtle-color)}.card-auth-desc{font-size:12px;line-height:1.35;color:var(--text-subtle-color)}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--space-lg);margin-top:0}.stat{display:flex;flex-direction:column;gap:var(--space-xs)}.stat-value{font-size:var(--text-3xl);font-weight:700;line-height:1.2;color:var(--text-primary-color)}.stat-label{font-size:var(--text-sm);color:var(--text-muted-color)}.icon-muted{display:flex;flex-shrink:0;color:var(--text-subtle-color)}.icon-muted svg{width:16px;height:16px}.card-auth-config{display:inline-flex;align-items:center;gap:var(--space-xs);height:30px;padding:0 var(--space-sm);margin-inline-start:auto;flex-shrink:0;font-size:var(--text-sm);font-weight:500}.card-auth-config svg{width:14px;height:14px}.card.interactive{cursor:pointer;transition:background-color .14s ease,border-color .14s ease,box-shadow .14s ease,transform .14s ease}.card.interactive:hover{background:var(--surface-hover-color);border-color:var(--border-strong-base-color)}.card.interactive:active{transform:translateY(1px)}.card.interactive:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-light-color)}.card.active{border-color:var(--primary-color)!important;box-shadow:0 0 0 2px color-mix(in srgb,var(--primary-color) 15%,transparent)}.card.card-auth{align-items:center}.card-group.deprecated .card-info>h3,.card-group.deprecated .card-info>p{color:var(--text-subtle-color);text-decoration:line-through}.card-auth-config.is-configured{--btn-border-color: color-mix(in srgb, var(--color-green) 44%, var(--border-base-color));--btn-hover-border-color: color-mix(in srgb, var(--color-green) 60%, var(--border-base-color))}.sidebar{--sidebar-padding: var(--space-md);--sidebar-gap: var(--space-md);--sidebar-row-x: var(--space-sm);--sidebar-row-y: var(--space-sm);--sidebar-row-min-h: 38px;flex-shrink:0;width:clamp(240px,22vw,300px);min-width:clamp(240px,22vw,300px);display:flex;flex-direction:column;gap:var(--sidebar-gap);padding:var(--sidebar-padding);background:var(--surface-base-color);overflow:hidden;transition:width .2s ease,min-width .2s ease,opacity .2s ease,transform .2s ease}.sidebar.collapsed{width:0;min-width:0;opacity:0;pointer-events:none}.sidebar-expand-trigger{position:absolute;left:0;top:12px;z-index:60;width:40px;height:40px;padding:0;display:none;align-items:center;justify-content:center;border:none;border-radius:0 8px 8px 0;background:var(--surface-base-color);color:var(--text-subtle-color);cursor:pointer;box-shadow:var(--shadow-sm);transition:background .15s,color .15s}.sidebar-expand-trigger.visible{display:flex}.sidebar-expand-trigger:hover{background:var(--surface-hover-color);color:var(--text-primary-color)}.sidebar-expand-trigger svg{width:20px;height:20px}.sidebar .top{display:flex;align-items:center;gap:var(--space-sm)}.sidebar .title-wrap{display:flex;align-items:center;gap:var(--space-sm);min-width:0;flex:1}.sidebar .title{font-weight:600;font-size:var(--text-md);color:var(--text-primary-color);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar .title:hover{color:var(--primary-color)}.sidebar .version{font-size:11px;font-weight:500;color:var(--text-subtle-color);flex-shrink:0}.sidebar .env{flex-shrink:0}.sidebar .search{position:relative;display:flex;align-items:center;min-height:36px;flex-shrink:0}.sidebar .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;color:var(--text-subtle-color);pointer-events:none}.sidebar .search-icon svg{width:16px;height:16px;flex-shrink:0}.sidebar .kbd{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.sidebar .nav{flex:1;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;gap:var(--space-sm);padding-inline:0;scrollbar-width:none;-ms-overflow-style:none}.sidebar .nav::-webkit-scrollbar{display:none}.sidebar .footer{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0;margin:0 calc(-1 * var(--sidebar-padding));padding:var(--space-md) var(--sidebar-padding) 0;border-top:1px solid var(--border-base-color)}.sidebar .credit{font-size:11px;font-weight:500;color:var(--text-subtle-color);text-decoration:none;white-space:nowrap;transition:color .15s}.sidebar .credit:hover{color:var(--primary-color)}.sidebar .footer .theme{margin-left:auto}.nav-group{display:flex;flex-direction:column;gap:0}.nav-group-header{display:flex;align-items:center;gap:var(--space-xs);min-height:var(--sidebar-row-min-h);padding:0;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-subtle-color);border-radius:var(--radius);cursor:pointer;transition:background .15s,color .15s}.nav-group-header:hover{background:var(--surface-hover-color);color:var(--text-muted-color)}.nav-group-chevron{width:20px;height:20px;padding:0;display:flex;align-items:center;justify-content:center;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-subtle-color);cursor:pointer;flex-shrink:0;margin-inline-start:var(--sidebar-row-x);transition:background .15s,color .15s}.nav-group-chevron:hover{background:var(--surface-hover-color);color:var(--text-muted-color)}.nav-group-chevron svg{width:14px;height:14px;transition:transform .15s ease}.nav-group-header.expanded .nav-group-chevron svg{transform:rotate(90deg)}.nav-group-link{display:flex;align-items:center;gap:var(--space-sm);flex:1;min-width:0;text-decoration:none;color:inherit;padding:var(--sidebar-row-y) var(--sidebar-row-x) var(--sidebar-row-y) var(--space-xs);margin:0;border-radius:var(--radius);transition:color .15s}.nav-group-link:hover{color:var(--text-primary-color)}.nav-group-link--static{cursor:default}.nav-group-link--static:hover{color:inherit}.nav-group-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-group-count{margin-inline-start:auto;font-size:11px;color:var(--text-subtle-color);font-weight:500;flex-shrink:0}.nav-group-items{overflow:hidden;transition:max-height .2s ease;max-height:2000px;display:flex;flex-direction:column;gap:2px}.nav-group-items.collapsed{max-height:0!important}.nav-item{display:flex;align-items:center;gap:var(--space-sm);min-height:var(--sidebar-row-min-h);padding:var(--sidebar-row-y) var(--sidebar-row-x);cursor:pointer;text-decoration:none;color:var(--text-primary-color);font-size:var(--text-sm);transition:background var(--transition),color var(--transition);line-height:var(--leading-normal);border-radius:var(--radius);margin:0;min-width:0}.nav-item-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-item:hover{background:var(--surface-hover-color);color:var(--text-primary-color)}.nav-item.active{background:var(--primary-light-color);color:var(--primary-color);font-weight:500}.nav-item.deprecated{opacity:.5}.nav-item-overview{font-weight:600;padding-inline-start:var(--sidebar-row-x);margin-bottom:0;text-align:left}.nav-item-overview .nav-overview-icon-slot{display:flex;align-items:center;flex-shrink:0;color:var(--primary-color)}.nav-item-overview .nav-overview-icon-slot svg{width:16px;height:16px}.nav-item-overview.active .nav-overview-icon-slot{color:var(--primary-color)}.nav-item-overview .nav-item-label{text-align:left}.route-nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);margin-top:var(--space-xl);padding-top:var(--space-xl);border-top:1px solid var(--border-base-color)}.route-card{display:grid;align-items:stretch;column-gap:var(--space-sm);padding:var(--space-md);text-decoration:none;color:inherit;transition:transform .14s ease}.route-main{display:flex;flex-direction:column;justify-content:center;gap:var(--space-xs);min-width:0}.route-category{font-size:var(--text-xs);line-height:1.2;color:var(--text-subtle-color);text-transform:uppercase;letter-spacing:.45px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-title{color:var(--text-primary-color);font-size:var(--text-md);font-weight:500;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-meta{display:flex;align-items:center;gap:var(--space-xs);min-width:0;flex-wrap:nowrap;overflow:hidden}.route-path{font-family:var(--font-family-mono);color:var(--text-muted-color);font-size:11px;min-width:0;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-side{color:var(--text-subtle-color);display:flex;align-self:stretch;align-items:center;justify-content:center}.route-side svg{width:14px;height:14px;display:block}.route-card.is-prev{grid-template-columns:24px minmax(0,1fr)}.route-card.is-next{grid-template-columns:minmax(0,1fr) 24px}@media(max-width:860px){.route-nav{grid-template-columns:minmax(0,1fr)}.route-card{min-height:78px;padding:var(--space-sm) var(--space-md)}.route-title{font-size:13px}}.route-card:hover{transform:translateY(-1px)}.route-card:active{transform:translateY(0)}.route-nav.is-single{grid-template-columns:minmax(0,1fr)}.content .block{display:flex;flex-direction:column;gap:var(--space-md)}.content .block.header{padding-bottom:var(--space-lg);border-bottom:1px solid var(--border-base-color)}.content .block.header>p,.content .block.section>p{max-width:720px;font-size:var(--text-md);line-height:var(--leading-relaxed)}.content .title{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.content .version{align-self:flex-end;font-size:11px;font-weight:500;color:var(--text-subtle-color)}.content .summary{gap:0}.content .summary-line{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--space-xs);width:100%;overflow-x:auto;padding-bottom:2px}.content .endpoint-meta{display:inline-flex;align-items:center;gap:var(--space-sm);font-size:12px;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.content .endpoint-meta-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;flex-shrink:0}.content .endpoint-meta-icon svg{width:14px;height:14px;display:block}.content .endpoint-meta.auth.is-active{color:var(--color-green);background:color-mix(in srgb,var(--color-green) 8%,transparent)}.content .endpoint-meta.auth{font-weight:500;color:var(--text-muted-color)}.content .endpoint-meta.deprecated{font-weight:600;color:var(--color-orange);background:color-mix(in srgb,var(--color-orange) 12%,transparent)}.kbd{font-size:10px;font-family:var(--font-family-base);padding:var(--space-xs) var(--space-sm);border:1px solid var(--border-base-color);border-radius:4px;color:var(--text-subtle-color);background:var(--surface-hover-color)}.sidebar .kbd,.search-footer .kbd{border:none}.params .body{background:var(--surface-raised-color)}.params.row{display:flex;gap:var(--space-sm);align-items:center}.params .label{min-width:120px;font-family:var(--font-family-mono);font-size:var(--text-sm);color:var(--text-primary-color)}.params.wrap{border-bottom:1px solid var(--border-base-color)}.params.wrap[hidden]{display:none}.params.block .title{padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border-base-color);font-size:var(--text-sm);font-weight:600;color:var(--text-muted-color)}.params.empty{padding:var(--space-sm) 0;font-size:13px;color:var(--text-subtle-color)}.params.row.is-required .label{font-weight:600}.schema .body{--schema-indent-size: clamp(7px, 1.05%, 11px);--schema-toggle-size: 14px;--schema-left-gap: var(--space-sm);padding:0;font-size:13px}.schema-row{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md);border-bottom:1px solid var(--border-base-color);transition:background-color .12s ease;--schema-depth: 0}.schema-row:last-child{border-bottom:none}.schema-main-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);min-height:20px}.schema-name-wrapper{display:flex;align-items:center;gap:var(--schema-left-gap);min-width:0;flex:1;padding-left:calc(var(--schema-depth) * var(--schema-indent-size))}.schema-row.is-root.is-leaf .schema-spacer{display:none}.schema-row.is-root.is-leaf .schema-name-wrapper{gap:0}.schema-toggle,.schema-spacer{width:var(--schema-toggle-size);height:var(--schema-toggle-size);flex-shrink:0}.schema-toggle{display:inline-flex;align-items:center;justify-content:center;color:var(--text-subtle-color);transition:transform .14s ease,color .14s ease}.schema-name-wrapper>span:last-child{font-family:var(--font-family-mono);font-size:13px;line-height:1.35;font-weight:600;color:var(--text-primary-color);word-break:break-word}.schema-meta-wrapper{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.schema-desc-col{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0;padding-left:calc((var(--schema-depth) * var(--schema-indent-size)) + var(--schema-toggle-size) + var(--schema-left-gap))}.schema-desc-col.is-root{padding-left:0}.schema-desc-col>p{font-size:12px;line-height:1.5;color:var(--text-muted-color);word-break:break-word}.schema-constraints-row,.schema-enum-values{display:flex;flex-wrap:wrap;gap:var(--space-xs);align-items:center}.schema-row.role-flat .schema-main-row{align-items:flex-start}.schema-row.role-flat .schema-spacer{display:none}.schema-row.role-flat .schema-name-wrapper{gap:0;padding-left:0}.schema-row.role-flat .schema-meta-wrapper{align-items:flex-start;justify-content:flex-end;flex-wrap:wrap}.schema-row .badge{text-transform:none}.schema-row:hover{background:var(--surface-hover-color)}.schema-toggle.is-expanded{transform:rotate(90deg);color:var(--primary-color)}.schema-collapse-btn{display:inline-flex;align-items:center;justify-content:center;width:calc(var(--text-xs) * 1.2 + var(--space-xs) * 2 + 2px);height:calc(var(--text-xs) * 1.2 + var(--space-xs) * 2 + 2px);min-width:calc(var(--text-xs) * 1.2 + var(--space-xs) * 2 + 2px);padding:0;background:color-mix(in srgb,var(--text-subtle-color) 8%,transparent);border:1px solid var(--border-base-color);border-radius:var(--radius-sm);color:var(--text-muted-color);cursor:pointer;transition:background-color .12s ease,color .12s ease,transform .14s ease;flex-shrink:0}.schema-collapse-btn:hover{background:var(--surface-hover-color);color:var(--text-primary-color)}.schema-collapse-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-light-color)}.schema-collapse-btn:disabled{cursor:not-allowed;opacity:.6}.schema-collapse-btn.is-expanded{transform:rotate(180deg);background:var(--primary-light-color);border-color:color-mix(in srgb,var(--border-base-color) 60%,var(--primary-color) 40%);color:var(--primary-color)}.schema-collapse-btn svg{width:14px;height:14px}.schema-enum-value.is-default{color:var(--primary-color);background:var(--primary-light-color)}@media(max-width:640px){.schema .body{--schema-indent-size: clamp(3px, .75%, 6px)}.schema-main-row{flex-wrap:wrap;gap:var(--space-sm)}.schema-meta-wrapper{width:100%;justify-content:flex-start}}.tabs-code{min-width:0}.tabs-code>.body{display:flex;flex-direction:column;gap:var(--space-sm)}.tabs-code.tabs{display:flex;align-items:stretch;gap:var(--space-xs);flex:1;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.tabs-code.tabs::-webkit-scrollbar{display:none}.tabs-code.codes{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.tabs-code .controls{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.tabs-code .panels{position:relative;display:flex;flex-direction:column}.tabs-code .panel{min-height:120px;padding:var(--space-md)}.tabs-code .panel.is-request{display:flex;flex-direction:column;gap:var(--space-md)}.tabs-code .example-select{width:100%;min-width:200px;color:var(--text-primary-color)}.aside.try-it{display:flex;flex-direction:column;gap:var(--space-lg)}.try-it>.body{display:flex;flex-direction:column;gap:var(--space-lg)}.try-it .body-editor{position:relative}.try-it .body-highlight{position:absolute;inset:0;z-index:0;margin:0;padding:var(--space-sm) var(--space-sm);overflow:auto;pointer-events:none;font-family:var(--font-family-mono);font-size:13px;line-height:1.5;white-space:pre-wrap;word-break:break-all;background:var(--surface-base-color);border:1px solid var(--border-base-color);border-radius:var(--radius)}.try-it .body-highlight .hljs{background:transparent;padding:0}.try-it .body-highlight .hljs-attr{color:#059669}.try-it .body-highlight .hljs-string{color:#0369a1}.try-it .body-highlight .hljs-number,.try-it .body-highlight .hljs-literal{color:#d97706}.try-it .body-highlight .hljs-punctuation{color:var(--text-primary-color)}.try-it .body-editor .textarea-json{position:relative;z-index:1;color:transparent;caret-color:var(--text-primary-color);background:transparent!important;border-color:transparent;resize:none}.try-it .body-editor .textarea-json:focus{border-color:transparent}.try-it .body-editor .textarea-json::selection{background:#3b82f640}.try-it .headers-list,.try-it .params-group,.try-it .route-preview,.try-it .body-section,.try-it .headers-section,.try-it .multipart{display:flex;flex-direction:column}.try-it .headers-list,.try-it .params-group{gap:var(--space-md)}.try-it .route-preview,.try-it .body-section,.try-it .headers-section{gap:var(--space-xs)}.try-it .multipart{gap:var(--space-sm)}.try-it .field-header{display:flex;align-items:center;gap:var(--space-sm)}.try-it .field-copy-btn{margin-inline-start:auto}.try-it .route-input-row{display:flex;align-items:stretch;gap:var(--space-sm)}.try-it .route-input-row .route-input{flex:1;min-width:0}.try-it .route-input-row .route-copy-btn{width:32px;height:36px;min-width:32px;min-height:36px;flex-shrink:0}.try-it .header-row{display:grid;align-items:center;grid-template-columns:minmax(140px,.9fr) 1fr auto;gap:var(--space-sm)}.try-it .header-row input{width:100%}.try-it .header-row .header-remove-btn{width:32px;height:36px;min-width:32px;min-height:36px}.validation-error{display:none;width:100%;flex-basis:100%;margin-top:2px;font-size:11px;line-height:1.3;color:var(--color-red)}.validation-error.visible{display:block}.try-it .send-inline{margin-top:0}.try-it .send-bottom{padding:var(--space-md);border-top:1px solid var(--border-base-color)}.try-it .send-btn{width:100%}.try-it .placeholder{margin-top:0;padding:var(--space-lg) var(--space-md);border:1px dashed var(--border-base-color);border-radius:var(--radius);text-align:center;font-size:13px;color:var(--text-subtle-color);background:var(--surface-base-color)}.try-it .meta{display:flex;gap:var(--space-sm);font-size:12px;color:var(--text-subtle-color)}.try-it .response-pane{overflow-x:auto}.try-it .response-pane .pane-inner{padding:var(--space-sm);border-top:1px solid var(--border-base-color)}.try-it .response-pane textarea,.try-it .response-pane pre{margin:0;padding:var(--space-sm) var(--space-sm);background:var(--surface-base-color);border:1px solid var(--border-base-color);border-radius:var(--radius);font-family:var(--font-family-mono);font-size:13px;line-height:1.5;color:var(--text-primary-color);white-space:pre-wrap;word-break:break-all}.try-it .response-pane .hljs{background:transparent;padding:0}.try-it .response-pane .hljs-attr{color:#059669}.try-it .response-pane .hljs-string{color:#0369a1}.try-it .response-pane .hljs-number,.try-it .response-pane .hljs-literal{color:#d97706}.try-it .header-row .header-remove-btn:hover{color:var(--color-red)}.try-it .response-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.try-it .response-header .tabs-code.tabs{flex:1;min-width:0}.try-it .response-header .meta{margin-left:0}.modal.overlay{position:fixed;inset:0;z-index:var(--modal-overlay-z-index, 9999);display:flex;align-items:var(--modal-overlay-align, center);justify-content:var(--modal-overlay-justify, center);padding:var(--modal-overlay-padding, clamp(var(--space-md), 4vw, var(--space-xl)));padding-top:var(--modal-overlay-padding-top, var(--modal-overlay-padding, clamp(var(--space-md), 4vw, var(--space-xl))));background:var(--modal-overlay-bg, var(--overlay-color));backdrop-filter:var(--modal-overlay-backdrop, blur(3px));animation:var(--modal-overlay-animation, fade-in .15s ease)}.modal.container{width:var(--modal-width, min(520px, 100%));max-height:var(--modal-max-height, min(84vh, 720px));display:flex;flex-direction:column;overflow:hidden;background:var(--surface-elevated-color);border:1px solid var(--border-base-color);border-radius:var(--modal-radius, 18px);box-shadow:0 18px 48px color-mix(in srgb,var(--overlay-color) 35%,transparent),var(--shadow-lg);animation:var(--modal-animation, slide-up .2s ease)}.modal.header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:linear-gradient(180deg,color-mix(in srgb,var(--surface-raised-color) 88%,var(--surface-base-color)),var(--surface-raised-color));border-bottom:1px solid var(--border-base-color)}.modal.title{margin:0;font-size:19px;font-weight:650;line-height:var(--leading-normal);color:var(--text-primary-color);text-transform:none;letter-spacing:0}.modal.body{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg);overflow-y:auto;background:var(--surface-elevated-color)}.modal.tabs{display:flex;gap:var(--space-sm);flex-wrap:wrap}.modal.tab{display:inline-flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);font-family:inherit;font-size:13px;font-weight:500;color:var(--text-muted-color);background:var(--surface-base-color);border:1px solid var(--border-base-color);border-radius:var(--radius-lg);cursor:pointer;transition:transform .14s ease,background .14s ease,color .14s ease,border-color .14s ease,box-shadow .14s ease}.modal.tab:hover:not(:disabled){color:var(--text-primary-color);background:var(--surface-hover-color);border-color:var(--border-strong-base-color);transform:translateY(-1px)}.modal.tab:active:not(:disabled){background:var(--surface-active-color);transform:translateY(0)}.modal.tab:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-light-color)}.modal.tab[aria-pressed=true]{color:var(--text-on-solid-color);background:var(--primary-color);border-color:var(--primary-color);box-shadow:0 8px 18px color-mix(in srgb,var(--primary-color) 28%,transparent)}.modal.tab-dot{width:6px;height:6px;flex-shrink:0;border-radius:50%;color:var(--text-subtle-color);background:currentColor}.modal.tab-dot[data-configured=true]{color:var(--color-green)}.modal.tab[aria-pressed=true] .modal.tab-dot{color:color-mix(in srgb,var(--text-on-solid-color) 60%,transparent)}.modal.tab[aria-pressed=true] .modal.tab-dot[data-configured=true]{color:color-mix(in srgb,var(--color-green) 35%,var(--text-on-solid-color))}.modal.scheme-desc{display:flex;flex-direction:column;gap:var(--space-xs)}.modal.scheme-title{font-size:var(--text-md);font-weight:650;color:var(--text-primary-color)}.modal.scheme-text{font-size:13px;line-height:1.55;color:var(--text-muted-color)}.modal.fields{display:flex;flex-direction:column;gap:var(--space-md)}.modal.field{display:flex;flex-direction:column;gap:var(--space-sm)}.modal.label{font-size:13px;font-weight:600;color:var(--text-muted-color)}.modal.input-wrap{display:flex;align-items:center;gap:var(--space-sm)}.modal.footer{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) var(--space-lg);background:var(--surface-raised-color);border-top:1px solid var(--border-base-color)}@media(max-width:767px){.modal.overlay{align-items:flex-end;padding:var(--space-md)}.modal.container{width:100%;max-height:min(88vh,720px);border-radius:16px}.modal.body{padding:var(--space-md)}.modal.footer{padding:var(--space-sm) var(--space-md) var(--space-md)}}.modal.overlay.search-modal-overlay{--modal-overlay-z-index: 9998;--modal-overlay-align: flex-start;--modal-overlay-padding-top: 15vh;--modal-overlay-backdrop: none;--modal-overlay-animation: fade-in .12s ease}.modal.container.search-modal{--modal-width: min(560px, 90vw);--modal-max-height: 480px;--modal-radius: 14px;--modal-animation: slide-up .15s ease}.search-modal .search-input-wrap{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) var(--space-md);border-bottom:1px solid var(--border-base-color)}.search-modal .search-input-wrap svg{color:var(--text-subtle-color);flex-shrink:0}.search-modal .search-input{flex:1;border:none;background:none;font-size:16px;font-family:var(--font-family-base);color:var(--text-primary-color);outline:none}.search-modal .search-input::placeholder{color:var(--text-subtle-color)}.search-modal .search-results{flex:1;overflow-y:auto;padding:var(--space-sm) var(--space-md);display:flex;flex-direction:column;gap:var(--space-xs)}.search-modal .search-result{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-sm);border-radius:var(--radius);cursor:pointer;transition:background .12s}.search-modal .search-result:hover,.search-modal .search-result.focused{background:var(--surface-hover-color)}.search-modal .search-result-title{font-size:13px;font-weight:500;color:var(--text-primary-color);line-height:1.35}.search-modal .search-result-subtitle{font-size:11px;color:var(--text-muted-color);font-family:var(--font-family-mono);line-height:1.35;opacity:.92}.search-modal .search-result-info{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.search-modal .search-empty{text-align:center;padding:var(--space-xl) var(--space-md);color:var(--text-subtle-color);font-size:14px}.search-modal .search-footer{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);border-top:1px solid var(--border-base-color);font-size:11px;color:var(--text-subtle-color)}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:var(--space-md);color:var(--text-muted-color)}.spinner{width:32px;height:32px;border:3px solid var(--border-base-color);border-top-color:var(--primary-color);border-radius:50%;animation:spin .8s linear infinite}.spinner-sm{width:16px;height:16px;border-width:2px}.error{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:var(--space-sm);color:#ef4444;text-align:center;padding:var(--space-xl)}.error-message{font-size:14px;color:var(--text-muted-color);max-width:480px}.copy-toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--text-primary-color);color:var(--text-on-solid-color);padding:var(--space-sm) var(--space-md);border-radius:var(--radius);font-size:13px;font-weight:500;z-index:200;animation:slide-up .2s ease,fade-in .2s ease;pointer-events:none;box-shadow:var(--shadow-lg)}.response-block,.callback-block{margin:0;padding:var(--space-sm);border:1px solid var(--border-base-color);border-radius:var(--radius);background:var(--surface-raised-color);display:flex;flex-direction:column;gap:var(--space-sm)}.callback-name{font-weight:600;font-size:14px;color:var(--text-primary-color);margin-bottom:0}.callback-operation{padding:var(--space-sm) 0;border-top:1px solid var(--border-base-color);display:flex;flex-direction:column;gap:var(--space-xs)}.callback-op-header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:0}.callback-op-path{font-family:var(--font-family-mono);font-size:12px;color:var(--text-muted-color);word-break:break-all}.callback-op-summary{font-size:13px;color:var(--text-primary-color);margin-bottom:0}.callback-response-row{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-xs) 0}.inline-cluster{display:inline-flex;align-items:center;gap:var(--space-sm)}.inline-cluster-sm{gap:var(--space-xs)}*{transition:all .3s ease!important}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-up{0%{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}:root,.root{--page-x: var(--space-md);--page-y: 20px;--page-bottom: 40px}.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:50;box-shadow:var(--shadow-lg);max-width:min(85vw,320px)}.sidebar.collapsed{transform:translate(-100%)}h1{font-size:18px}.search-modal{width:100%;max-width:100%;margin:0 12px;border-radius:12px}.btn:not(.icon){min-height:44px}@media(min-width:480px){:root,.root{--page-x: var(--space-lg);--page-y: var(--space-lg);--page-bottom: 60px}h1{font-size:var(--text-2xl)}.btn:not(.icon){min-height:36px}}@media(min-width:768px){:root,.root{--page-x: var(--space-lg);--page-bottom: 60px}.search-modal{width:560px;max-width:90vw;margin:0;border-radius:14px}}@media(min-width:992px){:root,.root{--page-x: var(--space-xl);--page-y: var(--space-xl);--page-bottom: 80px}.sidebar{position:static;box-shadow:1px 0 0 var(--border-base-color)}.sidebar.collapsed{transform:none}}@media(min-width:1200px){.page{flex-direction:row}.page>.aside{width:var(--aside-width);min-width:var(--aside-width);max-width:var(--aside-width)}}
|