{"id":2407,"date":"2026-02-24T17:14:41","date_gmt":"2026-02-24T15:14:41","guid":{"rendered":"https:\/\/lightrest.codeline.fr\/?page_id=2407"},"modified":"2026-03-05T10:32:47","modified_gmt":"2026-03-05T08:32:47","slug":"faq","status":"publish","type":"page","link":"https:\/\/lightrest.codeline.fr\/index.php\/lightrest-composant-rest-windev\/lightrest-documentation\/faq\/","title":{"rendered":"FAQ"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>Vous trouverez ci-dessous les questions habituellement pos\u00e9es au sujet de LightREST (techniques, fonctionnelles, comparatives, marketing, DSI, aspects juridiques, licence, &#8230;)<br><br>S\u2019il vous reste des interrogations, n\u2019h\u00e9sitez pas \u00e0 utiliser le <a data-type=\"page\" data-id=\"1053\" href=\"https:\/\/lightrest.codeline.fr\/index.php\/lightrest-coup-de-main\/\"><u>formulaire de contact<\/u><\/a>.<\/p>\n\n\n<div class=\"page-injector lr-doc\" data-deeplink=\"1\" data-trace=\"0\" data-source=\"https:\/\/lightrest.codeline.fr\/docs\/faq\/\" style=\"zoom:1.5;\">\n<!-- Page Injector: scoped CSS -->\n\n<style>\n.lr-doc{--md-text-font:\"Roboto\";--md-code-font:\"Roboto Mono\"}\n<\/style>\n\n<style>\n@charset \"UTF-8\";.lr-doc{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}.lr-doc *, .lr-doc :after, .lr-doc :before{box-sizing:inherit}@media (prefers-reduced-motion){.lr-doc *, .lr-doc :after, .lr-doc :before{transition:none!important}}.lr-doc{margin:0}.lr-doc a, .lr-doc button, .lr-doc input, .lr-doc label{-webkit-tap-highlight-color:transparent}.lr-doc a{color:inherit;text-decoration:none}.lr-doc hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}.lr-doc small{font-size:80%}.lr-doc sub, .lr-doc sup{line-height:1em}.lr-doc img{border-style:none}.lr-doc table{border-collapse:initial;border-spacing:0}.lr-doc td, .lr-doc th{font-weight:400;vertical-align:top}.lr-doc button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}.lr-doc input{border:0;outline:none}.lr-doc{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}.lr-doc [data-md-color-scheme=default]{color-scheme:light}.lr-doc [data-md-color-scheme=default] img[src$=\"#gh-dark-mode-only\"], .lr-doc [data-md-color-scheme=default] img[src$=\"#only-dark\"]{display:none}.lr-doc, .lr-doc [data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-bg-color--light:#f5f5f5b3;--md-code-bg-color--lighter:#f5f5f54d;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.lr-doc .md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.lr-doc{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}.lr-doc aside, .lr-doc, .lr-doc input{font-feature-settings:\"kern\",\"liga\";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}.lr-doc code, .lr-doc kbd, .lr-doc pre{font-feature-settings:\"kern\";font-family:var(--md-code-font-family)}.lr-doc{--md-typeset-table-sort-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"m18 21-4-4h3V7h-3l4-4 4 4h-3v10h3M2 19v-2h10v2M2 13v-2h7v2M2 7V5h4v2z\"\/><\/svg>');--md-typeset-table-sort-icon--asc:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 17h3l-4 4-4-4h3V3h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2z\"\/><\/svg>');--md-typeset-table-sort-icon--desc:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 7h3l-4-4-4 4h3v14h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2z\"\/><\/svg>')}.lr-doc .md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6;overflow-wrap:break-word}@media print{.lr-doc .md-typeset{font-size:.68rem}}.lr-doc .md-typeset blockquote, .lr-doc .md-typeset dl, .lr-doc .md-typeset figure, .lr-doc .md-typeset ol, .lr-doc .md-typeset pre, .lr-doc .md-typeset ul{margin-bottom:1em;margin-top:1em}.lr-doc .md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.lr-doc .md-typeset h1, .lr-doc .md-typeset h2{font-weight:300;letter-spacing:-.01em}.lr-doc .md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.lr-doc .md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.lr-doc .md-typeset h2+h3{margin-top:.8em}.lr-doc .md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.lr-doc .md-typeset h5, .lr-doc .md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.lr-doc .md-typeset h5{text-transform:uppercase}.lr-doc .md-typeset h5 code{text-transform:none}.lr-doc .md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.lr-doc .md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.lr-doc .md-typeset a, .lr-doc .md-typeset a:before{transition:color 125ms}.lr-doc .md-typeset a:focus, .lr-doc .md-typeset a:hover{color:var(--md-accent-fg-color)}.lr-doc .md-typeset a:focus code, .lr-doc .md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.lr-doc .md-typeset a code{color:var(--md-typeset-a-color)}.lr-doc .md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.lr-doc .md-typeset code, .lr-doc .md-typeset kbd, .lr-doc .md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none;transition:background-color 125ms}@media print{.lr-doc .md-typeset code, .lr-doc .md-typeset kbd, .lr-doc .md-typeset pre{white-space:pre-wrap}}.lr-doc .md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;transition:color 125ms,background-color 125ms;word-break:break-word}.lr-doc .md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.lr-doc .md-typeset pre{display:flow-root;line-height:1.4;position:relative}.lr-doc .md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.lr-doc .md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.lr-doc .md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.lr-doc .md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.lr-doc .md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.lr-doc .md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.lr-doc .md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.lr-doc .md-typeset abbr{cursor:help;text-decoration:none}.lr-doc .md-typeset [data-preview], .lr-doc .md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light)}.lr-doc .md-typeset small{opacity:.75}.lr-doc [dir=ltr] .md-typeset sub, .lr-doc [dir=ltr] .md-typeset sup{margin-left:.078125em}.lr-doc [dir=rtl] .md-typeset sub, .lr-doc [dir=rtl] .md-typeset sup{margin-right:.078125em}.lr-doc [dir=ltr] .md-typeset blockquote{padding-left:.6rem}.lr-doc [dir=rtl] .md-typeset blockquote{padding-right:.6rem}.lr-doc [dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}.lr-doc [dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.lr-doc .md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.lr-doc .md-typeset ul{list-style-type:disc}.lr-doc .md-typeset ul[type]{list-style-type:revert-layer}.lr-doc [dir=ltr] .md-typeset ol, .lr-doc [dir=ltr] .md-typeset ul{margin-left:.625em}.lr-doc [dir=rtl] .md-typeset ol, .lr-doc [dir=rtl] .md-typeset ul{margin-right:.625em}.lr-doc .md-typeset ol, .lr-doc .md-typeset ul{padding:0}.lr-doc .md-typeset ol:not([hidden]), .lr-doc .md-typeset ul:not([hidden]){display:flow-root}.lr-doc .md-typeset ol ol, .lr-doc .md-typeset ul ol{list-style-type:lower-alpha}.lr-doc .md-typeset ol ol ol, .lr-doc .md-typeset ul ol ol{list-style-type:lower-roman}.lr-doc .md-typeset ol ol ol ol, .lr-doc .md-typeset ul ol ol ol{list-style-type:upper-alpha}.lr-doc .md-typeset ol ol ol ol ol, .lr-doc .md-typeset ul ol ol ol ol{list-style-type:upper-roman}.lr-doc .md-typeset ol[type], .lr-doc .md-typeset ul[type]{list-style-type:revert-layer}.lr-doc [dir=ltr] .md-typeset ol li, .lr-doc [dir=ltr] .md-typeset ul li{margin-left:1.25em}.lr-doc [dir=rtl] .md-typeset ol li, .lr-doc [dir=rtl] .md-typeset ul li{margin-right:1.25em}.lr-doc .md-typeset ol li, .lr-doc .md-typeset ul li{margin-bottom:.5em}.lr-doc .md-typeset ol li blockquote, .lr-doc .md-typeset ol li p, .lr-doc .md-typeset ul li blockquote, .lr-doc .md-typeset ul li p{margin:.5em 0}.lr-doc .md-typeset ol li:last-child, .lr-doc .md-typeset ul li:last-child{margin-bottom:0}.lr-doc [dir=ltr] .md-typeset ol li ol, .lr-doc [dir=ltr] .md-typeset ol li ul, .lr-doc [dir=ltr] .md-typeset ul li ol, .lr-doc [dir=ltr] .md-typeset ul li ul{margin-left:.625em}.lr-doc [dir=rtl] .md-typeset ol li ol, .lr-doc [dir=rtl] .md-typeset ol li ul, .lr-doc [dir=rtl] .md-typeset ul li ol, .lr-doc [dir=rtl] .md-typeset ul li ul{margin-right:.625em}.lr-doc .md-typeset ol li ol, .lr-doc .md-typeset ol li ul, .lr-doc .md-typeset ul li ol, .lr-doc .md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}.lr-doc [dir=ltr] .md-typeset dd{margin-left:1.875em}.lr-doc [dir=rtl] .md-typeset dd{margin-right:1.875em}.lr-doc .md-typeset dd{margin-bottom:1.5em;margin-top:1em}.lr-doc .md-typeset img, .lr-doc .md-typeset svg, .lr-doc .md-typeset video{height:auto;max-width:100%}.lr-doc .md-typeset img[align=left]{margin:1em 1em 1em 0}.lr-doc .md-typeset img[align=right]{margin:1em 0 1em 1em}.lr-doc .md-typeset img[align]:only-child{margin-top:0}.lr-doc .md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:fit-content}.lr-doc .md-typeset figure img{display:block;margin:0 auto}.lr-doc .md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.lr-doc .md-typeset iframe{max-width:100%}.lr-doc .md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.lr-doc .md-typeset table:not([class]){display:table}}.lr-doc .md-typeset table:not([class])+*{margin-top:1.5em}.lr-doc .md-typeset table:not([class]) td>:first-child, .lr-doc .md-typeset table:not([class]) th>:first-child{margin-top:0}.lr-doc .md-typeset table:not([class]) td>:last-child, .lr-doc .md-typeset table:not([class]) th>:last-child{margin-bottom:0}.lr-doc .md-typeset table:not([class]) td:not([align]), .lr-doc .md-typeset table:not([class]) th:not([align]){text-align:left}.lr-doc [dir=rtl] .md-typeset table:not([class]) td:not([align]), .lr-doc [dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.lr-doc .md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.lr-doc .md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.lr-doc .md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.lr-doc .md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.lr-doc .md-typeset table:not([class]) a{word-break:normal}.lr-doc .md-typeset table th[role=columnheader]{cursor:pointer}.lr-doc [dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}.lr-doc [dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.lr-doc .md-typeset table th[role=columnheader]:after{content:\"\";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.lr-doc .md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.lr-doc .md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.lr-doc .md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.lr-doc .md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.lr-doc .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.lr-doc .md-typeset__table{display:block}}.lr-doc .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.lr-doc .md-content__inner>pre{margin:1em -.8rem}.lr-doc .md-content__inner>pre code{border-radius:0}}.lr-doc .md-typeset .md-author{border-radius:100%;display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.lr-doc .md-typeset .md-author img{display:block}.lr-doc .md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.lr-doc .md-typeset .md-author--long{height:2.4rem;width:2.4rem}.lr-doc .md-typeset a.md-author{transform:scale(1)}.lr-doc .md-typeset a.md-author img{border-radius:100%;filter:grayscale(100%) opacity(75%);transition:filter 125ms}.lr-doc .md-typeset a.md-author:focus, .lr-doc .md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.lr-doc .md-typeset a.md-author:focus img, .lr-doc .md-typeset a.md-author:hover img{filter:grayscale(0)}.lr-doc .md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.lr-doc .md-banner{display:none}}.lr-doc .md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.lr-doc .md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}.lr-doc [dir=ltr] .md-banner__button{float:right}.lr-doc [dir=rtl] .md-banner__button{float:left}.lr-doc .md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.lr-doc .no-js .md-banner__button{display:none}.lr-doc .md-banner__button:hover{opacity:.7}.lr-doc{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){.lr-doc{font-size:137.5%}}@media screen and (min-width:125em){.lr-doc{font-size:150%}}.lr-doc{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{.lr-doc{display:block}}@media screen and (max-width:59.984375em){.lr-doc[data-md-scrolllock]{position:fixed}}.lr-doc .md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.lr-doc .md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.lr-doc .md-container{display:block}}.lr-doc .md-main{flex-grow:1}.lr-doc .md-main__inner{display:flex;height:100%;margin-top:1.5rem}.lr-doc .md-ellipsis{overflow:hidden;text-overflow:ellipsis}.lr-doc .md-toggle{display:none}.lr-doc .md-option{height:0;opacity:0;position:absolute;width:0}.lr-doc .md-option:checked+label:not([hidden]){display:block}.lr-doc .md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.lr-doc .md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.lr-doc .md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}.lr-doc{--md-clipboard-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z\"\/><\/svg>')}.lr-doc .md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em;z-index:1}@media print{.lr-doc .md-clipboard{display:none}}.lr-doc .md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.lr-doc :hover>.md-clipboard{color:var(--md-default-fg-color--light)}.lr-doc .md-clipboard:focus, .lr-doc .md-clipboard:hover{color:var(--md-accent-fg-color)}.lr-doc .md-clipboard:after{background-color:currentcolor;content:\"\";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.lr-doc .md-clipboard--inline{cursor:pointer}.lr-doc .md-clipboard--inline code{transition:color .25s,background-color .25s}.lr-doc .md-clipboard--inline:focus code, .lr-doc .md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.lr-doc{--md-code-select-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 19h-4v2h4c1.1 0 2-.9 2-2v-4h-2m0-12h-4v2h4v4h2V5c0-1.1-.9-2-2-2M5 5h4V3H5c-1.1 0-2 .9-2 2v4h2m0 6H3v4c0 1.1.9 2 2 2h4v-2H5zm2-4h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2zM7 7h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2zm-8 8h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2z\"\/><\/svg>');--md-code-copy-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z\"\/><\/svg>')}.lr-doc .md-typeset .md-code__content{display:grid}.lr-doc .md-code__nav{background-color:var(--md-code-bg-color--lighter);border-radius:.1rem;display:flex;gap:.2rem;padding:.2rem;position:absolute;right:.25em;top:.25em;transition:background-color .25s;z-index:1}.lr-doc :hover>.md-code__nav{background-color:var(--md-code-bg-color--light)}.lr-doc .md-code__button{color:var(--md-default-fg-color--lightest);cursor:pointer;display:block;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em}.lr-doc :hover>*>.md-code__button{color:var(--md-default-fg-color--light)}.lr-doc .md-code__button.focus-visible, .lr-doc .md-code__button:hover{color:var(--md-accent-fg-color)}.lr-doc .md-code__button--active{color:var(--md-default-fg-color)!important}.lr-doc .md-code__button:after{background-color:currentcolor;content:\"\";display:block;height:1.125em;margin:0 auto;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.lr-doc .md-code__button[data-md-type=select]:after{-webkit-mask-image:var(--md-code-select-icon);mask-image:var(--md-code-select-icon)}.lr-doc .md-code__button[data-md-type=copy]:after{-webkit-mask-image:var(--md-code-copy-icon);mask-image:var(--md-code-copy-icon)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.lr-doc .md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.lr-doc .md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.lr-doc .md-consent__form{padding:.8rem}.lr-doc .md-consent__settings{display:none;margin:1em 0}.lr-doc input:checked+.md-consent__settings{display:block}.lr-doc .md-consent__controls{margin-bottom:.8rem}.lr-doc .md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.lr-doc .md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.lr-doc .md-consent label{cursor:pointer}.lr-doc .md-content{flex-grow:1;min-width:0}.lr-doc .md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){.lr-doc [dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}.lr-doc [dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner, .lr-doc [dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}.lr-doc [dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.lr-doc .md-content__inner:before{content:\"\";display:block;height:.4rem}.lr-doc .md-content__inner>:last-child{margin-bottom:0}.lr-doc [dir=ltr] .md-content__button{float:right}.lr-doc [dir=rtl] .md-content__button{float:left}.lr-doc [dir=ltr] .md-content__button{margin-left:.4rem}.lr-doc [dir=rtl] .md-content__button{margin-right:.4rem}.lr-doc .md-content__button{margin:.4rem 0;padding:0}@media print{.lr-doc .md-content__button{display:none}}.lr-doc .md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.lr-doc .md-content__button svg{display:inline;vertical-align:top}.lr-doc [dir=rtl] .md-content__button svg{transform:scaleX(-1)}.lr-doc [dir=ltr] .md-dialog{right:.8rem}.lr-doc [dir=rtl] .md-dialog{left:.8rem}.lr-doc .md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.lr-doc .md-dialog{display:none}}.lr-doc .md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.lr-doc .md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.lr-doc .md-feedback{margin:2em 0 1em;text-align:center}.lr-doc .md-feedback fieldset{border:none;margin:0;padding:0}.lr-doc .md-feedback__title{font-weight:700;margin:1em auto}.lr-doc .md-feedback__inner{position:relative}.lr-doc .md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.lr-doc .md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}.lr-doc :disabled .md-feedback__list{min-height:1.8rem}.lr-doc .md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.lr-doc .md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.lr-doc .md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.lr-doc .md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.lr-doc .md-feedback__note>*{margin:0 auto;max-width:16rem}.lr-doc :disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.lr-doc .md-feedback{display:none}}.lr-doc .md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.lr-doc .md-footer{display:none}}.lr-doc .md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.lr-doc .md-footer__inner:not([hidden]){display:flex}.lr-doc .md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.lr-doc .md-footer__link:focus, .lr-doc .md-footer__link:hover{opacity:.7}.lr-doc [dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.lr-doc .md-footer__link--prev{flex-shrink:0}.lr-doc .md-footer__link--prev .md-footer__title{display:none}}.lr-doc [dir=ltr] .md-footer__link--next{margin-left:auto}.lr-doc [dir=rtl] .md-footer__link--next{margin-right:auto}.lr-doc .md-footer__link--next{text-align:right}.lr-doc [dir=rtl] .md-footer__link--next{text-align:left}.lr-doc .md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.lr-doc .md-footer__button{margin:.2rem;padding:.4rem}.lr-doc .md-footer__direction{font-size:.64rem;opacity:.7}.lr-doc .md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.lr-doc .md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}.lr-doc .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}.lr-doc .md-footer-meta.md-typeset a:focus, .lr-doc .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.lr-doc .md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.lr-doc .md-copyright{width:auto}}.lr-doc .md-copyright__highlight{color:var(--md-footer-fg-color--light)}.lr-doc .md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.lr-doc .md-social{padding:.6rem 0}}.lr-doc .md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.lr-doc .md-social__link:before{line-height:1.9}.lr-doc .md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.lr-doc .md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.lr-doc .md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.lr-doc .md-typeset .md-button:focus, .lr-doc .md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.lr-doc [dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}.lr-doc [dir=ltr] .md-typeset .md-input, .lr-doc [dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}.lr-doc [dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.lr-doc .md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.lr-doc .md-typeset .md-input:focus, .lr-doc .md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.lr-doc .md-typeset .md-input--stretch{width:100%}.lr-doc .md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.lr-doc .md-header{display:none}}.lr-doc .md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.lr-doc .md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.lr-doc .md-header__inner{align-items:center;display:flex;padding:0 .2rem}.lr-doc .md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.lr-doc .md-header__button:hover{opacity:.7}.lr-doc .md-header__button:not([hidden]){display:inline-block}.lr-doc .md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.lr-doc .md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.lr-doc .md-header__button.md-logo{display:none}}.lr-doc .md-header__button.md-logo img, .lr-doc .md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.lr-doc .md-header__button[for=__search]{display:none}}.lr-doc .no-js .md-header__button[for=__search]{display:none}.lr-doc [dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.lr-doc .md-header__button[for=__drawer]{display:none}}.lr-doc .md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.lr-doc .md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}.lr-doc [dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.lr-doc .md-header__topic:first-child{font-weight:700}.lr-doc [dir=ltr] .md-header__title{margin-left:1rem;margin-right:.4rem}.lr-doc [dir=rtl] .md-header__title{margin-left:.4rem;margin-right:1rem}.lr-doc .md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.lr-doc .md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}.lr-doc [dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.lr-doc .md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.lr-doc .md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.lr-doc .md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}.lr-doc [data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.lr-doc .md-header__option>input{bottom:0}.lr-doc .md-header__source{display:none}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-header__source{margin-left:1rem}.lr-doc [dir=rtl] .md-header__source{margin-right:1rem}.lr-doc .md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){.lr-doc [dir=ltr] .md-header__source{margin-left:1.4rem}.lr-doc [dir=rtl] .md-header__source{margin-right:1.4rem}}.lr-doc .md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.lr-doc .md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.lr-doc .md-meta__item:not(:last-child):after{content:\"\u00b7\";margin-left:.2rem;margin-right:.2rem}.lr-doc .md-meta__link{color:var(--md-typeset-a-color)}.lr-doc .md-meta__link:focus, .lr-doc .md-meta__link:hover{color:var(--md-accent-fg-color)}.lr-doc .md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}.lr-doc{--md-nav-icon--prev:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z\"\/><\/svg>');--md-nav-icon--next:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z\"\/><\/svg>');--md-toc-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 9h14V7H3zm0 4h14v-2H3zm0 4h14v-2H3zm16 0h2v-2h-2zm0-10v2h2V7zm0 6h2v-2h-2z\"\/><\/svg>')}.lr-doc .md-nav{font-size:.7rem;line-height:1.3}.lr-doc .md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.lr-doc .md-nav__title .md-nav__button{display:none}.lr-doc .md-nav__title .md-nav__button img{height:100%;width:auto}.lr-doc .md-nav__title .md-nav__button.md-logo img, .lr-doc .md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.lr-doc .md-nav__list{list-style:none;margin:0;padding:0}.lr-doc .md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.lr-doc .md-nav__link--passed, .lr-doc .md-nav__link--passed code{color:var(--md-default-fg-color--light)}.lr-doc .md-nav__item .md-nav__link--active, .lr-doc .md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.lr-doc .md-nav__link .md-ellipsis{position:relative}.lr-doc .md-nav__link .md-ellipsis code{word-break:normal}.lr-doc [dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}.lr-doc [dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.lr-doc .md-nav__link .md-typeset{font-size:.7rem;line-height:1.3}.lr-doc .md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;position:relative}.lr-doc .md-nav__link[for]:focus, .lr-doc .md-nav__link[for]:hover, .lr-doc .md-nav__link[href]:focus, .lr-doc .md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.lr-doc .md-nav__link[for]:focus code, .lr-doc .md-nav__link[for]:hover code, .lr-doc .md-nav__link[href]:focus code, .lr-doc .md-nav__link[href]:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.lr-doc .md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.lr-doc .md-nav--primary .md-nav__link[for=__toc]{display:none}.lr-doc .md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.lr-doc .md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.lr-doc .md-nav__container>.md-nav__link{margin-top:0}.lr-doc .md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.lr-doc .md-nav__icon{flex-shrink:0}.lr-doc .md-nav__source{display:none}@media screen and (max-width:76.234375em){.lr-doc .md-nav--primary, .lr-doc .md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.lr-doc .md-nav--primary .md-nav__item, .lr-doc .md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.lr-doc .md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}.lr-doc [dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.lr-doc .md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.lr-doc .md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:\"\";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.lr-doc .md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.lr-doc .md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.lr-doc .md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.lr-doc .md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.lr-doc .md-nav--primary .md-nav__list{flex:1}.lr-doc .md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.lr-doc .md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.lr-doc .md-nav--primary .md-nav__item--active>.md-nav__link:focus, .lr-doc .md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.lr-doc .md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.lr-doc .md-nav--primary .md-nav__link svg{margin-top:.1em}.lr-doc .md-nav--primary .md-nav__link>.md-nav__link{padding:0}.lr-doc [dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.lr-doc .md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.lr-doc .md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:\"\";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.lr-doc [dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.lr-doc .md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}.lr-doc [dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}.lr-doc [dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}.lr-doc [dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}.lr-doc [dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.lr-doc .md-nav--secondary{background-color:initial}.lr-doc .md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}.lr-doc [dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.lr-doc .md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.lr-doc .md-nav__toggle:checked~.md-nav>.md-nav__list{backface-visibility:hidden}}@media screen and (max-width:59.984375em){.lr-doc .md-nav--primary .md-nav__link[for=__toc]{display:flex}.lr-doc .md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:\"\"}.lr-doc .md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.lr-doc .md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.lr-doc .md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.lr-doc .md-nav--integrated .md-nav__link[for=__toc]{display:flex}.lr-doc .md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:\"\"}.lr-doc .md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.lr-doc .md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.lr-doc .md-nav{margin-bottom:-.4rem}.lr-doc .md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.lr-doc .md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.lr-doc .md-nav--secondary .md-nav__title .md-nav__icon{display:none}.lr-doc [dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}.lr-doc [dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.lr-doc .md-nav--secondary .md-nav__list{padding-bottom:.4rem}.lr-doc [dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}.lr-doc [dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.lr-doc .md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.lr-doc .md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.lr-doc .md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.lr-doc .md-nav--primary .md-nav__title .md-nav__icon{display:none}.lr-doc [dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.lr-doc .md-nav--primary .md-nav__list{padding-bottom:.4rem}.lr-doc [dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}.lr-doc [dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.lr-doc .md-nav__toggle~.md-nav{display:grid;grid-template-rows:minmax(.4rem,0fr);opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.lr-doc .md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.lr-doc .md-nav__toggle.md-toggle--indeterminate~.md-nav, .lr-doc .md-nav__toggle:checked~.md-nav{grid-template-rows:minmax(.4rem,1fr);opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.lr-doc .md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.lr-doc .md-nav__item--nested>.md-nav>.md-nav__title{display:none}.lr-doc .md-nav__item--section{display:block;margin:1.25em 0}.lr-doc .md-nav__item--section:last-child{margin-bottom:0}.lr-doc .md-nav__item--section>.md-nav__link{font-weight:700}.lr-doc .md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.lr-doc .md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.lr-doc .md-nav__item--section>.md-nav__link .md-icon, .lr-doc .md-nav__item--section>.md-nav__link>[for]{display:none}.lr-doc [dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}.lr-doc [dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.lr-doc .md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.lr-doc .md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.lr-doc .md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.lr-doc .md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.lr-doc .md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:\"\";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}.lr-doc [dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.lr-doc .md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after, .lr-doc .md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.lr-doc .md-nav--lifted>.md-nav__list>.md-nav__item, .lr-doc .md-nav--lifted>.md-nav__title{display:none}.lr-doc .md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.lr-doc .md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.lr-doc .md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.lr-doc .md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}.lr-doc [dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-left:-.6rem}.lr-doc [dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-right:-.6rem}.lr-doc .md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.lr-doc .md-nav--lifted .md-nav[data-md-level=\"1\"]{grid-template-rows:minmax(.4rem,1fr);opacity:1;visibility:visible}.lr-doc [dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}.lr-doc [dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.lr-doc .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.lr-doc .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.lr-doc .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.lr-doc .md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.lr-doc .md-pagination, .lr-doc .md-pagination>*{align-items:center;display:flex;justify-content:center}.lr-doc .md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.lr-doc .md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.lr-doc .md-pagination__link{transition:color 125ms,background-color 125ms}.lr-doc .md-pagination__link:focus, .lr-doc .md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.lr-doc .md-pagination__link:focus svg, .lr-doc .md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.lr-doc .md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.lr-doc .md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}.lr-doc{--md-path-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z\"\/><\/svg>')}.lr-doc .md-path{font-size:.7rem;margin:0 .8rem;overflow:auto;padding-top:1.2rem}.lr-doc .md-path:not([hidden]){display:block}@media screen and (min-width:76.25em){.lr-doc .md-path{margin:0 1.2rem}}.lr-doc .md-path__list{align-items:center;display:flex;gap:.2rem;list-style:none;margin:0;padding:0}.lr-doc .md-path__item:not(:first-child){display:inline-flex;gap:.2rem;white-space:nowrap}.lr-doc .md-path__item:not(:first-child):before{background-color:var(--md-default-fg-color--lighter);content:\"\";display:inline;height:.8rem;-webkit-mask-image:var(--md-path-icon);mask-image:var(--md-path-icon);width:.8rem}.lr-doc .md-path__link{align-items:center;color:var(--md-default-fg-color--light);display:flex}.lr-doc .md-path__link:focus, .lr-doc .md-path__link:hover{color:var(--md-accent-fg-color)}.lr-doc{--md-post-pin-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2z\"\/><\/svg>')}.lr-doc .md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.lr-doc .md-post__back{display:none}}.lr-doc [dir=rtl] .md-post__back svg{transform:scaleX(-1)}.lr-doc .md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.lr-doc .md-post .md-post__meta a{transition:color 125ms}.lr-doc .md-post .md-post__meta a:focus, .lr-doc .md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.lr-doc .md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.lr-doc .md-post--excerpt{margin-bottom:3.2rem}.lr-doc .md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.lr-doc .md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}.lr-doc [dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}.lr-doc [dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.lr-doc .md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.lr-doc .md-post>.md-nav--secondary{margin:1em 0}.lr-doc .md-pin{background:var(--md-default-fg-color--lightest);border-radius:1rem;margin-top:-.05rem;padding:.2rem}.lr-doc .md-pin:after{background-color:currentcolor;content:\"\";display:block;height:.6rem;margin:0 auto;-webkit-mask-image:var(--md-post-pin-icon);mask-image:var(--md-post-pin-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.6rem}.lr-doc .md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.lr-doc .md-profile__description{flex-grow:1}.lr-doc .md-content--post{display:flex}@media screen and (max-width:76.234375em){.lr-doc .md-content--post{flex-flow:column-reverse}}.lr-doc .md-content--post>.md-content__inner{flex-grow:1;min-width:0}@media screen and (min-width:76.25em){.lr-doc [dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}.lr-doc [dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.lr-doc .md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.lr-doc .md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.lr-doc .md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.lr-doc .md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.lr-doc .md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.lr-doc .md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.lr-doc .md-sidebar.md-sidebar--post .md-nav__link{padding:0}.lr-doc .md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}.lr-doc{--md-progress-value:0;--md-progress-delay:400ms}.lr-doc .md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}.lr-doc{--md-search-result-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h7c-.41-.25-.8-.56-1.14-.9-.33-.33-.61-.7-.86-1.1H6V4h7v5h5v1.18c.71.16 1.39.43 2 .82V8zm6.31 16.9c1.33-2.11.69-4.9-1.4-6.22-2.11-1.33-4.91-.68-6.22 1.4-1.34 2.11-.69 4.89 1.4 6.22 1.46.93 3.32.93 4.79.02L22 23.39 23.39 22zm-3.81.1a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5\"\/><\/svg>')}.lr-doc .md-search{position:relative}@media screen and (min-width:60em){.lr-doc .md-search{padding:.2rem 0}}.lr-doc .no-js .md-search{display:none}.lr-doc .md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.984375em){.lr-doc [dir=ltr] .md-search__overlay{left:-2.2rem}.lr-doc [dir=rtl] .md-search__overlay{right:-2.2rem}.lr-doc .md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search__overlay{left:0}.lr-doc [dir=rtl] .md-search__overlay{right:0}.lr-doc .md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.984375em){.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.984375em){.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.984375em){.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.lr-doc .md-search__inner{backface-visibility:hidden}@media screen and (max-width:59.984375em){.lr-doc [dir=ltr] .md-search__inner{left:0}.lr-doc [dir=rtl] .md-search__inner{right:0}.lr-doc .md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}.lr-doc [dir=rtl] .md-search__inner{transform:translateX(-5%)}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search__inner{float:right}.lr-doc [dir=rtl] .md-search__inner{float:left}.lr-doc .md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.lr-doc .md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.lr-doc .md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.lr-doc .md-search__form:hover{background-color:#ffffff1f}}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}.lr-doc [dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}.lr-doc [dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.lr-doc .md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.lr-doc .md-search__input::placeholder{transition:color .25s}.lr-doc .md-search__input::placeholder, .lr-doc .md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.lr-doc .md-search__input::-ms-clear{display:none}@media screen and (max-width:59.984375em){.lr-doc .md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search__input{padding-left:2.2rem}.lr-doc [dir=rtl] .md-search__input{padding-right:2.2rem}.lr-doc .md-search__input{color:inherit;font-size:.8rem}.lr-doc .md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.lr-doc .md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon{color:var(--md-default-fg-color--light)}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:#0000}}.lr-doc .md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.lr-doc .md-search__icon:hover{opacity:.7}.lr-doc [dir=ltr] .md-search__icon[for=__search]{left:.5rem}.lr-doc [dir=rtl] .md-search__icon[for=__search]{right:.5rem}.lr-doc .md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}.lr-doc [dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.984375em){.lr-doc [dir=ltr] .md-search__icon[for=__search]{left:.8rem}.lr-doc [dir=rtl] .md-search__icon[for=__search]{right:.8rem}.lr-doc .md-search__icon[for=__search]{top:.6rem}.lr-doc .md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.lr-doc .md-search__icon[for=__search]{pointer-events:none}.lr-doc .md-search__icon[for=__search] svg:last-child{display:none}}.lr-doc [dir=ltr] .md-search__options{right:.5rem}.lr-doc [dir=rtl] .md-search__options{left:.5rem}.lr-doc .md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.984375em){.lr-doc [dir=ltr] .md-search__options{right:.8rem}.lr-doc [dir=rtl] .md-search__options{left:.8rem}.lr-doc .md-search__options{top:.6rem}}.lr-doc [dir=ltr] .md-search__options>.md-icon{margin-left:.2rem}.lr-doc [dir=rtl] .md-search__options>.md-icon{margin-right:.2rem}.lr-doc .md-search__options>.md-icon{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.lr-doc .md-search__options>.md-icon:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon{opacity:1;pointer-events:auto;transform:scale(1)}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon:hover{opacity:.7}.lr-doc [dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}.lr-doc [dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.lr-doc .md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search__suggest{padding-left:2.2rem}.lr-doc [dir=rtl] .md-search__suggest{padding-right:2.2rem}.lr-doc .md-search__suggest{font-size:.8rem}}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}.lr-doc [dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}.lr-doc [dir=ltr] .md-search__output, .lr-doc [dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}.lr-doc [dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.lr-doc .md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.984375em){.lr-doc .md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.lr-doc .md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.lr-doc .md-search__scrollwrap{backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.lr-doc .md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.234375em){.lr-doc .md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.lr-doc .md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.lr-doc .md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.lr-doc [data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.lr-doc .md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.lr-doc .md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.lr-doc .md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.lr-doc .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.lr-doc .md-search-result{color:var(--md-default-fg-color);word-break:break-word}.lr-doc .md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search-result__meta{padding-left:2.2rem}.lr-doc [dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.lr-doc .md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.lr-doc .md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.lr-doc .md-search-result__item:first-child{box-shadow:none}.lr-doc .md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.lr-doc .md-search-result__link:focus, .lr-doc .md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.lr-doc .md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.lr-doc .md-search-result__more>summary{cursor:pointer;display:block;outline:none;position:sticky;scroll-snap-align:start;top:0;z-index:1}.lr-doc .md-search-result__more>summary::marker{display:none}.lr-doc .md-search-result__more>summary::-webkit-details-marker{display:none}.lr-doc .md-search-result__more>summary>div{color:var(--md-typeset-a-color);font-size:.64rem;padding:.75em .8rem;transition:color .25s,background-color .25s}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search-result__more>summary>div{padding-left:2.2rem}.lr-doc [dir=rtl] .md-search-result__more>summary>div{padding-right:2.2rem}}.lr-doc .md-search-result__more>summary:focus>div, .lr-doc .md-search-result__more>summary:hover>div{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.lr-doc .md-search-result__more[open]>summary{background-color:var(--md-default-bg-color)}.lr-doc .md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){.lr-doc [dir=ltr] .md-search-result__article{padding-left:2.2rem}.lr-doc [dir=rtl] .md-search-result__article{padding-right:2.2rem}}.lr-doc [dir=ltr] .md-search-result__icon{left:0}.lr-doc [dir=rtl] .md-search-result__icon{right:0}.lr-doc .md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.984375em){.lr-doc .md-search-result__icon{display:none}}.lr-doc .md-search-result__icon:after{background-color:currentcolor;content:\"\";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.lr-doc [dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.lr-doc .md-search-result .md-typeset{color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.6}.lr-doc .md-search-result .md-typeset h1{color:var(--md-default-fg-color);font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}.lr-doc .md-search-result .md-typeset h1 mark{text-decoration:none}.lr-doc .md-search-result .md-typeset h2{color:var(--md-default-fg-color);font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.lr-doc .md-search-result .md-typeset h2 mark{text-decoration:none}.lr-doc .md-search-result__terms{color:var(--md-default-fg-color);display:block;font-size:.64rem;font-style:italic;margin:.5em 0}.lr-doc .md-search-result mark{background-color:initial;color:var(--md-accent-fg-color);text-decoration:underline}.lr-doc .md-select{position:relative;z-index:1}.lr-doc .md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.lr-doc .md-select:focus-within .md-select__inner, .lr-doc .md-select:hover .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.lr-doc .md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:\"\";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.lr-doc .md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.lr-doc .md-select__item{line-height:1.8rem}.lr-doc [dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}.lr-doc [dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.lr-doc .md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.lr-doc .md-select__link:focus, .lr-doc .md-select__link:hover{color:var(--md-accent-fg-color)}.lr-doc .md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.lr-doc .md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.lr-doc .md-sidebar{display:none}}@media screen and (max-width:76.234375em){.lr-doc [dir=ltr] .md-sidebar--primary{left:-12.1rem}.lr-doc [dir=rtl] .md-sidebar--primary{right:-12.1rem}.lr-doc .md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}.lr-doc [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}.lr-doc [dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.lr-doc .md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.lr-doc .md-sidebar{height:0}.lr-doc .no-js .md-sidebar{height:auto}.lr-doc .md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.lr-doc .md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.lr-doc .md-sidebar--secondary{height:0}.lr-doc .no-js .md-sidebar--secondary{height:auto}.lr-doc .md-sidebar--secondary:not([hidden]){display:block}.lr-doc .md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.lr-doc .md-sidebar__scrollwrap{backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000}@media screen and (min-width:60em){.lr-doc .md-sidebar__scrollwrap{scrollbar-gutter:stable;scrollbar-width:thin}}.lr-doc .md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.lr-doc .md-sidebar__scrollwrap:focus-within, .lr-doc .md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.lr-doc .md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb, .lr-doc .md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.lr-doc .md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover, .lr-doc .md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.lr-doc .md-sidebar__scrollwrap{scrollbar-gutter:auto}.lr-doc [dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}.lr-doc [dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.lr-doc .md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}.lr-doc [data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}.lr-doc{--md-source-forks-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 16 16\"><path d=\"M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0M5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0m6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5m-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0\"\/><\/svg>');--md-source-repositories-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.5 2.5 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.25.25 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z\"\/><\/svg>');--md-source-stars-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 16 16\"><path d=\"M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25m0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41z\"\/><\/svg>');--md-source-version-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 16 16\"><path d=\"M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2\"\/><\/svg>')}.lr-doc .md-source{backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.lr-doc .md-source:hover{opacity:.7}.lr-doc .md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}.lr-doc [dir=ltr] .md-source__icon svg{margin-left:.6rem}.lr-doc [dir=rtl] .md-source__icon svg{margin-right:.6rem}.lr-doc .md-source__icon svg{margin-top:.6rem}.lr-doc [dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}.lr-doc [dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}.lr-doc [dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}.lr-doc [dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}.lr-doc [dir=ltr] .md-source__repository{margin-left:.6rem}.lr-doc [dir=rtl] .md-source__repository{margin-right:.6rem}.lr-doc .md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.lr-doc .md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.lr-doc .md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.lr-doc .md-source__fact{overflow:hidden;text-overflow:ellipsis}.lr-doc .md-source__repository--active .md-source__fact{animation:fact .4s ease-out}.lr-doc [dir=ltr] .md-source__fact:before{margin-right:.1rem}.lr-doc [dir=rtl] .md-source__fact:before{margin-left:.1rem}.lr-doc .md-source__fact:before{background-color:currentcolor;content:\"\";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.lr-doc .md-source__fact:nth-child(1n+2){flex-shrink:0}.lr-doc .md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.lr-doc .md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.lr-doc .md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.lr-doc .md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.lr-doc .md-source-file{margin:1em 0}.lr-doc [dir=ltr] .md-source-file__fact{margin-right:.6rem}.lr-doc [dir=rtl] .md-source-file__fact{margin-left:.6rem}.lr-doc .md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.lr-doc .md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}.lr-doc [dir=ltr] .md-source-file__fact .md-author{float:left}.lr-doc [dir=rtl] .md-source-file__fact .md-author{float:right}.lr-doc .md-source-file__fact .md-author{margin-right:.2rem}.lr-doc .md-source-file__fact svg{width:.9rem}.lr-doc{--md-status:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2z\"\/><\/svg>');--md-status--new:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"m23 12-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68zm-10 5h-2v-2h2zm0-4h-2V7h2z\"\/><\/svg>');--md-status--deprecated:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zm0 5h2v9H9zm4 0h2v9h-2z\"\/><\/svg>');--md-status--encrypted:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 1 3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5zm0 6c1.4 0 2.8 1.1 2.8 2.5V11c.6 0 1.2.6 1.2 1.3v3.5c0 .6-.6 1.2-1.3 1.2H9.2c-.6 0-1.2-.6-1.2-1.3v-3.5c0-.6.6-1.2 1.2-1.2V9.5C9.2 8.1 10.6 7 12 7m0 1.2c-.8 0-1.5.5-1.5 1.3V11h3V9.5c0-.8-.7-1.3-1.5-1.3\"\/><\/svg>')}.lr-doc .md-status:after{background-color:var(--md-default-fg-color--light);content:\"\";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.lr-doc .md-status:hover:after{background-color:currentcolor}.lr-doc .md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.lr-doc .md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.lr-doc .md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.lr-doc .md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.lr-doc .md-tabs{display:none}}@media screen and (max-width:76.234375em){.lr-doc .md-tabs{display:none}}.lr-doc .md-tabs[hidden]{pointer-events:none}.lr-doc [dir=ltr] .md-tabs__list{margin-left:.2rem}.lr-doc [dir=rtl] .md-tabs__list{margin-right:.2rem}.lr-doc .md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.lr-doc .md-tabs__list::-webkit-scrollbar{display:none}.lr-doc .md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.lr-doc .md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.lr-doc .md-tabs__link{backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.lr-doc .md-tabs__link:focus, .lr-doc .md-tabs__link:hover{color:inherit;opacity:1}.lr-doc [dir=ltr] .md-tabs__link svg{margin-right:.4rem}.lr-doc [dir=rtl] .md-tabs__link svg{margin-left:.4rem}.lr-doc .md-tabs__link svg{fill:currentcolor;height:1.3em}.lr-doc .md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.lr-doc .md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.lr-doc .md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.lr-doc .md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.lr-doc .md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.lr-doc .md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.lr-doc .md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.lr-doc .md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.lr-doc .md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.lr-doc .md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.lr-doc .md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.lr-doc .md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.lr-doc .md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.lr-doc .md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.lr-doc .md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.lr-doc .md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}.lr-doc{--md-tag-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"m5.41 21 .71-4h-4l.35-2h4l1.06-6h-4l.35-2h4l.71-4h2l-.71 4h6l.71-4h2l-.71 4h4l-.35 2h-4l-1.06 6h4l-.35 2h-4l-.71 4h-2l.71-4h-6l-.71 4zM9.53 9l-1.06 6h6l1.06-6z\"\/><\/svg>')}.lr-doc .md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.lr-doc .md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.lr-doc .md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.lr-doc .md-typeset .md-tag[href]:focus, .lr-doc .md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.lr-doc [id]>.md-typeset .md-tag{vertical-align:text-top}.lr-doc .md-typeset .md-tag-shadow{opacity:.5}.lr-doc .md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:\"\";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.lr-doc .md-typeset .md-tag-icon[href]:focus:before, .lr-doc .md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}.lr-doc{--md-annotation-bg-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2\"\/><\/svg>');--md-annotation-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M17 13h-4v4h-2v-4H7v-2h4V7h2v4h4m-5-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2\"\/><\/svg>')}.lr-doc .md-tooltip{backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.lr-doc .md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.lr-doc .md-tooltip--inline{font-weight:700;-webkit-user-select:none;user-select:none;width:auto}.lr-doc .md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.lr-doc .md-tooltip--inline .md-tooltip__inner{font-size:.5rem;padding:.2rem .4rem}.lr-doc [hidden]+.md-tooltip--inline{display:none}.lr-doc .focus-visible>.md-tooltip, .lr-doc .md-tooltip:target{outline:var(--md-accent-fg-color) auto}.lr-doc .md-tooltip__inner{font-size:.64rem;padding:.8rem}.lr-doc .md-tooltip__inner.md-typeset>:first-child{margin-top:0}.lr-doc .md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.lr-doc .md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}.lr-doc [dir=rtl] .md-annotation{direction:rtl}.lr-doc code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.lr-doc .md-annotation:not([hidden]){display:inline-block;line-height:1.25}.lr-doc .md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.lr-doc .md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.lr-doc .md-annotation__index{width:2.2ch}.lr-doc [data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.lr-doc .md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.lr-doc .md-annotation__index:after, .lr-doc .md-annotation__index:before{content:\"\";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.lr-doc .md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.lr-doc .md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.lr-doc .md-tooltip--active+.md-annotation__index:after, .lr-doc :hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.lr-doc .md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.lr-doc .md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.lr-doc .md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.lr-doc .md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.lr-doc .md-typeset .md-annotation-list{counter-reset:annotation;list-style:none!important}.lr-doc .md-typeset .md-annotation-list li{position:relative}.lr-doc [dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}.lr-doc [dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.lr-doc .md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(annotation);counter-increment:annotation;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}.lr-doc{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.lr-doc .md-tooltip2{backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(-.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.lr-doc .md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:\"\";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.lr-doc .md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 hsla(0,0%,0%,.05))}.lr-doc .md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 hsla(0,0%,0%,.05));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.lr-doc .md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.5,1),opacity .25s,z-index 0ms;z-index:2}.lr-doc .md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.lr-doc .md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.lr-doc .md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.lr-doc .md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.lr-doc [role=dialog]>.md-tooltip2__inner{font-size:.64rem;overflow:auto;padding:0 .8rem;pointer-events:auto;width:var(--md-tooltip-width)}.lr-doc [role=dialog]>.md-tooltip2__inner:after, .lr-doc [role=dialog]>.md-tooltip2__inner:before{content:\"\";display:block;height:.8rem;position:sticky;width:100%;z-index:10}.lr-doc [role=dialog]>.md-tooltip2__inner:before{background:linear-gradient(var(--md-default-bg-color),#0000 75%);top:0}.lr-doc [role=dialog]>.md-tooltip2__inner:after{background:linear-gradient(#0000,var(--md-default-bg-color) 75%);bottom:0}.lr-doc [role=tooltip]>.md-tooltip2__inner{font-size:.5rem;font-weight:700;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)\/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:fit-content}.lr-doc .md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.lr-doc .md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}.lr-doc [dir=ltr] .md-top{margin-left:50%}.lr-doc [dir=rtl] .md-top{margin-right:50%}.lr-doc .md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.lr-doc .md-top{display:none}}.lr-doc [dir=rtl] .md-top{transform:translate(50%)}.lr-doc .md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}.lr-doc [dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.lr-doc .md-top:focus, .lr-doc .md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.lr-doc .md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}.lr-doc{--md-version-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 320 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https:\/\/fontawesome.com License - https:\/\/fontawesome.com\/license\/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d=\"M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192h-256c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 7 34.8l128 128z\"\/><\/svg>')}.lr-doc .md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}.lr-doc [dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}.lr-doc [dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.lr-doc .md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}.lr-doc [dir=ltr] .md-version__current:after{margin-left:.4rem}.lr-doc [dir=rtl] .md-version__current:after{margin-right:.4rem}.lr-doc .md-version__current:after{background-color:currentcolor;content:\"\";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.lr-doc .md-version__alias{margin-left:.3rem;opacity:.7}.lr-doc .md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.lr-doc .md-version:focus-within .md-version__list, .lr-doc .md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.lr-doc .md-version:hover .md-version__list{animation:hoverfix .25s forwards}.lr-doc .md-version:focus-within .md-version__list{animation:none}}.lr-doc .md-version__item{line-height:1.8rem}.lr-doc [dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}.lr-doc [dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.lr-doc .md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.lr-doc .md-version__link:focus, .lr-doc .md-version__link:hover{color:var(--md-accent-fg-color)}.lr-doc .md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}.lr-doc{--md-admonition-icon--note:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m3.1 5.07c.14 0 .28.05.4.16l1.27 1.27c.23.22.23.57 0 .78l-1 1-2.05-2.05 1-1c.1-.11.24-.16.38-.16m-1.97 1.74 2.06 2.06-6.06 6.06H7.07v-2.06z\"\/><\/svg>');--md-admonition-icon--abstract:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2\"\/><\/svg>');--md-admonition-icon--info:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2\"\/><\/svg>');--md-admonition-icon--tip:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M17.66 11.2c-.23-.3-.51-.56-.77-.82-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32-2.59 2.08-3.61 5.75-2.39 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.23.1-.47.04-.66-.12a.6.6 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5.14.6.41 1.2.71 1.73 1.08 1.73 2.95 2.97 4.96 3.22 2.14.27 4.43-.12 6.07-1.6 1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6-1.12.4-2.24-.16-2.9-.82 1.19-.28 1.9-1.16 2.11-2.05.17-.8-.15-1.46-.28-2.23-.12-.74-.1-1.37.17-2.06.19.38.39.76.63 1.06.77 1 1.98 1.44 2.24 2.8.04.14.06.28.06.43.03.82-.33 1.72-.93 2.27\"\/><\/svg>');--md-admonition-icon--success:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z\"\/><\/svg>');--md-admonition-icon--question:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10\"\/><\/svg>');--md-admonition-icon--warning:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z\"\/><\/svg>');--md-admonition-icon--failure:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\/><\/svg>');--md-admonition-icon--danger:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"m11.5 20 4.86-9.73H13V4l-5 9.73h3.5zM12 2c2.75 0 5.1 1 7.05 2.95S22 9.25 22 12s-1 5.1-2.95 7.05S14.75 22 12 22s-5.1-1-7.05-2.95S2 14.75 2 12s1-5.1 2.95-7.05S9.25 2 12 2\"\/><\/svg>');--md-admonition-icon--bug:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 13h2v1h-2zm10-8v6c0 5.5-3.8 10.7-9 12-5.2-1.3-9-6.5-9-12V5l9-4zm-4 5h-2.2c-.2-.6-.6-1.1-1.1-1.5l1.2-1.2-.7-.7L12.8 8H12c-.2 0-.5 0-.7.1L9.9 6.6l-.8.8 1.2 1.2c-.5.3-.9.8-1.1 1.4H7v1h2v1H7v1h2v1H7v1h2.2c.4 1.2 1.5 2 2.8 2s2.4-.8 2.8-2H17v-1h-2v-1h2v-1h-2v-1h2zm-6 2h2v-1h-2z\"\/><\/svg>');--md-admonition-icon--example:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 2v2h1v14a4 4 0 0 0 4 4 4 4 0 0 0 4-4V4h1V2zm4 14c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m2-4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m1-5h-4V4h4z\"\/><\/svg>');--md-admonition-icon--quote:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3z\"\/><\/svg>')}.lr-doc .md-typeset .admonition, .lr-doc .md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.lr-doc .md-typeset .admonition, .lr-doc .md-typeset details{box-shadow:none}}.lr-doc .md-typeset .admonition:focus-within, .lr-doc .md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.lr-doc .md-typeset .admonition>*, .lr-doc .md-typeset details>*{box-sizing:border-box}.lr-doc .md-typeset .admonition .admonition, .lr-doc .md-typeset .admonition details, .lr-doc .md-typeset details .admonition, .lr-doc .md-typeset details details{margin-bottom:1em;margin-top:1em}.lr-doc .md-typeset .admonition .md-typeset__scrollwrap, .lr-doc .md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.lr-doc .md-typeset .admonition .md-typeset__table, .lr-doc .md-typeset details .md-typeset__table{padding:0 .6rem}.lr-doc .md-typeset .admonition>.tabbed-set:only-child, .lr-doc .md-typeset details>.tabbed-set:only-child{margin-top:0}.lr-doc .md-typeset .admonition>:last-child, .lr-doc .md-typeset details>:last-child{margin-bottom:.6rem}.lr-doc [dir=ltr] .md-typeset .admonition-title, .lr-doc [dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}.lr-doc [dir=rtl] .md-typeset .admonition-title, .lr-doc [dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}.lr-doc [dir=ltr] .md-typeset .admonition-title, .lr-doc [dir=ltr] .md-typeset summary{border-left-width:.2rem}.lr-doc [dir=rtl] .md-typeset .admonition-title, .lr-doc [dir=rtl] .md-typeset summary{border-right-width:.2rem}.lr-doc [dir=ltr] .md-typeset .admonition-title, .lr-doc [dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}.lr-doc [dir=ltr] .md-typeset .admonition-title, .lr-doc [dir=ltr] .md-typeset summary, .lr-doc [dir=rtl] .md-typeset .admonition-title, .lr-doc [dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}.lr-doc [dir=rtl] .md-typeset .admonition-title, .lr-doc [dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.lr-doc .md-typeset .admonition-title, .lr-doc .md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}.lr-doc .md-typeset .admonition-title:last-child, .lr-doc .md-typeset summary:last-child{margin-bottom:0}.lr-doc [dir=ltr] .md-typeset .admonition-title:before, .lr-doc [dir=ltr] .md-typeset summary:before{left:.6rem}.lr-doc [dir=rtl] .md-typeset .admonition-title:before, .lr-doc [dir=rtl] .md-typeset summary:before{right:.6rem}.lr-doc .md-typeset .admonition-title:before, .lr-doc .md-typeset summary:before{background-color:#448aff;content:\"\";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.lr-doc .md-typeset .admonition-title code, .lr-doc .md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.lr-doc .md-typeset .admonition.note, .lr-doc .md-typeset details.note{border-color:#448aff}.lr-doc .md-typeset .admonition.note:focus-within, .lr-doc .md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.lr-doc .md-typeset .note>.admonition-title, .lr-doc .md-typeset .note>summary{background-color:#448aff1a}.lr-doc .md-typeset .note>.admonition-title:before, .lr-doc .md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.lr-doc .md-typeset .note>.admonition-title:after, .lr-doc .md-typeset .note>summary:after{color:#448aff}.lr-doc .md-typeset .admonition.abstract, .lr-doc .md-typeset details.abstract{border-color:#00b0ff}.lr-doc .md-typeset .admonition.abstract:focus-within, .lr-doc .md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.lr-doc .md-typeset .abstract>.admonition-title, .lr-doc .md-typeset .abstract>summary{background-color:#00b0ff1a}.lr-doc .md-typeset .abstract>.admonition-title:before, .lr-doc .md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.lr-doc .md-typeset .abstract>.admonition-title:after, .lr-doc .md-typeset .abstract>summary:after{color:#00b0ff}.lr-doc .md-typeset .admonition.info, .lr-doc .md-typeset details.info{border-color:#00b8d4}.lr-doc .md-typeset .admonition.info:focus-within, .lr-doc .md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.lr-doc .md-typeset .info>.admonition-title, .lr-doc .md-typeset .info>summary{background-color:#00b8d41a}.lr-doc .md-typeset .info>.admonition-title:before, .lr-doc .md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.lr-doc .md-typeset .info>.admonition-title:after, .lr-doc .md-typeset .info>summary:after{color:#00b8d4}.lr-doc .md-typeset .admonition.tip, .lr-doc .md-typeset details.tip{border-color:#00bfa5}.lr-doc .md-typeset .admonition.tip:focus-within, .lr-doc .md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.lr-doc .md-typeset .tip>.admonition-title, .lr-doc .md-typeset .tip>summary{background-color:#00bfa51a}.lr-doc .md-typeset .tip>.admonition-title:before, .lr-doc .md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.lr-doc .md-typeset .tip>.admonition-title:after, .lr-doc .md-typeset .tip>summary:after{color:#00bfa5}.lr-doc .md-typeset .admonition.success, .lr-doc .md-typeset details.success{border-color:#00c853}.lr-doc .md-typeset .admonition.success:focus-within, .lr-doc .md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.lr-doc .md-typeset .success>.admonition-title, .lr-doc .md-typeset .success>summary{background-color:#00c8531a}.lr-doc .md-typeset .success>.admonition-title:before, .lr-doc .md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.lr-doc .md-typeset .success>.admonition-title:after, .lr-doc .md-typeset .success>summary:after{color:#00c853}.lr-doc .md-typeset .admonition.question, .lr-doc .md-typeset details.question{border-color:#64dd17}.lr-doc .md-typeset .admonition.question:focus-within, .lr-doc .md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.lr-doc .md-typeset .question>.admonition-title, .lr-doc .md-typeset .question>summary{background-color:#64dd171a}.lr-doc .md-typeset .question>.admonition-title:before, .lr-doc .md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.lr-doc .md-typeset .question>.admonition-title:after, .lr-doc .md-typeset .question>summary:after{color:#64dd17}.lr-doc .md-typeset .admonition.warning, .lr-doc .md-typeset details.warning{border-color:#ff9100}.lr-doc .md-typeset .admonition.warning:focus-within, .lr-doc .md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.lr-doc .md-typeset .warning>.admonition-title, .lr-doc .md-typeset .warning>summary{background-color:#ff91001a}.lr-doc .md-typeset .warning>.admonition-title:before, .lr-doc .md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.lr-doc .md-typeset .warning>.admonition-title:after, .lr-doc .md-typeset .warning>summary:after{color:#ff9100}.lr-doc .md-typeset .admonition.failure, .lr-doc .md-typeset details.failure{border-color:#ff5252}.lr-doc .md-typeset .admonition.failure:focus-within, .lr-doc .md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.lr-doc .md-typeset .failure>.admonition-title, .lr-doc .md-typeset .failure>summary{background-color:#ff52521a}.lr-doc .md-typeset .failure>.admonition-title:before, .lr-doc .md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.lr-doc .md-typeset .failure>.admonition-title:after, .lr-doc .md-typeset .failure>summary:after{color:#ff5252}.lr-doc .md-typeset .admonition.danger, .lr-doc .md-typeset details.danger{border-color:#ff1744}.lr-doc .md-typeset .admonition.danger:focus-within, .lr-doc .md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.lr-doc .md-typeset .danger>.admonition-title, .lr-doc .md-typeset .danger>summary{background-color:#ff17441a}.lr-doc .md-typeset .danger>.admonition-title:before, .lr-doc .md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.lr-doc .md-typeset .danger>.admonition-title:after, .lr-doc .md-typeset .danger>summary:after{color:#ff1744}.lr-doc .md-typeset .admonition.bug, .lr-doc .md-typeset details.bug{border-color:#f50057}.lr-doc .md-typeset .admonition.bug:focus-within, .lr-doc .md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.lr-doc .md-typeset .bug>.admonition-title, .lr-doc .md-typeset .bug>summary{background-color:#f500571a}.lr-doc .md-typeset .bug>.admonition-title:before, .lr-doc .md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.lr-doc .md-typeset .bug>.admonition-title:after, .lr-doc .md-typeset .bug>summary:after{color:#f50057}.lr-doc .md-typeset .admonition.example, .lr-doc .md-typeset details.example{border-color:#7c4dff}.lr-doc .md-typeset .admonition.example:focus-within, .lr-doc .md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.lr-doc .md-typeset .example>.admonition-title, .lr-doc .md-typeset .example>summary{background-color:#7c4dff1a}.lr-doc .md-typeset .example>.admonition-title:before, .lr-doc .md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.lr-doc .md-typeset .example>.admonition-title:after, .lr-doc .md-typeset .example>summary:after{color:#7c4dff}.lr-doc .md-typeset .admonition.quote, .lr-doc .md-typeset details.quote{border-color:#9e9e9e}.lr-doc .md-typeset .admonition.quote:focus-within, .lr-doc .md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.lr-doc .md-typeset .quote>.admonition-title, .lr-doc .md-typeset .quote>summary{background-color:#9e9e9e1a}.lr-doc .md-typeset .quote>.admonition-title:before, .lr-doc .md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.lr-doc .md-typeset .quote>.admonition-title:after, .lr-doc .md-typeset .quote>summary:after{color:#9e9e9e}.lr-doc{--md-footnotes-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.42L5.83 13H21V7z\"\/><\/svg>')}.lr-doc .md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}.lr-doc [dir=ltr] .md-typeset .footnote>ol{margin-left:0}.lr-doc [dir=rtl] .md-typeset .footnote>ol{margin-right:0}.lr-doc .md-typeset .footnote>ol>li{transition:color 125ms}.lr-doc .md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.lr-doc .md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.lr-doc .md-typeset .footnote>ol>li:hover .footnote-backref, .lr-doc .md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.lr-doc .md-typeset .footnote>ol>li>:first-child{margin-top:0}.lr-doc .md-typeset .footnote-ref{font-size:.75em;font-weight:700}.lr-doc .md-typeset .footnote-ref{outline-offset:.1rem}.lr-doc .md-typeset [id^=\"fnref:\"]:target>.footnote-ref{outline:auto}.lr-doc .md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.lr-doc .md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}.lr-doc [dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.lr-doc .md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.lr-doc .md-typeset .footnote-backref:before{background-color:currentcolor;content:\"\";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}.lr-doc [dir=rtl] .md-typeset .footnote-backref:before{transform:scaleX(-1)}.lr-doc [dir=ltr] .md-typeset .headerlink{margin-left:.5rem}.lr-doc [dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.lr-doc .md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.lr-doc .md-typeset .headerlink{display:none}}.lr-doc .md-typeset .headerlink:focus, .lr-doc .md-typeset :hover>.headerlink, .lr-doc .md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.lr-doc .md-typeset .headerlink:focus, .lr-doc .md-typeset .headerlink:hover, .lr-doc .md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.lr-doc .md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.lr-doc .md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.lr-doc .md-typeset h1:target, .lr-doc .md-typeset h2:target, .lr-doc .md-typeset h3:target{--md-scroll-offset:0.2rem}.lr-doc .md-typeset h4:target{--md-scroll-offset:0.15rem}.lr-doc .md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.lr-doc .md-typeset div.arithmatex{margin:0 -.8rem}.lr-doc .md-typeset div.arithmatex>*{width:min-content}}.lr-doc .md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.lr-doc .md-typeset div.arithmatex>* mjx-container{margin:0!important}.lr-doc .md-typeset div.arithmatex mjx-assistive-mml{height:0}.lr-doc .md-typeset .katex-html svg{max-width:revert}.lr-doc .md-typeset del.critic{background-color:var(--md-typeset-del-color)}.lr-doc .md-typeset del.critic, .lr-doc .md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.lr-doc .md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.lr-doc .md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.lr-doc .md-typeset .critic.comment:before{content:\"\/* \"}.lr-doc .md-typeset .critic.comment:after{content:\" *\/\"}.lr-doc .md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.lr-doc .md-typeset .critic.block>:first-child{margin-top:.5em}.lr-doc .md-typeset .critic.block>:last-child{margin-bottom:.5em}.lr-doc{--md-details-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z\"\/><\/svg>')}.lr-doc .md-typeset details{display:flow-root;overflow:visible;padding-top:0}.lr-doc .md-typeset details[open]>summary:after{transform:rotate(90deg)}.lr-doc .md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.lr-doc .md-typeset details:not([open])>summary{border-radius:.1rem}.lr-doc [dir=ltr] .md-typeset summary{padding-right:1.8rem}.lr-doc [dir=rtl] .md-typeset summary{padding-left:1.8rem}.lr-doc [dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}.lr-doc [dir=ltr] .md-typeset summary, .lr-doc [dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}.lr-doc [dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.lr-doc .md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.lr-doc .md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.lr-doc .md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.lr-doc [dir=ltr] .md-typeset summary:after{right:.4rem}.lr-doc [dir=rtl] .md-typeset summary:after{left:.4rem}.lr-doc .md-typeset summary:after{background-color:currentcolor;content:\"\";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}.lr-doc [dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.lr-doc .md-typeset summary::marker{display:none}.lr-doc .md-typeset summary::-webkit-details-marker{display:none}.lr-doc .md-typeset .emojione, .lr-doc .md-typeset .gemoji, .lr-doc .md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.lr-doc .md-typeset .emojione svg, .lr-doc .md-typeset .gemoji svg, .lr-doc .md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.lr-doc .md-typeset .lg, .lr-doc .md-typeset .xl, .lr-doc .md-typeset .xxl, .lr-doc .md-typeset .xxxl{vertical-align:text-bottom}.lr-doc .md-typeset .middle{vertical-align:middle}.lr-doc .md-typeset .lg{--md-icon-size:1.5em}.lr-doc .md-typeset .xl{--md-icon-size:2.25em}.lr-doc .md-typeset .xxl{--md-icon-size:3em}.lr-doc .md-typeset .xxxl{--md-icon-size:4em}.lr-doc .highlight .o, .lr-doc .highlight .ow{color:var(--md-code-hl-operator-color)}.lr-doc .highlight .p{color:var(--md-code-hl-punctuation-color)}.lr-doc .highlight .cpf, .lr-doc .highlight .l, .lr-doc .highlight .s, .lr-doc .highlight .s1, .lr-doc .highlight .s2, .lr-doc .highlight .sb, .lr-doc .highlight .sc, .lr-doc .highlight .si, .lr-doc .highlight .ss{color:var(--md-code-hl-string-color)}.lr-doc .highlight .cp, .lr-doc .highlight .se, .lr-doc .highlight .sh, .lr-doc .highlight .sr, .lr-doc .highlight .sx{color:var(--md-code-hl-special-color)}.lr-doc .highlight .il, .lr-doc .highlight .m, .lr-doc .highlight .mb, .lr-doc .highlight .mf, .lr-doc .highlight .mh, .lr-doc .highlight .mi, .lr-doc .highlight .mo{color:var(--md-code-hl-number-color)}.lr-doc .highlight .k, .lr-doc .highlight .kd, .lr-doc .highlight .kn, .lr-doc .highlight .kp, .lr-doc .highlight .kr, .lr-doc .highlight .kt{color:var(--md-code-hl-keyword-color)}.lr-doc .highlight .kc, .lr-doc .highlight .n{color:var(--md-code-hl-name-color)}.lr-doc .highlight .bp, .lr-doc .highlight .nb, .lr-doc .highlight .no{color:var(--md-code-hl-constant-color)}.lr-doc .highlight .nc, .lr-doc .highlight .ne, .lr-doc .highlight .nf, .lr-doc .highlight .nn{color:var(--md-code-hl-function-color)}.lr-doc .highlight .nd, .lr-doc .highlight .ni, .lr-doc .highlight .nl, .lr-doc .highlight .nt{color:var(--md-code-hl-keyword-color)}.lr-doc .highlight .c, .lr-doc .highlight .c1, .lr-doc .highlight .ch, .lr-doc .highlight .cm, .lr-doc .highlight .cs, .lr-doc .highlight .sd{color:var(--md-code-hl-comment-color)}.lr-doc .highlight .na, .lr-doc .highlight .nv, .lr-doc .highlight .vc, .lr-doc .highlight .vg, .lr-doc .highlight .vi{color:var(--md-code-hl-variable-color)}.lr-doc .highlight .ge, .lr-doc .highlight .gh, .lr-doc .highlight .go, .lr-doc .highlight .gp, .lr-doc .highlight .gr, .lr-doc .highlight .gs, .lr-doc .highlight .gt, .lr-doc .highlight .gu{color:var(--md-code-hl-generic-color)}.lr-doc .highlight .gd, .lr-doc .highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.lr-doc .highlight .gd{background-color:var(--md-typeset-del-color)}.lr-doc .highlight .gi{background-color:var(--md-typeset-ins-color)}.lr-doc .highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.lr-doc .highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.lr-doc .highlight span.filename+pre{margin-top:0}.lr-doc .highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.lr-doc .highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.lr-doc .highlight code a[id]{position:absolute;visibility:hidden}.lr-doc .highlight code[data-md-copying]{display:initial}.lr-doc .highlight code[data-md-copying] .hll{display:contents}.lr-doc .highlight code[data-md-copying] .md-annotation{display:none}.lr-doc .highlighttable{display:flow-root}.lr-doc .highlighttable tbody, .lr-doc .highlighttable td{display:block;padding:0}.lr-doc .highlighttable tr{display:flex}.lr-doc .highlighttable pre{margin:0}.lr-doc .highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.lr-doc .highlighttable th.filename span.filename{margin-top:0}.lr-doc .highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.lr-doc .highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset}.lr-doc .highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.lr-doc .highlighttable .linenodiv span[class]{padding-right:.5882352941em}.lr-doc .highlighttable .code{flex:1;min-width:0}.lr-doc .linenodiv a{color:inherit}.lr-doc .md-typeset .highlighttable{direction:ltr;margin:1em 0}.lr-doc .md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.lr-doc .md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.lr-doc .md-typeset .highlight+.result:after{clear:both;content:\"\";display:block}@media screen and (max-width:44.984375em){.lr-doc .md-content__inner>.highlight{margin:1em -.8rem}.lr-doc .md-content__inner>.highlight>.filename, .lr-doc .md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code, .lr-doc .md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename, .lr-doc .md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos, .lr-doc .md-content__inner>.highlight>pre>code{border-radius:0}.lr-doc .md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.lr-doc .md-typeset .keys kbd:after, .lr-doc .md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.lr-doc .md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.lr-doc .md-typeset .keys .key-alt:before, .lr-doc .md-typeset .keys .key-left-alt:before, .lr-doc .md-typeset .keys .key-right-alt:before{content:\"\u2387\";padding-right:.4em}.lr-doc .md-typeset .keys .key-command:before, .lr-doc .md-typeset .keys .key-left-command:before, .lr-doc .md-typeset .keys .key-right-command:before{content:\"\u2318\";padding-right:.4em}.lr-doc .md-typeset .keys .key-control:before, .lr-doc .md-typeset .keys .key-left-control:before, .lr-doc .md-typeset .keys .key-right-control:before{content:\"\u2303\";padding-right:.4em}.lr-doc .md-typeset .keys .key-left-meta:before, .lr-doc .md-typeset .keys .key-meta:before, .lr-doc .md-typeset .keys .key-right-meta:before{content:\"\u25c6\";padding-right:.4em}.lr-doc .md-typeset .keys .key-left-option:before, .lr-doc .md-typeset .keys .key-option:before, .lr-doc .md-typeset .keys .key-right-option:before{content:\"\u2325\";padding-right:.4em}.lr-doc .md-typeset .keys .key-left-shift:before, .lr-doc .md-typeset .keys .key-right-shift:before, .lr-doc .md-typeset .keys .key-shift:before{content:\"\u21e7\";padding-right:.4em}.lr-doc .md-typeset .keys .key-left-super:before, .lr-doc .md-typeset .keys .key-right-super:before, .lr-doc .md-typeset .keys .key-super:before{content:\"\u2756\";padding-right:.4em}.lr-doc .md-typeset .keys .key-left-windows:before, .lr-doc .md-typeset .keys .key-right-windows:before, .lr-doc .md-typeset .keys .key-windows:before{content:\"\u229e\";padding-right:.4em}.lr-doc .md-typeset .keys .key-arrow-down:before{content:\"\u2193\";padding-right:.4em}.lr-doc .md-typeset .keys .key-arrow-left:before{content:\"\u2190\";padding-right:.4em}.lr-doc .md-typeset .keys .key-arrow-right:before{content:\"\u2192\";padding-right:.4em}.lr-doc .md-typeset .keys .key-arrow-up:before{content:\"\u2191\";padding-right:.4em}.lr-doc .md-typeset .keys .key-backspace:before{content:\"\u232b\";padding-right:.4em}.lr-doc .md-typeset .keys .key-backtab:before{content:\"\u21e4\";padding-right:.4em}.lr-doc .md-typeset .keys .key-caps-lock:before{content:\"\u21ea\";padding-right:.4em}.lr-doc .md-typeset .keys .key-clear:before{content:\"\u2327\";padding-right:.4em}.lr-doc .md-typeset .keys .key-context-menu:before{content:\"\u2630\";padding-right:.4em}.lr-doc .md-typeset .keys .key-delete:before{content:\"\u2326\";padding-right:.4em}.lr-doc .md-typeset .keys .key-eject:before{content:\"\u23cf\";padding-right:.4em}.lr-doc .md-typeset .keys .key-end:before{content:\"\u2913\";padding-right:.4em}.lr-doc .md-typeset .keys .key-escape:before{content:\"\u238b\";padding-right:.4em}.lr-doc .md-typeset .keys .key-home:before{content:\"\u2912\";padding-right:.4em}.lr-doc .md-typeset .keys .key-insert:before{content:\"\u2380\";padding-right:.4em}.lr-doc .md-typeset .keys .key-page-down:before{content:\"\u21df\";padding-right:.4em}.lr-doc .md-typeset .keys .key-page-up:before{content:\"\u21de\";padding-right:.4em}.lr-doc .md-typeset .keys .key-print-screen:before{content:\"\u2399\";padding-right:.4em}.lr-doc .md-typeset .keys .key-tab:after{content:\"\u21e5\";padding-left:.4em}.lr-doc .md-typeset .keys .key-num-enter:after{content:\"\u2324\";padding-left:.4em}.lr-doc .md-typeset .keys .key-enter:after{content:\"\u23ce\";padding-left:.4em}.lr-doc{--md-tabbed-icon--prev:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.41 16.58 10.83 12l4.58-4.59L14 6l-6 6 6 6z\"\/><\/svg>');--md-tabbed-icon--next:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z\"\/><\/svg>')}.lr-doc .md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.lr-doc .md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.lr-doc .md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.lr-doc .md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.lr-doc .md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.lr-doc .md-typeset .tabbed-labels{display:contents}}@media screen{.lr-doc .js .md-typeset .tabbed-labels{position:relative}.lr-doc .js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:\"\";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.lr-doc .md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.lr-doc .md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.lr-doc .md-typeset .tabbed-labels>label:first-child{order:1}.lr-doc .md-typeset .tabbed-labels>label:nth-child(2){order:2}.lr-doc .md-typeset .tabbed-labels>label:nth-child(3){order:3}.lr-doc .md-typeset .tabbed-labels>label:nth-child(4){order:4}.lr-doc .md-typeset .tabbed-labels>label:nth-child(5){order:5}.lr-doc .md-typeset .tabbed-labels>label:nth-child(6){order:6}.lr-doc .md-typeset .tabbed-labels>label:nth-child(7){order:7}.lr-doc .md-typeset .tabbed-labels>label:nth-child(8){order:8}.lr-doc .md-typeset .tabbed-labels>label:nth-child(9){order:9}.lr-doc .md-typeset .tabbed-labels>label:nth-child(10){order:10}.lr-doc .md-typeset .tabbed-labels>label:nth-child(11){order:11}.lr-doc .md-typeset .tabbed-labels>label:nth-child(12){order:12}.lr-doc .md-typeset .tabbed-labels>label:nth-child(13){order:13}.lr-doc .md-typeset .tabbed-labels>label:nth-child(14){order:14}.lr-doc .md-typeset .tabbed-labels>label:nth-child(15){order:15}.lr-doc .md-typeset .tabbed-labels>label:nth-child(16){order:16}.lr-doc .md-typeset .tabbed-labels>label:nth-child(17){order:17}.lr-doc .md-typeset .tabbed-labels>label:nth-child(18){order:18}.lr-doc .md-typeset .tabbed-labels>label:nth-child(19){order:19}.lr-doc .md-typeset .tabbed-labels>label:nth-child(20){order:20}}.lr-doc .md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.lr-doc .md-typeset .tabbed-labels>label>[href]:first-child{color:inherit}.lr-doc .md-typeset .tabbed-labels--linked>label{padding:0}.lr-doc .md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.lr-doc .md-typeset .tabbed-content{width:100%}@media print{.lr-doc .md-typeset .tabbed-content{display:contents}}.lr-doc .md-typeset .tabbed-block{display:none}@media print{.lr-doc .md-typeset .tabbed-block{display:block}.lr-doc .md-typeset .tabbed-block:first-child{order:1}.lr-doc .md-typeset .tabbed-block:nth-child(2){order:2}.lr-doc .md-typeset .tabbed-block:nth-child(3){order:3}.lr-doc .md-typeset .tabbed-block:nth-child(4){order:4}.lr-doc .md-typeset .tabbed-block:nth-child(5){order:5}.lr-doc .md-typeset .tabbed-block:nth-child(6){order:6}.lr-doc .md-typeset .tabbed-block:nth-child(7){order:7}.lr-doc .md-typeset .tabbed-block:nth-child(8){order:8}.lr-doc .md-typeset .tabbed-block:nth-child(9){order:9}.lr-doc .md-typeset .tabbed-block:nth-child(10){order:10}.lr-doc .md-typeset .tabbed-block:nth-child(11){order:11}.lr-doc .md-typeset .tabbed-block:nth-child(12){order:12}.lr-doc .md-typeset .tabbed-block:nth-child(13){order:13}.lr-doc .md-typeset .tabbed-block:nth-child(14){order:14}.lr-doc .md-typeset .tabbed-block:nth-child(15){order:15}.lr-doc .md-typeset .tabbed-block:nth-child(16){order:16}.lr-doc .md-typeset .tabbed-block:nth-child(17){order:17}.lr-doc .md-typeset .tabbed-block:nth-child(18){order:18}.lr-doc .md-typeset .tabbed-block:nth-child(19){order:19}.lr-doc .md-typeset .tabbed-block:nth-child(20){order:20}}.lr-doc .md-typeset .tabbed-block>.highlight:first-child>pre, .lr-doc .md-typeset .tabbed-block>pre:first-child{margin:0}.lr-doc .md-typeset .tabbed-block>.highlight:first-child>pre>code, .lr-doc .md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.lr-doc .md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.lr-doc .md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.lr-doc .md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename, .lr-doc .md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.lr-doc .md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.lr-doc .md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.lr-doc .md-typeset .tabbed-block>.tabbed-set{margin:0}.lr-doc .md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.lr-doc .md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.lr-doc .md-typeset .tabbed-button:after{background-color:currentcolor;content:\"\";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.lr-doc .md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}.lr-doc [dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.lr-doc .md-typeset .tabbed-control[hidden]{opacity:0}.lr-doc .md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.lr-doc .md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){.lr-doc [dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}.lr-doc [dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.lr-doc .md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}.lr-doc [dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}.lr-doc [dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.lr-doc .md-content__inner>.tabbed-set .tabbed-labels:after{content:\"\"}.lr-doc [dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}.lr-doc [dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.lr-doc [dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}.lr-doc [dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.lr-doc .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}.lr-doc [dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}.lr-doc [dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.lr-doc [dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}.lr-doc [dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.lr-doc .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.lr-doc .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child, .lr-doc .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10), .lr-doc .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11), .lr-doc .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12), .lr-doc .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13), .lr-doc .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14), .lr-doc .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15), .lr-doc .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16), .lr-doc .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17), .lr-doc .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18), .lr-doc .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19), .lr-doc .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2), .lr-doc .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20), .lr-doc .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3), .lr-doc .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4), .lr-doc .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5), .lr-doc .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6), .lr-doc .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7), .lr-doc .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8), .lr-doc .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.lr-doc .md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child, .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8), .lr-doc .md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child, .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8), .lr-doc .md-typeset [role=dialog] .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9), .lr-doc .no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child, .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8), .lr-doc .no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child, .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8), .lr-doc [role=dialog] .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.lr-doc .md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child, .lr-doc .md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10), .lr-doc .md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11), .lr-doc .md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12), .lr-doc .md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13), .lr-doc .md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14), .lr-doc .md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15), .lr-doc .md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16), .lr-doc .md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17), .lr-doc .md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18), .lr-doc .md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19), .lr-doc .md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2), .lr-doc .md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20), .lr-doc .md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3), .lr-doc .md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4), .lr-doc .md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5), .lr-doc .md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6), .lr-doc .md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7), .lr-doc .md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8), .lr-doc .md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.lr-doc .md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child, .lr-doc .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10), .lr-doc .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11), .lr-doc .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12), .lr-doc .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13), .lr-doc .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14), .lr-doc .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15), .lr-doc .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16), .lr-doc .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17), .lr-doc .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18), .lr-doc .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19), .lr-doc .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2), .lr-doc .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20), .lr-doc .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3), .lr-doc .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4), .lr-doc .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5), .lr-doc .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6), .lr-doc .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7), .lr-doc .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8), .lr-doc .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}.lr-doc{--md-tasklist-icon:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m16.28-2.72a.75.75 0 0 0-.018-1.042.75.75 0 0 0-1.042-.018l-5.97 5.97-2.47-2.47a.75.75 0 0 0-1.042.018.75.75 0 0 0-.018 1.042l3 3a.75.75 0 0 0 1.06 0Z\"\/><\/svg>');--md-tasklist-icon--checked:url('data:image\/svg+xml;charset=utf-8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m16.28-2.72a.75.75 0 0 0-.018-1.042.75.75 0 0 0-1.042-.018l-5.97 5.97-2.47-2.47a.75.75 0 0 0-1.042.018.75.75 0 0 0-.018 1.042l3 3a.75.75 0 0 0 1.06 0Z\"\/><\/svg>')}.lr-doc .md-typeset .task-list-item{list-style-type:none;position:relative}.lr-doc [dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}.lr-doc [dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.lr-doc .md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.lr-doc .md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}.lr-doc [dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}.lr-doc [dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.lr-doc .md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:\"\";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.lr-doc .md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.lr-doc .giscus, .lr-doc [id=__comments]{display:none}}.lr-doc>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.lr-doc .mermaid{line-height:normal;margin:1em 0}.lr-doc .md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.lr-doc .md-typeset .grid.cards>ol, .lr-doc .md-typeset .grid.cards>ul{display:contents}.lr-doc .md-typeset .grid.cards>ol>li, .lr-doc .md-typeset .grid.cards>ul>li, .lr-doc .md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem;display:block;margin:0;padding:.8rem;transition:border .25s,box-shadow .25s}.lr-doc .md-typeset .grid.cards>ol>li:focus-within, .lr-doc .md-typeset .grid.cards>ol>li:hover, .lr-doc .md-typeset .grid.cards>ul>li:focus-within, .lr-doc .md-typeset .grid.cards>ul>li:hover, .lr-doc .md-typeset .grid>.card:focus-within, .lr-doc .md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.lr-doc .md-typeset .grid.cards>ol>li>hr, .lr-doc .md-typeset .grid.cards>ul>li>hr, .lr-doc .md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.lr-doc .md-typeset .grid.cards>ol>li>:first-child, .lr-doc .md-typeset .grid.cards>ul>li>:first-child, .lr-doc .md-typeset .grid>.card>:first-child{margin-top:0}.lr-doc .md-typeset .grid.cards>ol>li>:last-child, .lr-doc .md-typeset .grid.cards>ul>li>:last-child, .lr-doc .md-typeset .grid>.card>:last-child{margin-bottom:0}.lr-doc .md-typeset .grid>*, .lr-doc .md-typeset .grid>.admonition, .lr-doc .md-typeset .grid>.highlight>*, .lr-doc .md-typeset .grid>.highlighttable, .lr-doc .md-typeset .grid>.md-typeset details, .lr-doc .md-typeset .grid>details, .lr-doc .md-typeset .grid>pre{margin-bottom:0;margin-top:0}.lr-doc .md-typeset .grid>.highlight>pre:only-child, .lr-doc .md-typeset .grid>.highlight>pre>code, .lr-doc .md-typeset .grid>.highlighttable, .lr-doc .md-typeset .grid>.highlighttable>tbody, .lr-doc .md-typeset .grid>.highlighttable>tbody>tr, .lr-doc .md-typeset .grid>.highlighttable>tbody>tr>.code, .lr-doc .md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight, .lr-doc .md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre, .lr-doc .md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.lr-doc .md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){.lr-doc [dir=ltr] .md-typeset .inline{float:left}.lr-doc [dir=rtl] .md-typeset .inline{float:right}.lr-doc [dir=ltr] .md-typeset .inline{margin-right:.8rem}.lr-doc [dir=rtl] .md-typeset .inline{margin-left:.8rem}.lr-doc .md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}.lr-doc [dir=ltr] .md-typeset .inline.end{float:right}.lr-doc [dir=rtl] .md-typeset .inline.end{float:left}.lr-doc [dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}.lr-doc [dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}}\n<\/style>\n\n<style>\n@font-face{\n  font-family: 'Roboto';\n  font-style: italic;\n  font-weight: 300;\n  font-stretch: normal;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/roboto\/v51\/KFOKCnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmOClHrs6ljXfMMLt_QuAj-lg.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto';\n  font-style: italic;\n  font-weight: 400;\n  font-stretch: normal;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/roboto\/v51\/KFOKCnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmOClHrs6ljXfMMLoHQuAj-lg.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto';\n  font-style: italic;\n  font-weight: 700;\n  font-stretch: normal;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/roboto\/v51\/KFOKCnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmOClHrs6ljXfMMLmbXuAj-lg.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  font-stretch: normal;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/roboto\/v51\/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuaabVmUiA8.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  font-stretch: normal;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/roboto\/v51\/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiA8.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  font-stretch: normal;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/roboto\/v51\/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuYjalmUiA8.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto Mono';\n  font-style: italic;\n  font-weight: 400;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/robotomono\/v31\/L0xoDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnANW6Cpw.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto Mono';\n  font-style: italic;\n  font-weight: 700;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/robotomono\/v31\/L0xoDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrmAB9W6Cpw.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto Mono';\n  font-style: normal;\n  font-weight: 400;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/robotomono\/v31\/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf) format('truetype');\n}\n@font-face{\n  font-family: 'Roboto Mono';\n  font-style: normal;\n  font-weight: 700;\n  font-display: fallback;\n  src: url(https:\/\/fonts.gstatic.com\/s\/robotomono\/v31\/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_Of2_ROW9.ttf) format('truetype');\n}\n\n<\/style>\n\n<style>\n.lr-doc \/* =========================\n   LightREST - CSS (clean v3)\n   ========================= *\/\n\n\/* ===== Layout (largeur contenu) ===== *\/\n.md-grid{\n  max-width: min(90vw, 110rem);\n}.lr-doc \/* ===== Sidebar (lisibilit\u00e9 + indentation) ===== *\/\n.md-sidebar .md-nav__title{\n  font-weight: 700;\n  letter-spacing: .02em;\n  padding-left: 0 !important;\n}.lr-doc .md-sidebar .md-nav__item--section > .md-nav__link{\n  font-weight: 700;\n  text-transform: uppercase;\n  font-size: .78rem;\n  opacity: .85;\n  padding-left: 0 !important;\n}.lr-doc .md-sidebar .md-nav__link{\n  padding: .25rem 0 .25rem 1.25rem !important;\n  text-decoration: none;\n}.lr-doc .md-sidebar .md-nav__link--active{\n  font-weight: 700;\n  border-left: 3px solid #004080;\n}.lr-doc .md-sidebar .md-nav__link--active .md-ellipsis{\n  color: #004080;\n}.lr-doc \/* ===== Liens du contenu : noirs + soulignement pointill\u00e9 (hors menus) ===== *\/\n.md-content .md-typeset a, .lr-doc .md-content .md-typeset a:visited{\n  color: #111827 !important;\n  text-decoration-line: underline !important;\n  text-decoration-style: dotted !important;\n  text-decoration-thickness: 1px !important;\n  text-underline-offset: .18em !important;\n}.lr-doc .md-content .md-typeset a:hover{\n  color: #000000 !important;\n  background: rgba(0,0,0,.04);\n  border-radius: 3px;\n}.lr-doc .md-content .md-typeset a:focus-visible{\n  outline: 2px dotted #111827;\n  outline-offset: 2px;\n}.lr-doc \/* Exclusions menus *\/\n.md-nav a, .lr-doc .md-header a, .lr-doc .md-tabs a, .lr-doc .md-footer a{\n  color: inherit !important;\n  text-decoration: none !important;\n  background: transparent !important;\n  border-radius: 0 !important;\n}.lr-doc \/* ===== Polices code ===== *\/\n.md-typeset code, .lr-doc .md-typeset pre{\n  font-family: \"Lucida Console\", \"Consolas\", \"Courier New\", monospace;\n}.lr-doc \/* Code standard (gris clair) *\/\n.md-typeset pre{\n  background-color: #f3f4f6;\n  color: #1f2937;\n  border-radius: 2px;\n}.lr-doc \/* ===== Highlight dans les blocs code (exemples) ===== *\/\n.md-typeset pre > code .lr-hl{\n  color: #ffd54a;\n  font-weight: 700;\n  background: rgba(255, 213, 74, 0.12);\n  border-radius: 3px;\n  padding: 0 .15em;\n}.lr-doc \/* ===== Prototypage (HTML <pre>) ===== *\/\n.md-typeset pre.lr-proto{\n  background-color: #f3f4f6;\n  color: #1f2937;\n  border-radius: 8px;\n  padding: .6rem .8rem;\n  overflow-x: auto;\n  overflow-y: hidden;\n  white-space: pre;\n  max-width: 100%;\n  display: block;\n}.lr-doc \/* ===== Tables globales ===== *\/\n.md-typeset table{\n  border: 1px solid rgba(0,0,0,.12);\n  border-collapse: collapse;\n  width: 100%;\n  table-layout: fixed;\n  background: transparent !important; \/* pas de gris *\/\n}.lr-doc .md-typeset table th, .lr-doc .md-typeset table td{\n  border-bottom: 1px solid rgba(0,0,0,.12);\n  padding: .6rem .8rem;\n  vertical-align: top;\n}.lr-doc .md-typeset table thead th{\n  font-weight: 700;\n  background: transparent !important; \/* pas de gris *\/\n  border-bottom: 2px solid rgba(0,0,0,.12) !important;\n}.lr-doc \/* Wrappers Material autour des tables *\/\n.md-typeset .md-typeset__scrollwrap, .lr-doc .md-typeset .md-typeset__table{\n  width: 100% !important;\n  max-width: 100% !important;\n}.lr-doc \/* Tables membres\/constantes : NOM plus gros + code sans fond *\/\n.md-typeset table td:first-child code{\n  font-size: 0.70rem !important;\n  font-weight: 500 !important;\n  background: transparent !important;\n  padding: 0 !important;\n  border-radius: 0 !important;\n}.lr-doc \/* ===== Cartes de sections (lr-secwrap) ===== *\/\n.md-typeset .lr-secwrap{\n  margin: 1.1rem 0 !important;\n  border: 1px solid rgba(0,0,0,.12) !important;\n  border-radius: 12px !important;\n  overflow: hidden !important;\n  background: #fff !important;\n}.lr-doc .md-typeset .lr-secwrap .lr-sec{\n  margin: 0 !important;\n  padding: .60rem 1rem !important;\n  font-weight: 900 !important;\n  border-bottom: 1px solid rgba(0,0,0,.10) !important;\n  background: #f3f4f6 !important;\n}.lr-doc .md-typeset .lr-secwrap .lr-secbody{\n  padding: .65rem .9rem !important;\n}.lr-doc \/* \u00c9vite le double cadre : la carte porte la bordure, .lr-doc pas la table *\/\n.md-typeset .lr-secwrap .lr-secbody table{\n  margin: 0 !important;\n  border: 0 !important;\n  width: 100% !important;\n  background: transparent !important;\n}.lr-doc .md-typeset .lr-secwrap .lr-secbody .md-typeset__scrollwrap, .lr-doc .md-typeset .lr-secwrap .lr-secbody .md-typeset__table{\n  margin: 0 !important;\n}.lr-doc .md-typeset .lr-secwrap .lr-secbody .md-typeset__scrollwrap table, .lr-doc .md-typeset .lr-secwrap .lr-secbody .md-typeset__table table{\n  border: 0 !important;\n  margin: 0 !important;\n}.lr-doc \/* Couleurs par section *\/\n.md-typeset .lr-secwrap-proto{ border-left: 7px solid rgba(107,114,128,.85) !important; }.lr-doc .md-typeset .lr-secwrap-proto .lr-sec{ background: rgba(107,114,128,.10) !important; }.lr-doc .md-typeset .lr-secwrap-params{ border-left: 7px solid rgba(0,64,128,.90) !important; }.lr-doc .md-typeset .lr-secwrap-params .lr-sec{ background: rgba(0,64,128,.08) !important; }.lr-doc .md-typeset .lr-secwrap-returns{ border-left: 7px solid rgba(16,185,129,.90) !important; }.lr-doc .md-typeset .lr-secwrap-returns .lr-sec{ background: rgba(16,185,129,.10) !important; }.lr-doc .md-typeset .lr-empty{\n  color: rgba(0,0,0,.6);\n  font-style: italic;\n}.lr-doc \/* =========================================================\n   Blocs repliables (details.note) : header bleu + chevron \u00e0 gauche\n   ========================================================= *\/\n\n\/* Cache le marker natif *\/\n.md-content .md-typeset details.note > summary::-webkit-details-marker{ display:none !important; }.lr-doc .md-content .md-typeset details.note > summary::marker{ content:\"\" !important; }.lr-doc .md-typeset details.note > summary{\n  background-color: #004080;\n  color: #ffffff;\n  font-weight: 600;\n  border-radius: 0;\n\n  position: relative !important;\n  padding-left: 2.2rem !important; \/* place chevron *\/\n  display: flex !important;\n  align-items: center !important;\n}.lr-doc \/* Supprime l\u2019ic\u00f4ne \"note\" par d\u00e9faut *\/\n.md-typeset details.note > summary::before{\n  display: none !important;\n}.lr-doc \/* Chevron *\/\n.md-content .md-typeset details.note > summary::after{\n  content: \"\u25b8\" !important;\n  position: absolute !important;\n  left: .9rem !important;\n  top: 50% !important;\n\n  color: #4f8cff !important;\n  font-size: 1.2rem !important;\n  font-weight: 900 !important;\n  line-height: 1 !important;\n  opacity: 0.95 !important;\n\n  transform: translateY(-50%) rotate(0deg) !important;\n  transition: transform .15s ease !important;\n}.lr-doc .md-content .md-typeset details.note[open] > summary::after{\n  transform: translateY(-50%) rotate(90deg) !important;\n}.lr-doc \/* Ic\u00f4ne Material (si pr\u00e9sente) \u00e0 droite *\/\n.md-typeset details.note > summary .md-details__icon{\n  margin-left: auto;\n  display: inline-flex !important;\n  opacity: 1 !important;\n  color: #ffffff !important;\n  transition: transform .15s ease;\n}.lr-doc .md-typeset details.note > summary .md-details__icon svg{\n  fill: #ffffff !important;\n}.lr-doc .md-typeset details.note[open] > summary .md-details__icon{\n  transform: rotate(180deg);\n}.lr-doc \/* Ic\u00f4nes dans le titre (summary) : twemoji plus grand *\/\n.md-typeset details > summary .twemoji{ display:inline-flex !important; width:2.15em !important; height:2.15em !important; }.lr-doc .md-typeset details > summary .twemoji svg, .lr-doc .md-typeset details > summary .twemoji img{ width:100% !important; height:100% !important; }.lr-doc \/* =========================================================\n   Admonitions : harmonisation titres (toutes sections)\n   ========================================================= *\/\n\n\/* Gabarit unique pour TOUS les titres *\/\n.md-typeset .admonition > .admonition-title{\n  display: block !important;\n  position: relative !important;\n  margin: 0 !important;\n\n  min-height: 2.35rem !important;\n  padding: .60rem 1rem .60rem 2.8rem !important;\n\n  line-height: 1.25 !important;\n  font-weight: 900 !important;\n}.lr-doc \/* Ic\u00f4ne : position fixe *\/\n.md-typeset .admonition > .admonition-title::before{\n  position: absolute !important;\n  left: 1rem !important;\n  top: 50% !important;\n  transform: translateY(-50%) !important;\n\n  width: 1.20em !important;\n  height: 1.20em !important;\n  margin: 0 !important;\n  opacity: 1 !important;\n}.lr-doc \/* Contenu : padding homog\u00e8ne (\u00e9vite diff\u00e9rences \u201cPr\u00e9sentation\u201d) *\/\n.md-typeset .admonition > :not(.admonition-title){\n  padding: .65rem .9rem !important;\n}.lr-doc \/* ===== Pr\u00e9sentation (abstract) : style carte + accent orange (sans casser le gabarit) ===== *\/\n.md-typeset .admonition.abstract{\n  margin: 1.1rem 0 !important;\n  border: 1px solid rgba(0,0,0,.12) !important;\n  border-left: 7px solid #f59e0b !important;\n  border-radius: 12px !important;\n  overflow: hidden !important;\n  background: #fff !important;\n  padding: 0 !important;\n  box-shadow: none !important;\n}.lr-doc .md-typeset .admonition.abstract > .admonition-title{\n  background: rgba(245,158,11,.10) !important;\n  border-bottom: 1px solid rgba(0,0,0,.10) !important;\n}.lr-doc .md-typeset .admonition.abstract > .admonition-title::before{\n  color: #f59e0b !important;\n}.lr-doc \/* \u00c9vite les \u201cdouble paddings\u201d entre paragraphes *\/\n.md-typeset .admonition.abstract > :not(.admonition-title){\n  margin: 0 !important;\n}.lr-doc .md-typeset .admonition.abstract > :not(.admonition-title) + :not(.admonition-title){\n  padding-top: 0 !important;\n}.lr-doc \/* ===== Exemple (example) ===== *\/\n.md-typeset .admonition.example > .admonition-title{\n  background-color: #e5e7eb !important;\n  color: #111827 !important;\n  font-weight: 900 !important;\n}.lr-doc .md-typeset .admonition.example pre{\n  background-color: #1e1e1e;\n  color: #e8e8e8;\n}.lr-doc .md-typeset .admonition.example code{\n  background-color: transparent;\n  color: #e8e8e8;\n}.lr-doc .md-typeset .admonition.example > .admonition-content > p:first-child{\n  margin-top: 0;\n  margin-bottom: .6rem;\n  color: #111827;\n}.lr-doc \/* =========================================================\n   Mode inject\u00e9 \/ int\u00e9gration WordPress\n   ========================================================= *\/\n\n\/* Masque la TOC \u00e0 droite si besoin *\/\n.md-sidebar--secondary{ display:none !important; }.lr-doc \/* MkDocs inject\u00e9 : ne doit pas passer au-dessus du header WP *\/\n.md-header, .lr-doc .md-tabs{ z-index: 0 !important; }.lr-doc \/* Ajuste la taille globale en mode inject\u00e9 (si utilis\u00e9) *\/\n.lr-doc{ zoom: 1.25; }.lr-doc \/* ajuste 1.10 \u2192 1.30 *\/\n\n\n\/* =========================================================\n   EMBED (WordPress) : zoom (stable)\n   ========================================================= *\/\n.lr-doc{\n  zoom: 1.25;               \/* ajuste 1.10 \u2192 1.30 *\/\n}.lr-doc \/* =========================================================\n   Harmonisation des TITRES (S\u00dbR)\n   - Admonitions Material : title + ic\u00f4ne\n   - lr-secwrap : uniquement twemoji (pas de svg global)\n   ========================================================= *\/\n\n\/* 1) Admonitions : gabarit unique *\/\n.lr-doc .md-typeset .admonition > .admonition-title{\n  position: relative !important;\n  display: block !important;\n  margin: 0 !important;\n  min-height: 2.35rem !important;\n  padding: .60rem 1rem .60rem 2.8rem !important;\n  line-height: 1.25 !important;\n  font-weight: 900 !important;\n}.lr-doc \/* 2) Ic\u00f4ne des admonitions : placement fixe *\/\n.lr-doc .md-typeset .admonition > .admonition-title::before{\n  position: absolute !important;\n  left: 1rem !important;\n  top: 50% !important;\n  transform: translateY(-50%) !important;\n  width: 1.20em !important;\n  height: 1.20em !important;\n  margin: 0 !important;\n  opacity: 1 !important;\n}.lr-doc \/* 3) Pr\u00e9sentation (abstract) : conserve le style orange mais m\u00eame padding *\/\n.lr-doc .md-typeset .admonition.abstract > .admonition-title{\n  padding: .60rem 1rem .60rem 2.8rem !important;\n}.lr-doc \/* 4) Cartes lr-secwrap : m\u00eame padding titre *\/\n.lr-doc .md-typeset .lr-secwrap .lr-sec{\n  position: relative !important;\n  padding: .60rem 1rem .60rem 2.8rem !important;\n}.lr-doc \/* 5) Ic\u00f4ne des lr-secwrap : uniquement twemoji (s\u00e9curis\u00e9) *\/\n.lr-doc .md-typeset .lr-secwrap .lr-sec .twemoji{\n  position: absolute !important;\n  left: 1rem !important;\n  top: 50% !important;\n  transform: translateY(-50%) !important;\n  width: 1.20em !important;\n  height: 1.20em !important;\n  margin: 0 !important;\n}.lr-doc \/* Assure que le svg dans twemoji reste petit *\/\n.lr-doc .md-typeset .lr-secwrap .lr-sec .twemoji svg, .lr-doc .md-typeset .lr-secwrap .lr-sec .twemoji img{\n  width: 100% !important;\n  height: 100% !important;\n}.lr-doc .md-typeset .lr-secwrap-present{ border-left: 7px solid rgba(245,158,11,.90) !important; }.lr-doc .md-typeset .lr-secwrap-present .lr-sec{ background: rgba(245,158,11,.10) !important; }.lr-doc .md-typeset .lr-secwrap-example{ border-left: 7px solid rgba(124,58,237,.90) !important; }.lr-doc .md-typeset .lr-secwrap-example .lr-sec{ background: rgba(124,58,237,.10) !important; }.lr-doc \/* =========================================================\n   EXEMPLES : bloc code dark + marges compactes\n   ========================================================= *\/\n\n.md-typeset .lr-secwrap-example pre, .lr-doc .md-typeset .lr-secwrap-example .highlight pre{\n  background: #1e1e1e !important;\n  color: #e8e8e8 !important;\n  border-radius: 8px !important;\n  margin: .4rem 0 !important;      \/* r\u00e9duit la marge *\/\n  padding: .8rem 1rem !important;  \/* r\u00e9duit l\u2019espace *\/\n}.lr-doc \/* Le code ne doit pas remettre de fond clair *\/\n.md-typeset .lr-secwrap-example code{\n  background: transparent !important;\n  color: inherit !important;\n}.lr-doc \/* Certains th\u00e8mes entourent avec .highlight : on neutralise le fond du wrapper *\/\n.md-typeset .lr-secwrap-example .highlight{\n  background: transparent !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  border: 0 !important;\n}.lr-doc \/* Prototypage : compacter l'espace autour *\/\n.md-typeset .lr-secwrap-proto .lr-secbody{\n  padding: .45rem .65rem !important;   \/* au lieu de .65rem .9rem *\/\n}.lr-doc .md-typeset .lr-secwrap-proto pre.lr-proto{\n  margin: .35rem 0 !important;\n  padding: .6rem .8rem !important;\n  border-radius: 10px !important;\n}.lr-doc \/* === Code dark en lignes : base === *\/\n.md-typeset pre.lr-code-dark{\n  background: #1e1e1e !important;\n  color: #e8e8e8 !important;\n  border-radius: 10px !important;\n  padding: .8rem 1rem !important;\n  overflow-x: auto !important;\n}.lr-doc \/* Le code devient un conteneur de lignes *\/\n.md-typeset pre.lr-code-dark code.lr-code-lines{\n  display: block !important;\n  white-space: pre !important;\n}.lr-doc \/* Lignes normales *\/\n.md-typeset pre.lr-code-dark code.lr-code-lines .lr-line{\n  display: block !important;\n  line-height: 1.20 !important;\n}.lr-doc \/* \u2705 LIGNE VIDE : c\u2019est ici qu\u2019on r\u00e9duit le \u201cnoir\u201d *\/\n.md-typeset pre.lr-code-dark code.lr-code-lines .lr-emptyline{\n  height: .35em !important;     \/* <- ajuste (0.25 \u00e0 0.60) *\/\n  line-height: 0 !important;\n}.lr-doc \/* Ligne vide \u201cfine\u201d dans les blocs de code dark *\/\n.md-typeset pre.lr-code-dark .lr-blank{\n  display: block;\n  height: .35em;     \/* ajuste 0.25 \u00e0 0.60 *\/\n}.lr-doc \/* Prototypage : enlever le cadre bleu (focus\/outline) *\/\n.md-typeset .lr-secwrap-proto pre.lr-proto{\n  outline: none !important;\n  box-shadow: none !important;\n}.lr-doc \/* Pas de bouton Copier dans Prototypage *\/\n.md-typeset .lr-secwrap-proto .btn-clipboard{\n  display: none !important;\n}.lr-doc \/* Par d\u00e9faut : cache les boutons Copier dans la doc *\/\n.md-typeset .btn-clipboard{\n  display: none !important;\n}.lr-doc \/* \u2026mais on l\u2019autorise dans les EXEMPLES *\/\n.md-typeset .lr-secwrap-example .btn-clipboard{\n  display: block !important;\n}.lr-doc \/* Bo\u00eete code + bouton copier (exemples) *\/\n.md-typeset .lr-codebox{\n  position: relative;\n}.lr-doc .md-typeset .lr-codebox .lr-copy{\n  position: absolute;\n  top: .6rem;\n  right: .6rem;\n  z-index: 2;\n\n  font-size: .75rem;\n  padding: .25rem .5rem;\n  border-radius: 6px;\n  border: 0;\n  cursor: pointer;\n\n  color: #ffffff;\n  background: #004080;\n  opacity: .9;\n}.lr-doc .md-typeset .lr-codebox .lr-copy:hover{\n  opacity: 1;\n}.lr-doc .md-typeset .lr-secwrap-proto .btn-clipboard{ display:none !important; }.lr-doc \/* EXEMPLE : liste \u00e0 puces plus \u00e0 droite *\/\n.md-typeset .lr-secwrap-example .lr-secbody ul{\n  padding-left: 1.4rem !important;   \/* d\u00e9cale le contenu *\/\n  margin-left: 0 !important;\n}.lr-doc \/* Optionnel : d\u00e9cale aussi la puce elle-m\u00eame (selon rendu) *\/\n.md-typeset .lr-secwrap-example .lr-secbody ul{\n  list-style-position: outside;\n}.lr-doc \/* Supprimer le pied de page Material *\/\n.md-footer{\n  display: none !important;\n}.lr-doc .md-main__inner{\n  padding-bottom: 0 !important;\n}.lr-doc \/* =========================================\n   Cacher la barre de titre (haut de page)\n   + les onglets (si activ\u00e9s)\n   ========================================= *\/\n.md-header, .lr-doc .md-tabs{\n  display: none !important;\n}.lr-doc \/* Enl\u00e8ve l\u2019espace r\u00e9serv\u00e9 au header sticky (Material) *\/\n.lr-doc{\n  --md-header-height: 0px;\n}.lr-doc .md-main{\n  margin-top: 0 !important;\n}.lr-doc \/* =========================================\n   Cacher le menu MkDocs (sidebar gauche)\n   ========================================= *\/\n.md-sidebar--primary{\n  display: none !important;\n}.lr-doc \/* (Optionnel) Cacher la table des mati\u00e8res \u00e0 droite *\/\n.md-sidebar--secondary{\n  display: none !important;\n}.lr-doc \/* =========================================\n   \u00c9tendre le contenu\n   ========================================= *\/\n.md-main__inner{\n  margin: 0 !important;\n}.lr-doc .md-content{\n  max-width: min(95vw, 110rem);\n}.lr-doc \/* Supprime le symbole \u00b6 (permalink) \u00e0 c\u00f4t\u00e9 des titres *\/\n.md-typeset .headerlink{\n  display: none !important;\n}.lr-doc \/* Liens uniquement dans les blocs de code (fond noir) *\/\n.md-typeset pre code a, .lr-doc .md-typeset .highlight pre a, .lr-doc .md-typeset .highlight code a{\n  color: #fff !important;\n  text-decoration: underline;\n}.lr-doc \/* Optionnel : hover *\/\n.md-typeset pre code a:hover, .lr-doc .md-typeset .highlight pre a:hover, .lr-doc .md-typeset .highlight code a:hover{\n  opacity: 0.85;\n}.lr-doc \/* Liens dans les blocs custom LightREST *\/\npre.lr-code-dark a, .lr-doc .lr-code-dark a{\n  color: #fff !important;\n  text-decoration: underline;\n}.lr-doc \/* \u2705 Liens visibles UNIQUEMENT dans tes exemples \"code dark\" *\/\n.md-content .md-typeset pre.lr-code-dark a, .lr-doc .md-content .md-typeset pre.lr-code-dark a:visited{\n  color: #ffffff !important;\n  text-decoration: underline !important;\n  text-decoration-style: solid !important;\n}.lr-doc \/* Optionnel : hover\/focus dans code dark *\/\n.md-content .md-typeset pre.lr-code-dark a:hover{\n  color: #ffffff !important;\n  opacity: .85;\n  background: transparent !important;\n}.lr-doc .md-content .md-typeset pre.lr-code-dark a:focus-visible{\n  outline: 2px solid rgba(255,255,255,.65) !important;\n  outline-offset: 2px;\n}.lr-doc \/* \u2705 Liens visibles UNIQUEMENT dans tes exemples \"code dark\" *\/\n.md-content .md-typeset pre.lr-code-dark a, .lr-doc .md-content .md-typeset pre.lr-code-dark a:visited{\n  color: #ffffff !important;\n  text-decoration: underline !important;\n  text-decoration-style: solid !important;\n}.lr-doc \/* Optionnel : hover\/focus dans code dark *\/\n.md-content .md-typeset pre.lr-code-dark a:hover{\n  color: #ffffff !important;\n  opacity: .85;\n  background: transparent !important;\n}.lr-doc .md-content .md-typeset pre.lr-code-dark a:focus-visible{\n  outline: 2px solid rgba(255,255,255,.65) !important;\n  outline-offset: 2px;\n}.lr-doc \/* \u2705 Liens dans lr-code-dark : police monospace + underline pointill\u00e9 *\/\n.md-content .md-typeset pre.lr-code-dark code a, .lr-doc .md-content .md-typeset pre.lr-code-dark code a:visited{\n  font-family: var(--md-code-font-family, \"Lucida Console\",\"Consolas\",\"Courier New\",monospace) !important;\n  font-size: inherit !important;\n  color: inherit !important;\n\n  \/* underline pointill\u00e9 (on override le \"text-decoration: underline\" pr\u00e9c\u00e9dent) *\/\n  text-decoration-line: underline !important;\n  text-decoration-style: dotted !important;\n  text-decoration-thickness: 1px !important;\n  text-underline-offset: .18em !important;\n\n  background: transparent !important;\n}.lr-doc \/* Hover optionnel *\/\n.md-content .md-typeset pre.lr-code-dark code a:hover{\n  opacity: .85;\n  background: transparent !important;\n}.lr-doc \/* =========================================================\n   FAQ : cartes Question\/R\u00e9ponse sans sous-tiroirs\n   ========================================================= *\/\n.lr-doc .lr-faqitem{\n  margin: 1rem 0;\n  border: 1px solid rgba(0,0,0,.10);\n  border-radius: 14px;\n  background: #fff;\n  overflow: hidden;\n}.lr-doc \/* \u00c9vite un double espace entre les deux cartes *\/\n.lr-doc .lr-faqitem .lr-secwrap{\n  margin: 0 !important;\n  border: 0 !important;\n  border-radius: 0 !important;\n}.lr-doc \/* Un petit s\u00e9parateur entre Question et R\u00e9ponse *\/\n.lr-doc .lr-faqitem .lr-secwrap + .lr-secwrap{\n  border-top: 1px solid rgba(0,0,0,.08) !important;\n}.lr-doc \/* Option : resserrer un peu le padding pour lecture rapide *\/\n.lr-doc .lr-faqitem .lr-secbody{\n  padding: .55rem .85rem !important;\n}.lr-doc \/* =========================================================\n   FAQ : 1 carte = Question + R\u00e9ponse\n   ========================================================= *\/\n.lr-doc .lr-faqitem{\n  margin: 1rem 0;\n  border: 1px solid rgba(0,0,0,.12);\n  border-radius: 14px;\n  background: #fff;\n  overflow: hidden;\n}.lr-doc \/* Bandeau question *\/\n.lr-doc .lr-faqhead{\n  background: #004080;\n  color: #fff;\n  font-weight: 700;\n  padding: .65rem 1rem;\n  display: flex;\n  align-items: center;\n  gap: .6rem;\n}.lr-doc \/* R\u00e9ponse *\/\n.lr-doc .lr-faqbody{\n  padding: .75rem 1rem;\n}.lr-doc \/* Resserre les paragraphes (optionnel) *\/\n.lr-doc .lr-faqbody p{\n  margin: .5em 0;\n}.lr-doc .lr-faqbody p:first-child{ margin-top: 0; }.lr-doc .lr-faqbody p:last-child{ margin-bottom: 0; }.lr-doc \/* =========================================================\n   FAQ \u2013 rendu lisible m\u00eame si la r\u00e9ponse contient du texte \"brut\"\n   ========================================================= *\/\n\n\/* Cartes *\/\n.lr-doc .lr-faqitem{\n  margin: 1rem 0 !important;\n  border: 1px solid rgba(0,0,0,.12) !important;\n  border-radius: 14px !important;\n  background: #fff !important;\n  overflow: hidden !important;\n}.lr-doc \/* Bandeau question compact (ic\u00f4ne + texte sur la m\u00eame ligne) *\/\n.lr-doc .lr-faqhead{\n  background: #004080 !important;\n  color: #fff !important;\n  font-weight: 800 !important;\n  padding: .70rem 1rem !important;\n  display: flex !important;\n  align-items: center !important;\n  gap: .55rem !important;\n  line-height: 1.25 !important;\n}.lr-doc \/* Corps r\u00e9ponse : s\u00e9paration nette + lisibilit\u00e9 *\/\n.lr-doc .lr-faqbody{\n  border-top: 1px solid rgba(0,0,0,.08) !important;\n  padding: .80rem 1rem !important;\n  line-height: 1.55 !important;\n}.lr-doc \/* Si ta r\u00e9ponse contient des <p>, .lr-doc on \u00e9vite l'effet \"pav\u00e9\" *\/\n.lr-doc .lr-faqbody p{\n  margin: .55em 0 !important;\n}.lr-doc .lr-faqbody p:first-child{ margin-top: 0 !important; }.lr-doc .lr-faqbody p:last-child{ margin-bottom: 0 !important; }.lr-doc \/* Si ta r\u00e9ponse contient des listes (HTML) *\/\n.lr-doc .lr-faqbody ul, .lr-doc .lr-faqbody ol{\n  margin: .5em 0 .5em 1.25em !important;\n  padding-left: 1.1em !important;\n}.lr-doc .lr-faqbody li{\n  margin: .25em 0 !important;\n}.lr-doc \/* Fallback : si la r\u00e9ponse contient des lignes commen\u00e7ant par \"-\" rendues en texte, .lr-doc on met une petite indentation g\u00e9n\u00e9rale pour a\u00e9rer *\/\n.lr-doc .lr-faqbody{\n  white-space: normal !important;\n}.lr-doc .lr-faqitem{\n  box-shadow: 0 1px 0 rgba(0,0,0,.04) !important;\n}.lr-doc \/* =========================================================\n   FAQ : 1 carte Question + R\u00e9ponse (admonition custom \"faq\")\n   ========================================================= *\/\n\n\/* carte globale *\/\n.md-typeset .admonition.faq{\n  margin: 0.85rem 0 !important;\n  border: 1px solid rgba(0,0,0,.12) !important;\n  border-left: 7px solid #004080 !important;\n  border-radius: 14px !important;\n  overflow: hidden !important;\n  background: #fff !important;\n  box-shadow: 0 1px 0 rgba(0,0,0,.04) !important;\n  padding: 0 !important;\n}.lr-doc \/* bandeau question *\/\n.md-typeset .admonition.faq > .admonition-title{\n  background: rgba(0,64,128,.10) !important;\n  border-bottom: 1px solid rgba(0,0,0,.08) !important;\n  color: #0f172a !important;\n}.lr-doc \/* ic\u00f4ne \u00e0 gauche (question mark Material) *\/\n.md-typeset .admonition.faq > .admonition-title::before{\n  background-color: #004080 !important;\n  -webkit-mask-image: var(--md-admonition-icon--question) !important;\n  mask-image: var(--md-admonition-icon--question) !important;\n}.lr-doc \/* corps r\u00e9ponse *\/\n.md-typeset .admonition.faq > :not(.admonition-title){\n  padding: .75rem 1rem !important;\n}\n\n<\/style>\n\n\n  \n    \n    <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n    <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n    <label class=\"md-overlay\" for=\"__drawer\"><\/label>\n    <div data-md-component=\"skip\">\n      \n        \n        <a href=\"https:\/\/lightrest.codeline.fr\/docs\/faq#_1\" class=\"md-skip\">\n          Aller au contenu\n        <\/a>\n      \n    <\/div>\n    <div data-md-component=\"announce\">\n      \n    <\/div>\n    \n    \n      \n\n  \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n  <nav class=\"md-header__inner md-grid\" aria-label=\"En-t\u00eate\">\n    <a href=\"https:\/\/lightrest.codeline.fr\/docs\" title=\"LightREST V3 documentation\" class=\"md-header__button md-logo\" aria-label=\"LightREST V3 documentation\" data-md-component=\"logo\">\n      \n  \n  <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54\"\/><\/svg>\n\n    <\/a>\n    <label class=\"md-header__button md-icon\" for=\"__drawer\">\n      \n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z\"\/><\/svg>\n    <\/label>\n    <div class=\"md-header__title\" data-md-component=\"header-title\">\n      <div class=\"md-header__ellipsis\">\n        <div class=\"md-header__topic\">\n          <span class=\"md-ellipsis\">\n            LightREST V3 documentation\n          <\/span>\n        <\/div>\n        <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n          <span class=\"md-ellipsis\">\n            \n              FAQ\n            \n          <\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n    \n    \n      \n    \n    \n    \n      \n      \n        <label class=\"md-header__button md-icon\" for=\"__search\">\n          \n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5\"\/><\/svg>\n        <\/label>\n        <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\">\n  <label class=\"md-search__overlay\" for=\"__search\"><\/label>\n  <div class=\"md-search__inner\" role=\"search\">\n    <form class=\"md-search__form\" name=\"search\">\n      <input type=\"text\" class=\"md-search__input\" name=\"query\" aria-label=\"Rechercher\" placeholder=\"Rechercher\" autocapitalize=\"off\" autocorrect=\"off\" autocomplete=\"off\" spellcheck=\"false\" data-md-component=\"search-query\" required>\n      <label class=\"md-search__icon md-icon\" for=\"__search\">\n        \n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5\"\/><\/svg>\n        \n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z\"\/><\/svg>\n      <\/label>\n      <nav class=\"md-search__options\" aria-label=\"Recherche\">\n        \n        <button type=\"reset\" class=\"md-search__icon md-icon\" title=\"Effacer\" aria-label=\"Effacer\" tabindex=\"-1\">\n          \n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\/><\/svg>\n        <\/button>\n      <\/nav>\n      \n    <\/form>\n    <div class=\"md-search__output\">\n      <div class=\"md-search__scrollwrap\" tabindex=\"0\" data-md-scrollfix>\n        <div class=\"md-search-result\" data-md-component=\"search-result\">\n          <div class=\"md-search-result__meta\">\n            Initialisation de la recherche\n          <\/div>\n          <ol class=\"md-search-result__list\" role=\"presentation\"><\/ol>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n      \n    \n    \n  <\/nav>\n  \n<\/header>\n    \n    <div class=\"md-container\" data-md-component=\"container\">\n      \n      \n        \n          \n        \n      \n      <main class=\"md-main\" data-md-component=\"main\">\n        <div class=\"md-main__inner md-grid\">\n          \n            \n              \n              <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n                <div class=\"md-sidebar__scrollwrap\">\n                  <div class=\"md-sidebar__inner\">\n                    \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n  <label class=\"md-nav__title\" for=\"__drawer\">\n    <a href=\"https:\/\/lightrest.codeline.fr\/docs\" title=\"LightREST V3 documentation\" class=\"md-nav__button md-logo\" aria-label=\"LightREST V3 documentation\" data-md-component=\"logo\">\n      \n  \n  <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54\"\/><\/svg>\n\n    <\/a>\n    LightREST V3 documentation\n  <\/label>\n  \n  <ul class=\"md-nav__list\" data-md-scrollfix>\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/classes\/lrserver\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    lrServer\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/classes\/lrrequest\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    lrRequest\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/classes\/lrresponse\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    lrResponse\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/classes\/lrroute\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    lrRoute\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/classes\/lrhook\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    lrHook\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/classes\/lrsession\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    lrSession\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n      \n      \n  \n  \n    \n  \n  \n  \n    <li class=\"md-nav__item md-nav__item--active\">\n      \n      <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n      \n      \n        \n      \n      \n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/faq\" class=\"md-nav__link md-nav__link--active\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    FAQ\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n      \n    <\/li>\n  \n\n    \n      \n      \n  \n  \n  \n  \n    <li class=\"md-nav__item\">\n      <a href=\"https:\/\/lightrest.codeline.fr\/docs\/bp\/index.md\" class=\"md-nav__link\">\n        \n  \n  \n  <span class=\"md-ellipsis\">\n    \n  \n    BP\n  \n\n    \n  <\/span>\n  \n  \n\n      <\/a>\n    <\/li>\n  \n\n    \n  <\/ul>\n<\/nav>\n                  <\/div>\n                <\/div>\n              <\/div>\n            \n            \n              \n              <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n                <div class=\"md-sidebar__scrollwrap\">\n                  <div class=\"md-sidebar__inner\">\n                    \n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"Table des mati\u00e8res\">\n  \n  \n  \n    \n  \n  \n<\/nav>\n                  <\/div>\n                <\/div>\n              <\/div>\n            \n          \n          \n            <div class=\"md-content\" data-md-component=\"content\">\n              \n              <article class=\"md-content__inner md-typeset\">\n                \n                  \n\n\n\n<h1 id=\"_1\"><a class=\"headerlink\" href=\"https:\/\/lightrest.codeline.fr\/docs\/faq#_1\" title=\"Permanent link\">&para;<\/a><\/h1>\n<!-- GENERATED_BY_CODE_LINE_RENDER_API_V3_2026-01-27 -->\n\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> Questions techniques<\/summary>\n<p><a id=\"bp-technique\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-lightrest-n-cessite-t-il-iis-apache-ou-nginx\"><\/a> LightREST n\u00e9cessite-t-il IIS, Apache ou Nginx ?<\/p>\n<p>Non. LightREST embarque son propre serveur HTTP\/HTTPS (moteur GO) et fonctionne de fa\u00e7on autonome, sans IIS\/Apache\/Serveur WebDev\u00ae.<br>\nL'ex\u00e9cutable WinDev\u00ae \u00e9coute directement le port HTTP, et re\u00e7oit les requ\u00eates directement sans aucun interm\u00e9diaire chronophage.<br>\nIl peut toutefois \u00eatre plac\u00e9 derri\u00e8re un reverse proxy (Nginx\/Traefik\/HAProxy) si n\u00e9cessaire.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-lightrest-fonctionne-t-il-sous-linux\"><\/a> LightREST fonctionne-t-il sous Linux ?<\/p>\n<p>Oui. LightREST fonctionne non seulement sous <strong>Linux 64 bits<\/strong> (c'est le cas de nombreux serveurs LightREST d\u00e9ploy\u00e9s), mais aussi sous <strong>Windows 32\/64 bits<\/strong> (binaires natif GO compil\u00e9s sp\u00e9cifiquement pour chaque OS).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-lightrest-est-il-multi-thread-concurrent\"><\/a> LightREST est-il multi-thread \/ concurrent ?<\/p>\n<p>Oui. Le moteur GO g\u00e8re la concurrence nativement (goroutines).<br> LightREST permet :<br> &nbsp;&nbsp;&nbsp;&nbsp;- Traitement <strong>simultan\u00e9<\/strong> de multiples requ\u00eates<br> &nbsp;&nbsp;&nbsp;&nbsp;- <strong>Limitation<\/strong> de charge via <code>MaxRequests<\/code><br> &nbsp;&nbsp;&nbsp;&nbsp;- Gestion fine des <strong>timeouts<\/strong> (<code>ReadTimeout<\/code>, <code>WriteTimeout<\/code>, <code>IdleTimeout<\/code>, <code>RequestTimeout<\/code>).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-comment-sont-g-r-s-les-timeouts\"><\/a> Comment sont g\u00e9r\u00e9s les timeouts ?<\/p>\n<p>LightREST distingue plusieurs niveaux :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>ReadTimeout<\/strong> : lecture socket<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>WriteTimeout<\/strong> : \u00e9criture r\u00e9ponse<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>IdleTimeout<\/strong> : inactivit\u00e9 keep-alive, permet de laisser la connexion ouverte entre 2 requ\u00eates et d'\u00e9viter une ren\u00e9gociation (co\u00fbteuse en SSL).<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>RequestTimeout<\/strong> : ex\u00e9cution logique de la route<br><br>\nCela permet un contr\u00f4le fin des performances et de la robustesse.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-lightrest-est-il-s-curis\"><\/a> LightREST est-il s\u00e9curis\u00e9 ?<\/p>\n<p>LightREST propose plusieurs briques :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>HTTPS<\/strong> (certificat fourni, auto-sign\u00e9 ou Let's Encrypt)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <a href=\"https:\/\/lightrest.codeline.fr\/index.php\/lightrest-composant-rest-windev\/lightrest-documentation\/les-hooks\"><strong>Hooks<\/strong><\/a> serveur et route<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Limitation du nombre de <strong>requ\u00eates simultan\u00e9es<\/strong><br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>Chiffrement<\/strong> d\u2019identifiants (<code>CipherID<\/code>) pour \u00e9viter le pillage des donn\u00e9es<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>Gestion centralis\u00e9e<\/strong> des erreurs<br><br>\nLa s\u00e9curit\u00e9 globale d\u00e9pend aussi de la strat\u00e9gie d\u2019authentification et de d\u00e9ploiement.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-peut-on-utiliser-lightrest-derri-re-un-load-balancer\"><\/a> Peut-on utiliser LightREST derri\u00e8re un load balancer ?<\/p>\n<p>Oui. LightREST est <strong>stateless par d\u00e9faut<\/strong> : il peut \u00eatre plac\u00e9 derri\u00e8re un load balancer (Nginx, HAProxy, ELB, Application Gateway\u2026).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-puis-je-utiliser-lightrest-comme-serveur-back-end-pour-mon-application-windev-mobile\"><\/a> Puis-je utiliser LightREST comme serveur back-end pour mon application WinDev Mobile\u00ae ?<\/p>\n<p>Oui. LightREST est parfaitement adapt\u00e9 comme serveur back-end pour une application WinDev Mobile\u00ae. Il permet :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- d\u2019exposer des services REST consommables en HTTP\/JSON<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- de ne pas exposer publiquement un serveur HFSQL<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- de centraliser la logique m\u00e9tier c\u00f4t\u00e9 serveur<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- de s\u00e9curiser les \u00e9changes via HTTPS<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- de g\u00e9rer la mont\u00e9e en charge ind\u00e9pendamment des clients mobiles<br>\n<br>\nCette architecture permet de d\u00e9coupler totalement l\u2019application mobile du moteur m\u00e9tier, tout en conservant l\u2019\u00e9cosyst\u00e8me WinDev\u00ae c\u00f4t\u00e9 serveur.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-pourquoi-le-moteur-lightrest-est-il-d-velopp-en-go-et-non-directement-en-windev\"><\/a> Pourquoi le moteur LightREST est-il d\u00e9velopp\u00e9 en GO et non directement en WinDev\u00ae ?<\/p>\n<p>Le moteur LightREST est d\u00e9velopp\u00e9 en <a href=\"https:\/\/en.wikipedia.org\/wiki\/Go_(programming_language)\">GO<\/a> pour b\u00e9n\u00e9ficier de m\u00e9canismes syst\u00e8mes avanc\u00e9s particuli\u00e8rement adapt\u00e9s aux serveurs HTTP haute performance.<br>\nCr\u00e9\u00e9 par Google en 2009, GO est devenu un standard de facto pour les infrastructures cloud et les architectures distribu\u00e9es. Sa large adoption industrielle, son \u00e9volution continue et son \u00e9cosyst\u00e8me mature garantissent une forte stabilit\u00e9 et une excellente visibilit\u00e9 \u00e0 long terme.<br><br>\nIl apporte notamment :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Les <a href=\"https:\/\/go.dev\/doc\/effective_go#goroutines\"><strong>goroutines<\/strong><\/a> : gestion native de la concurrence \u00e0 tr\u00e8s faible co\u00fbt.<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Les <a href=\"https:\/\/go.dev\/doc\/effective_go#channels\"><strong>channels<\/strong><\/a> : communication s\u00fbre et structur\u00e9e entre routines.<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Les primitives de synchronisation du package <a href=\"https:\/\/pkg.go.dev\/sync\"><strong>sync<\/strong><\/a> : <a href=\"https:\/\/pkg.go.dev\/sync#Mutex\"><strong>Mutex<\/strong><\/a>, <a href=\"https:\/\/pkg.go.dev\/sync#RWMutex\"><strong>RWMutex<\/strong><\/a>, <a href=\"https:\/\/pkg.go.dev\/sync#WaitGroup\"><strong>WaitGroup<\/strong><\/a>\u2026.<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Les variables atomiques via <a href=\"https:\/\/pkg.go.dev\/sync\"><strong>sync<\/strong><\/a>\/<a href=\"https:\/\/pkg.go.dev\/sync\/atomic\"><strong>atomic<\/strong><\/a> pour garantir la coh\u00e9rence sans verrou global.<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Un <a href=\"https:\/\/go.dev\/ref\/mem\"><strong>mod\u00e8le m\u00e9moire<\/strong><\/a> clair et s\u00e9curis\u00e9.<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Une compilation native produisant un <a href=\"https:\/\/go.dev\/doc\/faq#runtime\"><strong>binaire autonome<\/strong><\/a>, ex\u00e9cutable directement, sans interpr\u00e9tation chronophage d'un <a href=\"https:\/\/go.dev\/doc\/faq#Is_Go_a_scripting_language\">script<\/a>, sans machine virtuelle, et sans runtime externe.<br>\n<br>\nWinDev\u00ae est quand \u00e0 lui excellent pour la logique m\u00e9tier et l\u2019acc\u00e8s aux donn\u00e9es.<br>\nGO est particuli\u00e8rement adapt\u00e9 pour le moteur r\u00e9seau, la gestion fine des sockets, la performance concurrente et la robustesse syst\u00e8me.<br>\n<br>\nLightREST combine ainsi le meilleur des deux mondes :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- WinDev\u00ae pour le m\u00e9tier<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- GO pour l\u2019infrastructure serveur<br><\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-technique-lightrest-est-il-adapt-aux-environnements-forte-charge\"><\/a> LightREST est-il adapt\u00e9 aux environnements \u00e0 forte charge ?<\/p>\n<p>Oui. Gr\u00e2ce au moteur GO et \u00e0 sa gestion efficace de la concurrence, LightREST peut traiter simultan\u00e9ment un grand nombre de requ\u00eates.<br>\nLes m\u00e9canismes disponibles incluent :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- limitation configurable du nombre de requ\u00eates (<a href=\"https:\/\/lightrest.codeline.fr\/index.php\/la-classe-lrserver?h=maxrequests\">MaxRequests<\/a>)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- timeouts multi-niveaux<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- gestion concurrente via <a href=\"https:\/\/go.dev\/doc\/effective_go#goroutines\">goroutines<\/a><br>\n&nbsp;&nbsp;&nbsp;&nbsp;- synchronisation fine via <a href=\"https:\/\/pkg.go.dev\/sync\">sync<\/a> et <a href=\"https:\/\/pkg.go.dev\/sync\/atomic\">atomic<\/a><br>\n<br>\nLes performances r\u00e9elles d\u00e9pendront principalement de la logique m\u00e9tier ex\u00e9cut\u00e9e c\u00f4t\u00e9 WinDev\u00ae et de l\u2019infrastructure de d\u00e9ploiement.<\/p>\n<\/div>\n<\/details>\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> Questions fonctionnelles<\/summary>\n<p><a id=\"bp-fonctionnel\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-fonctionnel-quoi-sert-lightrest-concr-tement\"><\/a> \u00c0 quoi sert LightREST concr\u00e8tement ?<\/p>\n<p>LightREST permet de transformer une application WinDev\u00ae en <strong>API REST<\/strong> :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Exposition de routes HTTP\/REST<br> &nbsp;&nbsp;&nbsp;&nbsp;- R\u00e9ponses JSON\/TXT<br> &nbsp;&nbsp;&nbsp;&nbsp;- Authentification personnalis\u00e9e<br> &nbsp;&nbsp;&nbsp;&nbsp;- Monitoring et logs<br> &nbsp;&nbsp;&nbsp;&nbsp;- CORS et headers globaux<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-fonctionnel-peut-on-cr-er-des-routes-dynamiques\"><\/a> Peut-on cr\u00e9er des routes dynamiques ?<\/p>\n<p>Oui. Les routes peuvent inclure des param\u00e8tres (ex: <code>\/client\/{id}<\/code>), des m\u00e9thodes HTTP distinctes (GET\/POST\/PUT\/DELETE\u2026), et des timeouts sp\u00e9cifiques par route.<br>\nLes routes sont d\u00e9finies dans le code (pas de param\u00e9trage fastidieux dans un outil tiers).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-fonctionnel-lightrest-g-re-t-il-le-cors\"><\/a> LightREST g\u00e8re-t-il le CORS ?<\/p>\n<p>Oui. On peux d\u00e9finir des headers globaux et des headers sp\u00e9cifiques aux r\u00e9ponses <code>OPTIONS<\/code>, qui sont ajout\u00e9s automatiquement dans les r\u00e9ponses REST.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-fonctionnel-peut-on-ajouter-une-logique-avant-apr-s-chaque-requ-te\"><\/a> Peut-on ajouter une logique avant\/apr\u00e8s chaque requ\u00eate ?<\/p>\n<p>Oui via les <a href=\"https:\/\/lightrest.codeline.fr\/index.php\/lightrest-composant-rest-windev\/lightrest-documentation\/les-hooks\"><strong>Hooks<\/strong><\/a> :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Niveau serveur<br> &nbsp;&nbsp;&nbsp;&nbsp;- Niveau route<br> &nbsp;&nbsp;&nbsp;&nbsp;- Interception d\u2019\u00e9v\u00e9nements (connexion, received, before_handler, after_handler, result, warning, error, panic, \u2026).<\/p>\n<\/div>\n<\/details>\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> LightREST vs WebDev\u00ae<\/summary>\n<p><a id=\"bp-comparatif-webdev\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-comparatif-webdev-pourquoi-utiliser-lightrest-plut-t-que-webdev\"><\/a> Pourquoi utiliser LightREST plut\u00f4t que WebDev\u00ae ?<\/p>\n<p>Pour un usage <strong>API pur<\/strong>, LightREST apporte :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Pas de serveur WebDev\u00ae requis<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Pas de licence serveur WebDev\u00ae, pas d'abonnement SAAS<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Pas de d\u00e9pendance IIS<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Binaire autonome, d\u00e9ploiement rapide (simplement un ex\u00e9cutable ou un service \u00e0 lancer)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Moteur GO optimis\u00e9 pour le HTTP\/REST<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- D\u00e9finition des routes REST directement dans le code, \u00e0 c\u00f4t\u00e9 des fonctions m\u00e9tier. Maintenance simplifi\u00e9e et fiabilis\u00e9e.<br><\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-comparatif-webdev-lightrest-remplace-t-il-webdev\"><\/a> LightREST remplace-t-il WebDev\u00ae ?<\/p>\n<p>Non. WebDev\u00ae est un framework web complet (pages, sessions, \u00e9tat). LightREST est un moteur <strong>REST pur<\/strong>, l\u00e9ger et orient\u00e9 API.<br>\n<img decoding=\"async\" alt=\"\u2139\" class=\"twemoji\" src=\"https:\/\/cdn.jsdelivr.net\/gh\/jdecked\/twemoji@16.0.1\/assets\/svg\/2139.svg\" title=\":information:\" \/> LightREST peut \u00eatre utilis\u00e9 parall\u00e8lement \u00e0 WebDev\u00ae pour prendre en charge l'ex\u00e9cution optimis\u00e9e d'API REST, WebDev\u00ae assurant son r\u00f4le de serveur d'applications Web.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-comparatif-webdev-les-performances-sont-elles-meilleures-que-webdev\"><\/a> Les performances sont-elles meilleures que WebDev ?<\/p>\n<p>Dans un usage API pur, g\u00e9n\u00e9ralement oui : moins de couches interm\u00e9diaires, pas de moteur page\/session, serveur GO efficace.<br>Les performances exactes d\u00e9pendent du m\u00e9tier ex\u00e9cut\u00e9 c\u00f4t\u00e9 WinDev\u00ae et du d\u00e9ploiement.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-comparatif-webdev-peut-on-migrer-progressivement-depuis-webdev\"><\/a> Peut-on migrer progressivement depuis WebDev\u00ae ?<\/p>\n<p>Oui. On peux conserver WebDev\u00ae pour certaines APIs et exposer progressivement des routes via LightREST, sans big-bang.<\/p>\n<\/div>\n<\/details>\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> Juridique &amp; licence MIT \/ open source<\/summary>\n<p><a id=\"bp-juridique\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-juridique-lightrest-est-il-open-source\"><\/a> LightREST est-il open source ?<\/p>\n<p>Oui. LightREST est distribu\u00e9 sous licence <strong><a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a><\/strong>.<br>\nLe code distribu\u00e9 inclut le moteur LightREST en GO et le composant WinDev\u00ae multi-OS.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-juridique-que-permet-la-licence-mit-https-opensource-org-license-mit\"><\/a> Que permet la licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a> ?<\/p>\n<p>La licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a> permet sans aucune limite :<br> &nbsp;&nbsp;&nbsp;&nbsp;- Usage commercial<br> &nbsp;&nbsp;&nbsp;&nbsp;- Modification<br> &nbsp;&nbsp;&nbsp;&nbsp;- Int\u00e9gration dans des projets propri\u00e9taires<br> &nbsp;&nbsp;&nbsp;&nbsp;- Redistribution<br>\nSeule obligation : <strong>conserver l\u2019avis de copyright\/licence<\/strong>.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-juridique-dois-je-publier-mon-code-si-j-utilise-lightrest\"><\/a> Dois-je publier mon code si j\u2019utilise LightREST ?<\/p>\n<p>Non. La licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a> n\u2019impose pas la publication du code source de l'application.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-juridique-lightrest-est-il-gratuit\"><\/a> LightREST est-il gratuit ?<\/p>\n<p>Oui pour l\u2019usage du moteur : pas d\u2019abonnement, pas de licence serveur, pas de limitation artificielle.<br>Un support professionnel ou de la formation peuvent \u00eatre propos\u00e9s en option par <a href=\"https:\/\/codeline.fr\">CODE LINE<\/a>.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-juridique-puis-je-int-grer-lightrest-dans-un-logiciel-commercial-sans-ouvrir-mon-code\"><\/a> Puis-je int\u00e9grer LightREST dans un logiciel commercial sans ouvrir mon code ?<\/p>\n<p>Oui. La licence MIT autorise l\u2019usage commercial sans obligation de publication du code source.<br><br>\nVous pouvez :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- int\u00e9grer LightREST dans un logiciel propri\u00e9taire<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- modifier le moteur<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- redistribuer votre solution<br><br>\nLa seule obligation est de conserver la mention de licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a>.<\/p>\n<\/div>\n<\/details>\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> Questions marketing &amp; positionnement<\/summary>\n<p><a id=\"bp-marketing\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-pourquoi-lightrest-est-il-diff-rent-des-autres-frameworks-rest\"><\/a> Pourquoi LightREST est-il diff\u00e9rent des autres frameworks REST ?<\/p>\n<p>LightREST n\u2019est pas un framework g\u00e9n\u00e9rique : il est con\u00e7u pour l\u2019\u00e9cosyst\u00e8me WinDev\u00ae et l\u2019exposition d\u2019API HTTP\/JSON, avec un d\u00e9ploiement simple et autonome (sans IIS\/Apache\/Serveur WebDev\u00ae).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-qui-s-adresse-lightrest\"><\/a> \u00c0 qui s\u2019adresse LightREST ?<\/p>\n<p>Aux \u00e9quipes WinDev\u00ae et aux organisations qui veulent :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Exposer des API modernes<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- D\u00e9coupler front\/back<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Int\u00e9grer mobile\/web\/partenaires<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Moderniser sans r\u00e9\u00e9criture brutale<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-lightrest-est-il-adapt-aux-projets-critiques\"><\/a> LightREST est-il adapt\u00e9 aux projets critiques ?<\/p>\n<p>Oui : moteur GO robuste, d\u00e9ploiement contr\u00f4l\u00e9, timeouts et limitations, hooks et gestion d\u2019erreurs. Comme toute brique, il doit \u00eatre int\u00e9gr\u00e9 dans une strat\u00e9gie s\u00e9curit\u00e9\/monitoring adapt\u00e9e.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-lightrest-est-il-p-renne\"><\/a> LightREST est-il p\u00e9renne ?<\/p>\n<p>Oui : licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a>, code auditable, pas de d\u00e9pendance impos\u00e9e \u00e0 un serveur applicatif tiers, d\u00e9ploiement autonome.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-pourquoi-viter-une-solution-saas\"><\/a> Pourquoi \u00e9viter une solution SaaS ?<\/p>\n<p>LightREST se d\u00e9ploie <strong>chez vous<\/strong> : pas d\u2019abonnement, pas de d\u00e9pendance cloud obligatoire, contr\u00f4le total sur les donn\u00e9es et l\u2019exploitation.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-lightrest-permet-il-d-ouvrir-mon-si-vers-l-ext-rieur\"><\/a> LightREST permet-il d\u2019ouvrir mon SI vers l\u2019ext\u00e9rieur ?<\/p>\n<p>Oui : exposition d\u2019API s\u00e9curis\u00e9es pour partenaires, applications mobiles, front web moderne, automatisations, etc.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-marketing-lightrest-est-il-compatible-avec-une-strat-gie-api-first\"><\/a> LightREST est-il compatible avec une strat\u00e9gie API-first ?<\/p>\n<p>Oui : s\u00e9paration claire entre UI et m\u00e9tier, standard HTTP, int\u00e9gration facile avec des frontends modernes et des syst\u00e8mes tiers.<\/p>\n<\/div>\n<\/details>\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> Le point de vue des DSI \/ Architectes IT<\/summary>\n<p><a id=\"bp-dsi\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-lightrest-respecte-t-il-les-standards-http\"><\/a> LightREST respecte-t-il les standards HTTP ?<\/p>\n<p>Oui : m\u00e9thodes HTTP standard, codes HTTP coh\u00e9rents, headers configurables, support HTTPS.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-peut-on-l-int-grer-dans-une-architecture-existante\"><\/a> Peut-on l\u2019int\u00e9grer dans une architecture existante ?<\/p>\n<p>Oui : reverse proxy, load balancer, cluster, conteneurisation (Docker), orchestration (Kubernetes) - selon votre contexte.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-quelles-garanties-de-s-curit\"><\/a> Quelles garanties de s\u00e9curit\u00e9 ?<\/p>\n<p>HTTPS (certificat\/auto-sign\u00e9\/Let's Encrypt), hooks, timeouts, limitation de charge, gestion d\u2019erreurs.<br>\nL\u2019authentification\/autorisation se branche via vos m\u00e9canismes (hooks, headers, tokens\u2026).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-lightrest-supporte-t-il-la-scalabilit-horizontale\"><\/a> LightREST supporte-t-il la scalabilit\u00e9 horizontale ?<\/p>\n<p>Oui : architecture stateless par d\u00e9faut \u2192 duplication d\u2019instances derri\u00e8re un load balancer.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-quel-impact-sur-la-maintenance\"><\/a> Quel impact sur la maintenance ?<\/p>\n<p>Faible : binaire autonome, moins de d\u00e9pendances serveur, d\u00e9ploiement simple, configuration claire.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-quelles-d-pendances-logicielles\"><\/a> Quelles d\u00e9pendances logicielles ?<\/p>\n<p>Aucune d\u00e9pendance serveur obligatoire : pas d\u2019IIS, pas d\u2019Apache, pas de runtime externe \u00e0 installer c\u00f4t\u00e9 serveur (hors vos choix : proxy, monitoring\u2026).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-rgpd-compatible\"><\/a> RGPD : compatible ?<\/p>\n<p>Oui : LightREST n\u2019impose aucun stockage. La conformit\u00e9 d\u00e9pend des donn\u00e9es que vous traitez et de votre impl\u00e9mentation (logs, consentements, dur\u00e9es de conservation\u2026).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-peut-on-auditer-le-code\"><\/a> Peut-on auditer le code ?<\/p>\n<p>Oui : licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a>, code inspectable et modifiable.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-quel-est-le-mod-le-conomique\"><\/a> Quel est le mod\u00e8le \u00e9conomique ?<\/p>\n<p>Moteur gratuit (<a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a>). Support\/accompagnement possibles en option (conseil, int\u00e9gration, architecture, durcissement, etc.).<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-pourquoi-ne-pas-utiliser-net-web-api-java-node\"><\/a> Pourquoi ne pas utiliser .NET Web API \/ Java \/ Node ?<\/p>\n<p>Ces stacks sont tr\u00e8s valables, mais dans un SI WinDev\u00ae existant, LightREST permet de <strong>capitaliser sur le m\u00e9tier et le patrimoine applicatif<\/strong> sans r\u00e9\u00e9criture massive et sans double maintenance prolong\u00e9e.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-et-si-le-projet-s-arr-te\"><\/a> Et si le projet s\u2019arr\u00eate ?<\/p>\n<p>La licence <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a> permet de continuer \u00e0 utiliser, maintenir et adapter le code sans d\u00e9pendance contractuelle.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-lightrest-peut-il-tre-utilis-comme-couche-d-api-centralis-e-pour-plusieurs-applications-desktop-mobile-web\"><\/a> LightREST peut-il \u00eatre utilis\u00e9 comme couche d\u2019API centralis\u00e9e pour plusieurs applications (Desktop, Mobile, Web) ?<\/p>\n<p>Oui. LightREST permet d\u2019exposer une couche d\u2019API centralis\u00e9e et mutualis\u00e9e.<br>\nUne m\u00eame instance peut servir :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- une application WinDev\u00ae Desktop<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- une application WinDev Mobile\u00ae<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- un front web moderne (React, Vue, Angular\u2026)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- des partenaires externes<br>\n<br>\nCela favorise une architecture orient\u00e9e services et r\u00e9duit la duplication de logique m\u00e9tier.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-le-choix-de-go-am-liore-t-il-la-stabilit-en-production\"><\/a> Le choix de GO am\u00e9liore-t-il la stabilit\u00e9 en production ?<\/p>\n<p>Oui. Go est reconnu pour sa stabilit\u00e9 et sa robustesse dans les environnements serveurs.<br>\n<br>\nSon mod\u00e8le de concurrence ma\u00eetris\u00e9, l\u2019absence de gestion manuelle de m\u00e9moire, et la simplicit\u00e9 du binaire d\u00e9ploy\u00e9 r\u00e9duisent consid\u00e9rablement les risques :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- pas de d\u00e9pendance IIS<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- pas de serveur applicatif tiers<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- pas de runtime lourd \u00e0 maintenir<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- comportement d\u00e9terministe sous forte charge<br>\n<br>\nCela en fait un choix pertinent pour un moteur REST industriel.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-dsi-quelle-solution-en-cas-de-besoin-d-assistance-technique\"><\/a> Quelle solution en cas de besoin d'assistance technique ?<\/p>\n<p><a href=\"https:\/\/codeline.fr\">CODE LINE<\/a> peut accompagner les \u00e9quipes de d\u00e9veloppeurs dans la mise en \u0153uvre et l\u2019optimisation de LightREST.<br>\n<br>\nLes prestations peuvent inclure :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Audit d\u2019architecture et recommandations techniques<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Aide \u00e0 la conception d\u2019API REST robustes<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Formation des d\u00e9veloppeurs (hooks, gestion des timeouts, s\u00e9curit\u00e9, bonnes pratiques)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Optimisation des performances et gestion de la concurrence<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Assistance au d\u00e9ploiement (reverse proxy, HTTPS, load balancing, Docker)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Revue de code et durcissement s\u00e9curit\u00e9<br>\n<br>\nL\u2019objectif est de s\u00e9curiser les choix techniques, d\u2019acc\u00e9l\u00e9rer la mont\u00e9e en comp\u00e9tence des \u00e9quipes et de garantir une mise en production ma\u00eetris\u00e9e.<\/p>\n<\/div>\n<\/details>\n<details class=\"note\">\n<summary><span class=\"twemoji\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M11 18h2v-2h-2zm1-12a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\/><\/svg><\/span> Moderniser WinDev\u00ae : REST plut\u00f4t que r\u00e9\u00e9criture<\/summary>\n<p><a id=\"bp-strategie-modernisation\"><\/a><\/p>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-strategie-modernisation-pourquoi-ne-pas-r-crire-enti-rement-l-application-dans-une-autre-technologie\"><\/a> Pourquoi ne pas r\u00e9\u00e9crire enti\u00e8rement l\u2019application dans une autre technologie ?<\/p>\n<p>Une r\u00e9\u00e9criture compl\u00e8te est souvent longue, co\u00fbteuse et risqu\u00e9e.<br>Transformer l\u2019existant en <strong>serveur REST<\/strong> permet de moderniser progressivement tout en conservant le c\u0153ur m\u00e9tier et en capitalisant sur le patrimoine de fonctions m\u00e9tier.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-strategie-modernisation-quels-sont-les-risques-d-une-r-criture-compl-te\"><\/a> Quels sont les risques d\u2019une r\u00e9\u00e9criture compl\u00e8te ?<\/p>\n<p>Principaux risques :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- <strong>Perte de logique m\u00e9tier<\/strong> (r\u00e8gles implicites, cas limites, corrections accumul\u00e9es)<br> &nbsp;&nbsp;&nbsp;&nbsp;- <strong>Explosion des co\u00fbts<\/strong> (nouvelles comp\u00e9tences, double maintenance)<br> &nbsp;&nbsp;&nbsp;&nbsp;- <strong>Allongement des d\u00e9lais<\/strong> (recette, migration, conduite du changement)<br> &nbsp;&nbsp;&nbsp;&nbsp;- <strong>Risque projet \u00e9lev\u00e9<\/strong> (retards, d\u00e9passements, abandon)<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-strategie-modernisation-quels-sont-les-avantages-d-une-transformation-rest\"><\/a> Quels sont les avantages d\u2019une transformation REST ?<\/p>\n<p>Exposer le m\u00e9tier via HTTP\/JSON permet :<br>\n&nbsp;&nbsp;&nbsp;&nbsp;- Conservation du c\u0153ur WinDev\u00ae<br> &nbsp;&nbsp;&nbsp;&nbsp;- D\u00e9couplage UI \/ backend<br> &nbsp;&nbsp;&nbsp;&nbsp;- Ouverture vers web\/mobile\/partenaires<br> &nbsp;&nbsp;&nbsp;&nbsp;- Modernisation progressive sans rupture<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-strategie-modernisation-est-ce-une-modernisation-r-elle-ou-un-simple-pansement\"><\/a> Est-ce une modernisation r\u00e9elle ou un simple \u201cpansement\u201d ?<\/p>\n<p>C\u2019est une modernisation structurelle : en REST, le backend devient un service consommable par n\u2019importe quel front (React\/Vue\/Angular, mobile, partenaires). Cela pr\u00e9pare une architecture API-first.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-strategie-modernisation-peut-on-migrer-progressivement-vers-une-autre-technologie\"><\/a> Peut-on migrer progressivement vers une autre technologie ?<\/p>\n<p>Oui. L\u2019approche REST permet une migration <strong>module par module<\/strong> (ou microservice par microservice), au lieu d\u2019un big-bang.<\/p>\n<\/div>\n<div class=\"admonition bp\">\n<p class=\"admonition-title\"><a id=\"bp-strategie-modernisation-quel-roi-compar-une-r-criture\"><\/a> Quel ROI compar\u00e9 \u00e0 une r\u00e9\u00e9criture ?<\/p>\n<p>Transformer via REST r\u00e9duit les d\u00e9lais de mise en production, limite les risques et valorise l\u2019existant. La r\u00e9\u00e9criture est souvent un pari ; la transformation REST est une strat\u00e9gie ma\u00eetris\u00e9e.<\/p>\n<\/div>\n<\/details>\n\n\n\n\n\n\n\n\n\n\n\n\n                \n              <\/article>\n            <\/div>\n          \n          \n\n        <\/div>\n        \n      <\/main>\n      \n        <footer class=\"md-footer\">\n  \n  <div class=\"md-footer-meta md-typeset\">\n    <div class=\"md-footer-meta__inner md-grid\">\n       \n      \n    <\/div>\n  <\/div>\n<\/footer>\n      \n    <\/div>\n    <div class=\"md-dialog\" data-md-component=\"dialog\">\n      <div class=\"md-dialog__inner md-typeset\"><\/div>\n    <\/div>\n    \n    \n    \n      \n      \n      \n    \n    \n      \n      \n        \n      \n        \n      \n        \n      \n    \n  \n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous trouverez ci-dessous les questions habituellement pos\u00e9es au sujet de LightREST (techniques, fonctionnelles, comparatives, marketing, DSI, aspects juridiques, licence, &#8230;) S\u2019il vous reste des interrogations, n\u2019h\u00e9sitez pas \u00e0 utiliser le formulaire de contact.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":161,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2407","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/pages\/2407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/comments?post=2407"}],"version-history":[{"count":10,"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/pages\/2407\/revisions"}],"predecessor-version":[{"id":2586,"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/pages\/2407\/revisions\/2586"}],"up":[{"embeddable":true,"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/pages\/161"}],"wp:attachment":[{"href":"https:\/\/lightrest.codeline.fr\/index.php\/wp-json\/wp\/v2\/media?parent=2407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}