.md{--measure:72ch;max-width:1000px;font-family:var(--font-body);font-size:var(--doc-size);color:var(--ink);overflow-wrap:break-word;margin:0 auto;line-height:1.68}:root[data-font=serif] .md{font-family:var(--font-serif);line-height:1.72}.md-body{display:contents}.md>:first-child,.md>.md-body:first-child>:first-child{margin-top:0}.md>:last-child,.md>.md-body:last-child>:last-child{margin-bottom:0}.md :is(p,ul,ol,blockquote,dl,h1,h2,h3,h4,h5,h6,.alert,.props){max-width:var(--measure)}.md p{margin:.85em 0}.md h1,.md h2,.md h3{font-family:var(--font-display);text-wrap:balance;letter-spacing:-.005em;color:var(--ink);scroll-margin-top:20px}.md h1{margin:0 0 .55em;font-size:clamp(1.85em,1.3em + 1.6vw,2.45em);font-weight:600;line-height:1.1}.md h2{border-top:1px solid var(--line);max-width:none;margin:2.1em 0 .65em;padding-top:1.05em;font-size:1.6em;font-weight:600;line-height:1.2}.md h3{margin:1.7em 0 .45em;font-size:1.24em;font-weight:600;line-height:1.3}.md h4{font:600 1.02em/1.4 var(--font-body);margin:1.5em 0 .35em;scroll-margin-top:20px}.md h5,.md h6{font:500 .78em/1.4 var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2);margin:1.5em 0 .35em;scroll-margin-top:20px}.md h1+h2,.md>h2:first-child,.md-body>h2:first-child{border-top:0;padding-top:0}.md .anchor{color:var(--ink-3);opacity:0;margin-inline-start:.35em;font-weight:400;text-decoration:none;transition:opacity .15s}.md :is(h1,h2,h3,h4,h5,h6):hover .anchor,.md .anchor:focus-visible{opacity:1}.md a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent)}.md a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.md strong{font-weight:600}.md :not(pre)>code{font-family:var(--font-mono);background:var(--code-bg);border-radius:5px;padding:.1em .38em;font-size:.86em}.md kbd{font:.82em var(--font-mono);border:1px solid var(--line-2);background:var(--surface);border-bottom-width:2px;border-radius:5px;padding:.1em .45em}.md mark{background:var(--amber-soft);color:inherit;border-radius:3px;padding:0 .15em}.md ul,.md ol{margin:.8em 0;padding-inline-start:1.45em}.md li+li{margin-top:.28em}.md li>ul,.md li>ol{margin:.3em 0}.md li::marker{color:var(--ink-3)}.md ol>li::marker{font-variant-numeric:tabular-nums}.md ul.tasks{padding-inline-start:.2em;list-style:none}.md li.task{align-items:baseline;gap:.6em;display:flex}.md li.task>input{width:1em;height:1em;accent-color:var(--accent);flex:none;margin:0;transform:translateY(.12em)}.md hr{background:var(--line);border:0;height:1px;margin:2.4em 0}.md blockquote{border-inline-start:3px solid var(--line-2);color:var(--ink-2);margin:1.2em 0;padding:.05em 0 .05em 1.1em}.md img{border-radius:8px;max-width:100%;height:auto;display:inline}.md .imgph{font:.82em/1.4 var(--font-mono);color:var(--ink-2);border:1px dashed var(--line-2);border-radius:8px;padding:.5em .8em;display:inline-block}.md details{max-width:var(--measure);margin:1em 0}.md summary{cursor:pointer;font-weight:600}.md dl dt{margin-top:.8em;font-weight:600}.md dl dd{margin:.2em 0 0 1.2em}.md .props{border:1px solid var(--line);background:var(--pre-bg);border-radius:10px;grid-template-columns:max-content minmax(0,1fr);gap:6px 18px;margin:0 0 2em;padding:14px 16px;font-size:.9em;line-height:1.5;display:grid}.md .props dt{font:500 .84em/1.75 var(--font-mono);color:var(--ink-2);margin:0}.md .props dd{min-width:0;margin:0}.md .chips{flex-wrap:wrap;gap:5px;display:flex}.md .chip{font:.82em/1.6 var(--font-mono);border:1px solid var(--line-2);background:var(--surface);border-radius:999px;padding:0 8px}.md .alert{--tone:var(--slate);--tone-soft:var(--slate-soft);border:1px solid color-mix(in srgb, var(--tone) 38%, transparent);background:var(--tone-soft);border-radius:10px;margin:1.3em 0;padding:.75em 1em .8em}.md .alert-tip{--tone:var(--accent);--tone-soft:var(--accent-soft)}.md .alert-important{--tone:var(--violet);--tone-soft:var(--violet-soft)}.md .alert-warning{--tone:var(--amber);--tone-soft:var(--amber-soft)}.md .alert-caution{--tone:var(--danger);--tone-soft:var(--danger-soft)}.md .alert-title{font:600 .74em/1.2 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--tone);align-items:center;gap:7px;margin-bottom:.35em;display:flex}.md .alert-title svg{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.md .alert>p{margin:.35em 0}.md .alert>:last-child{margin-bottom:0}.md .tblwrap{border:1px solid var(--line);background:var(--surface);border-radius:10px;margin:1.4em 0;overflow-x:auto}.md table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.9em;line-height:1.5}.md th,.md td{border-bottom:1px solid var(--line);vertical-align:top;text-align:start;padding:.55em .95em}.md th[align=right],.md td[align=right]{text-align:right}.md th[align=center],.md td[align=center]{text-align:center}.md thead th{background:var(--surface-2);font:600 .8em/1.4 var(--font-body);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap}.md tbody tr:last-child td{border-bottom:0}.md tbody tr:hover td{background:color-mix(in srgb, var(--surface-2) 55%, transparent)}.md .codeblock{border:1px solid var(--line);background:var(--pre-bg);border-radius:10px;margin:1.3em 0;overflow:hidden}.md .cb-head{border-bottom:1px solid var(--line);background:var(--surface-2);align-items:center;gap:8px;padding:6px 8px 6px 14px;display:flex}.md .cb-lang{font:500 11.5px/1 var(--font-mono);letter-spacing:.07em;text-transform:uppercase;color:var(--ink-2);margin-right:auto}.md .codeblock pre{font:calc(var(--doc-size) * .84) / 1.65 var(--font-mono);tab-size:4;margin:0;padding:14px 16px;overflow:auto}.md .codeblock code{font:inherit;background:0 0;padding:0}.tb{font:500 12.5px/1 var(--font-body);color:var(--ink);background:var(--surface);border:1px solid var(--line-2);cursor:pointer;border-radius:6px;min-width:28px;min-height:28px;padding:6px 10px}.tb:hover:not(:disabled){border-color:var(--accent)}.tb[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}.hljs-comment,.hljs-quote{color:var(--syn-com);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-doctag,.hljs-section,.hljs-name{color:var(--syn-kw)}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-template-tag,.hljs-template-variable,.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-char{color:var(--syn-str)}.hljs-number,.hljs-meta,.hljs-deletion{color:var(--syn-num)}.hljs-meta .hljs-string{color:var(--syn-str)}.hljs-type,.hljs-built_in,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-attr,.hljs-attribute,.hljs-property,.hljs-selector-class,.hljs-selector-id{color:var(--syn-type)}.hljs-title.function_,.hljs-title{color:var(--syn-fn);font-weight:500}.hljs-title.class_{font-weight:400}.hljs-params,.hljs-variable,.hljs-subst{color:inherit}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600}@media (max-width:640px){.md .props{grid-template-columns:minmax(0,1fr);gap:2px}.md .props dd{margin-bottom:6px}}.md [data-scrollable=true]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.diagram{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;overflow:hidden}.md .diagram{margin:1.6em 0}.diagram .toolbar{border-bottom:1px solid var(--line);background:var(--surface-2);flex-wrap:wrap;align-items:center;gap:6px;padding:7px 8px 7px 14px;display:flex}.diagram .dtype{font:500 11.5px/1 var(--font-mono);letter-spacing:.07em;text-transform:uppercase;color:var(--ink-2);margin-right:auto}.diagram .zoom-val{font:12px/1 var(--font-mono);text-align:center;min-width:44px;color:var(--ink-2);font-variant-numeric:tabular-nums}.diagram .viewport{background:linear-gradient(var(--grid) 1px, transparent 1px) 0 0 / 28px 28px, linear-gradient(90deg, var(--grid) 1px, transparent 1px) 0 0 / 28px 28px, var(--surface);padding:22px;overflow:auto}.diagram .viewport.pannable{cursor:grab}.diagram .viewport.dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}.diagram .canvas{vertical-align:top;min-width:100%;display:inline-block}.diagram .canvas svg{max-width:none;margin:0 auto;display:block}.diagram.stale .canvas{opacity:.5;transition:opacity .2s}.diagram .dwait{font:12.5px/1.5 var(--font-mono);color:var(--ink-3);text-align:center;padding:28px 0}.diagram .dsrc{border-top:1px solid var(--line);background:var(--pre-bg);font:12.5px/1.6 var(--font-mono);color:var(--ink);max-height:360px;margin:0;padding:14px 16px;overflow:auto}.diagram>.dsrc:only-child{border-top:0}.diagram.err .viewport{background:var(--danger-soft);cursor:auto}.diagram .derr{font:12.5px/1.6 var(--font-mono);color:var(--danger);white-space:pre-wrap;text-align:start}.diagram .dhint{font:12px/1.3 var(--font-body);color:var(--ink-3);display:none}.diagram.large{z-index:60;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);border:0;border-radius:0;flex-direction:column;margin:0;display:flex;position:fixed;inset:0}.diagram.large .viewport{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex:1;min-height:0;padding:0;position:relative;overflow:hidden}.diagram.large .viewport.dragging{cursor:grabbing}.diagram.large .canvas{transform-origin:0 0;will-change:transform;min-width:0;position:absolute;top:0;left:0}.diagram.large .canvas svg{margin:0}.diagram.large .dtype{margin-right:10px}.diagram.large .dhint{margin-right:auto;display:inline}.diagram.large .dsrc{max-height:30vh}@media (max-width:640px){.diagram .viewport{padding:14px}.diagram.large .dhint{display:none}.diagram.large .dtype{margin-right:auto}}.diagram svg p{max-width:none;margin:0}.diagram svg[aria-roledescription^=flowchart] .node rect{rx:6px;ry:6px}.diagram svg .cluster rect{rx:10px;ry:10px}.diagram svg g.node.st-interface rect,.diagram svg g.node.st-interface path{stroke:var(--dg-line,var(--accent))!important;stroke-width:1.6px!important}.diagram svg g.node.st-interface .classTitle,.diagram svg g.node.st-interface .classTitle *{fill:var(--dg-line,var(--accent))!important;color:var(--dg-line,var(--accent))!important}.diagram svg g.node.st-enumeration rect,.diagram svg g.node.st-enumeration path,.diagram svg g.node.st-record rect,.diagram svg g.node.st-record path{fill:var(--dg-fill2,var(--surface-2))!important}.diagram svg g.node.st-entity rect,.diagram svg g.node.st-entity path{stroke:var(--ink)!important}.diagram svg g.node.st-abstract rect,.diagram svg g.node.st-abstract path{stroke-dasharray:2 3!important}.diagram svg g.node.st-plugin rect,.diagram svg g.node.st-plugin path{stroke-dasharray:5 4!important;stroke:var(--amber)!important;fill:var(--amber-soft)!important}.diagram svg.is-c4 [stroke=\#444444]{stroke:var(--dg-line,var(--ink-3))}.diagram svg.is-c4 [fill=\#444444]{fill:var(--ink-2)}.diagram svg.is-c4 marker path{fill:var(--dg-line,var(--ink-3));stroke:var(--dg-line,var(--ink-3))}.diagram svg.is-c4>text{fill:var(--ink)}.diagram svg.is-c4 g.person-man>rect,.diagram svg.is-c4 g.person-man>path{stroke-width:1.2px}.diagram svg.is-c4 g.person-man>rect{rx:6px;ry:6px}.diagram svg.is-c4 g.c4-on-light text[fill=\#FFFFFF]{fill:var(--c4-on-light)}.diagram svg.is-c4 .c4-rel{stroke-width:1.3px}.diagram svg.is-c4 text[fill=\#444444]{paint-order:stroke;stroke:var(--surface);stroke-width:4px;stroke-linejoin:round}@media print{.diagram{box-shadow:none;break-inside:avoid}.diagram .toolbar{display:none}.diagram .viewport{background:0 0;padding:0;overflow:visible}.diagram .canvas svg{max-width:100%!important;height:auto!important}}.diagram .viewport:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.canvas svg .dflow{pointer-events:none;animation:1.4s linear infinite dflow;fill:none!important;stroke:var(--flow-color,var(--dg-line,var(--accent)))!important;stroke-width:var(--flow-width,4px)!important;stroke-linecap:round!important;stroke-dasharray:0 24!important;stroke-opacity:.95!important;marker:none!important}.canvas svg .dflow-rev{animation-direction:reverse}@keyframes dflow{0%{stroke-dashoffset:24px}to{stroke-dashoffset:0}}.diagram.idle .canvas svg .dflow{animation-play-state:paused}:root[data-diagram-motion=off] .canvas svg .dflow{display:none}@media (prefers-reduced-motion:reduce){.canvas svg .dflow{display:none}}@media print{.canvas svg .dflow{display:none}}.diagram svg .em-swimlane>rect{fill:var(--surface-2);stroke:var(--line)}.diagram svg .em-swimlane>text{fill:var(--ink)}.diagram svg .em-box{color:var(--c4-on-light)}.diagram svg .em-relation,.diagram svg[aria-roledescription=eventmodeling] marker polygon{stroke:var(--dg-line,var(--ink-3));fill:var(--dg-line,var(--ink-3))}.diagram svg .em-relation{fill:none}
