From 95f8aef30a370e7239ee6a669d77e2bc3f32334c Mon Sep 17 00:00:00 2001 From: Thomas Durieux <5577568+tdurieux@users.noreply.github.com> Date: Fri, 9 Oct 2026 05:22:30 +0000 Subject: [PATCH 1/4] feat: notify owners when GitHub access needs attention --- README.md | 21 +++ public/asset-manifest.json | 4 +- public/css/all.min.css | 2 +- public/css/style.css | 16 ++ public/partials/connections.htm | 10 ++ public/partials/header.htm | 15 ++ public/script/app.js | 46 +++++ public/script/vendor.min.js | 56 +++--- src/config.ts | 4 + src/core/GitHubUtils.ts | 15 +- src/core/Repository.ts | 9 +- src/core/github-app.ts | 9 + src/core/model/users/users.schema.ts | 2 + src/core/model/users/users.types.ts | 1 + src/core/owner-notifications.ts | 81 +++++++++ src/core/redact-secrets.ts | 2 +- src/queue/processes/downloadRepository.ts | 2 + src/server/routes/github-app.ts | 24 ++- src/server/routes/user.ts | 13 ++ test/owner-notifications.test.js | 201 ++++++++++++++++++++++ test/vue-ui.test.js | 53 ++++++ 21 files changed, 548 insertions(+), 38 deletions(-) create mode 100644 src/core/owner-notifications.ts create mode 100644 test/owner-notifications.test.js diff --git a/README.md b/README.md index c42e412..9631a61 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,27 @@ the [MongoDB replication guide](docs/mongodb-replication.md). +### Owner email alerts + +Set `RESEND_API_KEY` and `EMAIL_FROM` on the web server and download workers to +send access alerts through [Resend](https://resend.com/docs/api-reference/emails/send-email). +Use a sender address on a domain verified in Resend. `APP_HOSTNAME` sets the +host used for the connections link in emails. + +Signed-in owners without an email address see an email form in a popup. +“Remind me later” dismisses it for the current login session; “Never” saves a +permanent preference on the account. Existing addresses are reused, and owners +can add or change their address on the connections page at any time. +Alerts cover invalid GitHub credentials and repository access errors encountered +while reading or refreshing content. No periodic access scan is performed. +Emails contain no repository names, anonymous URLs, or credentials. + +An atomic database claim limits alerts to one per owner every 24 hours across +workers and repositories. Sending is best effort: delivery failures do not block +repository requests, and a later access error can retry after ten minutes. +A process interrupted after claiming an alert may skip that day's email. +Leaving either Resend setting empty disables delivery and the email prompt. + ## Scope of anonymization In double-anonymous review, the boundary of anonymization is **the paper plus its online appendix — and only that**. Googling part of the paper or appendix to reveal authorship is considered a deliberate attempt to break anonymity ([explanation](https://www.monperrus.net/martin/open-science-double-blind)). diff --git a/public/asset-manifest.json b/public/asset-manifest.json index b3bad34..8d981b7 100644 --- a/public/asset-manifest.json +++ b/public/asset-manifest.json @@ -1,8 +1,8 @@ { "core.min.js": "core.3b07189932.min.js", - "vendor.min.js": "vendor.126b1a8e99.min.js", + "vendor.min.js": "vendor.29de243e41.min.js", "mermaid.min.js": "mermaid.f848a72d16.min.js", - "all.min.css": "all.4c22aa9cd3.min.css", + "all.min.css": "all.8bc90a3e4c.min.css", "markdown.min.js": "markdown.44f2e93820.min.js", "pdf.min.js": "pdf.4d9cc6ff49.min.js", "notebook.min.js": "notebook.c3144c18ae.min.js", diff --git a/public/css/all.min.css b/public/css/all.min.css index 2c6905d..0a5b34e 100644 --- a/public/css/all.min.css +++ b/public/css/all.min.css @@ -6,4 +6,4 @@ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-regular-400.eot);src:url(../fonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.woff2) format("woff2"),url(../fonts/fa-regular-400.woff) format("woff"),url(../fonts/fa-regular-400.ttf) format("truetype"),url(../fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.nb-notebook{line-height:1.5}.nb-stderr,.nb-stdout{white-space:pre-wrap;margin:1em 0;padding:.1em .5em}.nb-stderr{background-color:#faa}.nb-cell+.nb-cell{margin-top:.5em}.nb-output table{border:1px solid #000;border-collapse:collapse}.nb-output th{font-weight:700}.nb-output td,.nb-output th{border:1px solid #000;padding:.25em;text-align:left;vertical-align:middle;border-collapse:collapse}.nb-notebook blockquote{border-left:5px solid #ccc;margin-left:0;padding-left:1em}.nb-cell{position:relative}.nb-raw-cell{white-space:pre-wrap;background-color:#f5f2f0;font-family:Consolas,Monaco,'Andale Mono',monospace;padding:1em;margin:.5em 0}.nb-output{min-height:1em;width:100%;overflow-x:scroll;border-right:1px dotted #ccc}.nb-output img{max-width:100%}.nb-input:before,.nb-output:before{position:absolute;font-family:monospace;color:#999;left:-7.5em;width:7em;text-align:right}.nb-input:before{content:"In [" attr(data-prompt-number) "]:"}.nb-output:before{content:"Out [" attr(data-prompt-number) "]:"}// Fix pandas dataframe formatting div[style="max-height:1000px;max-width:1500px;overflow:auto;"]{max-height:none!important}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.10"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.mermaid{text-align:center;margin:1em 0;overflow:auto}.mermaid svg{max-width:100%;height:auto}.dark-mode .mermaid{filter:invert(1) hue-rotate(180deg)}.dark-mode .mermaid svg{background:0 0}.dark-mode .mermaid .edgeLabel,.dark-mode .mermaid .nodeLabel{filter:invert(1) hue-rotate(180deg)}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{stroke-width:2px}.mermaid .flowchart-link{stroke-width:2px}.mermaid .actor{fill:#f9f9f9;stroke:#333;stroke-width:2px}.mermaid .messageLine0,.mermaid .messageLine1{stroke:#333;stroke-width:1.5px}.mermaid .section0,.mermaid .section1,.mermaid .section2,.mermaid .section3{opacity:.8}.mermaid .pieChart .slice{opacity:.9}.markdown-body .mermaid{background:0 0;border:none;padding:10px}.mermaid .error{color:#d32f2f;font-family:monospace;font-size:12px;padding:10px;border:1px solid #d32f2f;border-radius:4px;background-color:#ffebee}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2::before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.dark-mode{--canvas-bg-color:#1B1916;--sidebar-bg-color:#1A1918;--main-bg-color:#1B1916;--header-bg-color:#1A1918;--hover-bg-color:rgba(255, 255, 255, 0.05);--header-color:#FAF9F6;--color:#D6D1C5;--link-color:#A7B2FF;--link-hover-color:#C8CEFF;--border-color:#33302B;--border-soft:#2A2825;--btn-color:#FAF9F6;--input-color:#E6E1D8;--input-bg:#25231F;--primary-bg:#FAF9F6;--primary-hover-bg:#FFFFFF;--primary-color:#1A1815;--primary-active-color:#1A1815;--accent:#A7B2FF;--accent-soft:rgba(167, 178, 255, 0.12);--ink-muted:#A39D92;--ink-faint:#8A857C;--ink-soft:#B5AFA2;--status-ready:#5FB27A;--status-progress:#E0A94A;--status-error:#F08A82;--status-inactive:#8A857C;--status-error-soft:rgba(240, 138, 130, 0.08);--status-error-soft-hover:rgba(240, 138, 130, 0.14);--admin-nav-bg:#1A1918;--admin-nav-active:rgba(167, 178, 255, 0.12);--admin-stat-bg:#25231F;--paper-card:#25231F;--paper-bg-alt:#201E1B;--highlight:#3A341E;background-color:var(--canvas-bg-color);color:var(--color)}body{--canvas-bg-color:#FAF9F6;--sidebar-bg-color:#FFFFFF;--header-bg-color:#FAF9F6;--header-color:#1A1815;--main-bg-color:#FAF9F6;--hover-bg-color:rgba(26, 24, 21, 0.05);--input-color:#1A1815;--color:#1A1815;--link-color:#3B4AD6;--link-hover-color:#2E3BB8;--border-color:#E6E1D8;--border-soft:#EDE9E1;--btn-color:#1A1815;--input-bg:#FFFFFF;--primary-bg:#1A1815;--primary-hover-bg:#000000;--primary-color:#FAF9F6;--primary-active-color:#FAF9F6;--accent:#3B4AD6;--accent-soft:#EEF0FF;--ink-muted:#6F6A61;--ink-faint:#8A857C;--ink-soft:#4A4641;--paper-bg-alt:#F3F1EC;--paper-card:#FFFFFF;--highlight:#FFF3C4;--status-ready:#2F7A44;--status-progress:#946512;--status-error:#B42318;--status-inactive:#8A857C;--status-error-soft:rgba(180, 35, 24, 0.04);--status-error-soft-hover:rgba(180, 35, 24, 0.08);--radius-control:6px;--radius-button:8px;--button-height:36px;--button-font-size:14px;--button-line-height:20px;--button-padding-x:13px;--button-compact-height:32px;--radius-surface:10px;--font-serif:'Instrument Serif','Iowan Old Style',Georgia,serif;--font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,sans-serif;--font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;background-color:var(--canvas-bg-color);color:var(--color);font-family:var(--font-sans);font-size:14px;letter-spacing:-.005em;line-height:1.5}.fadeIn{opacity:1;animation-name:fadeInOpacity;animation-iteration-count:1;animation-timing-function:ease-in;animation-duration:.6s}@keyframes fadeInOpacity{0%{opacity:0}100%{opacity:1}}.btn:active,.btn:focus{box-shadow:none}:focus:not(:focus-visible){outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,.dropdown-item:focus-visible,.form-control:focus-visible{outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}input:active,input:hover{box-shadow:none!important}input:-webkit-autofill,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{border-color:var(--border-color);-webkit-text-fill-color:var(--color);-webkit-box-shadow:none;transition:background-color 1000s ease-in-out 0s}.custom-select,.form-control,input:-internal-autofill-selected{color:var(--input-color);background-color:var(--input-bg)!important;border-color:var(--border-color)}.form-control:focus{border-color:var(--border-color)}body,html{position:relative;height:100%;overflow-x:hidden}body{overflow-y:hidden}#app{flex:1 1 auto;min-height:0}.app-header{flex:0 0 auto}.app-view{display:block;flex:1 1 auto;min-height:0;overflow-x:hidden!important;overflow-y:auto!important;max-width:100%}.markdown-body a,a{color:var(--link-color)}.markdown-body a:hover,a:hover{text-decoration:none;color:var(--link-hover-color)}.dropdown-menu a.dropdown-item{color:var(--color)}.dropdown-menu a.dropdown-item:hover{color:var(--color);text-decoration:none}.markdown-body .emoji{height:1.3em;margin:0;vertical-align:-.1em}.navbar.navbar-expand-lg{background:var(--header-bg-color)!important;border-bottom:1px solid var(--border-color);transition:background-color .5s ease;padding:10px max(20px,calc((100vw - 1200px)/ 2));font-family:var(--font-sans)}.navbar-toggler{border:1px solid var(--border-color)!important;color:var(--color)!important}.navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}.navbar .navbar-nav{align-items:center}.navbar .nav-link{display:inline-flex;align-items:center;font-size:13px;color:var(--ink-muted)!important;padding:6px 0!important;margin:0 12px;border-bottom:1px solid transparent;letter-spacing:-.005em;line-height:1}.navbar .nav-link:hover{color:var(--color)!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--color)}.navbar .nav-link.nav-icon{padding:0!important;margin:0 8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:15px;line-height:1}.navbar #navbarSupportedContent{align-items:center}.navbar-brand{font-family:var(--font-serif)!important;font-size:20px!important;letter-spacing:-.01em;color:var(--color)!important;padding-right:18px;margin-right:12px;border-right:1px solid var(--border-color)}.navbar-brand em,.navbar-brand i{font-style:italic;font-weight:400}.navbar-dark .navbar-toggler{border-color:var(--border-color);color:var(--color)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar .btn-signin{display:inline-flex;align-items:center;height:32px;padding:0 14px!important;margin-left:6px;border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color)!important;border-radius:6px;font-size:13px;font-weight:500;line-height:1}.navbar .btn-signin:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color)!important}.navbar .nav-support{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;order:3;gap:6px;min-height:36px;margin-left:12px;padding:0 12px;border:1px solid var(--border-color);border-radius:8px;color:var(--color);font-size:13px;font-weight:500;text-decoration:none}.navbar .nav-support:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}@media (max-width:991px){.navbar .nav-support{order:0;width:44px;min-height:44px;margin:0 8px 0 auto;padding:0}.navbar .nav-support-label{display:none}[class*=floatingchat-container-wrap],iframe.floatingchat-container{display:none!important}}.navbar .user-chip{display:inline-flex!important;align-items:center;gap:8px;padding:4px 12px 4px 6px!important;margin-left:6px;border:1px solid var(--border-color);border-radius:999px;background:var(--sidebar-bg-color);font-size:13px;color:var(--color)!important}.navbar .user-chip:hover{background:var(--hover-bg-color)}.navbar .user-chip img{width:22px;height:22px}.navbar .user-chip .user-chip-name{color:var(--color);font-weight:500}.navbar .user-chip::after{color:var(--ink-muted)}#navbarSupportedContent{padding-right:0}.generalMessage{display:block;text-align:center;color:var(--header-color)}.rgba-gradient{background:var(--canvas-bg-color);color:var(--color)}.paper-landing{overflow-x:clip}.paper-wrap{max-width:1140px;margin-left:auto;margin-right:auto;padding-left:32px;padding-right:32px}.paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.paper-hero{max-width:1140px;margin:0 auto;padding:64px 32px 0;display:grid;grid-template-columns:.95fr 1.05fr;gap:48px;align-items:center}.paper-hero h1.hero-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.4vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:14px 0 0;color:var(--color);text-wrap:balance}.paper-hero h1 .accent{color:var(--accent);font-style:italic}.hero-subtitle{margin-top:18px;font-size:18px;line-height:1.55;color:var(--ink-soft);max-width:30em;text-wrap:pretty}.paper-cta-row{display:flex;flex-wrap:wrap;gap:18px;align-items:center;margin-top:26px}.btn-hero{display:inline-flex;align-items:center;font-family:var(--font-sans);border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control);letter-spacing:-.005em;transition:background .15s,border-color .15s,transform .1s}.btn-hero:hover{background:var(--primary-hover-bg);border-color:var(--primary-hover-bg);color:var(--canvas-bg-color);text-decoration:none;transform:translateY(-1px)}.btn-hero-ghost{background:0 0;border:1px solid var(--border-color);color:var(--color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control)}.btn-hero-ghost:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}.paper-link-arrow{font-size:14px;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-color)}.paper-link-arrow:hover{color:var(--color);text-decoration-color:var(--color)}.paper-reassure{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--ink-muted)}.paper-reassure li::before{content:"\2713";color:var(--status-ready);margin-right:6px;font-size:11px}.paper-frame{border-radius:var(--radius-surface);background:var(--paper-card);border:1px solid var(--border-color);box-shadow:0 24px 60px rgba(26,24,21,.1),0 2px 6px rgba(26,24,21,.04);overflow:hidden}.dark-mode .paper-frame{box-shadow:0 24px 60px rgba(0,0,0,.45)}.paper-frame-bar{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-bottom:1px solid var(--border-soft);background:var(--paper-bg-alt);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted)}.paper-frame-bar .dots{display:flex;gap:5px}.paper-frame-bar .dots i{width:8px;height:8px;border-radius:50%;background:var(--border-color)}.paper-frame-bar .url{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-frame img{display:block;width:100%;height:auto}.paper-hero-shot .paper-frame{width:112%}.paper-proof{margin-top:64px;padding-top:18px;padding-bottom:18px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:12px 30px;align-items:center}.paper-proof-venues{display:flex;gap:22px;align-items:center;font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--ink-soft)}.paper-proof-venues i{font-style:normal;font-family:var(--font-sans);font-size:14px;color:var(--ink-faint)}.paper-stats{margin-top:12px;padding-top:22px;border-top:1px solid var(--border-color)}.paper-stats-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:14px}.paper-stats-meta-right{display:inline-flex;align-items:center;gap:6px}.paper-stats-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--status-ready)}.paper-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.paper-stat-card{display:flex;flex-direction:column;padding:22px 26px 20px 0;margin-right:26px;border-right:1px solid var(--border-color);min-width:0}.paper-stat-card:last-child{border-right:0;margin-right:0;padding-right:0}.paper-stat-value{font-size:44px;font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--color);font-variant-numeric:tabular-nums}.paper-stat-label{margin-top:6px;font-size:13px;color:var(--ink-soft)}.paper-stat-bars{display:block;width:100%;height:34px;margin-top:18px;overflow:visible}.paper-stat-bars rect{fill:var(--border-color)}.paper-stat-bars rect.is-latest{fill:var(--accent)}.paper-stat-delta{margin-top:10px;font-family:var(--font-mono);font-size:11px;color:var(--status-ready)}.paper-section-head{margin-top:110px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}.paper-qa h2,.paper-section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(2rem,4.2vw,3.25rem);line-height:1.05;letter-spacing:-.02em;margin:10px 0 0;color:var(--color);text-wrap:balance}.paper-feature-title em,.paper-qa h2 em,.paper-section-head h2 em{font-style:italic;color:var(--accent)}.paper-section-head p{font-size:15px;color:var(--ink-soft);max-width:32em;margin:0;line-height:1.6}.paper-preview{margin-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.paper-preview .pane{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);overflow:hidden;min-width:0}.paper-preview .pane-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border-soft)}.paper-preview .pane-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap}.paper-preview .pane-url{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.paper-preview .pane-body{padding:16px 18px;font-family:var(--font-mono);font-size:13px;line-height:1.9;color:var(--ink-soft)}.paper-preview .pane-body strong{color:var(--color);font-weight:600}.paper-preview .tok{color:var(--ink-faint)}.paper-preview .redact{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:0 5px}.paper-features{margin-top:28px;padding-top:28px;border-top:1px solid var(--border-color);display:grid;grid-template-columns:5fr 7fr;gap:48px;align-items:start}.paper-features-list{display:flex;flex-direction:column}.paper-feature{border-left:2px solid var(--border-soft);padding:16px 0 16px 20px;transition:border-color .2s}.paper-feature.is-on{border-left-color:var(--color)}.paper-feature-tab{all:unset;display:block;width:100%;cursor:pointer;color:inherit;border-radius:4px}.paper-feature-tab:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.paper-feature-tab .paper-eyebrow{display:block;margin-bottom:6px}.paper-feature-title{display:block;font-family:var(--font-serif);font-size:24px;line-height:1.15;letter-spacing:-.015em;color:var(--ink-muted);transition:color .2s}.paper-feature-title em{color:inherit}.paper-feature-tab:hover .paper-feature-title,.paper-feature.is-on .paper-feature-title{color:var(--color)}.paper-feature.is-on .paper-feature-title em{color:var(--accent)}.paper-feature-more{display:none}.paper-feature.is-on .paper-feature-more{display:block}.paper-feature-more .paper-feature-title-m{display:none}.paper-feature-more p{font-size:15px;color:var(--ink-soft);line-height:1.55;margin:10px 0 12px;max-width:30em}.paper-features-stage{min-width:0}.paper-feature-panel{animation:paper-feature-in .25s ease-out}@keyframes paper-feature-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.paper-feature-panel{animation:none}}.paper-crop{position:relative;height:380px;overflow:hidden;background:var(--paper-card)}.paper-crop img{position:absolute;left:0;top:0;max-width:none;height:auto;display:block}.paper-crop-anonymize img{width:150%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:160%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:150%;transform:translate(-6%,-9%)}.paper-qa{margin-top:110px;display:grid;grid-template-columns:1fr 1.4fr;gap:40px;align-items:start}.paper-qa h2{margin-bottom:12px}.paper-qa .q{border-top:1px solid var(--border-color);padding:18px 0}.paper-qa .q:last-child{border-bottom:1px solid var(--border-color)}.paper-qa .q a{display:block;font-weight:500;font-size:15px;color:var(--color);margin-bottom:6px}.paper-qa .q a:hover{color:var(--accent);text-decoration:none}.paper-qa .q p{margin:0;font-size:14px;color:var(--ink-soft);line-height:1.6}@media (max-width:1100px){.paper-hero-shot .paper-frame{width:100%}}@media (max-width:991px){.paper-hero{grid-template-columns:1fr;gap:36px;padding-top:40px}.paper-qa,.paper-section-head{grid-template-columns:1fr;gap:16px}.paper-stats-grid{grid-template-columns:1fr 1fr}.paper-stat-card:nth-child(2n){border-right:0;margin-right:0;padding-right:0}.paper-stat-card:nth-child(-n+2){border-bottom:1px solid var(--border-color)}}@media (max-width:767px){.paper-hero,.paper-wrap{padding-left:20px;padding-right:20px}.paper-hero h1.hero-title{font-size:clamp(2.4rem,11vw,3.25rem)}.hero-subtitle{font-size:16px}.paper-cta-row .btn-hero{width:100%;justify-content:center}.paper-proof{margin-top:48px}.paper-stat-card{padding:18px 16px 16px 0;margin-right:16px}.paper-stat-value{font-size:40px}.paper-qa,.paper-section-head{margin-top:72px}.paper-preview{grid-template-columns:1fr}.paper-preview .pane-body{font-size:12px;line-height:1.8}.paper-features{display:flex;flex-wrap:wrap;gap:0;padding-top:0;border-top:0;margin-top:24px}.paper-feature,.paper-features-list,.paper-features-stage{display:contents}.paper-feature-tab{order:1;flex:1 1 0;width:auto;padding:12px 0 10px;border-bottom:2px solid var(--border-color);border-radius:0;text-align:left}.paper-feature.is-on .paper-feature-tab{border-bottom-color:var(--color)}.paper-feature-tab .paper-eyebrow{margin:0;font-size:11px;letter-spacing:.08em}.paper-feature-tab .paper-feature-title{display:none}.paper-feature-panel{order:2;width:100%;margin-top:20px;animation:none}.paper-crop{height:240px}.paper-crop-anonymize img{width:230%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:240%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:220%;transform:translate(-3%,-9%)}.paper-feature-more{order:3;width:100%}.paper-feature.is-on .paper-feature-more{margin-top:18px}.paper-feature-more .paper-feature-title-m{display:block;font-size:28px;line-height:1.1}.paper-feature-more p{max-width:none}.paper-footer-inner>.paper-footer-brand{grid-column:1/-1}.paper-footer-foot{flex-direction:column;gap:6px}}.dropdown-menu{background-color:var(--paper-card,var(--main-bg-color))!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:8px!important;box-shadow:0 12px 28px rgba(26,24,21,.08),0 2px 6px rgba(26,24,21,.05)!important;padding:6px!important;font-family:var(--font-sans);font-size:13px;min-width:11rem}.dropdown-menu .dropdown-item{color:var(--color)!important;padding:7px 10px!important;border-radius:5px;font-size:13px}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color)!important;color:var(--color)!important}.dropdown-menu .dropdown-divider{border-top-color:var(--border-color)!important;margin:4px 2px}.dropdown-menu .dropdown-header{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.body,.file-content,.markdown-body{background-color:var(--main-bg-color)!important;color:var(--color)!important}.markdown-body table tr{background-color:var(--main-bg-color);border-top:1px solid var(--border-color)}.markdown-body table tr:nth-child(2n){background-color:var(--paper-bg-alt)}.markdown-body table td,.markdown-body table th{border:1px solid var(--border-color)}.file-content{padding:4px 7px;text-align:left;min-height:100%}.badge{font-size:75%;font-weight:500;padding:3px 8px;border-radius:10px;vertical-align:middle}.warning-feedback{width:100%;margin-top:.25rem;font-size:80%;color:#dc8e35}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--hover-bg-color)}.card-header .btn,.card-header .btn:focus,.card-header .btn:hover{border:none!important;background:0 0!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);vertical-align:middle;max-width:100%;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease;color:var(--btn-color);border:1px solid var(--border-color);background:var(--paper-card);border-radius:var(--radius-button);white-space:nowrap}.btn:active,.btn:hover{color:var(--btn-color);border:1px solid var(--border-color);background-color:var(--hover-bg-color);box-shadow:none!important}.btn.btn-primary{color:var(--primary-color);background-color:var(--primary-bg)}.btn.btn-primary:active,.btn.btn-primary:hover{color:var(--primary-active-color);background-color:var(--primary-hover-bg)!important}.btn::placeholder{color:var(--color);opacity:1}.white_border{border:1px solid #fff;color:#fff}.leftCol{display:flex;position:relative;flex:0 0 auto;width:100%;z-index:9;flex-direction:column}.card,.leftCol,.sidePanel{background-color:var(--sidebar-bg-color);border:1px solid var(--border-color)}@media (min-width:768px){.leftCol{flex:0 0 310px;width:310px;height:100%}}.leftCol-search{padding:10px 12px 0}.tree-search-box{display:flex;align-items:center;gap:8px;background:var(--canvas-bg-color);border:1px solid var(--border-color);border-radius:8px;padding:7px 10px;transition:border-color .15s}.tree-search-box:focus-within{border-color:var(--ink-muted)}.tree-search-icon{font-size:12px;color:var(--ink-muted);flex-shrink:0}.tree-search-input{flex:1;border:none;outline:0;background:0 0;font-family:var(--font-sans);font-size:13px;color:var(--color);min-width:0}.tree-search-input::placeholder{color:var(--ink-muted)}.tree-search-kbd{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:4px;padding:1px 6px;line-height:1.4;flex-shrink:0}.tree-search-clear{background:0 0;border:none;color:var(--ink-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.tree-search-clear:hover{color:var(--color)}.leftCol-project-header{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px 4px;gap:8px}.project-name{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.project-file-count{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);white-space:nowrap;flex-shrink:0}.files{position:relative;display:block;overflow:auto;height:100%;padding:4px 6px}.files ul{list-style:none;margin:0;padding:0}.files li ul{padding-left:8px;margin-left:7px;border-left:1px solid var(--border-color)}.files .folder>ul{display:none}.files .folder.open>ul{display:block}.files .file,.files .folder{position:relative;color:var(--ink-soft);cursor:pointer;word-break:break-all}.files a{display:flex;align-items:center;gap:4px;padding:1px 8px 1px 2px;font-family:var(--font-sans);font-size:13px;color:var(--ink-soft);border-radius:4px;text-decoration:none;line-height:1.5;position:relative}.files a:hover{background:var(--hover-bg-color);color:var(--color);text-decoration:none}.files:focus{outline:0}.files a.tree-focused{background:var(--hover-bg-color);color:var(--color)}.files .file.active>a{background:rgba(128,128,128,.15);color:var(--color)}.files .file.active>a .tree-icon-file{color:#5b7ba5}.files .file.active>a .tree-count{color:var(--ink-muted)}.tree-icon-file,.tree-icon-folder{display:inline-block;flex-shrink:0}.tree-icon-folder{width:14px;height:12px;color:var(--ink-muted);opacity:.75}.tree-icon-folder svg{display:block;width:100%;height:100%;fill:currentColor;fill-opacity:0;stroke:currentColor;stroke-width:1.2;stroke-linejoin:round}.files .folder.open>a .tree-icon-folder{color:#a07d2e;opacity:.9}.files .folder.open>a .tree-icon-folder svg{fill-opacity:.12}.dark-mode .files .folder.open>a .tree-icon-folder{color:#c9a03a}.tree-icon-file{width:16px;font-size:14px;text-align:center;color:#5b7ba5}.dark-mode .files .file.active>a .tree-icon-file,.dark-mode .tree-icon-file{color:#7ba3d0}.tree-toggle{display:inline-flex;align-items:center;justify-content:center;width:10px;height:14px;flex-shrink:0;opacity:.6}.tree-toggle::after{content:"";display:block;width:0;height:0;border-style:solid;border-width:3px 0 3px 4.5px;border-color:transparent transparent transparent var(--ink-muted);transition:transform .12s ease}.files .folder.open>a .tree-toggle::after{transform:rotate(90deg)}.tree-spacer{display:inline-block;width:10px;flex-shrink:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);flex-shrink:0;margin-left:auto;padding-left:8px;opacity:.7}.files .folder>a{color:var(--color)}.files .file::before,.files .folder::before{display:none}.files .folder>a::after{display:none}.tree-search-path{color:var(--ink-muted);font-size:11px}.tree-search-empty{padding:16px 12px;color:var(--ink-muted);font-size:13px;font-family:var(--font-sans);text-align:center}.leftCol{background:var(--paper-bg-alt,#f3f1ec);border-right:1px solid var(--border-color)}.dark-mode .leftCol{background:var(--sidebar-bg-color)}.status-bar{background:var(--canvas-bg-color);border-bottom:1px solid var(--border-color);padding:10px 14px}.paths .breadcrumb-item,.paths .breadcrumb-item a{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paths .breadcrumb-item.active,.paths .breadcrumb-item:last-child{color:var(--color)}.paths .breadcrumb-item+.breadcrumb-item::before{content:'/';color:var(--ink-muted)}.last-update{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);padding:8px 10px;border-top:1px solid var(--border-color);letter-spacing:.02em}.ace_editor{height:100%}.ace_scroller{cursor:default}.status-bar{display:flex;align-items:center;gap:12px;background-color:var(--canvas-bg-color);padding:10px 14px;margin:0;border-bottom:1px solid var(--border-color);border-radius:0;flex-shrink:0}.status-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.status-bar-actions .btn{display:inline-flex;align-items:center;gap:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;padding:4px 10px;font-size:13px;min-height:30px}.status-bar-actions .btn:hover{background:var(--hover-bg-color);color:var(--color)}.status-bar-actions .btn.btn-active{border-color:currentColor;font-weight:600}.paths{flex:1 1 auto;min-width:0;padding:0;margin:0;background-color:initial;border:none;border-radius:0;align-items:center;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.paths::-webkit-scrollbar{display:none}.paths a{color:var(--color)}.paths .breadcrumb-item{padding-left:3px}.paths .breadcrumb-item::before{padding-right:3px}.content{height:100%;overflow:scroll;padding-top:42px;background-color:var(--main-bg-color);text-align:center}.image-content{max-width:100%;max-height:100%;text-align:center;padding:4px}.pdf-viewer{display:flex;flex-direction:column;height:100%;min-height:0;background-color:var(--main-bg-color)}.pdf-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 8px;border-bottom:1px solid var(--border-color,rgba(0,0,0,.12))}.pdf-toolbar-group{display:inline-flex;align-items:center;gap:4px}.pdf-toolbar-right{margin-left:auto}.pdf-toolbar-btn{border:0;background:0 0;color:inherit;padding:4px 8px;border-radius:4px;font-size:13px;line-height:1.2;cursor:pointer}.pdf-toolbar-btn:hover:not(:disabled){background-color:rgba(128,128,128,.18)}.pdf-toolbar-btn:disabled{opacity:.4;cursor:default}.pdf-toolbar-zoom{min-width:52px;font-variant-numeric:tabular-nums}.pdf-toolbar-page{width:3.5em;text-align:right;padding:2px 4px;font-size:13px;color:inherit;background:0 0;border:1px solid var(--border-color,rgba(0,0,0,.2));border-radius:4px}.pdf-toolbar-count{font-size:13px;opacity:.75;font-variant-numeric:tabular-nums}.pdf-pages{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 0}.pdf-viewer-page{margin:0 auto 12px}.pdf-viewer-page canvas{display:block;box-shadow:0 1px 4px rgba(0,0,0,.25)}.pdf-viewer-error{padding:24px;text-align:center;font-weight:700}.html-doc{display:block;height:100%}.html-doc-frame{display:block;width:100%;height:100%;border:0;background-color:#fff}.file-error{font-weight:700;font-size:50px;text-align:center}pdfviewer{display:block;padding:15px}pdfpageviewer{display:block;width:100%;margin-bottom:10px}notebook{display:block;text-align:left;padding:15px}@media (min-width:768px){notebook{padding-left:100px}}.nb-output td,.nb-output th{border:1px solid var(--border-color)!important}.paper-faq{max-width:1180px;margin:0 auto;padding:48px 32px 80px;font-family:var(--font-sans)}.paper-faq-hero{padding-bottom:40px;border-bottom:1px solid var(--border-color);margin-bottom:36px}.paper-faq-eyebrow{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:32px}.paper-faq-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.5vw,4.6rem);line-height:1.03;letter-spacing:-.02em;color:var(--color);margin:0 0 22px;max-width:14em}.paper-faq-title em{font-style:italic;color:var(--color)}.paper-faq-lede{color:var(--ink-soft);font-size:18px;line-height:1.55;max-width:38em;margin:0}.paper-faq-lede a{color:var(--color);border-bottom:1px solid var(--color)}.paper-faq-lede a:hover{color:var(--accent);border-bottom-color:var(--accent)}.paper-faq-body{display:grid;grid-template-columns:220px 1fr;gap:60px;align-items:start}.paper-faq-toc{position:sticky;top:32px;font-size:14px}.paper-faq-toc-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--border-color)}.paper-faq-toc nav{display:flex;flex-direction:column}.paper-faq-toc nav a{color:var(--ink-soft);padding:8px 0 8px 14px;border-left:2px solid transparent;text-decoration:none;margin-left:-2px}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.faq-section{min-width:0}.faq-section>div{width:100%}.faq-section h4.faq-cat{font-family:var(--font-serif);font-weight:400;font-size:clamp(1.7rem,2.6vw,2.2rem);letter-spacing:-.015em;color:var(--color);margin:0 0 6px;padding-bottom:14px;border-bottom:1px solid var(--border-color)}.faq-section h4.faq-cat i{display:none}.faq-section .panel-group{margin-bottom:56px}.faq-section .panel-default .panel-title a{display:block;position:relative;padding:22px 0 22px 42px;font-family:var(--font-serif);font-weight:400;font-size:20px;line-height:1.35;letter-spacing:-.005em;color:var(--color);text-decoration:none;cursor:pointer}.faq-section .panel-default .panel-title a:hover{color:var(--accent)}.faq-section .panel-heading{background:0 0;padding:0!important;border:none}.faq-section .panel-default{background:0 0;border:none;border-bottom:1px solid var(--border-soft);border-radius:0;margin-bottom:0!important;box-shadow:none}.faq-section .panel-default .panel-title{margin-bottom:0}.faq-section .panel-default .panel-title a:after{content:"−";position:absolute;left:0;right:auto;top:22px;transform:none;font-family:var(--font-mono);font-size:18px;line-height:1.35;color:var(--ink-muted);float:none;margin:0;font-weight:400}.faq-section .panel-default .panel-title a.collapsed:after{content:"+"}.faq-section .panel-default .panel-body{padding:0 0 22px 42px!important;color:var(--ink-soft);font-size:15px;line-height:1.65;border-top:none;max-width:42em}.table{color:var(--color)}.dropdown-divider,.table td,.table th,hr{border-color:var(--border-color)}.table.repositories td{word-break:break-word}loc{display:block;position:relative;width:100%;height:5px}loc .lang{float:left;height:100%}.rounded-circle.fa{display:inline-block;font-size:75px;height:140px;width:140px;border:4px solid;line-height:140px;text-align:center}.featurette-divider{margin:4.5rem 0;border-color:var(--border-color)}.featurette-heading{font-family:var(--font-serif);font-weight:400;font-size:2rem;line-height:1.15;letter-spacing:-.02em;margin-bottom:14px;color:var(--color)}.dark-mode .shadow{box-shadow:none}.dark-mode .overflow-auto::-webkit-scrollbar{width:10px}.dark-mode .overflow-auto::-webkit-scrollbar-track{-webkit-box-shadow:none;background:inherit;border-radius:0}.dark-mode .overflow-auto::-webkit-scrollbar-thumb{border-radius:10px;border:1px solid var(--border-color);background-color:var(--hover-bg-color)}.dark-mode .rgba-gradient{background:linear-gradient(135deg,#2a2d4a,#151728)}.section-number{padding-right:10px;font-weight:700;font-style:italic}.org-subscript-child{font-size:85%}.highlighted-line{position:absolute;background:rgba(100,200,100,.5);z-index:20}code,pre{font-family:"Fira Code","Courier New",Courier,monospace;line-height:1.1;color:var(--color)}.diff-file,.diff-index,.diff-lines{background:rgba(172,172,172,.5)}.diff-add{background:rgba(100,200,100,.5)}.diff-remove{background:rgba(200,100,100,.5)}.dashboard-title{font-size:1.375rem;font-weight:600;letter-spacing:-.01em}.quota-row{display:flex;gap:16px;margin-bottom:16px;padding:0}.quota-item{flex:1;min-width:0}.quota-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.quota-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;opacity:.7}.quota-value{font-size:.8125rem;font-weight:500;font-variant-numeric:tabular-nums}.quota-progress{height:6px;border-radius:3px;background:var(--hover-bg-color)}.quota-progress .progress-bar{border-radius:3px}.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:.8125rem;font-weight:500;background:var(--primary-bg);color:var(--primary-color);border-radius:12px;line-height:1.4}.filter-chip-close{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:inherit;opacity:.7;cursor:pointer;padding:0;min-width:24px;min-height:24px;margin:-6px -6px -6px 0;font-size:1rem;line-height:1;border-radius:999px}.filter-chip-close:hover{opacity:1}.repo-list{list-style:none;padding:0;margin:0}.repo-list-item{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border-color);gap:12px}.repo-list-item:first-child{border-top:1px solid var(--border-color)}.repo-list-item.repo-inactive{opacity:.6}.repo-list-item-content{flex:1;min-width:0}.repo-list-item-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.repo-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color);word-break:break-word}.repo-name:hover{color:var(--accent)}.repo-source{font-size:.875rem;opacity:.8;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repo-date{opacity:.7}.repo-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.8125rem;opacity:.7}.repo-meta span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.repo-list-item-actions{flex-shrink:0;padding-top:2px;margin-left:14px}.repo-list-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;opacity:.5;font-size:.9375rem;list-style:none;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color)}.repo-list-empty i{font-size:1.75rem}.type-badge{display:inline-flex;align-items:center;gap:3px;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;padding:2px 8px;border-radius:4px;white-space:nowrap}.type-badge{font-family:var(--font-mono);letter-spacing:.06em;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-bg-alt,transparent)}.type-badge.type-pr,.type-badge.type-repo{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.dark-mode .type-badge.type-pr,.dark-mode .type-badge.type-repo{background:rgba(255,255,255,.06);color:var(--ink-muted);border-color:var(--border-color)}.type-badge.type-coauthor{background:rgba(99,102,241,.12);color:#4f46e5;border-color:rgba(99,102,241,.35);margin-left:6px}.dark-mode .type-badge.type-coauthor{background:rgba(129,140,248,.18);color:#a5b4fc;border-color:rgba(165,180,252,.45)}.btn-group .btn:not(.btn-primary){background:var(--hover-bg-color)}.anonymize-page{display:flex;flex-direction:column;min-height:0}.anonymize-landing{flex:1 1 0;min-height:min-content;display:flex;align-items:center;justify-content:center;padding:20px}.anonymize-landing-inner{width:100%;max-width:600px}.anonymize-landing-inner h2{font-weight:700}.anonymize-workspace{display:flex;flex-direction:column;flex:1 1 0;min-height:0;background:var(--canvas-bg-color)}.anonymize-topbar{background:var(--paper-card);border-bottom:1px solid var(--border-color);padding:18px 28px;flex:0 0 auto}.anonymize-topbar-inner{max-width:1400px;margin:0 auto}.anonymize-topbar-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.anonymize-topbar-title{margin:4px 0 0;font-size:clamp(1.8rem,3vw,2.4rem)}.anonymize-split{flex:1 1 auto;display:flex;min-height:0}.anonymize-form-col{flex:0 0 auto;width:100%;min-width:0;background:var(--canvas-bg-color);border-right:1px solid var(--border-color);overflow-y:auto}.anonymize-form-col .paper-settings-main{max-width:720px;padding:28px 32px 40px;margin:0}.anonymize-form-col .paper-settings-section:first-child{padding-top:0}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;background:var(--canvas-bg-color);padding:14px 0 0;border-top:1px solid var(--border-color);margin-top:20px}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{flex:1 1 auto;min-width:0;overflow:auto;background:var(--paper-bg-alt);padding:28px 32px}.anonymize-preview-head{display:flex;align-items:baseline;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--border-color);margin-bottom:20px}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.anonymize-preview-sub{color:var(--ink-soft);font-size:13px}.anonymize-preview-body{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:28px 32px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}@media (max-width:700px){.form-grid-2,.form-grid-3{grid-template-columns:1fr}}.paper-optional{font-family:var(--font-sans);font-weight:400;color:var(--ink-muted);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}.paper-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.paper-plan-card{position:relative;display:block;padding:18px 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;margin:0}.paper-plan-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.paper-plan-card.selected{border-color:var(--color);box-shadow:0 0 0 2px var(--color) inset}.paper-plan-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-plan-price{font-family:var(--font-serif);font-size:2rem;color:var(--color);margin:6px 0 4px}.paper-plan-price .paper-plan-per{font-family:var(--font-sans);font-size:12px;color:var(--ink-soft)}.paper-plan-desc{font-size:13px;color:var(--ink-soft)}.paper-plan-desc ul{padding-left:18px;margin:0}.paper-settings-copy{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.anonymize-section-title{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin:18px 0 8px 0;padding-bottom:6px;border-bottom:1px solid var(--border-color);opacity:.7}.anonymize-section-title i{margin-right:4px}.anonymize-submit-bar{padding:12px 0 4px 0}.anonymize-submit-bar .btn{font-size:1rem;padding:10px 20px;font-weight:600}.anonymize-page .form-check{padding-top:4px;padding-bottom:4px}.anonymize-page .form-check-label{font-weight:500}.anonymize-preview-col{min-height:0;min-width:0}.pr-diff pre{overflow-x:auto;max-width:100%}@media (min-width:768px){.anonymize-form-col{height:100%;width:520px;flex:0 0 520px}.anonymize-preview-col{height:100%;flex:1}}@media (max-width:767px){.anonymize-workspace{flex:0 0 auto;min-height:0}.anonymize-topbar{padding:14px 16px}.anonymize-topbar-title{font-size:1.5rem;margin-top:2px}.anonymize-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.anonymize-form-col{width:100%!important;flex:0 0 auto!important;height:auto!important;border-right:none;border-bottom:1px solid var(--border-color);overflow:visible}.anonymize-form-col .paper-settings-main{padding:18px 16px 24px;max-width:none}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;margin:20px -16px 0;padding:12px 16px;background:var(--canvas-bg-color);border-top:1px solid var(--border-color);z-index:10}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{width:100%;flex:0 0 auto;height:auto!important;max-height:none;padding:18px 16px 24px;overflow:visible}.anonymize-preview-body{padding:16px;border-radius:8px}.anonymize-preview-body .pr-diff pre,.anonymize-preview-body pre{overflow-x:auto;max-width:100%}.anonymize-landing-inner{padding:16px}}@media (min-width:1280px){.anonymize-form-col{width:620px;flex:0 0 620px}}@media (max-width:767px){.btn{min-height:38px;padding:6px 14px;font-size:14px}.btn-sm{min-height:34px;padding:5px 10px}.navbar .nav-link{padding:8px 12px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:24px;line-height:32px}.container.page{padding-left:15px;padding-right:15px;max-width:100%}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.125rem}.repo-list-item{flex-direction:column}.repo-list-item-actions{align-self:flex-start}.quota-row{flex-direction:column;gap:10px;padding:10px 12px}.dropdown-menu{position:absolute;right:0;left:auto}.form-group{margin-bottom:12px}.form-control{font-size:16px}.status-bar{gap:6px;padding:8px 10px}.status-bar .btn{font-size:12px;padding:4px 10px;min-height:32px}.status-bar .paths{font-size:12px;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.status-bar .paths::-webkit-scrollbar{display:none}.status-bar-actions{flex-shrink:0;gap:4px}#home .display-4{font-size:1.75rem}#home h4.subtext-header{font-size:1rem}.progress:not(.quota-progress){min-width:120px!important}.badge{font-size:70%}.col-2.input-group{width:100%!important;max-width:100%;flex:0 0 100%}.color-text-secondary span{display:inline-block;margin-bottom:2px}.floatingchat-container-wrap{display:none!important}.anonymize-landing{align-items:flex-start;padding-top:60px}.anonymize-page .container-fluid>.row{height:auto!important;min-height:100%}.anonymize-form-col{width:100%!important;flex:0 0 100%!important;border-right:none;border-top:1px solid var(--border-color)}.anonymize-preview-col{height:auto!important;max-height:none}.anonymize-section-title{font-size:.8125rem;margin:12px 0 8px 0}.anonymize-submit-bar{position:sticky;bottom:0;background:var(--sidebar-bg-color);padding:10px 0;margin:0 -12px;padding-left:12px;padding-right:12px;border-top:1px solid var(--border-color);z-index:10}.anonymize-submit-bar .btn{font-size:1rem;padding:12px 20px}.anonymize-page .form-check{padding-top:6px;padding-bottom:6px;min-height:36px}.anonymize-page .form-check-label{font-size:.9375rem}.anonymize-page .card-body{padding:12px}.pr-title{font-size:1.125rem}.pr-diff pre{font-size:.75rem}.pr-comment .mb-1 h5{font-size:1rem}.nav-tabs .nav-link{padding:8px 12px;font-size:.875rem}}@media (min-width:768px) and (max-width:991px){.container.page{max-width:100%;padding-left:15px;padding-right:15px}.leftCol{flex:0 0 250px;width:250px}}.explorer-page{display:flex;height:100%;width:100%;background:var(--canvas-bg-color);position:relative}.explorer-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--canvas-bg-color)}.explorer-content{flex:1 1 auto;min-height:0;width:100%;overflow:auto}.leftCol-close,.leftCol-head{display:none}.leftCol-body{flex:1 1 auto;min-height:0;overflow:auto}.leftCol-foot{padding:8px 12px;border-top:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-foot .last-update{display:block;border-top:none;padding:0}.leftCol-backdrop{display:none}.paper-inline-warning{display:flex;align-items:flex-start;gap:8px;margin:8px;padding:10px 12px;background:rgba(138,107,30,.08);border:1px solid rgba(138,107,30,.35);border-radius:8px;color:var(--color);font-size:13px;line-height:1.4}.paper-inline-warning i{color:#8a6b1e;margin-top:2px;flex-shrink:0}.dark-mode .paper-inline-warning i{color:#ffd37a}@media (min-width:768px){.leftCol-body{padding:8px 4px}}.sidebar-toggle{display:none;align-items:center;gap:8px;position:fixed;bottom:18px;right:18px;z-index:1100;padding:10px 14px;background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);border-radius:999px;font-family:var(--font-sans);font-size:13px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;outline:0}.sidebar-toggle:hover{background:var(--primary-hover-bg)}.sidebar-toggle:focus,.sidebar-toggle:focus-visible{outline:0;box-shadow:0 6px 20px rgba(0,0,0,.15)}@media (max-width:991px){.sidebar-toggle{display:inline-flex}.leftCol{position:fixed;top:0;left:0;bottom:0;width:min(86vw,340px);max-width:340px;z-index:1200;border:none;border-right:1px solid var(--border-color);transform:translateX(0);transition:transform .22s ease;box-shadow:4px 0 24px rgba(0,0,0,.18);background:var(--sidebar-bg-color)}.leftCol.collapsed{transform:translateX(-105%);box-shadow:none;pointer-events:none}.leftCol-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.leftCol-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid var(--border-color);border-radius:8px;color:var(--ink-muted);cursor:pointer}.leftCol-close:hover{color:var(--color);border-color:var(--color)}.leftCol-foot{display:block}.leftCol-body{padding:4px 0}.leftCol-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.32);z-index:1150;backdrop-filter:blur(2px)}.dark-mode .leftCol-backdrop{background:rgba(0,0,0,.5)}}.admin-nav{display:flex;gap:4px;padding:4px;margin:8px 0 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;flex-wrap:wrap}.admin-nav a{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;color:var(--ink-muted);text-decoration:none;font-family:var(--font-mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:background-color .15s,color .15s;white-space:nowrap}.admin-nav a:hover{background:var(--paper-bg-alt);color:var(--color)}.admin-nav a.active{background:var(--color);color:var(--paper-card)}.admin-nav a i{font-size:12px;width:14px;text-align:center}@media (max-width:767px){.admin-nav{flex-direction:column}.admin-nav a{justify-content:flex-start}}.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:16px}.admin-stat-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px}.admin-stat-card .stat-value{font-family:var(--font-serif);font-size:1.375rem;font-weight:400;line-height:1.1;color:var(--color)}.admin-stat-card .stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.admin-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 12px}.admin-toolbar .form-control{max-width:320px}@media (max-width:767px){.admin-toolbar .form-control{max-width:100%;width:100%}}.pagination-compact{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pagination-compact input{width:60px;text-align:center;flex-shrink:0}.pagination-compact .btn{padding:4px 10px;min-height:34px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);flex-shrink:0}.pagination-compact>span{white-space:nowrap}.admin-list-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--border-color)}.admin-list-item:last-child{border-bottom:none}.admin-list-item .item-main{flex:1;min-width:0}.admin-list-item .item-title{font-size:1rem;font-weight:600;margin-bottom:4px;word-break:break-word}.admin-list-item .item-meta{font-size:.875rem;opacity:.8}.admin-list-item .item-meta span{margin-right:12px;display:inline-block;margin-bottom:2px}.admin-list-item .item-actions{flex-shrink:0}@media (max-width:767px){.admin-list-item{flex-direction:column;gap:8px}.admin-list-item .item-actions{align-self:flex-start}}.status-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px;vertical-align:middle}.status-badge{font-family:var(--font-sans);font-weight:500;letter-spacing:.02em;border:1px solid transparent;text-transform:none;font-size:12px;padding:1px 9px 2px;border-radius:999px}.status-badge.status-ready{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.status-badge.status-error{background:#fbe7e7;color:#b42318;border-color:#f3c7c7}.status-badge.status-download,.status-badge.status-preparing{background:#eef0ff;color:#3b4ad6;border-color:#d4d8fa}.status-badge.status-expired,.status-badge.status-expiring,.status-badge.status-removed,.status-badge.status-removing{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.status-badge.status-active{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.queue-job-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 18px;margin-bottom:10px}.queue-job-card .job-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px}.queue-job-card .job-id{font-family:var(--font-mono);font-size:.9375rem;color:var(--color);word-break:break-all;display:flex;align-items:center;gap:10px}.queue-job-card .job-timestamps{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);display:flex;flex-wrap:wrap;gap:14px}.queue-job-card .job-actions{display:flex;gap:8px;margin-top:10px}.queue-job-card .job-actions .btn{font-size:12px;padding:4px 12px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.admin-section-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.admin-section-header h2{margin:0;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.admin-section-header h2 i{margin-right:6px;color:var(--ink-muted)}.admin-section-header .section-count{background:var(--paper-bg-alt);color:var(--ink-muted);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;padding:1px 10px;border-radius:999px}.user-detail-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:22px;margin-bottom:24px}.user-detail-card .user-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border-color);flex-wrap:wrap}.user-detail-card .user-header img{border-radius:50%}.user-detail-card .user-header h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:1.5rem;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;font-size:.9375rem}.user-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.user-detail-grid .detail-value{word-break:break-all;color:var(--color)}@media (max-width:767px){.user-detail-grid{grid-template-columns:1fr}.user-detail-grid .detail-label{margin-top:8px;border-top:1px solid var(--border-color);padding-top:8px}.user-detail-grid .detail-label:first-child{border-top:none;margin-top:0;padding-top:0}}.paper-empty{min-height:calc(100vh - 60px);display:flex;align-items:center;justify-content:center;padding:40px 24px}.paper-empty-inner{max-width:560px;text-align:left}.paper-empty-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.4rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:18px 0 20px;color:var(--color)}.paper-empty-title em{color:var(--accent);font-style:italic}.paper-empty-lede{font-size:18px;line-height:1.55;color:var(--ink-soft);text-wrap:pretty}.paper-empty-cta{display:flex;gap:10px;margin-top:28px;flex-wrap:wrap}.paper-page{max-width:1100px;margin:0 auto;padding:32px 32px 80px}@media (max-width:991px){.paper-page,.paper-page.container,.paper-page.container-fluid{padding:20px 18px 60px!important}.paper-page .row{margin-left:0;margin-right:0}.paper-page .row>.w-100,.paper-page .row>[class*=col]{padding-left:0;padding-right:0}.navbar.navbar-expand-lg{padding:10px 18px!important}.navbar .navbar-collapse{margin:10px -18px 0;padding:12px 18px 16px;border-top:1px solid var(--border-color);background:var(--header-bg-color)}.navbar .navbar-nav{align-items:stretch!important;gap:2px}.navbar .navbar-nav .nav-item,.navbar .navbar-nav .nav-link{width:100%}.navbar .nav-link{display:flex!important;align-items:center;justify-content:flex-start;margin:0!important;padding:12px 4px!important;border-bottom:1px solid var(--border-color)!important;border-radius:0;font-size:14px;line-height:1.2;gap:0;min-height:44px;box-sizing:border-box}.navbar .nav-link:not(.btn-signin):not(.user-chip){color:var(--color)!important}.navbar .nav-link .fa,.navbar .nav-link .fab,.navbar .nav-link .fas,.navbar .nav-link i{display:inline-flex!important;align-items:center;justify-content:center;width:28px;flex-shrink:0;font-size:16px;line-height:1;margin:0 10px 0 0!important}.navbar .navbar-nav .nav-item:last-child .nav-link,.navbar .navbar-nav>.nav-link:last-child{border-bottom-color:transparent!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--border-color)!important}.navbar .nav-item>.nav-link:not(.btn-signin):not(.user-chip)::before{content:'';display:inline-block;width:28px;margin-right:10px;flex-shrink:0}.navbar .nav-link.nav-icon::before,.navbar .nav-link:has(>i)::before{display:none!important}.navbar .nav-link.nav-icon{width:100%!important;height:auto!important;justify-content:flex-start!important;padding:12px 4px!important}.navbar .nav-link.nav-icon::after{content:attr(title);font-family:var(--font-sans);font-size:14px;color:var(--color)}.navbar .btn-signin{display:inline-flex!important;width:auto!important;align-self:flex-start;justify-content:center;height:40px;padding:0 18px!important;margin:14px 0 0!important;border-radius:8px;border-bottom:none!important}.navbar .btn-signin i{margin:0 8px 0 0!important;width:auto!important}.navbar .user-chip-wrap{width:100%}.navbar .user-chip{display:flex!important;width:100%;margin:0!important;padding:10px 4px!important;background:0 0!important;border:none!important;border-bottom:1px solid var(--border-color)!important;border-radius:0!important;justify-content:flex-start;gap:0;min-height:44px}.navbar .user-chip::before{display:none!important}.navbar .user-chip img{width:28px!important;height:28px!important;margin-right:10px!important;flex-shrink:0}.navbar .user-chip .user-chip-name{font-size:14px;font-weight:500;color:var(--color)!important}.navbar .user-chip.dropdown-toggle::after{margin-left:auto;color:var(--ink-muted)}.navbar .user-chip-wrap .dropdown-menu{position:static!important;float:none;width:100%;margin:0!important;padding:0!important;background:0 0!important;border:none!important;box-shadow:none!important;transform:none!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item{padding:10px 4px 10px 42px!important;font-size:14px;color:var(--ink-muted)!important;background:0 0!important;border-bottom:1px solid var(--border-color);text-align:left!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item:last-child{border-bottom:none}.navbar .user-chip-wrap .dropdown-divider{display:none}.navbar-brand{border-right:none!important;padding-right:0!important;margin-right:0!important}.dark-mode .navbar .navbar-collapse{background:var(--header-bg-color);border-top-color:var(--border-color)}.dark-mode .navbar .nav-link{border-bottom-color:var(--border-color)!important}.dark-mode .navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--paper-bg-alt);border:1px solid var(--border-color);color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.paper-progress{position:relative;height:auto;background:0 0;margin:18px 0 8px}.paper-progress::before{content:"";display:block;height:8px;background:var(--paper-bg-alt);border-radius:999px}.paper-progress .paper-progress-bar{position:absolute;top:0;left:0;height:8px;background:var(--color);border-radius:999px;transition:width .4s ease;min-width:4px}.paper-progress .paper-progress-label{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.paper-progress .paper-progress-pct{color:var(--color)}.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--color)}.paper-error-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #c53030;border-radius:10px;color:var(--color)}.dark-mode .paper-error-card{border-left-color:#ff8b7b}.paper-ratelimit-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #d69e2e;border-radius:10px;color:var(--color)}.dark-mode .paper-ratelimit-card{border-left-color:#f6e05e}.paper-ratelimit-head{display:flex;align-items:flex-start;gap:14px}.paper-ratelimit-head>i{font-size:18px;color:#d69e2e;margin-top:4px;flex-shrink:0}.dark-mode .paper-ratelimit-head>i{color:#f6e05e}.paper-ratelimit-card strong{color:var(--color)}.status-pill-ratelimit{border-color:#d69e2e;color:#d69e2e}.dark-mode .status-pill-ratelimit{border-color:#f6e05e;color:#f6e05e}.status-ratelimit{background:#d69e2e}.dark-mode .status-ratelimit{background:#f6e05e}.paper-error-head{display:flex;align-items:flex-start;gap:14px}.paper-error-head>i{font-size:18px;color:#c53030;margin-top:4px;flex-shrink:0}.dark-mode .paper-error-head>i{color:#ff8b7b}.paper-error-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-error-title{font-family:var(--font-serif);font-size:1.375rem;line-height:1.2;margin-top:2px;color:var(--color)}.paper-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft);font-family:var(--font-mono);word-break:break-word;white-space:pre-wrap}.paper-error-hints{margin:14px 0 0;padding-left:18px;color:var(--ink-soft);font-size:14px;line-height:1.6}.paper-error-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.paper-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;margin-top:18px;font-size:.9375rem}.paper-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.paper-detail-grid .detail-value{word-break:break-all;color:var(--color)}.paper-detail-grid .detail-value a{color:var(--color);border-bottom:1px solid var(--border-color)}.paper-detail-grid .detail-value a:hover{border-bottom-color:var(--color)}@media (max-width:700px){.paper-detail-grid{grid-template-columns:1fr;gap:4px 0}.paper-detail-grid .detail-label{padding-top:8px}}.paper-support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:18px 0 28px}.paper-support-card{display:flex;flex-direction:column;gap:10px;padding:20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;color:var(--color);text-decoration:none;transition:border-color .15s ease,transform .15s ease}.paper-support-card:hover{border-color:var(--color);text-decoration:none;color:var(--color)}.paper-support-card .paper-support-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);display:flex;align-items:center;gap:8px}.paper-support-card p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.paper-support-card .paper-support-cta{margin-top:auto;font-size:13px;font-weight:500;color:var(--color);display:inline-flex;align-items:center;gap:6px}.paper-support-card:hover .paper-support-cta i{transform:translateX(2px)}.paper-support-card .paper-support-cta i{transition:transform .15s ease}.pr-page{min-height:100%;background:var(--canvas-bg-color)}.pr-page-inner{padding-top:24px;padding-bottom:60px}.pr-header{margin:6px 0 18px}.pr-title{margin:4px 0 10px;font-size:clamp(1.6rem,3vw,2.4rem);line-height:1.15;word-break:break-word}.pr-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pr-header-meta .pr-meta-item{display:inline-flex;align-items:center;gap:6px}.pr-header-meta .pr-meta-item i{color:var(--ink-muted)}.pr-body-card{margin:18px 0 24px;padding:20px 22px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-body-card .paper-section-eyebrow{margin-bottom:12px}.paper-tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--border-color);margin:18px 0 0}.paper-tabs .paper-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:0 0;border:0;border-bottom:2px solid transparent;font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--ink-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease;margin-bottom:-1px}.paper-tabs .paper-tab:hover{color:var(--color)}.paper-tabs .paper-tab.active{color:var(--color);border-bottom-color:var(--color)}.paper-tabs .paper-tab i{color:inherit;opacity:.85}.paper-tabs .paper-tab:active,.paper-tabs .paper-tab:focus,.paper-tabs .paper-tab:focus-visible{outline:0;box-shadow:none}.paper-tabs .paper-tab:focus-visible{color:var(--color);background:var(--hover-bg-color);border-radius:6px 6px 0 0}.pr-diff{margin:16px 0 28px;display:flex;flex-direction:column;gap:16px}.diff-file-block{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;overflow:hidden}.diff-file-header{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper-bg-alt);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:13px;color:var(--color)}.diff-file-icon{color:var(--ink-muted);flex-shrink:0}.diff-file-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}.diff-file-status{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--border-color);color:var(--ink-muted);background:var(--paper-card)}.diff-file-status-added{color:#2f6b3e;border-color:rgba(47,107,62,.35);background:rgba(47,107,62,.08)}.diff-file-status-deleted{color:#a13a2e;border-color:rgba(161,58,46,.35);background:rgba(161,58,46,.08)}.diff-file-status-renamed{color:#8a6b1e;border-color:rgba(138,107,30,.35);background:rgba(138,107,30,.08)}.dark-mode .diff-file-status-added{color:#a7e2a7;border-color:rgba(167,226,167,.35);background:rgba(167,226,167,.08)}.dark-mode .diff-file-status-deleted{color:#ff8b7b;border-color:rgba(255,139,123,.35);background:rgba(255,139,123,.08)}.dark-mode .diff-file-status-renamed{color:#ffd37a;border-color:rgba(255,211,122,.35);background:rgba(255,211,122,.08)}.diff-file-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:13px;line-height:1.55;table-layout:fixed}.diff-file-table tr.diff-row{vertical-align:top}.diff-file-table .diff-gutter{width:48px;padding:0 10px;text-align:right;color:var(--ink-muted);background:var(--paper-bg-alt);border-right:1px solid var(--border-color);user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}.diff-file-table .diff-gutter-new{border-right:1px solid var(--border-color)}.diff-file-table .diff-sign{width:18px;padding:0 6px;text-align:center;color:var(--ink-muted);background:var(--paper-bg-alt);user-select:none;vertical-align:top}.diff-file-table .diff-code{padding:1px 12px;white-space:pre-wrap;word-break:break-word;color:var(--color)}.diff-row-hunk td{background:var(--paper-bg-alt)!important;color:var(--ink-muted);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-size:12px;letter-spacing:.02em;padding-top:6px;padding-bottom:6px}.diff-row-hunk .diff-code{color:var(--ink-muted)}.diff-row-add .diff-code{background:rgba(47,107,62,.1);color:#1f4a2a}.diff-row-add .diff-gutter,.diff-row-add .diff-sign{background:rgba(47,107,62,.06);color:#2f6b3e}.diff-row-remove .diff-code{background:rgba(161,58,46,.1);color:#6e1f1a}.diff-row-remove .diff-gutter,.diff-row-remove .diff-sign{background:rgba(161,58,46,.06);color:#a13a2e}.dark-mode .diff-row-add .diff-code{background:rgba(167,226,167,.1);color:#c9f0c9}.dark-mode .diff-row-add .diff-gutter,.dark-mode .diff-row-add .diff-sign{background:rgba(167,226,167,.06);color:#a7e2a7}.dark-mode .diff-row-remove .diff-code{background:rgba(255,139,123,.1);color:#ffc9c0}.dark-mode .diff-row-remove .diff-gutter,.dark-mode .diff-row-remove .diff-sign{background:rgba(255,139,123,.06);color:#ff8b7b}@media (max-width:700px){.diff-file-table{font-size:12px}.diff-file-table .diff-gutter{width:36px;padding:0 6px}.diff-file-table .diff-sign{width:14px;padding:0 4px}.diff-file-table .diff-code{padding:1px 8px}}.pr-comments{list-style:none;margin:16px 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}.pr-comment{padding:16px 18px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-comment-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border-color)}.pr-comment-author{font-weight:600;color:var(--color);font-size:14px;display:inline-flex;align-items:center;gap:6px}.pr-comment-author i{color:var(--ink-muted);font-size:12px}.pr-comment-date{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.pr-comment-body{color:var(--color);font-size:14px;line-height:1.6}.pr-comment-body :last-child{margin-bottom:0}@media (max-width:700px){.pr-page-inner{padding-top:14px;padding-bottom:40px}.pr-body-card{padding:14px 14px;border-radius:8px}.pr-comment{padding:12px 14px}.paper-tabs .paper-tab{padding:10px 12px;font-size:13px}.pr-diff pre{font-size:12px;padding:12px}}.toast{background-color:var(--paper-card)!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:10px!important;box-shadow:0 8px 24px rgba(0,0,0,.08);backdrop-filter:none;min-width:280px;max-width:calc(100vw - 24px)}.toast .toast-header{background:0 0!important;color:var(--color)!important;border-bottom:1px solid var(--border-color)!important;font-family:var(--font-sans);padding:10px 12px}.toast .toast-header strong{font-weight:600;color:var(--color);letter-spacing:.01em}.toast .toast-header .close{color:var(--ink-muted)!important;text-shadow:none;opacity:.9;font-size:1.25rem}.toast .toast-header .close:hover{color:var(--color)!important;opacity:1}.toast .toast-body{color:var(--color)!important;padding:12px;font-size:14px;line-height:1.45}.dark-mode .toast{box-shadow:0 8px 24px rgba(0,0,0,.5)}.paper-crumbs{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);letter-spacing:0}.paper-crumbs .here,.paper-crumbs a{color:var(--color);text-decoration:none}.paper-page-title{font-family:var(--font-sans);font-weight:600;font-size:32px;line-height:1.2;letter-spacing:-.035em;margin:8px 0 6px;color:var(--color)}.paper-page-title em{color:inherit;font-style:normal}.paper-page-lede{color:var(--ink-soft);font-size:16px;max-width:640px;line-height:1.55}.paper-meta-rule{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;margin:22px 0 18px;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paper-meta-rule b{color:var(--color);font-weight:500}.paper-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:10px;padding:20px 22px}.dark-mode .paper-card{background:var(--admin-stat-bg)}.paper-section-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500;margin-bottom:10px;display:block}.paper-section-title{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.01em;margin:0 0 8px}.paper-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border-color);border-bottom-width:2px;border-radius:3px;background:var(--paper-card,#fff);color:var(--color)}.paper-pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border:1px solid var(--border-color);border-radius:999px;color:var(--ink-soft);background:var(--paper-card,#fff);letter-spacing:.04em}.paper-pill.accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.paper-pill.good{border-color:#2f6b3e;color:#2f6b3e}.paper-pill.warn{border-color:#8a6b1e;color:#8a6b1e}.paper-pill.bad{border-color:#a13a2e;color:#a13a2e}.paper-row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start;padding:18px 0;border-bottom:1px solid var(--border-color)}.paper-row:first-child{border-top:1px solid var(--border-color)}.paper-row .row-title{font-family:var(--font-serif);font-size:20px;letter-spacing:-.01em;line-height:1.2}.paper-row .row-title a{color:var(--color)}.paper-row .row-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.03em;margin-top:6px;display:flex;flex-wrap:wrap;gap:14px}.paper-row .row-actions{display:flex;gap:6px;flex-shrink:0}.paper-form-step{display:grid;grid-template-columns:48px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--border-color)}.paper-form-step:first-child{border-top:1px solid var(--border-color)}.paper-form-step .step-num{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);padding-top:4px;letter-spacing:.02em}.paper-form-step .step-title{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;line-height:1.2;margin-bottom:4px}.paper-form-step .step-sub{color:var(--ink-soft);font-size:14px;margin-bottom:14px;text-wrap:pretty}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.paper-switch-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:16px}.paper-switch-row+.paper-switch-row{border-top:1px dashed var(--border-soft)}.paper-switch-row .sw-label{font-weight:500}.paper-switch-row .sw-sub{display:block;font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-page .custom-select,.paper-page .form-control{border-radius:6px;border-color:var(--border-color);font-size:14px;padding:8px 12px;height:auto;background:var(--input-bg);color:var(--input-color)}.paper-page .custom-select:focus,.paper-page .form-control:focus{color:var(--input-color);background:var(--input-bg);border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.custom-select:focus,.form-control:focus,input:focus,select:focus,textarea:focus{color:var(--input-color)!important;background-color:var(--input-bg)!important}.form-control::selection,input::selection,textarea::selection{background:var(--accent-soft);color:var(--input-color)}.dark-mode .form-control::selection,.dark-mode input::selection,.dark-mode textarea::selection{background:rgba(167,178,255,.3);color:var(--input-color)}.btn.btn-ink{background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);font-weight:500;border-radius:6px;padding:8px 14px}.btn.btn-ink:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color);border-color:var(--primary-hover-bg)}.btn.btn-accent{background:var(--accent);color:#fff;border:1px solid var(--accent);font-weight:500;border-radius:6px}.btn.btn-accent:hover{background:#2e3bb8;border-color:#2e3bb8;color:#fff}.paper-page .dashboard-filter-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);margin:18px 0 0;flex-wrap:wrap}.paper-page .dashboard-filter-row .form-control{height:38px;background:var(--paper-card)}.paper-page .dashboard-filter-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.paper-page .dashboard-filter-row .btn-group .btn,.paper-page .dashboard-filter-row .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);height:38px;padding:0 14px;font-size:14px;font-weight:500;border-radius:var(--radius-control,6px);display:inline-flex;align-items:center;gap:6px;line-height:1}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label{color:var(--ink-muted);font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label::after{content:"·";margin-left:6px;color:var(--ink-faint)}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-value{font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .fas{font-size:11px;color:var(--ink-muted)}.paper-page .dashboard-filter-row .btn-group .btn:hover,.paper-page .dashboard-filter-row .dropdown-toggle:hover{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.paper-page .dashboard-filter-row .btn-group{gap:0}.paper-page .dashboard-filter-row .btn-group .btn{border-radius:0;border-right-width:0}.paper-page .dashboard-filter-row .btn-group .btn:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.paper-page .dashboard-filter-row .btn-group .btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;border-right-width:1px}.paper-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--color);color:var(--canvas-bg-color);border-color:var(--color)}.paper-page .dashboard-filter-row .search-wrap{flex:1 1 280px;min-width:220px}.paper-page .quota-row{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin:24px 0 0;padding:0;background:0 0;border:none;border-radius:0}.paper-page .quota-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);opacity:1}.paper-page .quota-value{font-family:var(--font-mono);font-size:13px;font-variant-numeric:tabular-nums;color:var(--color)}.paper-page .quota-value .quota-unlimited-tag{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);margin-left:4px}.paper-page .quota-track{height:6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;width:100%;min-width:0}.paper-page .quota-track .quota-fill{height:100%;min-width:2px;border-radius:999px;background:var(--color);transition:width .3s ease}.paper-page .quota-track.quota-warn .quota-fill{background:var(--status-progress)}.paper-page .quota-track.quota-danger .quota-fill{background:var(--status-error)}.paper-page .quota-track.quota-unlimited{background:repeating-linear-gradient(-45deg,var(--paper-bg-alt) 0 4px,var(--border-soft,var(--border-color)) 4px 6px)}.paper-page .repo-list{margin-top:8px}.paper-page .repo-list-item{padding:20px 0;gap:16px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-page .repo-list-item:first-child{border-top:none}.paper-page .repo-list-item-header{gap:10px;margin-bottom:6px}.paper-page .repo-name{font-family:var(--font-mono);font-size:15px;color:var(--color)}.paper-page .repo-source{font-size:13px;color:var(--ink-soft);opacity:1;gap:10px}.paper-page .repo-source a{color:var(--ink-soft);border-bottom:1px dotted var(--border-color)}.paper-page .repo-source a:hover{color:var(--color)}.paper-page .repo-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);opacity:1;gap:16px;margin-top:10px}.paper-page .type-badge{font-family:var(--font-mono);font-size:11px;padding:3px 8px;letter-spacing:.1em}.paper-page .repo-list-item-actions .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;font-size:13px;padding:6px 12px;height:auto}.paper-settings{max-width:1180px;margin:0 auto;padding:48px 32px 80px}.paper-settings .paper-page-title{max-width:14em}.paper-settings-body{display:grid;grid-template-columns:220px 1fr;gap:60px;margin-top:32px;border-top:1px solid var(--border-color);padding-top:28px}.paper-settings-toc{position:sticky;top:32px;align-self:start}.paper-settings-toc-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:12px}.paper-settings-toc nav{display:flex;flex-direction:column;gap:2px}.paper-settings-toc nav a{padding:8px 0 8px 14px;border-left:2px solid transparent;color:var(--ink-soft);font-size:14px;text-decoration:none}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.paper-settings-main{min-width:0;max-width:720px}.paper-settings-section{padding:28px 0;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section:first-child{padding-top:0}.paper-settings-section:last-of-type{border-bottom:none}.paper-settings-section .form-group{margin-bottom:18px}.paper-settings-section .form-check{padding:10px 0 10px 28px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section .form-check:last-child{border-bottom:none}.paper-settings-section .form-check-label{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color);cursor:pointer}.paper-settings-section .form-check-input{cursor:pointer;width:16px;height:16px;margin-top:3px;margin-left:-28px;accent-color:var(--color)}.paper-settings-section .form-text{color:var(--ink-soft);font-size:13px;margin-top:4px;max-width:48em}.paper-settings-section .paper-section-copy{margin:-4px 0 14px}.paper-settings-footer{padding-top:24px;display:flex;flex-direction:column;gap:14px}.paper-settings-footer .btn-ink{align-self:flex-start}.paper-settings-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px}.paper-settings-hint{font-size:13px;color:var(--ink-muted)}.paper-inline-alert{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:var(--radius-control,6px);border:1px solid var(--border-color);background:var(--paper-bg-alt);font-size:13px;color:var(--color)}.paper-inline-alert i{margin-top:2px;color:var(--ink-muted)}.paper-inline-alert-error{border-color:var(--status-error);background:var(--status-error-soft)}.paper-inline-alert-error i{color:var(--status-error)}.paper-account-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);background:var(--paper-card);margin-bottom:20px}.paper-account-card img{flex-shrink:0}.paper-account-identity{flex:1 1 auto;min-width:0}.paper-account-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color)}.paper-account-meta{font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-danger-zone{padding:16px;border:1px solid var(--status-error);border-radius:var(--radius-surface,10px);background:var(--status-error-soft)}.paper-danger-head{font-weight:600;font-size:14px;color:var(--status-error);margin-bottom:6px}.paper-danger-copy{font-size:13px;color:var(--ink-soft);max-width:52em;margin-bottom:12px}.paper-danger-zone .paper-inline-alert{margin-bottom:12px}.btn.btn-outline-danger{background:0 0;color:var(--status-error);border:1px solid var(--status-error);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-danger:hover{background:var(--status-error);color:#fff;border-color:var(--status-error)}.navbar .user-menu{min-width:260px}.navbar .user-menu .dropdown-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px!important}.navbar .user-menu .dropdown-item i{width:16px;margin-top:3px;font-size:13px;color:var(--ink-muted);text-align:center}.navbar .user-menu .dropdown-item span{display:flex;flex-direction:column;line-height:1.3}.navbar .user-menu .dropdown-item small{font-size:12px;color:var(--ink-muted)}.navbar .user-menu .dropdown-header{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:24px}.paper-settings-toc{position:static}.paper-settings-toc nav{flex-direction:row;flex-wrap:wrap;gap:8px}.paper-settings-toc nav a{border-left:none;border-bottom:2px solid transparent;padding:4px 0}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--color);border-left:none}}.paper-table{display:block;margin-top:20px;background:0 0;border:none;border-top:1px solid var(--border-color);border-radius:0;overflow:visible}.paper-table .paper-table-head,.paper-table .paper-table-row{display:grid;grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 140px 90px 140px 52px;align-items:center;gap:18px;padding:12px 4px}.paper-table.paper-table-conferences .paper-table-head,.paper-table.paper-table-conferences .paper-table-row{grid-template-columns:minmax(280px,2.4fr) 140px 90px 220px 52px}.paper-table.paper-table-repos .paper-table-head,.paper-table.paper-table-repos .paper-table-row{grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px}.paper-table.paper-table-repos.has-bulk .paper-table-head,.paper-table.paper-table-repos.has-bulk .paper-table-row{grid-template-columns:28px minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px;gap:12px}.paper-table .admin-users-row{grid-template-columns:28px minmax(280px,2.4fr) 90px 120px 100px 52px!important;gap:12px!important}.paper-table.paper-table-dashboard .paper-table-head,.paper-table.paper-table-dashboard .paper-table-row{grid-template-columns:minmax(320px,3fr) 190px 90px 170px 52px;gap:20px;padding:8px 4px}.paper-table.paper-table-dashboard .cell-anon .anon-text{gap:2px}.paper-table.paper-table-dashboard .cell-anon .repo-name{padding:0}.paper-table .paper-table-head{background:0 0;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);padding-top:8px;padding-bottom:8px}.paper-table .paper-table-head .sortable{cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px;background:0 0;border:none;padding:2px 0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;border-radius:4px}.paper-table .paper-table-head .sortable:hover{color:var(--color)}.paper-table .paper-table-head .sortable.active{color:var(--color)}.paper-table .paper-table-head .sortable i{font-size:10px}.paper-table .paper-table-head .num,.paper-table .paper-table-row .num{text-align:right}.paper-table .paper-table-head .num .sortable{flex-direction:row-reverse}.paper-table .paper-table-row{border-top:1px solid var(--border-soft,var(--border-color));font-size:14px;transition:background-color .12s ease}.paper-table .paper-table-row:hover{background:var(--hover-bg-color)}.paper-table .paper-table-row.row-clickable{cursor:pointer}.paper-table .paper-table-row.repo-inactive>:not(.cell-actions){opacity:.55}.paper-table .paper-table-row.repo-error{background:var(--status-error-soft);border-left:2px solid var(--status-error);padding-left:6px}.paper-table .paper-table-row.repo-error:hover{background:var(--status-error-soft-hover)}.cell-status .status-sub.status-sub-error,.paper-table .cell-status .status-sub-error{color:var(--status-error)}.paper-table .cell-status .status-sub-warn{color:var(--status-progress)}.paper-table .cell-anon{display:flex;align-items:center;gap:12px;min-width:0}.paper-table .cell-anon .type-badge{flex-shrink:0;min-width:52px;justify-content:center}.paper-table .cell-anon .anon-text{min-width:0;display:flex;flex-direction:column;gap:3px}.paper-table .cell-anon .anon-title{display:flex;align-items:center;gap:8px;min-width:0}.paper-table .cell-anon .anon-title .type-badge{margin-left:0}.paper-table .cell-anon .repo-name{font-family:var(--font-mono);font-size:14px;color:var(--color);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%;padding:2px 0}.paper-table .cell-anon .repo-name-static{color:var(--ink-muted);font-style:italic}.paper-table .cell-anon .anon-sub{font-family:var(--font-sans);font-size:13px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px;min-width:0}.paper-table .cell-anon .anon-sub .anon-source{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-anon .anon-sub .conf-tag{flex:0 1 auto;min-width:72px;max-width:50%}.paper-table .cell-anon .anon-sub a{color:var(--ink-muted);border-bottom:1px dotted var(--border-color);padding:4px 0;margin:-4px 0}.paper-table .cell-anon .anon-sub a:hover{color:var(--color)}.paper-table .cell-anon .anon-sub .commit-hash{font-family:var(--font-mono);font-size:12px}.paper-table .cell-conf{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-conf span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-status{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:14px;color:var(--color);min-width:0}.paper-table .cell-status .status-line{display:inline-flex;align-items:center;gap:8px}.paper-table .cell-status .status-sub{flex-basis:100%;font-family:var(--font-sans);font-size:13px;line-height:1.3;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.paper-table .cell-expires{font-family:var(--font-sans);font-size:13px;color:var(--ink-soft)}.paper-table .cell-expires .expires-never{color:var(--ink-muted)}.paper-table .cell-expires .expires-past{color:var(--ink-muted)}.paper-table .empty-dash{color:var(--ink-faint)}.paper-table .cell-actions{display:flex;justify-content:flex-end}.status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0;background:var(--status-inactive)}.status-dot.status-ready{background:var(--status-ready)}.status-dot.status-error{background:var(--status-error)}.status-dot.status-preparing,.status-dot.status-progress{background:var(--status-progress)}.status-dot.status-expired,.status-dot.status-removed{background:var(--status-inactive)}.dashboard-page{padding-bottom:96px}.dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;font-size:13px;color:var(--ink-muted)}.dashboard-meta .dashboard-count{font-variant-numeric:tabular-nums}.btn-link-inline{background:0 0;border:none;padding:2px 4px;margin:-2px 0;font:inherit;color:var(--link-color);cursor:pointer;border-radius:4px}.btn-link-inline:hover{color:var(--link-hover-color);text-decoration:underline}.btn.btn-outline-ink{background:0 0;color:var(--color);border:1px solid var(--border-color);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-ink:hover{background:var(--hover-bg-color);color:var(--color);border-color:var(--ink-faint)}.paper-page .dropdown-menu .dropdown-item-danger,.paper-page .dropdown-menu .dropdown-item-danger i{color:var(--status-error)}.paper-page .dropdown-menu .dropdown-item-danger:focus,.paper-page .dropdown-menu .dropdown-item-danger:hover{background:var(--status-error-soft-hover);color:var(--status-error)}.paper-page .dropdown-menu button.dropdown-item{width:100%;text-align:left;background:0 0;border:none}.paper-page .dropdown-menu .dropdown-divider{border-top-color:var(--border-soft,var(--border-color));margin:4px 0}.paper-table .paper-table-skeleton{pointer-events:none}.skeleton{display:block;background:var(--paper-bg-alt);border-radius:4px;position:relative;overflow:hidden}.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--hover-bg-color),transparent);animation:skeleton-shimmer 1.4s infinite}.skeleton-line{height:12px}.skeleton-line+.skeleton-line{margin-top:8px}.skeleton-line-sm{height:10px}.skeleton-badge{width:52px;height:22px;border-radius:999px;flex-shrink:0}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.skeleton::after{animation:none}}.paper-table .paper-table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 20px;color:var(--ink-muted);text-align:center;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table .paper-table-empty>i{font-size:1.5rem;color:var(--ink-faint)}.paper-table .paper-table-empty-actions{display:flex;gap:8px;margin-top:8px}.bulk-bar{display:flex;align-items:center;gap:8px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:8px 12px;margin:8px 0}.paper-page.admin-page .paper-page-title{font-size:1.5rem;margin:4px 0}.paper-page.admin-page .paper-page-lede{display:none}.paper-page.admin-page .paper-crumbs{margin-bottom:4px}.paper-page.admin-page .admin-nav{margin:6px 0 12px}.admin-filter-toolbar{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px;position:sticky;top:0;z-index:4;background:var(--canvas-bg-color);padding:6px 0;border-bottom:1px solid var(--border-soft,var(--border-color));box-shadow:0 1px 0 var(--canvas-bg-color)}@media (max-width:900px){.admin-filter-toolbar{position:static;box-shadow:none}}.admin-filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.admin-filter-row .search-wrap{flex:1;min-width:220px}.admin-filter-row .search-wrap .form-control{height:34px}.admin-filter-inline{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.admin-filter-inline>label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:0;white-space:nowrap}.admin-filter-inline .form-control-sm{height:28px;padding:2px 8px;font-size:12px}.admin-filter-inline input[type=search].form-control-sm,.admin-filter-inline input[type=text].form-control-sm{width:130px}.admin-filter-inline input[type=date].form-control-sm{width:130px}.admin-filter-inline select.form-control-sm{width:auto;min-width:88px}.admin-filter-inline .arrow{color:var(--ink-muted);font-size:11px}.admin-filter-spacer{flex:1}.admin-active-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--ink-muted)}.admin-active-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 10px;border:1px solid var(--border-color);border-radius:999px;background:var(--hover-bg-color);font-size:12px;color:var(--color)}.admin-active-chip .key{color:var(--ink-muted);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.admin-active-chip button{background:0 0;border:none;cursor:pointer;padding:0 4px;color:var(--ink-muted);font-size:12px;border-radius:50%}.admin-active-chip button:hover{color:#b42318}.admin-search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);pointer-events:none;border:1px solid var(--border-color);border-radius:4px;padding:1px 5px;background:var(--paper-card)}.admin-filter-row .search-wrap{position:relative}.admin-filter-row .search-wrap .form-control{padding-right:40px}.paper-table-row.row-selected{background:rgba(47,122,68,.06)}.queue-state-pills{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}.queue-state-pills .pill{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted)}.queue-state-pills .pill-active{color:#c48a2e;border-color:rgba(196,138,46,.4)}.queue-state-pills .pill-failed{color:#b42318;border-color:rgba(180,35,24,.4)}.queue-state-pills .pill-completed{color:#2f7a44;border-color:rgba(47,122,68,.3)}.queue-state-pills .pill-waiting{color:var(--ink-soft)}.queue-state-pills .pill-delayed{color:var(--ink-muted)}.admin-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 12px;font-size:13px}.admin-summary .summary-total{font-family:var(--font-serif);font-size:1rem;color:var(--color);margin-right:8px}.admin-summary .summary-meta{color:var(--ink-muted);font-size:12px;margin-right:8px}.admin-summary .summary-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);cursor:pointer;font-size:12px;user-select:none;transition:background-color .1s,border-color .1s}.admin-summary .summary-pill:hover{background:var(--hover-bg-color)}.admin-summary .summary-pill .count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.admin-summary .summary-pill.active{background:var(--primary-bg);color:var(--primary-color);border-color:var(--primary-bg)}.admin-summary .summary-pill.active .count{color:inherit}.admin-summary .summary-pill.error .count{color:#b42318}.admin-summary .summary-pill.warn .count{color:#c48a2e}.admin-summary .summary-pill.ok .count{color:#2f7a44}.dark-mode .admin-summary .summary-pill.error .count{color:#f08a82}.dark-mode .admin-summary .summary-pill.warn .count{color:#e8b970}.dark-mode .admin-summary .summary-pill.ok .count{color:#7dc894}.dark-mode .queue-state-pills .pill-active{color:#e8b970;border-color:rgba(232,185,112,.4)}.dark-mode .queue-state-pills .pill-failed{color:#f08a82;border-color:rgba(240,138,130,.4)}.dark-mode .queue-state-pills .pill-completed{color:#7dc894;border-color:rgba(125,200,148,.3)}.job-progress{flex:1;height:6px;background:var(--border-soft,var(--border-color));border-radius:999px;overflow:hidden;margin-left:12px;max-width:200px}.job-progress-bar{height:100%;background:#2f7a44;transition:width .3s}.paper-table-empty{padding:48px 4px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:8px;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table-empty>i{font-size:1.5rem}.q-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:4px}.q-header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.q-range-btns{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.q-range-btns .btn{border:none;border-radius:0;padding:5px 14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);background:var(--paper-card)}.q-range-btns .btn+.btn{border-left:1px solid var(--border-color)}.q-range-btns .btn.active{background:var(--color);color:var(--paper-card)}.q-cards{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.q-card{flex:1;min-width:140px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.q-card:hover{border-color:var(--ink-muted)}.q-card.selected{border-color:var(--color);box-shadow:0 0 0 1px var(--color)}.q-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.q-dot{width:8px;height:8px;border-radius:50%;background:#2f7a44;flex-shrink:0}.q-dot-red{background:#b42318}.dark-mode .q-dot{background:#7dc894}.dark-mode .q-dot-red{background:#f08a82}.q-card-name{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-muted);letter-spacing:.04em}.q-card-count{font-family:var(--font-serif);font-size:2rem;font-weight:400;line-height:1.1;color:var(--color);margin-bottom:6px}.q-card-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.04em}.q-card-bar{height:4px;background:var(--border-color);border-radius:2px;overflow:hidden;margin-top:6px}.q-card-bar-fill{height:100%;background:#3b4ad6;border-radius:2px;transition:width .3s}.dark-mode .q-card-bar-fill{background:#a7b2ff}.q-detail{display:grid;grid-template-columns:1fr 320px;gap:16px;margin-bottom:20px}.q-throughput{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-chart-wrap{position:relative}.q-throughput canvas{width:100%;display:block}.q-chart-tooltip{position:absolute;pointer-events:none;background:var(--paper-card);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;font-family:var(--font-mono);font-size:11px;line-height:1.6;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:10}.q-chart-tooltip .q-tip-time{color:var(--ink-muted);margin-bottom:2px}.q-chart-tooltip .q-tip-completed{color:#3b4ad6}.q-chart-tooltip .q-tip-failed{color:#b42318}.dark-mode .q-chart-tooltip .q-tip-completed{color:#a7b2ff}.dark-mode .q-chart-tooltip .q-tip-failed{color:#f08a82}.q-chart-crosshair{position:absolute;top:0;width:1px;height:100%;background:var(--ink-muted);opacity:.3;pointer-events:none;z-index:9}.q-stats-panel{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px;display:flex;flex-direction:column}.q-section-label{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:lowercase;letter-spacing:.04em;margin-bottom:14px}.q-section-right{float:right;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.q-legend-completed{color:#3b4ad6}.q-legend-failed{color:#b42318;margin-left:8px}.q-legend-exec{color:#b8860b;margin-left:8px;letter-spacing:2px}.dark-mode .q-legend-completed{color:#a7b2ff}.dark-mode .q-legend-failed{color:#f08a82}.dark-mode .q-legend-exec{color:#f5c842}.q-chart-tooltip .q-tip-exec{color:#b8860b}.dark-mode .q-chart-tooltip .q-tip-exec{color:#f5c842}.q-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;flex:1}.q-stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}.q-stat-value{font-family:var(--font-serif);font-size:1.25rem;font-weight:400;color:var(--color);line-height:1.2}.q-stats-actions{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.q-stats-actions .btn{font-family:var(--font-mono);font-size:11px;padding:6px 14px;border-radius:8px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.q-jobs{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-jobs-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}.q-state-filters{display:inline-flex;gap:6px;flex-wrap:wrap}.q-state-toggle{cursor:pointer;display:inline-flex;align-items:center}.q-state-toggle input{display:none}.q-state-chip{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:10px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);transition:opacity .15s,background .15s;text-transform:capitalize}.q-state-toggle input:checked+.q-state-chip{opacity:1}.q-state-toggle input:not(:checked)+.q-state-chip{opacity:.4;text-decoration:line-through}.q-state-badge,.q-state-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.q-state-badge{display:inline-block;padding:2px 8px;border-radius:8px}.q-state-active{background:#dbeafe;color:#1d4ed8}.q-state-waiting{background:#fef3c7;color:#92400e}.q-state-delayed{background:#e0e7ff;color:#4338ca}.q-state-failed{background:#fee2e2;color:#b91c1c}.q-state-completed{background:#dcfce7;color:#166534}.dark-mode .q-state-active{background:rgba(59,130,246,.2);color:#93bbfd}.dark-mode .q-state-waiting{background:rgba(251,191,36,.15);color:#fbbf24}.dark-mode .q-state-delayed{background:rgba(99,102,241,.2);color:#a5b4fc}.dark-mode .q-state-failed{background:rgba(239,68,68,.2);color:#fca5a5}.dark-mode .q-state-completed{background:rgba(34,197,94,.15);color:#86efac}.q-cell-state{width:120px}.q-delay-hint{display:block;font-size:10px;color:var(--ink-muted);margin-top:2px;font-family:var(--font-mono)}.q-search-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.q-search-row .form-control{max-width:320px;height:34px}.q-auto-refresh{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.q-table{width:100%;border-collapse:collapse}.q-table thead th{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap}.q-table tbody tr{border-bottom:1px solid var(--border-color);transition:background .1s}.q-table tbody tr:hover{background:var(--paper-bg-alt)}.q-table tbody tr:last-child{border-bottom:none}.q-table tbody td{padding:10px 10px;font-size:.875rem;vertical-align:middle}.q-cell-id{font-family:var(--font-mono);font-size:12px;white-space:nowrap}.q-cell-id{display:flex;align-items:center;gap:8px}.q-chevron{font-size:10px;color:var(--ink-muted);transition:transform .15s;flex-shrink:0}.q-chevron-open{transform:rotate(90deg)}.q-cell-id a{color:var(--color)}.q-cell-payload{font-family:var(--font-mono);font-size:12px;color:var(--color)}.q-payload-detail{color:var(--ink-muted)}.q-cell-num{font-family:var(--font-mono);font-size:12px;text-align:center;white-space:nowrap}.q-cell-progress{min-width:120px}.q-progress-wrap{display:flex;align-items:center;gap:8px}.q-progress-bar{flex:1;height:6px;border-radius:3px;overflow:hidden;background-image:linear-gradient(to right,#3b4ad6 var(--pct,0),var(--border-color) var(--pct,0))}.dark-mode .q-progress-bar{background-image:linear-gradient(to right,#a7b2ff var(--pct,0),var(--border-color) var(--pct,0))}.q-progress-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap;min-width:32px;text-align:right}.q-cell-actions{text-align:right;white-space:nowrap}.q-cell-actions .btn{padding:3px 8px;font-size:11px;background:0 0;border:1px solid var(--border-color);color:var(--ink-muted)}.q-cell-actions .btn:hover{color:var(--color)}.q-row-failed{background:rgba(180,35,24,.04)}.dark-mode .q-row-failed{background:rgba(240,138,130,.06)}.q-error-detail{padding:4px 10px 12px;font-size:12px}.q-error-reason{color:#b42318;font-size:.8125rem;margin-bottom:4px}.dark-mode .q-error-reason{color:#f08a82}.q-toast-error{background:#fbe7e7;color:#b42318;border:1px solid #f3c7c7;border-radius:8px;padding:10px 16px;margin-bottom:12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:8px}.dark-mode .q-toast-error{background:rgba(240,138,130,.1);color:#f08a82;border-color:rgba(240,138,130,.25)}.q-error-stack{font-size:.75rem;max-height:120px;overflow:auto;margin:4px 0 0;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:6px;padding:8px 10px}.q-row-expanded>td{border-bottom-color:transparent}.q-detail-row>td{padding:0 10px 14px!important;border-bottom:1px solid var(--border-color)}.q-job-detail{background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:8px;padding:14px 16px}.q-job-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 20px;margin-bottom:10px}.q-job-detail-item{display:flex;flex-direction:column;gap:2px}.q-job-detail-label{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.q-job-detail-value{font-family:var(--font-mono);font-size:12px;color:var(--color);word-break:break-all}.q-job-detail-value a{color:var(--color)}.q-job-detail-error{margin:8px 0}.q-job-detail-actions{display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color)}.q-job-detail-actions .btn{font-family:var(--font-mono);font-size:11px;padding:5px 12px;border-radius:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}@media (max-width:900px){.q-detail{grid-template-columns:1fr}.q-cards{flex-direction:column}.q-card{min-width:100%}.q-jobs-header{flex-direction:column;align-items:flex-start}.q-tabs{flex-wrap:wrap}.q-search-row{flex-wrap:wrap}.q-search-row .form-control{max-width:100%;flex:1}.q-table{font-size:12px}.q-header{flex-direction:column}.q-job-detail-grid{grid-template-columns:1fr 1fr}}@media (max-width:900px){.paper-table .paper-table-head{display:none}.paper-table .admin-users-row,.paper-table .paper-table-row,.paper-table.paper-table-conferences .paper-table-row,.paper-table.paper-table-repos .paper-table-row{display:flex!important;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:14px 0;grid-template-columns:none!important}.paper-table .cell-anon{flex:1 1 calc(100% - 52px);min-width:0;order:1}.paper-table .cell-actions{flex:0 0 auto;order:2;align-self:center}.paper-table .cell-conf,.paper-table .cell-expires,.paper-table .cell-status,.paper-table .cell-views{order:3;font-size:13px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;text-align:left}.paper-table .cell-status{flex-wrap:nowrap;gap:6px;min-width:0}.paper-table .cell-status .status-sub{flex-basis:auto;font-size:13px;line-height:inherit}.paper-table .cell-status .status-sub::before{content:"·";margin-right:6px;color:var(--ink-faint)}.paper-table .cell-conf{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views.num{text-align:left}.paper-table .paper-table-skeleton .cell-expires,.paper-table .paper-table-skeleton .cell-status,.paper-table .paper-table-skeleton .cell-views{flex:1 1 30%}.paper-table .cell-views::before{content:'\f06e';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table .cell-expires::before{content:'\f017';font-family:'Font Awesome 5 Free';font-weight:400;font-size:10px;color:var(--ink-muted)}.paper-table .cell-conf::before{content:'\f51c';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table-dashboard .cell-conf::before{content:none}.paper-table .cell-conf:has(.empty-dash),.paper-table .cell-expires:has(.empty-dash){display:none}.paper-table .cell-expires::before,.paper-table .cell-views::before{color:var(--ink-faint)}}.paper-page .dropdown-menu{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);box-shadow:0 12px 28px rgba(26,24,21,.08);padding:6px;min-width:220px;font-family:var(--font-sans);font-size:14px;color:var(--color);margin-top:6px}.paper-page .dropdown-menu .dropdown-header{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px;font-weight:500}.paper-page .dropdown-menu .dropdown-item{border-radius:6px;padding:8px 10px;color:var(--color);font-size:14px;display:flex;align-items:center;gap:8px}.paper-page .dropdown-menu .dropdown-item:focus,.paper-page .dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .dropdown-menu .dropdown-item i{width:16px;font-size:13px;color:var(--ink-muted)}.paper-page .dropdown-menu .form-check.dropdown-item{padding:8px 10px 8px 36px!important;position:relative}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-input{position:absolute;left:12px;top:50%;transform:translateY(-50%);margin:0;width:16px;height:16px;accent-color:var(--color);cursor:pointer}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-label{font-family:var(--font-sans);font-size:14px;color:var(--color);font-weight:400;margin:0;cursor:pointer}.btn.btn-icon-dots{width:32px;height:32px;padding:0;border:1px solid transparent;background:0 0;color:var(--ink-muted);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.btn.btn-icon-dots:focus,.btn.btn-icon-dots:hover,.btn.btn-icon-dots[aria-expanded=true]{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.btn.btn-icon-dots::after{display:none}.btn.btn-icon-dots i{font-size:15px}.paper-page .repo-list-empty{border-top:none;padding:56px 20px;color:var(--ink-muted)}.paper-page .filter-chip{background:var(--paper-bg-alt);color:var(--color);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px}@media (max-width:768px){.paper-page .paper-page-title{font-size:clamp(1.4rem,6vw,1.9rem);margin:4px 0 2px}.paper-page .paper-page-lede{font-size:13px;line-height:1.4;margin-bottom:0}.paper-page .btn-ink{padding:6px 12px;font-size:13px}.paper-page .quota-row{grid-template-columns:1fr;gap:12px;padding:0;margin:16px 0 0}.paper-page .dashboard-filter-row{padding:10px 0;margin-top:12px;gap:8px}.paper-page .quota-header{flex-direction:row;align-items:baseline;gap:8px}.paper-page .quota-value{white-space:nowrap}.paper-page .dashboard-filter-controls{width:100%}.paper-page .dashboard-filter-controls .btn-group{flex:1 1 100%;display:flex}.paper-page .dashboard-filter-controls .btn-group .btn{flex:1;justify-content:center}.paper-page .dashboard-filter-controls .dropdown{flex:1 1 0;min-width:0}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{width:100%;justify-content:space-between}.paper-page .dashboard-filter-controls .dropdown .filter-btn-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width:480px){.paper-page .paper-page-lede{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}.empty-state{text-align:center;padding:40px 20px;opacity:.6}.empty-state i{font-size:2rem;margin-bottom:10px;display:block}.paper-page .progress{height:10px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;margin-bottom:20px}.paper-page .progress .progress-bar{background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:10px;line-height:10px}.paper-page .progress .progress-bar.bg-success{background:var(--status-ready)!important}.paper-page .progress .progress-bar.bg-warning{background:var(--status-progress)!important;color:#fff}.paper-page .progress .progress-bar.bg-danger{background:var(--status-error)!important}.paper-page .progress .progress-bar.bg-dark{background:var(--ink-faint)!important}.paper-page .form>h5,.paper-page form>h5,.paper-page>h5{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin:24px 0 8px}.paper-page .accordion .card{background:var(--paper-card,var(--sidebar-bg-color));border:1px solid var(--border-color);border-radius:8px!important;margin-bottom:8px;overflow:hidden}.paper-page .accordion .card+.card{border-top:1px solid var(--border-color)}.paper-page .accordion .card-header{background:0 0;border:none;padding:0}.paper-page .accordion .card-header .btn{color:var(--color)!important;font-family:var(--font-sans);font-weight:500;font-size:14px;padding:14px 18px!important;background:0 0!important;border:none!important;position:relative}.paper-page .accordion .card-header .btn::after{content:"+";position:absolute;right:18px;font-family:var(--font-serif);font-size:20px;color:var(--ink-muted)}.paper-page .accordion .card-header .btn:not(.collapsed)::after{content:"–"}.paper-page .accordion .card-body{padding:6px 18px 18px!important;border-top:1px solid var(--border-soft)}.paper-page .accordion .form-check-label{color:var(--color);font-weight:500;font-size:14px}.paper-page .accordion .form-text{color:var(--ink-muted);font-size:12px;margin-top:2px}.faq-section .panel-body code{font-family:var(--font-mono);font-size:13px;padding:1px 6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:3px;color:var(--color)}.faq-section .panel-body a{color:var(--accent)}@media (max-width:820px){.paper-faq-body{grid-template-columns:1fr;gap:24px}.paper-faq-toc{position:static}}.paper-footer{margin-top:80px;padding:56px max(20px,calc((100vw - 1200px)/ 2)) 28px;border-top:1px solid var(--border-color);background:var(--canvas-bg-color);font-family:var(--font-sans)}.paper-footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}.paper-footer-brand .paper-footer-mark{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--color)}.paper-footer-brand .paper-footer-mark em{font-style:italic;font-weight:400}.paper-footer-tag{margin-top:10px;color:var(--ink-soft);font-size:14px;line-height:1.55;max-width:340px}.paper-footer-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}.paper-footer-col a{display:block;color:var(--color);font-size:14px;padding:4px 0;text-decoration:none}.paper-footer-col a:hover{color:var(--accent)}.paper-footer-rule{height:1px;background:var(--border-color);margin:40px 0 16px}.paper-footer-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-muted);font-family:var(--font-mono);letter-spacing:.02em}.paper-footer-foot .paper-footer-meta{font-family:var(--font-serif);font-style:italic;font-size:14px;letter-spacing:0;color:var(--ink-soft)}@media (max-width:768px){.paper-footer-inner{grid-template-columns:1fr 1fr}}.file.folder.truncated .truncated-warning{color:#d39e00;margin-left:4px;font-size:.85em;flex-shrink:0}.file.folder.truncated>a{color:#d39e00}body{--bucket-error-bg:#FCEDED;--bucket-error-fg:#8A1F1F;--bucket-error-bd:#F0C4C4;--bucket-error-dot:#B53737;--bucket-warn-bg:#FFF3DF;--bucket-warn-fg:#7A4D00;--bucket-warn-bd:#F0D8A0;--bucket-warn-dot:#B07A2F;--bucket-info-bg:#EAF2EC;--bucket-info-fg:#2C5D3A;--bucket-info-bd:#C5DCCD;--bucket-info-dot:#5B8D6B;--card-shadow:0 1px 2px rgba(26, 24, 21, 0.04),0 4px 14px rgba(26, 24, 21, 0.05);--card-shadow-hover:0 1px 2px rgba(26, 24, 21, 0.06),0 8px 24px rgba(26, 24, 21, 0.08)}.dark-mode{--bucket-error-bg:rgba(255, 139, 123, 0.10);--bucket-error-fg:#FF8B7B;--bucket-error-bd:rgba(255, 139, 123, 0.28);--bucket-error-dot:#FF8B7B;--bucket-warn-bg:rgba(255, 211, 122, 0.10);--bucket-warn-fg:#FFD37A;--bucket-warn-bd:rgba(255, 211, 122, 0.28);--bucket-warn-dot:#FFD37A;--bucket-info-bg:rgba(152, 200, 168, 0.10);--bucket-info-fg:#98C8A8;--bucket-info-bd:rgba(152, 200, 168, 0.28);--bucket-info-dot:#98C8A8;--card-shadow:0 1px 2px rgba(0, 0, 0, 0.35),0 6px 18px rgba(0, 0, 0, 0.30);--card-shadow-hover:0 2px 4px rgba(0, 0, 0, 0.45),0 12px 28px rgba(0, 0, 0, 0.40)}.errors-page .errors-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 8px}.errors-page .errors-actions{display:flex;gap:6px}.errors-page .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin:14px 0 18px}.errors-page .kpi-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease,transform 160ms ease}.errors-page .kpi-card:hover{box-shadow:var(--card-shadow-hover)}.errors-page .kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.errors-page .kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.errors-page .kpi-card.kpi-error .kpi-value{color:var(--bucket-error-fg)}.errors-page .kpi-card.kpi-warn .kpi-value{color:var(--bucket-warn-fg)}.errors-page .kpi-card.kpi-info .kpi-value{color:var(--bucket-info-fg)}.errors-page .kpi-sub{font-size:.75rem;color:var(--ink-muted);font-style:italic}.errors-page .kpi-sub.up{color:var(--bucket-error-fg);font-style:normal}.errors-page .kpi-sub.down{color:var(--bucket-info-fg);font-style:normal}.errors-page .dropped-warn{color:var(--bucket-error-fg);font-weight:600;font-style:normal}.errors-page .volume-chart{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;margin-bottom:18px;box-shadow:var(--card-shadow)}.errors-page .volume-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.errors-page .volume-legend{display:flex;gap:14px;align-items:center;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.errors-page .volume-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.errors-page .dot.dot-error{background:var(--bucket-error-dot)}.errors-page .dot.dot-warn{background:var(--bucket-warn-dot)}.errors-page .dot.dot-info{background:var(--bucket-info-dot)}.errors-page .volume-bars{display:flex;align-items:flex-end;gap:4px;height:80px}.errors-page .volume-bar{display:flex;flex-direction:column-reverse;flex:1 1 0;min-width:6px;height:100%}.errors-page .volume-bar .seg{display:block;width:100%}.errors-page .seg.seg-error{background:var(--bucket-error-dot)}.errors-page .seg.seg-warn{background:var(--bucket-warn-dot)}.errors-page .seg.seg-info{background:var(--bucket-info-dot);opacity:.7}.errors-page .errors-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.errors-page .seg-tabs{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--paper-card)}.errors-page .seg-tabs button{background:0 0;border:none;padding:6px 14px;font-size:.875rem;cursor:pointer;color:var(--color);font-family:var(--font-sans)}.errors-page .seg-tabs button+button{border-left:1px solid var(--border-color)}.errors-page .seg-tabs button.active{background:var(--primary-bg);color:var(--primary-color)}.errors-page .errors-toolbar .search-wrap{position:relative;flex:1 1 320px;min-width:220px}.errors-page .errors-toolbar .search-wrap input{width:100%;padding:6px 10px 6px 32px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--font-mono);font-size:.8125rem;background:var(--input-bg);color:var(--input-color)}.errors-page .errors-toolbar .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-muted);font-size:.875rem}.errors-page .errors-toolbar .filter-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:.75rem;color:var(--ink-muted)}.errors-page .errors-toolbar .select-wrap{display:inline-flex;align-items:center;gap:6px}.errors-page .errors-toolbar .select-wrap label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0}.errors-page .errors-toolbar .select-wrap select{background:var(--input-bg);color:var(--input-color);border:1px solid var(--border-color);border-radius:8px}.errors-page .errors-toolbar .autoref{display:inline-flex;gap:6px;align-items:center;font-size:.8125rem;color:var(--color);cursor:pointer;margin:0}.errors-page .btn-icon{width:32px;padding:4px 0}.errors-page .errors-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;box-shadow:var(--card-shadow)}.errors-page .errors-list-head,.errors-page .errors-row-main{display:grid;grid-template-columns:110px 100px 100px 1fr 60px 70px;gap:16px;padding:18px 20px;align-items:start}.errors-page .errors-list-head{padding:12px 20px;align-items:center}.errors-page .errors-list-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.errors-page .errors-row{border-bottom:1px solid var(--border-soft)}.errors-page .errors-row:last-child{border-bottom:none}.errors-page .errors-row.open{background:var(--paper-bg-alt)}.errors-page .errors-row-main{cursor:pointer}.errors-page .errors-row-main:hover{background:var(--hover-bg-color)}.errors-page .col-when .when-rel{font-size:.9375rem;color:var(--color);font-variant-numeric:tabular-nums}.errors-page .col-when .when-abs{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-top:2px}.errors-page .col-sev{display:flex;align-items:center;gap:8px}.errors-page .sev-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.errors-page .sev-dot.sev-error{background:var(--bucket-error-dot)}.errors-page .sev-dot.sev-warn{background:var(--bucket-warn-dot)}.errors-page .sev-dot.sev-info{background:var(--bucket-info-dot)}.errors-page .sev-label{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;color:var(--color)}.errors-page .pill-module{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--paper-bg-alt);color:var(--ink-soft);border:1px solid var(--border-color);padding:3px 10px;border-radius:6px}.errors-page .col-msg .msg-code{font-family:var(--font-mono);font-size:1rem;color:var(--color);font-weight:600}.errors-page .col-msg .msg-context{color:var(--ink-muted);font-style:italic;font-size:.875rem;margin-left:10px}.errors-page .col-msg .msg-detail{color:var(--ink-soft);font-family:var(--font-mono);font-size:.8125rem;margin-left:10px}.errors-page .col-msg .msg-url{color:var(--ink-muted);font-family:var(--font-mono);font-size:.8125rem;margin-top:6px;word-break:break-all}.errors-page .count-pill{display:inline-block;padding:2px 8px;border-radius:4px;background:var(--primary-bg);color:var(--primary-color);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums}.errors-page .count-pill.count-pill-muted{background:0 0;color:var(--ink-muted);border:1px solid var(--border-color)}.errors-page .status-pill{display:inline-block;padding:2px 10px;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid transparent}.errors-page .status-pill.status-error{background:var(--bucket-error-bg);color:var(--bucket-error-fg);border-color:var(--bucket-error-bd)}.errors-page .status-pill.status-warn{background:var(--bucket-warn-bg);color:var(--bucket-warn-fg);border-color:var(--bucket-warn-bd)}.errors-page .status-pill.status-info{background:var(--bucket-info-bg);color:var(--bucket-info-fg);border-color:var(--bucket-info-bd)}.errors-page .errors-row-detail{padding:0 16px 16px}.errors-page .detail-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);margin-bottom:12px}.errors-page .detail-tabs button{background:0 0;border:0;border-bottom:2px solid transparent;padding:8px 12px;font-size:.875rem;cursor:pointer;color:var(--ink-muted);font-family:var(--font-sans)}.errors-page .detail-tabs button.active{color:var(--color);border-bottom-color:var(--color)}.errors-page .detail-body{display:grid;grid-template-columns:1fr 260px;gap:20px}.errors-page .detail-main pre{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;color:var(--color);max-height:26em;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;box-shadow:var(--card-shadow)}.errors-page .related-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;max-height:22em;overflow:auto;box-shadow:var(--card-shadow)}.errors-page .stack-pre{line-height:1.45;white-space:pre;overflow-x:auto}.errors-page .related-row{display:flex;gap:10px;padding:6px 12px;align-items:center;border-bottom:1px solid var(--border-soft);font-size:.8125rem}.errors-page .related-row:last-child{border-bottom:none}.errors-page .detail-actions{display:flex;gap:6px;align-items:center;margin-top:10px}.errors-page .copy-hint{font-size:.75rem;color:var(--bucket-info-fg)}.errors-page .detail-aside{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px;box-shadow:var(--card-shadow)}.errors-page .aside-block+.aside-block{margin-top:16px}.errors-page .aside-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-bottom:4px}.errors-page .aside-value{font-family:var(--font-serif);font-size:1rem;color:var(--color);word-break:break-word;line-height:1.3}.errors-page .aside-value.mono{font-family:var(--font-mono);font-size:.8125rem}.errors-page .aside-sub{color:var(--ink-muted);font-style:italic;font-size:.8125rem;font-family:var(--font-sans)}.errors-page .errors-pager{display:flex;justify-content:space-between;align-items:center;padding:10px 0;color:var(--ink-muted);font-size:.875rem}@media (max-width:720px){.errors-page .errors-list-head,.errors-page .errors-row-main{grid-template-columns:80px 80px 1fr 60px}.errors-page .errors-list-head .col-mod,.errors-page .errors-list-head .col-sev,.errors-page .errors-row-main .col-mod,.errors-page .errors-row-main .col-sev{display:none}.errors-page .detail-body{grid-template-columns:1fr}}.overview-page .ov-header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:2px}.overview-page .ov-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:6px;vertical-align:middle}.overview-page .ov-dot-ok{background:#2f7a44}.overview-page .ov-dot-warn{background:#c48a2e}.overview-page .ov-dot-idle{background:var(--ink-muted)}.dark-mode .overview-page .ov-dot-ok{background:#7dc894}.dark-mode .overview-page .ov-dot-warn{background:#e8b970}.overview-page .ov-kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin:16px 0 22px}.overview-page .ov-kpi-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease}.overview-page .ov-kpi-card:hover{box-shadow:var(--card-shadow-hover)}.overview-page .ov-kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.overview-page .ov-kpi-value.ov-val-warn{color:#b42318}.dark-mode .overview-page .ov-kpi-value.ov-val-warn{color:#f08a82}.overview-page .ov-kpi-sub{font-size:.75rem;color:var(--ink-muted);margin-top:2px}.overview-page .ov-daily-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:-4px 0 22px}.overview-page .ov-daily-card{background:var(--primary-bg);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-daily-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-daily-value{font-family:var(--font-serif);font-size:2.5rem;font-weight:400;line-height:1;color:var(--accent,#3b4ad6);margin-top:6px}.overview-page .ov-daily-sub{font-size:.75rem;color:var(--ink-muted);margin-top:5px}.dark-mode .overview-page .ov-daily-card{background:var(--paper-card)}.dark-mode .overview-page .ov-daily-value{color:#a7b2ff}.overview-page .ov-chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.overview-page .ov-chart-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px 14px;box-shadow:var(--card-shadow)}.overview-page .ov-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.overview-page .ov-chart-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-chart-legend{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);display:flex;align-items:center;gap:5px}.overview-page .ov-dot-legend{display:inline-block;width:8px;height:8px;border-radius:50%}.overview-page .ov-dot-accent{background:var(--accent,#3b4ad6)}.overview-page .ov-dot-ok-fill{background:#2f7a44}.overview-page .ov-dot-user-fill{background:#8b5e2e}.overview-page .ov-dot-new-user-fill{background:#c48a2e}.dark-mode .overview-page .ov-dot-ok-fill{background:#7dc894}.dark-mode .overview-page .ov-dot-user-fill{background:#d0a15f}.dark-mode .overview-page .ov-dot-new-user-fill{background:#e8b970}.overview-page .ov-spark-bars{display:flex;align-items:flex-end;gap:3px;height:140px}.overview-page .ov-spark-col{flex:1;display:flex;align-items:flex-end;height:100%;position:relative}.overview-page .ov-spark-fill{width:100%;background:var(--accent,#3b4ad6);border-radius:2px 2px 0 0;transition:height .3s ease;opacity:.55}.overview-page .ov-spark-fill-alt{background:#2f7a44}.overview-page .ov-spark-fill-user{background:#8b5e2e}.overview-page .ov-spark-fill-new-user{background:#c48a2e}.dark-mode .overview-page .ov-spark-fill-alt{background:#7dc894}.dark-mode .overview-page .ov-spark-fill-user{background:#d0a15f}.dark-mode .overview-page .ov-spark-fill-new-user{background:#e8b970}.overview-page .ov-spark-col:hover .ov-spark-fill{opacity:1}.overview-page .ov-spark-col.has-tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%) translateY(4px);z-index:10;padding:6px 8px;border-radius:6px;background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:.6875rem;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip::before{content:"";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%) translateY(4px);z-index:10;border:5px solid transparent;border-top-color:var(--color);opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip:hover::after,.overview-page .ov-spark-col.has-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}.overview-page .ov-spark-x{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);margin-top:6px}.overview-page .ov-triple-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}.overview-page .ov-panel-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-panel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}.overview-page .ov-panel-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-panel-meta{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.overview-page .ov-panel-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color);font-size:.8125rem}.overview-page .ov-panel-foot a{color:var(--link-color);text-decoration:none}.overview-page .ov-panel-foot a:hover{text-decoration:underline}.overview-page .ov-performance{min-width:0;margin:22px 0}.overview-page .ov-performance-head{align-items:center;flex-wrap:wrap;gap:12px 20px}.overview-page .ov-performance-head h2{margin:0 0 4px}.overview-page .ov-performance-note{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--ink-muted)}.overview-page .ov-performance-head .ov-performance-note{margin:0}.overview-page .ov-performance-window{display:flex;align-items:center;gap:8px;flex-shrink:0}.overview-page .ov-performance-window label{margin:0;font-size:12px;color:var(--ink-muted)}.overview-page .ov-performance-window select{width:auto}.overview-page .ov-performance-tabs{margin:0 0 16px;gap:4px}.overview-page .ov-performance-tabs .paper-tab{white-space:nowrap}.overview-page .ov-metrics-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-color);border-radius:var(--radius-control,8px)}.overview-page .ov-metrics-table{width:100%;border-collapse:collapse;color:var(--color);font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums}.overview-page .ov-metrics-table td,.overview-page .ov-metrics-table th{padding:10px 12px;border-bottom:1px solid var(--border-color);vertical-align:middle;white-space:nowrap}.overview-page .ov-metrics-table thead th{background:var(--paper-bg-alt);color:var(--ink-muted);font-size:12px;font-weight:500}.overview-page .ov-metrics-table .num{text-align:right}.overview-page .ov-metrics-table tr:last-child>*{border-bottom:0}.overview-page .ov-metrics-table thead tr:last-child>*{border-bottom:1px solid var(--border-color)}.overview-page .ov-metrics-table tbody tr:hover{background:var(--hover-bg-color)}.overview-page .ov-metrics-table .ov-metric-name{min-width:190px;max-width:280px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-weight:500}.overview-page .ov-metrics-table small{display:block;margin-top:3px;font-size:11px;font-weight:400;color:var(--ink-muted)}.overview-page .ov-metrics-table small .ui-icon{width:12px;height:12px}.overview-page .ov-metric-warning-row{background:rgba(196,138,46,.07)}.overview-page .ov-metric-warn,.overview-page .ov-metrics-table small.ov-metric-warn{color:#946519}.dark-mode .overview-page .ov-metric-warn,.dark-mode .overview-page .ov-metrics-table small.ov-metric-warn{color:#e8b970}.overview-page .ov-performance-message{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border-color);border-radius:var(--radius-control,8px);font-size:13px;line-height:1.5}.overview-page .ov-performance-message span{flex:1;min-width:160px}.overview-page .ov-performance-warning{background:rgba(196,138,46,.07)}.overview-page .ov-performance-empty{margin:0;padding:24px 12px;text-align:center;font-size:13px;color:var(--ink-muted)}.overview-page .ov-performance-help{margin-top:16px;font-size:12px;line-height:1.6;color:var(--ink-muted)}.overview-page .ov-performance-help summary{width:fit-content;cursor:pointer}.overview-page .ov-performance-help p{margin:8px 0 0;max-width:80ch}@media (max-width:575px){.overview-page .ov-performance{padding:16px 12px}.overview-page .ov-performance-window{width:100%}.overview-page .ov-performance-window select{flex:1;min-width:0}.overview-page .ov-performance-tabs .paper-tab{flex:1;padding:10px 8px}}.overview-page .ov-stacked-bar{display:flex;height:18px;border-radius:6px;overflow:hidden;margin-bottom:14px}.overview-page .ov-bar-seg{min-width:2px;transition:width .4s ease}.overview-page .ov-bar-ready{background:#2f7a44}.overview-page .ov-bar-preparing{background:#c48a2e}.overview-page .ov-bar-error{background:#b42318}.overview-page .ov-bar-expired{background:#8a857c}.overview-page .ov-bar-removed{background:#b5afa2}.dark-mode .overview-page .ov-bar-ready{background:#7dc894}.dark-mode .overview-page .ov-bar-preparing{background:#e8b970}.dark-mode .overview-page .ov-bar-error{background:#f08a82}.dark-mode .overview-page .ov-bar-expired{background:#6b665e}.dark-mode .overview-page .ov-bar-removed{background:#4a453e}.overview-page .ov-bar-legend{display:flex;flex-direction:column;gap:6px}.overview-page .ov-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;text-decoration:none;color:inherit}.overview-page .ov-legend-item:hover{text-decoration:none;color:inherit}.overview-page .ov-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}.overview-page .ov-legend-n{margin-left:auto;font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.overview-page .ov-error-bars{display:flex;flex-direction:column;gap:12px}.overview-page .ov-ebar-row{display:flex;align-items:center;gap:10px}.overview-page .ov-ebar-label{width:30px;flex-shrink:0;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;color:var(--ink-muted)}.overview-page .ov-ebar-track{flex:1;height:10px;background:var(--hover-bg-color);border-radius:5px;overflow:hidden}.overview-page .ov-ebar-fill{height:100%;border-radius:5px;transition:width .4s ease}.overview-page .ov-ebar-error{background:#b42318}.overview-page .ov-ebar-warn{background:#c48a2e}.overview-page .ov-ebar-info{background:var(--accent,#3b4ad6)}.dark-mode .overview-page .ov-ebar-error{background:#f08a82}.dark-mode .overview-page .ov-ebar-warn{background:#e8b970}.overview-page .ov-ebar-n{width:36px;text-align:right;font-family:var(--font-mono);font-size:.8125rem;font-weight:600;flex-shrink:0}.overview-page .ov-routes-table{display:flex;flex-direction:column}.overview-page .ov-route-row{display:grid;grid-template-columns:1fr 60px 60px 60px;padding:8px 0;border-bottom:1px solid var(--border-soft,var(--border-color));text-decoration:none;color:inherit;font-size:.875rem;align-items:center}.overview-page .ov-route-row:last-child{border-bottom:none}.overview-page .ov-route-row:hover{background:var(--hover-bg-color);text-decoration:none;color:inherit}.overview-page .ov-route-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-color)}.overview-page .ov-route-head:hover{background:0 0}.overview-page .ov-route-name{font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-n{text-align:right;font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-lat{color:var(--ink-muted)}.overview-page .ov-n-bad{color:#b42318;font-weight:600}.dark-mode .overview-page .ov-n-bad{color:#f08a82}.overview-page .ov-services-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;box-shadow:var(--card-shadow);margin-bottom:18px}.overview-page .ov-services-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.overview-page .ov-services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.overview-page .ov-svc{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border-soft,var(--border-color));border-radius:10px}.overview-page .ov-svc-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}.overview-page .ov-svc-info{display:flex;flex-direction:column;gap:1px;flex:1}.overview-page .ov-svc-name{font-family:var(--font-mono);font-size:.875rem;font-weight:600}.overview-page .ov-svc-meta{font-size:.75rem;color:var(--ink-muted)}.overview-page .ov-svc-detail{font-size:.75rem;color:var(--ink-muted);white-space:nowrap}@media (max-width:900px){.overview-page .ov-kpi-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-daily-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-triple-row{grid-template-columns:1fr}}@media (max-width:720px){.overview-page .ov-kpi-row{grid-template-columns:repeat(2,1fr)}.overview-page .ov-daily-row{grid-template-columns:1fr}.overview-page .ov-chart-row{grid-template-columns:1fr}.overview-page .ov-header{flex-direction:column;gap:8px}}@media (max-width:480px){.overview-page .ov-kpi-row{grid-template-columns:1fr 1fr}.overview-page .ov-services-grid{grid-template-columns:1fr 1fr}}.dashboard-heading-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-bottom:12px}.dashboard-heading-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}.dashboard-connections-link{display:inline-flex;align-items:center;gap:7px;min-height:32px;color:var(--ink-muted);font-size:12px;line-height:1.5}.dashboard-connections-link:hover{color:var(--accent);text-decoration:none}.dashboard-connections-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}@media (max-width:767px){.dashboard-heading-actions{align-items:flex-start;padding-bottom:0;gap:4px}.dashboard-connections-link{min-height:44px}}.paper-settings-connection-link{display:flex;align-items:center;gap:12px;padding:18px 0;color:var(--color);font-size:14px}.paper-settings-connection-link>i{color:var(--ink-muted);font-size:18px}.paper-settings-connection-link>span:first-of-type{flex:1}.paper-settings-connection-link small{display:block;margin-top:4px;color:var(--ink-muted);font-size:12px}.paper-settings-connection-link:hover{color:var(--accent);text-decoration:none}.paper-settings-connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.connections-heading{margin-bottom:36px}.connections-heading .paper-page-title{font-size:clamp(38px,4.5vw,56px);margin-bottom:12px}.connections-heading .paper-page-lede{font-size:15px}.connections-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:56px;align-items:start;border-top:1px solid var(--border-color);padding-top:28px}.connections-grid>section{min-width:0}.connection-title,.connection-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.connection-top{margin-bottom:24px;min-height:28px}.connection-top>i{color:var(--ink-muted);font-size:24px}.connection-top>.fa-key{font-size:18px}.connection-title{margin-bottom:10px}.connections-page h2{font-family:inherit;font-size:22px;font-weight:600;letter-spacing:-.5px;margin:0}.connections-page p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.connection-badge{background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:600;border-radius:5px;padding:4px 8px;white-space:nowrap}.connection-badge-muted{background:var(--paper-bg-alt);color:var(--ink-muted)}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-muted)}.connection-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}.connection-status.is-connected{color:var(--status-ready)}.connection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:22px 0 16px}.connections-page .btn{font-size:13px;padding:9px 13px;white-space:normal}.connection-revoke p,.connections-page .connection-help{font-size:12px}.connection-link{display:inline-flex;align-items:center;gap:8px;border:0;padding:0;background:0 0;color:var(--accent);font-size:13px;line-height:1.6;font-weight:500;text-align:left;cursor:pointer}.connection-link:hover{color:var(--link-hover-color);text-decoration:underline}.connection-link:disabled{color:var(--ink-muted);opacity:.65;cursor:not-allowed;text-decoration:none}.connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.connection-installations{list-style:none;padding:0;margin:18px 0;border-top:1px solid var(--border-soft)}.connection-installations li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 0;font-size:12px;border-bottom:1px solid var(--border-soft)}.connection-revoke{border-top:1px solid var(--border-soft);padding-top:18px;margin-top:24px}.connection-danger{color:var(--status-error)}.connection-resources{margin-top:36px;padding-top:28px;border-top:1px solid var(--border-color)}.connection-count{color:var(--ink-muted);font-size:12px}.connection-empty{display:flex;align-items:center;gap:18px;padding:20px 0;margin:22px 0}.connection-empty>i{font-size:22px;color:var(--ink-muted)}.connection-empty h3{font-size:14px;font-weight:600;margin:0 0 5px}.connection-empty p{font-size:12px;margin:0}.connection-empty>a{margin-left:auto;flex-shrink:0}.connection-resource{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0;border-bottom:1px solid var(--border-color)}.connection-resource-name{flex:1;min-width:180px;overflow-wrap:anywhere;font-size:14px}.connection-resource-name small{display:block;color:var(--ink-muted);font-size:11px;margin-top:5px}.connection-resource-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.connection-resource-actions .connection-help{flex-basis:100%}.connections-page .connection-footnote{display:flex;align-items:baseline;gap:10px;margin-top:22px;font-size:12px}@media (max-width:767px){.connections-grid{grid-template-columns:1fr;gap:28px}.connections-grid>section+section{border-top:1px solid var(--border-color);padding-top:28px}.connection-empty{flex-wrap:wrap}.connection-empty>div{flex:1;min-width:180px}.connection-empty>a{margin-left:40px}.connection-resource-actions{flex-basis:100%}}.paper-table-empty-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.paper-table-empty-actions .btn>i{font-size:1em;line-height:1;color:inherit;margin-right:0!important}.auth-back{display:inline-flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-muted);margin-bottom:48px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.auth-intro,.auth-options{padding-top:28px}.auth-title-mobile{display:none}.auth-intro .paper-page-title{font-size:clamp(48px,5vw,76px);line-height:1.06;margin:18px 0 24px}.auth-intro .paper-page-lede{max-width:330px}.auth-options{display:grid;gap:28px}.auth-options h2{font-family:inherit;font-size:22px;font-weight:600;margin:0 0 10px}.auth-options p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.auth-options .auth-existing{font-size:12px;border-left:2px solid var(--accent);padding-left:14px;margin:0}.auth-permissions{padding:6px 0 12px;list-style:none;font-size:13px;line-height:1.6}.auth-permissions li{display:flex;gap:10px;margin:12px 0}.auth-permissions i{color:var(--status-ready);margin-top:4px}.auth-continue{display:flex!important;align-items:center;justify-content:space-between;min-height:48px;padding:12px 16px!important}.auth-options small{display:block;font-size:12px;text-align:center;color:var(--ink-muted);margin-top:12px}.auth-legacy{border-top:1px solid var(--border-color);padding-top:24px}.auth-legacy h2{font-size:16px;margin:0}.auth-legacy p{font-size:13px}.source-url-label-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:8px}.source-url-label-row>.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.repo-access{margin:0}.repo-access-details{margin:12px 0 24px}.source-url-label-row .repo-access-switch{padding:2px}.source-url-label-row .repo-access-switch button{padding:6px 10px;font-size:12px;line-height:20px}.repo-access-main{display:flex;align-items:center;gap:10px;padding:0 0 8px;flex-wrap:wrap}.repo-access-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.repo-access-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--border-color);border-radius:7px;flex-wrap:wrap}.repo-access-switch button{border:0;border-radius:4px;background:0 0;color:var(--ink-muted);padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.repo-access-switch button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);opacity:1;cursor:default;font-weight:600}.repo-access-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.repo-access-details .btn{font-size:12px;padding:8px 12px}.repo-access-note{display:flex;gap:6px 16px;flex-wrap:wrap;padding:0;color:var(--ink-muted);font-size:11px;line-height:1.6}@media (max-width:767px){.auth-page{max-width:480px}.auth-back,.auth-intro .paper-eyebrow,.auth-title-desktop{display:none}.auth-title-mobile{display:inline}.auth-layout{grid-template-columns:1fr;gap:24px}.auth-intro,.auth-options{padding-top:0}.auth-intro .paper-page-title{font-size:40px;line-height:1.15;margin:6px 0 12px}.auth-intro .paper-page-lede{max-width:none;font-size:14px;margin:0}.auth-options{gap:24px}.auth-options .connection-top{margin-bottom:16px}.auth-options h2{font-size:18px}.auth-options p{font-size:13px;margin-bottom:12px}.auth-permissions{padding:0;margin:14px 0 20px;font-size:12px}.auth-permissions li{margin:8px 0}.auth-continue{font-size:14px}.auth-legacy{padding-top:20px}.auth-legacy h2{font-size:15px}.auth-legacy .connection-link{min-height:44px}.repo-access-controls{width:100%;gap:12px}}.text-muted{color:var(--ink-muted)!important}.anonymize-review-note,.draft-status{font-size:13px;color:var(--ink-muted)}.anonymize-review-note{padding:12px 0;margin:0}.anonymize-preview-status{padding:20px 32px;color:var(--ink-muted)}.anonymize-preview-status p{margin:0 0 12px}@media (max-width:575px){.dashboard-page .paper-page-lede{margin-bottom:8px}.dashboard-page .dashboard-heading-actions{gap:4px}.dashboard-page .dashboard-connections-link{min-height:32px}.dashboard-page .dashboard-filter-row{margin-top:12px}.anonymize-preview-status{padding:16px}}.paper-page .paper-page-title{font-size:32px}.paper-page.admin-page .paper-page-title{font-size:28px}.paper-page .paper-page-lede{font-size:14px;line-height:1.5}.paper-settings{padding-top:32px}.paper-settings-body{grid-template-columns:180px minmax(0,1fr);gap:40px;margin-top:24px;padding-top:24px;border-top:0}.paper-settings-main .paper-settings-section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px;margin-bottom:16px}.anonymize-page .paper-section-eyebrow,.paper-settings .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:-.01em;margin-bottom:12px}.paper-settings .paper-settings-toc-head{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-settings-section .paper-section-copy{margin-top:0}.paper-settings .quota-row{gap:24px}.paper-settings .quota-header{flex-direction:column;align-items:flex-start;gap:4px}.paper-settings .quota-value{white-space:nowrap}.paper-settings .paper-settings-footer{padding:0 0 20px}.paper-settings .form-control{font-size:14px;border-color:var(--border-color);border-radius:var(--radius-control)}.paper-settings .form-check{padding-top:8px;padding-bottom:8px}.anonymize-page .btn-ink,.explorer-page .btn-ink,.paper-page .btn-ink{background:var(--accent);color:#fff;border-color:var(--accent)}.dark-mode .anonymize-page .btn-ink,.dark-mode .explorer-page .btn-ink,.dark-mode .paper-page .btn-ink{color:#1a1815}.anonymize-page .btn-ink:hover,.explorer-page .btn-ink:hover,.paper-page .btn-ink:hover{background:var(--accent);border-color:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .anonymize-page .btn-ink:hover,.dark-mode .explorer-page .btn-ink:hover,.dark-mode .paper-page .btn-ink:hover{color:#1a1815}.anonymize-page .btn-ink:active,.explorer-page .btn-ink:active,.paper-page .btn-ink:active{filter:brightness(.9)}input[type=date],select{color-scheme:light}.dark-mode input[type=date],.dark-mode select{color-scheme:dark}.draft-status{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 0}.draft-discard{padding:0;border:0;color:var(--accent);font:inherit;font-size:13px;text-decoration:underline;background:0 0;cursor:pointer}.conference-feedback{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;margin-top:16px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);width:100%}.paper-table{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);margin-top:12px}.paper-table .paper-table-head{font-family:var(--font-sans);text-transform:none;letter-spacing:0;font-size:12px;background:var(--paper-bg-alt);border-radius:var(--radius-surface) var(--radius-surface) 0 0}.paper-table .paper-table-head,.paper-table .paper-table-row{padding-left:16px;padding-right:16px}.dashboard-page{--dashboard-space-xs:4px;--dashboard-space-sm:8px;--dashboard-space-md:12px;--dashboard-space-lg:16px;--dashboard-space-xl:24px;padding-top:var(--dashboard-space-xl)}.project-icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.project-type-svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.project-empty-icon{width:28px;height:28px;color:var(--ink-faint)}.project-type-icon{display:inline-flex;color:var(--ink-muted);flex-shrink:0}.dashboard-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--dashboard-space-lg)}.dashboard-heading .paper-page-title{font-size:28px;margin-bottom:var(--dashboard-space-xs)}.dashboard-heading .paper-page-lede{display:none}.dashboard-heading .btn{min-height:40px;display:inline-flex;gap:var(--dashboard-space-sm);align-items:center}.dashboard-new-mobile{display:none}.dashboard-quota{position:relative;margin:0;padding:0;border:0;background:0 0}.dashboard-quota>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:5px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--paper-card);color:var(--color);font-family:var(--font-sans);font-size:12px;cursor:pointer;list-style:none;white-space:nowrap}.dashboard-quota>summary::-webkit-details-marker{display:none}.dashboard-quota>summary:hover,.dashboard-quota[open]>summary{background:var(--paper-bg-alt);border-color:var(--ink-faint)}.quota-summary-label{font-weight:600}.quota-summary-value{color:var(--ink-muted);font-variant-numeric:tabular-nums}.quota-summary-ring{width:18px;height:18px;flex-shrink:0;fill:none;stroke-width:2.5}.quota-ring-track{stroke:var(--border-color)}.quota-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.quota-summary-ring.quota-warn .quota-ring-fill{stroke:var(--status-progress)}.quota-summary-ring.quota-danger .quota-ring-fill{stroke:var(--status-error)}.quota-ring-unlimited{stroke:var(--accent);stroke-width:1.7}.quota-summary-chevron{width:14px;height:14px;margin-left:2px;color:var(--ink-muted);transition:transform .15s ease}.dashboard-quota[open] .quota-summary-chevron{transform:rotate(180deg)}.dashboard-quota .quota-panel{position:absolute;z-index:25;top:calc(100% + 8px);left:0;width:344px;max-width:calc(100vw - 36px);padding:16px;border:1px solid var(--border-color);border-radius:12px;background:var(--paper-card);box-shadow:0 12px 36px rgba(26,24,21,.16)}.quota-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.quota-panel-heading h2{font:600 15px var(--font-sans);margin:0}.quota-panel-heading .project-close{margin:-8px -8px -8px 0}.paper-page .quota-usage{display:grid;grid-template-columns:1fr;gap:16px;margin:0;padding:0}.quota-usage .quota-item+.quota-item{padding-top:16px;border-top:1px solid var(--border-soft,var(--border-color))}.quota-usage .quota-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.quota-usage .quota-label{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--font-sans);letter-spacing:0;text-transform:none;color:var(--ink-muted)}.quota-usage .quota-label .project-type-svg{width:16px;height:16px}.quota-usage .quota-value{display:flex;align-items:baseline;gap:4px;font:12px var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-muted);margin-bottom:8px}.quota-usage .quota-value strong{font-size:20px;line-height:1.2;font-weight:600;color:var(--color)}.quota-percent,.quota-usage .quota-unlimited-tag{margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--paper-bg-alt);font:11px var(--font-sans);color:var(--ink-muted);white-space:nowrap}.quota-warn>.quota-header .quota-percent{color:var(--status-progress)}.quota-danger>.quota-header .quota-percent{color:var(--status-error)}.quota-usage .quota-track{height:5px;border:0;background:var(--paper-bg-alt)}.quota-usage .quota-track .quota-fill{min-width:0;background:var(--accent)}.quota-remaining{margin:6px 0 0;color:var(--ink-muted);font-size:11px}.quota-remaining.quota-limit{color:var(--status-error)}.quota-loading{font-size:12px;color:var(--ink-muted);margin:12px 0 0}.dashboard-page .dashboard-filter-row{display:flex;align-items:center;gap:var(--dashboard-space-md);padding:0;margin:var(--dashboard-space-lg) 0 0;border:0;background:0 0}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 240px;min-width:0}.dashboard-page .dashboard-filter-row .form-control{height:40px;padding:8px 12px;font-size:13px;background:var(--paper-card)}.dashboard-page .dashboard-filter-controls{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--dashboard-space-sm)}.dashboard-extra-filters{display:flex;gap:var(--dashboard-space-sm)}.dashboard-filters-toggle{display:none}.dashboard-page .dashboard-filter-row .btn-group .btn{border:0;background:0 0;border-radius:6px;height:36px;padding:6px 10px}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--accent-soft);color:var(--accent)}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:active,.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.dashboard-page .dashboard-filter-row .dropdown-toggle{height:36px;padding:6px 10px}.dashboard-type-filter .project-type-svg{display:none}.sort-direction{width:14px;height:14px}.sort-direction.ascending{transform:rotate(180deg)}.dashboard-page .dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dashboard-space-sm) var(--dashboard-space-md);margin:var(--dashboard-space-md) 0 0;padding:0}.dashboard-view-tabs{display:flex;align-items:center;gap:var(--dashboard-space-lg)}.dashboard-view-short{display:none}.dashboard-view-tabs button{min-height:36px;border:0;border-bottom:2px solid transparent;border-radius:0;background:0 0;font:inherit;font-size:13px;color:var(--ink-muted);padding:4px 0}.dashboard-view-tabs button[aria-pressed=true]{color:var(--color);border-bottom-color:var(--color);font-weight:600}.attention-count{padding:1px 5px;margin-left:4px;border-radius:4px;background:var(--paper-bg-alt);font-size:11px;font-variant-numeric:tabular-nums}.attention-count.has-attention{color:var(--status-error)}.dashboard-count{margin-left:auto;font-size:12px;color:var(--ink-muted)}.dashboard-active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:var(--dashboard-space-sm);width:100%}.dashboard-page .filter-chip{display:inline-flex;font-family:var(--font-sans);font-size:11px;text-transform:none;letter-spacing:0;border-radius:6px}.dashboard-page .filter-chip .project-type-svg{width:12px;height:12px;margin-left:4px}.dashboard-page .filter-chip-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin:-2px -4px -2px 2px}.dashboard-page .btn-link-inline{color:var(--ink-muted);font-size:12px}.dashboard-page .paper-table-dashboard{margin-top:var(--dashboard-space-md);border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table-dashboard .paper-table-head,.dashboard-page .paper-table-dashboard .paper-table-row{grid-template-columns:minmax(280px,3fr) 180px 72px 148px 64px;gap:var(--dashboard-space-lg);padding:8px 12px}.dashboard-page .paper-table-dashboard .paper-table-head{border-radius:0}.dashboard-page .paper-table .cell-anon{gap:var(--dashboard-space-sm)}.dashboard-page .paper-table .anon-text{flex:1}.dashboard-page .paper-table .repo-name{font-family:var(--font-sans);font-size:14px;font-weight:600}.dashboard-page .paper-table .anon-sub{display:flex;align-items:center;gap:var(--dashboard-space-sm);min-width:0}.anonymous-id{font-size:12px;font-family:var(--font-mono);color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-page .paper-table .type-badge{font-family:var(--font-sans);letter-spacing:0;font-size:11px;text-transform:none;border-radius:6px}.dashboard-page .paper-table .status-sub{font-size:12px}.dashboard-page .paper-table .cell-conf{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.dashboard-page .conf-tag .project-type-svg{width:14px;height:14px}.dashboard-row-meta{display:contents}.dashboard-page .cell-actions{gap:0;align-items:center}.copy-link-inline,.dashboard-page .btn-icon-dots,.project-close{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;background:0 0;color:var(--ink-muted);padding:0;width:32px;height:32px;min-width:32px;cursor:pointer}.copy-link-inline:focus-visible,.copy-link-inline:hover,.dashboard-page .btn-icon-dots:hover,.project-close:hover{background:var(--accent-soft);color:var(--accent)}.copy-link-inline:disabled{opacity:.5;cursor:wait}.mobile-meta-icon{display:none}.project-attention-action{display:inline-block;color:var(--accent);border:0;background:0 0;padding:0;font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.project-attention-action{text-align:left}.dashboard-page .cell-status .project-attention-action{flex-basis:100%}.project-details-row{width:100%;border-bottom:1px solid var(--border-color)}.project-details{padding:var(--dashboard-space-xl);background:var(--paper-bg-alt)}.project-details-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--dashboard-space-sm)}.project-details-heading h2{font:600 16px var(--font-sans);margin:0}.project-details-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--dashboard-space-md) var(--dashboard-space-xl);margin:12px 0}.project-details-list dt{font-size:12px;color:var(--ink-muted);font-weight:500;margin-bottom:4px}.project-details-list dd{margin:0;font-size:13px;overflow-wrap:anywhere}.project-details-list code{color:var(--color);font-size:12px}.project-name-form{margin-top:var(--dashboard-space-lg);padding-top:var(--dashboard-space-lg);border-top:1px solid var(--border-color)}.project-name-form label{display:block;font-size:13px;font-weight:500;margin-bottom:4px}.project-name-form p,.project-progress-help{font-size:12px;color:var(--ink-muted);margin-bottom:8px}.project-name-controls{display:flex;gap:var(--dashboard-space-sm);max-width:560px}.project-name-controls .form-control{min-width:0;font-size:14px}.project-name-controls .btn{flex-shrink:0;min-height:40px}.project-name-form .project-name-error{color:var(--status-error)}.project-details-button{min-height:44px;padding:0 8px;border:0;border-radius:6px;background:0 0;font:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer}.anonymize-page .anonymize-topbar-title{font-family:var(--font-sans);font-size:28px;font-weight:600}.anonymize-topbar{padding:16px 24px}.anonymize-form-col{background:var(--paper-bg-alt)}.anonymize-form-col .paper-settings-main{padding:20px 24px}.anonymize-form-col .paper-settings-section{padding:18px}.anonymize-form-col .paper-settings-section:first-child{padding-top:18px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt);padding:12px 0}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0}.anonymize-preview-col{background:var(--canvas-bg-color);padding:24px}.anonymize-preview-head{flex-wrap:wrap;gap:6px 12px;margin-bottom:16px}.anonymize-preview-body{padding:24px}.anonymize-mobile-tabs,.anonymize-preview-empty,.mobile-preview-jump{display:none}.anonymize-page .repo-access-note{font-size:12px}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:18px}.paper-settings-toc{padding:0}.paper-settings-toc-head{display:none}.paper-table .paper-table-row{padding-left:14px;padding-right:14px}}@media (max-width:767px){.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:24px}.paper-settings{padding:20px 16px 40px}.paper-settings-main .paper-settings-section{padding:16px}.anonymize-topbar{padding:12px 16px}.anonymize-topbar .paper-crumbs{display:none}.anonymize-mobile-tabs{display:flex;gap:4px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--paper-card)}.anonymize-mobile-tabs button{flex:1;font:inherit;font-size:13px;padding:10px;border:0;border-radius:6px;background:0 0;color:var(--ink-muted)}.anonymize-mobile-tabs button[aria-selected=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.anonymize-page:not(.mobile-preview-active) .anonymize-preview-col{display:none}.mobile-preview-active .anonymize-form-col{display:none}.mobile-preview-active .anonymize-preview-empty{display:block;padding:24px 16px;color:var(--ink-muted)}.anonymize-form-col .paper-settings-main{padding:16px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt)}.mobile-preview-jump{display:block;width:100%;min-height:44px}.anonymize-preview-col{padding:16px}.anonymize-preview-body{padding:16px}}@media (max-width:575px){.paper-settings .quota-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 8px}}@media (max-width:1100px) and (min-width:901px){.dashboard-page .dashboard-filter-row{flex-wrap:wrap}.dashboard-page .dashboard-filter-row .search-wrap{flex-basis:100%}.dashboard-page .dashboard-filter-controls{width:100%;justify-content:space-between}}@media (max-width:900px){.dashboard-page .paper-table.paper-table-dashboard .paper-table-row{gap:4px 8px;padding:8px 12px}.dashboard-page .paper-table .cell-anon{flex:1 1 calc(100% - 96px);min-width:0}.dashboard-page .paper-table .cell-actions{flex:0 0 88px}.dashboard-row-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;order:3;width:100%}.dashboard-page .dashboard-row-meta .cell-status{flex:1 1 80px;flex-wrap:wrap;gap:2px 8px}.dashboard-page .dashboard-row-meta .cell-expires,.dashboard-page .dashboard-row-meta .cell-views{flex-shrink:0;font-size:12px}.dashboard-page .cell-expires::before,.dashboard-page .cell-views::before{content:none}.dashboard-page .mobile-meta-icon{display:inline-block;width:14px;height:14px}.dashboard-page .dashboard-row-meta .status-sub-date{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-page .dashboard-row-meta .status-sub-error,.dashboard-page .dashboard-row-meta .status-sub-warn{flex-basis:100%;white-space:normal;overflow-wrap:anywhere}.dashboard-page .dashboard-row-meta .status-sub::before{content:none}.dashboard-page .project-attention-action{min-height:44px;display:inline-flex;align-items:center}.dashboard-page .paper-table .anon-sub .commit-hash,.dashboard-page .paper-table .anon-sub .conf-tag{display:none}}@media (max-width:767px){.container.dashboard-page{padding-top:12px}.dashboard-heading .paper-page-title{font-size:24px}.dashboard-heading-actions .btn-ink{min-height:44px}.dashboard-new-label{display:none}.dashboard-new-mobile{display:inline}.dashboard-quota>summary{min-height:44px;gap:6px;padding:10px;font-size:12px;line-height:20px}.dashboard-quota .quota-panel{max-height:calc(100dvh - 184px);overflow-y:auto;overscroll-behavior:contain}.dashboard-page .dashboard-filter-row{flex-wrap:wrap;gap:8px;margin-top:12px}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 0}.dashboard-page .dashboard-filter-row .form-control{height:44px}.dashboard-page .dashboard-filters-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:8px;min-height:44px;background:0 0;border:0}.dashboard-page .dashboard-filter-controls{display:none;width:100%}.dashboard-page .dashboard-filter-controls.expanded{display:flex;flex-wrap:wrap;gap:8px}.dashboard-page .dashboard-filter-controls .btn-group{width:100%;display:flex}.dashboard-page .dashboard-filter-controls .btn-group .btn{flex:1;min-height:44px}.dashboard-extra-filters{display:flex;width:100%}.dashboard-page .dashboard-extra-filters .dropdown{flex:1;min-width:0}.dashboard-page .dashboard-extra-filters .dropdown-toggle{width:100%;height:44px}.dashboard-type-filter .type-filter-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-type-filter .project-type-svg{display:inline-block}.dashboard-page .dashboard-meta{margin-top:8px;gap:4px 8px}.dashboard-view-tabs{gap:16px}.dashboard-view-tabs button{min-width:44px;min-height:44px;font-size:12px}.dashboard-count{font-size:11px}.dashboard-count{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.dashboard-view-long{display:none}.dashboard-view-short{display:inline}.dashboard-active-filters{display:contents}.dashboard-page .filter-chip{font-size:11px;padding:0 8px;min-height:44px;gap:4px}.dashboard-page .filter-chip-close{min-width:44px;min-height:44px;margin:0}.dashboard-page .btn-link-inline{min-height:44px;font-size:12px}.dashboard-page .paper-table-dashboard{width:calc(100% + 36px);margin:8px -18px 0;border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table .repo-name{font-size:13px}.project-details{padding:16px 12px}.project-details-list{grid-template-columns:1fr;gap:12px}.project-name-controls{flex-wrap:wrap}.project-name-controls .form-control{flex-basis:100%}.project-name-controls .btn{min-height:44px}}@media (max-width:360px){.dashboard-attention-prefix{display:none}.dashboard-attention-prefix+span{text-transform:capitalize}}.ui-icon-definitions{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}.ui-icon{display:inline-block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;vertical-align:-3px}.ui-icon.sort-direction{width:14px;height:14px}.pr-title-row{display:flex;align-items:flex-start;gap:16px}.pr-title-row .pr-title{flex:1;min-width:0}.pr-title-row>.btn{flex-shrink:0}.ui-icon.record-type-icon{color:var(--ink-muted)}.btn .ui-icon,.dropdown-item .ui-icon{width:16px;height:16px}.btn-icon-dots .ui-icon{width:18px;height:18px}.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:28px}.paper-faq,.paper-page{padding-top:24px}.paper-page .paper-page-lede{margin-bottom:16px;overflow-wrap:anywhere}.paper-page-title{overflow-wrap:anywhere}.anonymize-page .form-control,.paper-page .form-control{min-height:40px;font-family:var(--font-sans);font-size:14px;border-radius:var(--radius-control)}.anonymize-page textarea.form-control,.paper-page textarea.form-control{height:auto}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);border-radius:var(--radius-button);gap:6px}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm,.status-bar-actions .btn{min-height:var(--button-compact-height);padding:5px 10px;font-size:13px;border-radius:6px}.anonymize-page .btn-ink,.paper-page .btn-ink{min-height:40px;padding:9px 15px}.btn-hero>i,.btn>.project-type-svg,.btn>.ui-icon,.btn>i{width:16px;height:16px;margin:0!important;flex-shrink:0}.btn.dropdown-toggle::after{margin-left:0}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.disabled:hover,.btn:disabled:hover{filter:none}.paper-page .btn.btn-link{background:0 0;border-color:transparent}.auth-continue.btn{min-height:44px;padding:11px 16px!important}.anonymize-page .btn.btn-icon,.paper-page .btn.btn-icon{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}.paper-page .btn.btn-icon-dots{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;background:0 0;color:var(--ink-muted)}.paper-page .btn-icon-dots:hover{background:var(--accent-soft);color:var(--accent)}.paper-page .btn-group .btn-primary:active,.paper-page .btn-group .btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.paper-page .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0;margin-bottom:12px}.paper-page .paper-field-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.paper-tabs .paper-tab{min-height:44px}.paper-pill,.status-pill{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-meta-rule{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;gap:12px 24px}.paper-meta-rule b:not(.commit-hash){font-family:var(--font-sans);font-weight:500}.connections-grid{gap:16px}.connections-grid>section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px}.connections-heading{margin-bottom:24px}.claim-page .claim-form,.status-page>.paper-settings-section{padding:20px;margin-top:24px;border:1px solid var(--border-color);border-radius:var(--radius-surface);background:var(--paper-card)}.claim-page .claim-form{max-width:640px}.status-page .anonymize-submit-bar{background:0 0;gap:8px;flex-wrap:wrap}.anonymize-landing{padding-top:32px}.paper-settings .quota-usage{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.paper-settings .quota-usage .quota-item+.quota-item{padding-top:0;border-top:0;padding-left:16px;border-left:1px solid var(--border-color)}.paper-settings .quota-usage .quota-header{flex-direction:row;align-items:center;flex-wrap:wrap}.paper-settings .quota-usage .quota-value{white-space:normal;flex-wrap:wrap}.paper-faq-hero{padding-bottom:24px;margin-bottom:24px}.paper-faq-eyebrow,.paper-faq-toc-head{font-family:var(--font-sans);font-size:12px;text-transform:none;letter-spacing:0;margin-bottom:8px}.paper-faq-title{font:600 28px/1.2 var(--font-sans);letter-spacing:-.025em;max-width:720px;margin-bottom:12px}.paper-faq-title em{font-style:normal}.paper-faq-lede{font-size:14px}.paper-faq-body{grid-template-columns:180px minmax(0,1fr);gap:40px}.faq-section h4.faq-cat{font:600 18px/1.4 var(--font-sans);padding-bottom:12px}.faq-section h4.faq-cat .ui-icon{display:none}.faq-section .panel-group{margin-bottom:32px}.faq-section .panel-default .panel-title a{font:500 15px/1.5 var(--font-sans);padding:16px 0 16px 28px;min-height:44px}.faq-section .panel-default .panel-title a:after{top:16px}.paper-empty-title{font:600 32px/1.2 var(--font-sans);letter-spacing:-.025em}.paper-empty-title em{font-style:normal}.btn-hero{justify-content:center;gap:8px;min-height:48px;padding:13px 20px;font-size:15px;line-height:20px;background:var(--accent);border-color:var(--accent);color:#fff;border-radius:var(--radius-button)}.dark-mode .btn-hero{color:#1a1815}.btn-hero:hover{background:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .btn-hero:hover{color:#1a1815}.paper-table:not(.paper-table-dashboard){border-left:0;border-right:0;border-radius:0}.paper-table:not(.paper-table-dashboard) .paper-table-head{border-radius:0}.paper-table .cell-anon{gap:8px}.paper-table .cell-anon .anon-text{flex:1}.paper-table-conferences .cell-anon .repo-name{font-family:var(--font-sans);font-weight:600}.paper-table .anon-sub>a,.paper-table .anon-sub>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.paper-table .anon-sub .ui-icon{width:14px;height:14px}.paper-page .filter-chip{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-page .filter-chip-close .ui-icon{width:12px;height:12px}.admin-nav{gap:4px;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 8px;background:0 0}.admin-nav a{font-family:var(--font-sans);font-size:13px;letter-spacing:0;text-transform:none;border-radius:6px;min-height:40px;padding:8px 12px}.admin-nav a.active{background:var(--accent-soft);color:var(--accent)}.admin-nav .ui-icon{width:16px;height:16px}.admin-filter-toolbar{background:0 0;border:0;padding:0}.admin-filter-inline>label,.admin-filter-inline>span{font-family:var(--font-sans);text-transform:none;letter-spacing:0}.admin-summary .summary-total{font-family:var(--font-sans);font-size:18px;font-weight:600}.admin-summary .summary-pill{font:500 13px/20px var(--font-sans);min-height:32px;padding:5px 10px;border-radius:6px}.admin-summary .summary-pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.admin-summary .summary-pill .count{font-family:var(--font-sans)}.admin-active-chip{font-family:var(--font-sans);font-size:12px}.admin-active-chip button .ui-icon{width:12px;height:12px}.user-detail-card .user-header h2{font:600 20px/1.4 var(--font-sans)}.errors-page .errors-toolbar .select-wrap label,.errors-page .volume-head,.overview-page .ov-panel-meta,.paper-detail-grid .detail-label,.paper-progress .paper-progress-label,.status-page .paper-error-eyebrow,.user-detail-grid .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-chart-title,.overview-page .ov-panel-title,.paper-error-title{font:600 16px/1.4 var(--font-sans)}.paper-error-head>.ui-icon,.paper-ratelimit-head>.ui-icon{margin-top:3px;color:var(--status-error)}.paper-ratelimit-head>.ui-icon{color:var(--status-progress)}.errors-page .seg-tabs{border-radius:var(--radius-control)}.errors-page .seg-tabs button{min-height:36px;padding:7px 12px;font:500 14px/20px var(--font-sans)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.errors-page .errors-list,.errors-page .kpi-card:hover,.errors-page .volume-chart,.overview-page .ov-chart-card,.overview-page .ov-panel-card{box-shadow:none}.errors-page .kpi-value,.overview-page .ov-daily-value,.overview-page .ov-kpi-value,.q-card-count,.user-hero-name{font-family:var(--font-sans);font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.errors-page .kpi-label,.overview-page .ov-daily-label,.overview-page .ov-kpi-label,.q-card-name,.q-section-label,.user-hero-details .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-daily-card{background:var(--paper-card);box-shadow:none;border-radius:var(--radius-surface)}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--accent)}.errors-page .kpi-card,.overview-page .ov-kpi-card{box-shadow:none;border-radius:var(--radius-surface)}.q-card{border-radius:var(--radius-surface)}.q-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.q-range-btns{border-radius:var(--radius-control)}.q-job-detail-actions .btn,.q-range-btns .btn{font-family:var(--font-sans);font-size:13px}.q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}@media (max-width:900px){.paper-settings .quota-usage{grid-template-columns:1fr;gap:16px}.paper-settings .quota-usage .quota-item+.quota-item{padding-left:0;border-left:0;border-top:1px solid var(--border-color);padding-top:16px}.paper-table:not(.paper-table-dashboard) .paper-table-row{gap:4px 8px!important;padding:8px 12px}.paper-table:not(.paper-table-dashboard) .cell-anon{flex:1 1 calc(100% - 52px);order:1}.paper-table:not(.paper-table-dashboard) .cell-actions{order:2;flex:0 0 44px}.paper-table .admin-users-row>[role=cell]:first-child,.paper-table.paper-table-repos.has-bulk .paper-table-row>[role=cell]:first-child{flex:0 0 24px;order:0}.paper-table .admin-users-row .cell-anon,.paper-table.paper-table-repos.has-bulk .cell-anon{flex-basis:calc(100% - 84px)}.paper-table:not(.paper-table-dashboard) .cell-anon .anon-sub{font-size:12px;gap:6px}.paper-table:not(.paper-table-dashboard) .cell-status .status-sub{font-size:12px}.paper-table .cell-expires::before,.paper-table .cell-views::before{content:none}.paper-table .cell-expires .mobile-meta-icon,.paper-table .cell-views .mobile-meta-icon{display:inline-block;width:14px;height:14px}.paper-faq-body{grid-template-columns:1fr;gap:24px}}@media (max-width:767px){.paper-faq,.paper-page{padding-top:20px}.anonymize-page .paper-page-title,.paper-faq-title,.paper-page .paper-page-title,.paper-page.admin-page .paper-page-title{font-size:24px}.anonymize-page .form-control,.paper-page .form-control{min-height:44px}.anonymize-page .btn,.connection-link,.draft-discard,.paper-faq-toc a,.paper-page .btn,.paper-settings-toc nav a{min-height:44px}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:44px;padding:11px 14px;font-size:14px;line-height:20px;white-space:normal}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm{min-height:44px;padding:11px 12px;font-size:14px}.anonymize-page .btn.btn-icon,.copy-link-inline,.paper-page .btn.btn-icon,.paper-page .btn.btn-icon-dots,.project-close{width:44px;height:44px;min-width:44px;min-height:44px;padding:0}.dashboard-page .dashboard-filter-row .btn-group .btn,.dashboard-page .dashboard-filter-row .dropdown-toggle{height:auto;min-height:44px;font-size:14px;padding:11px 10px}.dashboard-heading-actions .btn-ink{padding:11px 16px}.dashboard-page .dashboard-filters-toggle{padding:11px 10px}.errors-page .btn-icon,.pr-title-row .btn,.status-bar-actions .btn{min-width:44px;min-height:44px;padding:0}.status-bar-actions .btn{width:44px;height:44px}.errors-page .seg-tabs button,.paper-tab{min-height:44px}.errors-page .seg-tabs button{padding:11px 12px}.status-bar-actions{flex-wrap:wrap;max-width:100%}.leftCol-close,.tree-search-clear{min-width:44px;min-height:44px}.anonymize-landing{padding:20px 18px}.anonymize-landing .repo-access-switch button,.source-url-label-row .repo-access-switch button{min-height:44px;padding:11px 10px;font-size:13px}.paper-settings-body{margin-top:16px;padding-top:0;gap:16px}.paper-settings-toc nav{gap:0 12px}.paper-settings-toc nav a{display:inline-flex;align-items:center}.paper-faq{padding-left:18px;padding-right:18px}.paper-faq-toc nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:0 16px}.paper-faq-toc a{display:inline-flex;align-items:center;padding:8px 0;border-left:0;border-bottom:2px solid transparent;margin-left:0}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{border-bottom-color:var(--accent);color:var(--accent)}.claim-page .claim-form,.status-page>.paper-settings-section{padding:16px;margin-top:16px}.admin-nav{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:4px;max-width:100%;margin:8px 0 16px}.admin-nav a{flex-shrink:0;min-height:44px}.admin-summary .summary-pill{min-height:44px;padding:11px 12px;font-size:14px}.admin-active-chip button{min-width:44px;min-height:44px}.admin-filter-row{gap:8px}.admin-filter-row .admin-filter-inline{gap:8px;flex-wrap:wrap}.errors-page .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}.q-cards{flex-direction:row}.q-card{min-width:130px}.q-header-actions{flex-wrap:wrap;gap:8px}}.paper-page.container:not(.auth-page){max-width:1180px}.paper-page>.row{margin-left:0;margin-right:0}.paper-page>.row>.w-100,.paper-page>.row>[class*=col]{padding-left:0;padding-right:0}.anonymize-landing{align-items:flex-start}.status-page .paper-support-grid{margin-bottom:0}.explorer-content .ace_editor{font-family:var(--font-mono);line-height:1.6}.dark-mode .explorer-content .ace-nord-dark,.dark-mode .explorer-content .ace-nord-dark .ace_gutter{background:var(--main-bg-color)}.explorer-content .file-content.markdown-body{max-width:960px;padding:32px 40px 96px}.leftCol-project-header .project-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.file-error{font-size:inherit;font-weight:inherit;text-align:left}.file-error-card{width:100%;max-width:520px;margin-top:0}.file-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.file-error-actions{display:flex;gap:8px;margin-top:16px}.file-error .paper-empty-title{font-size:20px;text-align:center}@media (min-width:992px){.leftCol-foot{padding-bottom:72px}}.explorer-content .ace-chrome,.explorer-content .ace-chrome .ace_gutter{background:var(--main-bg-color)}@media (max-width:991px){.explorer-content .file-content.markdown-body{padding:20px 16px 96px}.anonymize-landing{padding:20px 18px}.anonymize-landing-inner{padding:0}.paper-faq-toc nav,.paper-settings-toc nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.paper-faq-toc nav a,.paper-settings-toc nav a{flex-shrink:0;white-space:nowrap}.paper-faq-body,.paper-settings-body{grid-template-columns:minmax(0,1fr)}.paper-faq-toc,.paper-settings-toc{position:static}.paper-faq-toc nav,.paper-settings-toc nav{display:flex;flex-direction:row;gap:0 16px}.paper-faq-toc nav a,.paper-settings-toc nav a{display:inline-flex;align-items:center;padding:8px 0;margin-left:0;border-left:0;border-bottom:2px solid transparent}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover,.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--accent)}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{justify-content:flex-start;gap:6px}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle::after{margin-left:auto}}@media (max-width:480px){.paper-page .paper-page-lede{display:block;-webkit-line-clamp:unset;overflow:visible}}.navbar .btn-signin,.navbar .btn-signin:hover{background:var(--accent);border-color:var(--accent);color:#fff!important}.dark-mode .navbar .btn-signin,.dark-mode .navbar .btn-signin:hover{color:#1a1815!important}.navbar .btn-signin:hover{filter:brightness(.94)}.paper-progress .paper-progress-bar,.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--accent)}.paper-progress .paper-progress-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-error-eyebrow,.paper-support-card .paper-support-eyebrow{font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}.leftCol-foot .last-update{font-family:var(--font-sans);font-size:11px;letter-spacing:0}.paper-proof-venues span{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--ink-soft)}.markdown-body mark.redaction{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.ace_marker-layer .ace_redaction{position:absolute;background:var(--accent-soft);border-radius:3px}.leftCol-project-header{flex-wrap:wrap;row-gap:2px}.project-expiry{flex:1 0 100%;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.project-expiry .ui-icon{width:12px;height:12px}.status-bar-actions .btn-icon-only{width:32px;padding:0;justify-content:center}.share-link-row{display:flex;gap:8px;margin-top:4px}.share-link-input{flex:1;min-width:0;font-family:var(--font-mono);font-size:14px;background:var(--paper-bg-alt)}.share-link-row .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;min-width:112px;justify-content:center}.share-link-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-link-actions .btn{display:inline-flex;align-items:center;gap:6px}.status-page .paper-support-grid{gap:0 32px}.status-page .paper-support-card{padding:16px 0 0;border:0;border-top:1px solid var(--border-color);border-radius:0;background:0 0}.status-page .paper-support-card:hover{border-color:var(--color)}@media (min-width:992px){.paper-table .cell-expires{white-space:nowrap}}.paper-settings .paper-settings-main .paper-settings-section{background:0 0;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 28px;margin-bottom:28px}.paper-settings .paper-settings-main .paper-settings-section:last-of-type{border-bottom:0}@media (max-width:991px){.paper-settings .paper-settings-main .paper-settings-section{padding:0 0 20px;margin-bottom:20px}.share-link-row{flex-direction:column}.share-link-actions{flex-direction:column}.share-link-actions .btn{justify-content:center}.status-page .paper-support-grid{row-gap:20px}}.paper-page .q-range-btns{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card);overflow:visible}.paper-page .q-range-btns .btn,.paper-page .q-range-btns .btn+.btn{min-height:0;height:28px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.paper-page .q-range-btns .btn:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}.q-header-actions>.btn{height:34px;min-height:34px}.paper-page .btn.btn-danger-soft{background:0 0;border-color:var(--status-error);color:var(--status-error)}.paper-page .btn.btn-danger-soft:hover{background:var(--status-error-soft-hover);border-color:var(--status-error);color:var(--status-error)}.q-auto-refresh,.q-section-label,.q-state-chip{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.q-state-chip{font-size:12px;text-transform:capitalize}.overview-page .ov-ebar-fill{display:block}.paper-table .paper-table-row.repo-error{border-left:0;box-shadow:inset 2px 0 0 var(--status-error);padding-left:16px}.admin-page .q-table th,.admin-page .type-badge,.admin-page .user-detail-section h2,.admin-page section>h2,.admin-page th,.admin-page>h2,.errors-page .col-count,.errors-page .col-mod,.errors-page .col-msg,.errors-page .col-sev,.errors-page .col-status,.errors-page .col-when,.overview-page .ov-chart-legend,.overview-page .ov-ebar-label,.overview-page .ov-route-n,.overview-page .ov-route-name,.q-card-sub,.q-delay-hint,.q-legend-completed,.q-legend-exec,.q-legend-failed,.q-section-right,.q-stat-label,.user-detail-grid .detail-label{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.admin-page th,.errors-page [class^=col-]{font-size:12px;font-weight:500;color:var(--ink-muted)}.q-card-sub,.q-stat-label,.user-detail-grid .detail-label{font-size:12px}.q-stat-value{font-family:var(--font-sans);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.q-state-badge{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:capitalize}.admin-page .type-badge{font-size:12px;text-transform:none}.errors-page .col-sev span,.errors-page .sev-label{text-transform:capitalize}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--color)}.dark-mode .overview-page .ov-spark-fill-alt,.dark-mode .overview-page .ov-spark-fill-new-user,.dark-mode .overview-page .ov-spark-fill-user,.overview-page .ov-spark-fill-alt,.overview-page .ov-spark-fill-new-user,.overview-page .ov-spark-fill-user{background:var(--accent)}.dark-mode .overview-page .ov-dot-new-user-fill,.dark-mode .overview-page .ov-dot-ok-fill,.dark-mode .overview-page .ov-dot-user-fill,.overview-page .ov-dot-new-user-fill,.overview-page .ov-dot-ok-fill,.overview-page .ov-dot-user-fill{background:var(--accent)}.errors-page .seg-tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card)}.errors-page .seg-tabs button,.errors-page .seg-tabs button+button{min-height:0;height:30px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.errors-page .seg-tabs button:hover{background:var(--hover-bg-color);color:var(--color)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.user-detail-card .user-header .status-dot-wrap{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-soft)}.user-detail-card .user-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-page .paper-table .cell-anon .anon-sub{flex-wrap:wrap;row-gap:2px}.admin-page .paper-table .anon-sub>a,.admin-page .paper-table .anon-sub>span{flex:0 1 auto;max-width:100%;white-space:nowrap}.admin-page .paper-table .cell-views .mobile-meta-icon{margin-right:4px}.q-jobs{overflow-x:auto}.q-job-detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.admin-section-header h2{font-family:var(--font-sans);font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--color)}.errors-page .sev-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0} \ No newline at end of file + */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-regular-400.eot);src:url(../fonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.woff2) format("woff2"),url(../fonts/fa-regular-400.woff) format("woff"),url(../fonts/fa-regular-400.ttf) format("truetype"),url(../fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.nb-notebook{line-height:1.5}.nb-stderr,.nb-stdout{white-space:pre-wrap;margin:1em 0;padding:.1em .5em}.nb-stderr{background-color:#faa}.nb-cell+.nb-cell{margin-top:.5em}.nb-output table{border:1px solid #000;border-collapse:collapse}.nb-output th{font-weight:700}.nb-output td,.nb-output th{border:1px solid #000;padding:.25em;text-align:left;vertical-align:middle;border-collapse:collapse}.nb-notebook blockquote{border-left:5px solid #ccc;margin-left:0;padding-left:1em}.nb-cell{position:relative}.nb-raw-cell{white-space:pre-wrap;background-color:#f5f2f0;font-family:Consolas,Monaco,'Andale Mono',monospace;padding:1em;margin:.5em 0}.nb-output{min-height:1em;width:100%;overflow-x:scroll;border-right:1px dotted #ccc}.nb-output img{max-width:100%}.nb-input:before,.nb-output:before{position:absolute;font-family:monospace;color:#999;left:-7.5em;width:7em;text-align:right}.nb-input:before{content:"In [" attr(data-prompt-number) "]:"}.nb-output:before{content:"Out [" attr(data-prompt-number) "]:"}// Fix pandas dataframe formatting div[style="max-height:1000px;max-width:1500px;overflow:auto;"]{max-height:none!important}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.10"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.mermaid{text-align:center;margin:1em 0;overflow:auto}.mermaid svg{max-width:100%;height:auto}.dark-mode .mermaid{filter:invert(1) hue-rotate(180deg)}.dark-mode .mermaid svg{background:0 0}.dark-mode .mermaid .edgeLabel,.dark-mode .mermaid .nodeLabel{filter:invert(1) hue-rotate(180deg)}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{stroke-width:2px}.mermaid .flowchart-link{stroke-width:2px}.mermaid .actor{fill:#f9f9f9;stroke:#333;stroke-width:2px}.mermaid .messageLine0,.mermaid .messageLine1{stroke:#333;stroke-width:1.5px}.mermaid .section0,.mermaid .section1,.mermaid .section2,.mermaid .section3{opacity:.8}.mermaid .pieChart .slice{opacity:.9}.markdown-body .mermaid{background:0 0;border:none;padding:10px}.mermaid .error{color:#d32f2f;font-family:monospace;font-size:12px;padding:10px;border:1px solid #d32f2f;border-radius:4px;background-color:#ffebee}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2::before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.dark-mode{--canvas-bg-color:#1B1916;--sidebar-bg-color:#1A1918;--main-bg-color:#1B1916;--header-bg-color:#1A1918;--hover-bg-color:rgba(255, 255, 255, 0.05);--header-color:#FAF9F6;--color:#D6D1C5;--link-color:#A7B2FF;--link-hover-color:#C8CEFF;--border-color:#33302B;--border-soft:#2A2825;--btn-color:#FAF9F6;--input-color:#E6E1D8;--input-bg:#25231F;--primary-bg:#FAF9F6;--primary-hover-bg:#FFFFFF;--primary-color:#1A1815;--primary-active-color:#1A1815;--accent:#A7B2FF;--accent-soft:rgba(167, 178, 255, 0.12);--ink-muted:#A39D92;--ink-faint:#8A857C;--ink-soft:#B5AFA2;--status-ready:#5FB27A;--status-progress:#E0A94A;--status-error:#F08A82;--status-inactive:#8A857C;--status-error-soft:rgba(240, 138, 130, 0.08);--status-error-soft-hover:rgba(240, 138, 130, 0.14);--admin-nav-bg:#1A1918;--admin-nav-active:rgba(167, 178, 255, 0.12);--admin-stat-bg:#25231F;--paper-card:#25231F;--paper-bg-alt:#201E1B;--highlight:#3A341E;background-color:var(--canvas-bg-color);color:var(--color)}body{--canvas-bg-color:#FAF9F6;--sidebar-bg-color:#FFFFFF;--header-bg-color:#FAF9F6;--header-color:#1A1815;--main-bg-color:#FAF9F6;--hover-bg-color:rgba(26, 24, 21, 0.05);--input-color:#1A1815;--color:#1A1815;--link-color:#3B4AD6;--link-hover-color:#2E3BB8;--border-color:#E6E1D8;--border-soft:#EDE9E1;--btn-color:#1A1815;--input-bg:#FFFFFF;--primary-bg:#1A1815;--primary-hover-bg:#000000;--primary-color:#FAF9F6;--primary-active-color:#FAF9F6;--accent:#3B4AD6;--accent-soft:#EEF0FF;--ink-muted:#6F6A61;--ink-faint:#8A857C;--ink-soft:#4A4641;--paper-bg-alt:#F3F1EC;--paper-card:#FFFFFF;--highlight:#FFF3C4;--status-ready:#2F7A44;--status-progress:#946512;--status-error:#B42318;--status-inactive:#8A857C;--status-error-soft:rgba(180, 35, 24, 0.04);--status-error-soft-hover:rgba(180, 35, 24, 0.08);--radius-control:6px;--radius-button:8px;--button-height:36px;--button-font-size:14px;--button-line-height:20px;--button-padding-x:13px;--button-compact-height:32px;--radius-surface:10px;--font-serif:'Instrument Serif','Iowan Old Style',Georgia,serif;--font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,sans-serif;--font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;background-color:var(--canvas-bg-color);color:var(--color);font-family:var(--font-sans);font-size:14px;letter-spacing:-.005em;line-height:1.5}.fadeIn{opacity:1;animation-name:fadeInOpacity;animation-iteration-count:1;animation-timing-function:ease-in;animation-duration:.6s}@keyframes fadeInOpacity{0%{opacity:0}100%{opacity:1}}.btn:active,.btn:focus{box-shadow:none}:focus:not(:focus-visible){outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,.dropdown-item:focus-visible,.form-control:focus-visible{outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}input:active,input:hover{box-shadow:none!important}input:-webkit-autofill,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{border-color:var(--border-color);-webkit-text-fill-color:var(--color);-webkit-box-shadow:none;transition:background-color 1000s ease-in-out 0s}.custom-select,.form-control,input:-internal-autofill-selected{color:var(--input-color);background-color:var(--input-bg)!important;border-color:var(--border-color)}.form-control:focus{border-color:var(--border-color)}body,html{position:relative;height:100%;overflow-x:hidden}body{overflow-y:hidden}#app{flex:1 1 auto;min-height:0}.app-header{flex:0 0 auto}.app-view{display:block;flex:1 1 auto;min-height:0;overflow-x:hidden!important;overflow-y:auto!important;max-width:100%}.markdown-body a,a{color:var(--link-color)}.markdown-body a:hover,a:hover{text-decoration:none;color:var(--link-hover-color)}.dropdown-menu a.dropdown-item{color:var(--color)}.dropdown-menu a.dropdown-item:hover{color:var(--color);text-decoration:none}.markdown-body .emoji{height:1.3em;margin:0;vertical-align:-.1em}.navbar.navbar-expand-lg{background:var(--header-bg-color)!important;border-bottom:1px solid var(--border-color);transition:background-color .5s ease;padding:10px max(20px,calc((100vw - 1200px)/ 2));font-family:var(--font-sans)}.navbar-toggler{border:1px solid var(--border-color)!important;color:var(--color)!important}.navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}.navbar .navbar-nav{align-items:center}.navbar .nav-link{display:inline-flex;align-items:center;font-size:13px;color:var(--ink-muted)!important;padding:6px 0!important;margin:0 12px;border-bottom:1px solid transparent;letter-spacing:-.005em;line-height:1}.navbar .nav-link:hover{color:var(--color)!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--color)}.navbar .nav-link.nav-icon{padding:0!important;margin:0 8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:15px;line-height:1}.navbar #navbarSupportedContent{align-items:center}.navbar-brand{font-family:var(--font-serif)!important;font-size:20px!important;letter-spacing:-.01em;color:var(--color)!important;padding-right:18px;margin-right:12px;border-right:1px solid var(--border-color)}.navbar-brand em,.navbar-brand i{font-style:italic;font-weight:400}.navbar-dark .navbar-toggler{border-color:var(--border-color);color:var(--color)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar .btn-signin{display:inline-flex;align-items:center;height:32px;padding:0 14px!important;margin-left:6px;border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color)!important;border-radius:6px;font-size:13px;font-weight:500;line-height:1}.navbar .btn-signin:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color)!important}.navbar .nav-support{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;order:3;gap:6px;min-height:36px;margin-left:12px;padding:0 12px;border:1px solid var(--border-color);border-radius:8px;color:var(--color);font-size:13px;font-weight:500;text-decoration:none}.navbar .nav-support:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}@media (max-width:991px){.navbar .nav-support{order:0;width:44px;min-height:44px;margin:0 8px 0 auto;padding:0}.navbar .nav-support-label{display:none}[class*=floatingchat-container-wrap],iframe.floatingchat-container{display:none!important}}.navbar .user-chip{display:inline-flex!important;align-items:center;gap:8px;padding:4px 12px 4px 6px!important;margin-left:6px;border:1px solid var(--border-color);border-radius:999px;background:var(--sidebar-bg-color);font-size:13px;color:var(--color)!important}.navbar .user-chip:hover{background:var(--hover-bg-color)}.navbar .user-chip img{width:22px;height:22px}.navbar .user-chip .user-chip-name{color:var(--color);font-weight:500}.navbar .user-chip::after{color:var(--ink-muted)}#navbarSupportedContent{padding-right:0}.generalMessage{display:block;text-align:center;color:var(--header-color)}.rgba-gradient{background:var(--canvas-bg-color);color:var(--color)}.paper-landing{overflow-x:clip}.paper-wrap{max-width:1140px;margin-left:auto;margin-right:auto;padding-left:32px;padding-right:32px}.paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.paper-hero{max-width:1140px;margin:0 auto;padding:64px 32px 0;display:grid;grid-template-columns:.95fr 1.05fr;gap:48px;align-items:center}.paper-hero h1.hero-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.4vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:14px 0 0;color:var(--color);text-wrap:balance}.paper-hero h1 .accent{color:var(--accent);font-style:italic}.hero-subtitle{margin-top:18px;font-size:18px;line-height:1.55;color:var(--ink-soft);max-width:30em;text-wrap:pretty}.paper-cta-row{display:flex;flex-wrap:wrap;gap:18px;align-items:center;margin-top:26px}.btn-hero{display:inline-flex;align-items:center;font-family:var(--font-sans);border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control);letter-spacing:-.005em;transition:background .15s,border-color .15s,transform .1s}.btn-hero:hover{background:var(--primary-hover-bg);border-color:var(--primary-hover-bg);color:var(--canvas-bg-color);text-decoration:none;transform:translateY(-1px)}.btn-hero-ghost{background:0 0;border:1px solid var(--border-color);color:var(--color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control)}.btn-hero-ghost:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}.paper-link-arrow{font-size:14px;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-color)}.paper-link-arrow:hover{color:var(--color);text-decoration-color:var(--color)}.paper-reassure{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--ink-muted)}.paper-reassure li::before{content:"\2713";color:var(--status-ready);margin-right:6px;font-size:11px}.paper-frame{border-radius:var(--radius-surface);background:var(--paper-card);border:1px solid var(--border-color);box-shadow:0 24px 60px rgba(26,24,21,.1),0 2px 6px rgba(26,24,21,.04);overflow:hidden}.dark-mode .paper-frame{box-shadow:0 24px 60px rgba(0,0,0,.45)}.paper-frame-bar{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-bottom:1px solid var(--border-soft);background:var(--paper-bg-alt);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted)}.paper-frame-bar .dots{display:flex;gap:5px}.paper-frame-bar .dots i{width:8px;height:8px;border-radius:50%;background:var(--border-color)}.paper-frame-bar .url{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-frame img{display:block;width:100%;height:auto}.paper-hero-shot .paper-frame{width:112%}.paper-proof{margin-top:64px;padding-top:18px;padding-bottom:18px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:12px 30px;align-items:center}.paper-proof-venues{display:flex;gap:22px;align-items:center;font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--ink-soft)}.paper-proof-venues i{font-style:normal;font-family:var(--font-sans);font-size:14px;color:var(--ink-faint)}.paper-stats{margin-top:12px;padding-top:22px;border-top:1px solid var(--border-color)}.paper-stats-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:14px}.paper-stats-meta-right{display:inline-flex;align-items:center;gap:6px}.paper-stats-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--status-ready)}.paper-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.paper-stat-card{display:flex;flex-direction:column;padding:22px 26px 20px 0;margin-right:26px;border-right:1px solid var(--border-color);min-width:0}.paper-stat-card:last-child{border-right:0;margin-right:0;padding-right:0}.paper-stat-value{font-size:44px;font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--color);font-variant-numeric:tabular-nums}.paper-stat-label{margin-top:6px;font-size:13px;color:var(--ink-soft)}.paper-stat-bars{display:block;width:100%;height:34px;margin-top:18px;overflow:visible}.paper-stat-bars rect{fill:var(--border-color)}.paper-stat-bars rect.is-latest{fill:var(--accent)}.paper-stat-delta{margin-top:10px;font-family:var(--font-mono);font-size:11px;color:var(--status-ready)}.paper-section-head{margin-top:110px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}.paper-qa h2,.paper-section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(2rem,4.2vw,3.25rem);line-height:1.05;letter-spacing:-.02em;margin:10px 0 0;color:var(--color);text-wrap:balance}.paper-feature-title em,.paper-qa h2 em,.paper-section-head h2 em{font-style:italic;color:var(--accent)}.paper-section-head p{font-size:15px;color:var(--ink-soft);max-width:32em;margin:0;line-height:1.6}.paper-preview{margin-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.paper-preview .pane{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);overflow:hidden;min-width:0}.paper-preview .pane-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border-soft)}.paper-preview .pane-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap}.paper-preview .pane-url{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.paper-preview .pane-body{padding:16px 18px;font-family:var(--font-mono);font-size:13px;line-height:1.9;color:var(--ink-soft)}.paper-preview .pane-body strong{color:var(--color);font-weight:600}.paper-preview .tok{color:var(--ink-faint)}.paper-preview .redact{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:0 5px}.paper-features{margin-top:28px;padding-top:28px;border-top:1px solid var(--border-color);display:grid;grid-template-columns:5fr 7fr;gap:48px;align-items:start}.paper-features-list{display:flex;flex-direction:column}.paper-feature{border-left:2px solid var(--border-soft);padding:16px 0 16px 20px;transition:border-color .2s}.paper-feature.is-on{border-left-color:var(--color)}.paper-feature-tab{all:unset;display:block;width:100%;cursor:pointer;color:inherit;border-radius:4px}.paper-feature-tab:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.paper-feature-tab .paper-eyebrow{display:block;margin-bottom:6px}.paper-feature-title{display:block;font-family:var(--font-serif);font-size:24px;line-height:1.15;letter-spacing:-.015em;color:var(--ink-muted);transition:color .2s}.paper-feature-title em{color:inherit}.paper-feature-tab:hover .paper-feature-title,.paper-feature.is-on .paper-feature-title{color:var(--color)}.paper-feature.is-on .paper-feature-title em{color:var(--accent)}.paper-feature-more{display:none}.paper-feature.is-on .paper-feature-more{display:block}.paper-feature-more .paper-feature-title-m{display:none}.paper-feature-more p{font-size:15px;color:var(--ink-soft);line-height:1.55;margin:10px 0 12px;max-width:30em}.paper-features-stage{min-width:0}.paper-feature-panel{animation:paper-feature-in .25s ease-out}@keyframes paper-feature-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.paper-feature-panel{animation:none}}.paper-crop{position:relative;height:380px;overflow:hidden;background:var(--paper-card)}.paper-crop img{position:absolute;left:0;top:0;max-width:none;height:auto;display:block}.paper-crop-anonymize img{width:150%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:160%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:150%;transform:translate(-6%,-9%)}.paper-qa{margin-top:110px;display:grid;grid-template-columns:1fr 1.4fr;gap:40px;align-items:start}.paper-qa h2{margin-bottom:12px}.paper-qa .q{border-top:1px solid var(--border-color);padding:18px 0}.paper-qa .q:last-child{border-bottom:1px solid var(--border-color)}.paper-qa .q a{display:block;font-weight:500;font-size:15px;color:var(--color);margin-bottom:6px}.paper-qa .q a:hover{color:var(--accent);text-decoration:none}.paper-qa .q p{margin:0;font-size:14px;color:var(--ink-soft);line-height:1.6}@media (max-width:1100px){.paper-hero-shot .paper-frame{width:100%}}@media (max-width:991px){.paper-hero{grid-template-columns:1fr;gap:36px;padding-top:40px}.paper-qa,.paper-section-head{grid-template-columns:1fr;gap:16px}.paper-stats-grid{grid-template-columns:1fr 1fr}.paper-stat-card:nth-child(2n){border-right:0;margin-right:0;padding-right:0}.paper-stat-card:nth-child(-n+2){border-bottom:1px solid var(--border-color)}}@media (max-width:767px){.paper-hero,.paper-wrap{padding-left:20px;padding-right:20px}.paper-hero h1.hero-title{font-size:clamp(2.4rem,11vw,3.25rem)}.hero-subtitle{font-size:16px}.paper-cta-row .btn-hero{width:100%;justify-content:center}.paper-proof{margin-top:48px}.paper-stat-card{padding:18px 16px 16px 0;margin-right:16px}.paper-stat-value{font-size:40px}.paper-qa,.paper-section-head{margin-top:72px}.paper-preview{grid-template-columns:1fr}.paper-preview .pane-body{font-size:12px;line-height:1.8}.paper-features{display:flex;flex-wrap:wrap;gap:0;padding-top:0;border-top:0;margin-top:24px}.paper-feature,.paper-features-list,.paper-features-stage{display:contents}.paper-feature-tab{order:1;flex:1 1 0;width:auto;padding:12px 0 10px;border-bottom:2px solid var(--border-color);border-radius:0;text-align:left}.paper-feature.is-on .paper-feature-tab{border-bottom-color:var(--color)}.paper-feature-tab .paper-eyebrow{margin:0;font-size:11px;letter-spacing:.08em}.paper-feature-tab .paper-feature-title{display:none}.paper-feature-panel{order:2;width:100%;margin-top:20px;animation:none}.paper-crop{height:240px}.paper-crop-anonymize img{width:230%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:240%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:220%;transform:translate(-3%,-9%)}.paper-feature-more{order:3;width:100%}.paper-feature.is-on .paper-feature-more{margin-top:18px}.paper-feature-more .paper-feature-title-m{display:block;font-size:28px;line-height:1.1}.paper-feature-more p{max-width:none}.paper-footer-inner>.paper-footer-brand{grid-column:1/-1}.paper-footer-foot{flex-direction:column;gap:6px}}.dropdown-menu{background-color:var(--paper-card,var(--main-bg-color))!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:8px!important;box-shadow:0 12px 28px rgba(26,24,21,.08),0 2px 6px rgba(26,24,21,.05)!important;padding:6px!important;font-family:var(--font-sans);font-size:13px;min-width:11rem}.dropdown-menu .dropdown-item{color:var(--color)!important;padding:7px 10px!important;border-radius:5px;font-size:13px}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color)!important;color:var(--color)!important}.dropdown-menu .dropdown-divider{border-top-color:var(--border-color)!important;margin:4px 2px}.dropdown-menu .dropdown-header{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.body,.file-content,.markdown-body{background-color:var(--main-bg-color)!important;color:var(--color)!important}.markdown-body table tr{background-color:var(--main-bg-color);border-top:1px solid var(--border-color)}.markdown-body table tr:nth-child(2n){background-color:var(--paper-bg-alt)}.markdown-body table td,.markdown-body table th{border:1px solid var(--border-color)}.file-content{padding:4px 7px;text-align:left;min-height:100%}.badge{font-size:75%;font-weight:500;padding:3px 8px;border-radius:10px;vertical-align:middle}.warning-feedback{width:100%;margin-top:.25rem;font-size:80%;color:#dc8e35}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--hover-bg-color)}.card-header .btn,.card-header .btn:focus,.card-header .btn:hover{border:none!important;background:0 0!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);vertical-align:middle;max-width:100%;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease;color:var(--btn-color);border:1px solid var(--border-color);background:var(--paper-card);border-radius:var(--radius-button);white-space:nowrap}.btn:active,.btn:hover{color:var(--btn-color);border:1px solid var(--border-color);background-color:var(--hover-bg-color);box-shadow:none!important}.btn.btn-primary{color:var(--primary-color);background-color:var(--primary-bg)}.btn.btn-primary:active,.btn.btn-primary:hover{color:var(--primary-active-color);background-color:var(--primary-hover-bg)!important}.btn::placeholder{color:var(--color);opacity:1}.white_border{border:1px solid #fff;color:#fff}.leftCol{display:flex;position:relative;flex:0 0 auto;width:100%;z-index:9;flex-direction:column}.card,.leftCol,.sidePanel{background-color:var(--sidebar-bg-color);border:1px solid var(--border-color)}@media (min-width:768px){.leftCol{flex:0 0 310px;width:310px;height:100%}}.leftCol-search{padding:10px 12px 0}.tree-search-box{display:flex;align-items:center;gap:8px;background:var(--canvas-bg-color);border:1px solid var(--border-color);border-radius:8px;padding:7px 10px;transition:border-color .15s}.tree-search-box:focus-within{border-color:var(--ink-muted)}.tree-search-icon{font-size:12px;color:var(--ink-muted);flex-shrink:0}.tree-search-input{flex:1;border:none;outline:0;background:0 0;font-family:var(--font-sans);font-size:13px;color:var(--color);min-width:0}.tree-search-input::placeholder{color:var(--ink-muted)}.tree-search-kbd{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:4px;padding:1px 6px;line-height:1.4;flex-shrink:0}.tree-search-clear{background:0 0;border:none;color:var(--ink-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.tree-search-clear:hover{color:var(--color)}.leftCol-project-header{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px 4px;gap:8px}.project-name{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.project-file-count{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);white-space:nowrap;flex-shrink:0}.files{position:relative;display:block;overflow:auto;height:100%;padding:4px 6px}.files ul{list-style:none;margin:0;padding:0}.files li ul{padding-left:8px;margin-left:7px;border-left:1px solid var(--border-color)}.files .folder>ul{display:none}.files .folder.open>ul{display:block}.files .file,.files .folder{position:relative;color:var(--ink-soft);cursor:pointer;word-break:break-all}.files a{display:flex;align-items:center;gap:4px;padding:1px 8px 1px 2px;font-family:var(--font-sans);font-size:13px;color:var(--ink-soft);border-radius:4px;text-decoration:none;line-height:1.5;position:relative}.files a:hover{background:var(--hover-bg-color);color:var(--color);text-decoration:none}.files:focus{outline:0}.files a.tree-focused{background:var(--hover-bg-color);color:var(--color)}.files .file.active>a{background:rgba(128,128,128,.15);color:var(--color)}.files .file.active>a .tree-icon-file{color:#5b7ba5}.files .file.active>a .tree-count{color:var(--ink-muted)}.tree-icon-file,.tree-icon-folder{display:inline-block;flex-shrink:0}.tree-icon-folder{width:14px;height:12px;color:var(--ink-muted);opacity:.75}.tree-icon-folder svg{display:block;width:100%;height:100%;fill:currentColor;fill-opacity:0;stroke:currentColor;stroke-width:1.2;stroke-linejoin:round}.files .folder.open>a .tree-icon-folder{color:#a07d2e;opacity:.9}.files .folder.open>a .tree-icon-folder svg{fill-opacity:.12}.dark-mode .files .folder.open>a .tree-icon-folder{color:#c9a03a}.tree-icon-file{width:16px;font-size:14px;text-align:center;color:#5b7ba5}.dark-mode .files .file.active>a .tree-icon-file,.dark-mode .tree-icon-file{color:#7ba3d0}.tree-toggle{display:inline-flex;align-items:center;justify-content:center;width:10px;height:14px;flex-shrink:0;opacity:.6}.tree-toggle::after{content:"";display:block;width:0;height:0;border-style:solid;border-width:3px 0 3px 4.5px;border-color:transparent transparent transparent var(--ink-muted);transition:transform .12s ease}.files .folder.open>a .tree-toggle::after{transform:rotate(90deg)}.tree-spacer{display:inline-block;width:10px;flex-shrink:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);flex-shrink:0;margin-left:auto;padding-left:8px;opacity:.7}.files .folder>a{color:var(--color)}.files .file::before,.files .folder::before{display:none}.files .folder>a::after{display:none}.tree-search-path{color:var(--ink-muted);font-size:11px}.tree-search-empty{padding:16px 12px;color:var(--ink-muted);font-size:13px;font-family:var(--font-sans);text-align:center}.leftCol{background:var(--paper-bg-alt,#f3f1ec);border-right:1px solid var(--border-color)}.dark-mode .leftCol{background:var(--sidebar-bg-color)}.status-bar{background:var(--canvas-bg-color);border-bottom:1px solid var(--border-color);padding:10px 14px}.paths .breadcrumb-item,.paths .breadcrumb-item a{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paths .breadcrumb-item.active,.paths .breadcrumb-item:last-child{color:var(--color)}.paths .breadcrumb-item+.breadcrumb-item::before{content:'/';color:var(--ink-muted)}.last-update{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);padding:8px 10px;border-top:1px solid var(--border-color);letter-spacing:.02em}.ace_editor{height:100%}.ace_scroller{cursor:default}.status-bar{display:flex;align-items:center;gap:12px;background-color:var(--canvas-bg-color);padding:10px 14px;margin:0;border-bottom:1px solid var(--border-color);border-radius:0;flex-shrink:0}.status-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.status-bar-actions .btn{display:inline-flex;align-items:center;gap:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;padding:4px 10px;font-size:13px;min-height:30px}.status-bar-actions .btn:hover{background:var(--hover-bg-color);color:var(--color)}.status-bar-actions .btn.btn-active{border-color:currentColor;font-weight:600}.paths{flex:1 1 auto;min-width:0;padding:0;margin:0;background-color:initial;border:none;border-radius:0;align-items:center;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.paths::-webkit-scrollbar{display:none}.paths a{color:var(--color)}.paths .breadcrumb-item{padding-left:3px}.paths .breadcrumb-item::before{padding-right:3px}.content{height:100%;overflow:scroll;padding-top:42px;background-color:var(--main-bg-color);text-align:center}.image-content{max-width:100%;max-height:100%;text-align:center;padding:4px}.pdf-viewer{display:flex;flex-direction:column;height:100%;min-height:0;background-color:var(--main-bg-color)}.pdf-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 8px;border-bottom:1px solid var(--border-color,rgba(0,0,0,.12))}.pdf-toolbar-group{display:inline-flex;align-items:center;gap:4px}.pdf-toolbar-right{margin-left:auto}.pdf-toolbar-btn{border:0;background:0 0;color:inherit;padding:4px 8px;border-radius:4px;font-size:13px;line-height:1.2;cursor:pointer}.pdf-toolbar-btn:hover:not(:disabled){background-color:rgba(128,128,128,.18)}.pdf-toolbar-btn:disabled{opacity:.4;cursor:default}.pdf-toolbar-zoom{min-width:52px;font-variant-numeric:tabular-nums}.pdf-toolbar-page{width:3.5em;text-align:right;padding:2px 4px;font-size:13px;color:inherit;background:0 0;border:1px solid var(--border-color,rgba(0,0,0,.2));border-radius:4px}.pdf-toolbar-count{font-size:13px;opacity:.75;font-variant-numeric:tabular-nums}.pdf-pages{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 0}.pdf-viewer-page{margin:0 auto 12px}.pdf-viewer-page canvas{display:block;box-shadow:0 1px 4px rgba(0,0,0,.25)}.pdf-viewer-error{padding:24px;text-align:center;font-weight:700}.html-doc{display:block;height:100%}.html-doc-frame{display:block;width:100%;height:100%;border:0;background-color:#fff}.file-error{font-weight:700;font-size:50px;text-align:center}pdfviewer{display:block;padding:15px}pdfpageviewer{display:block;width:100%;margin-bottom:10px}notebook{display:block;text-align:left;padding:15px}@media (min-width:768px){notebook{padding-left:100px}}.nb-output td,.nb-output th{border:1px solid var(--border-color)!important}.paper-faq{max-width:1180px;margin:0 auto;padding:48px 32px 80px;font-family:var(--font-sans)}.paper-faq-hero{padding-bottom:40px;border-bottom:1px solid var(--border-color);margin-bottom:36px}.paper-faq-eyebrow{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:32px}.paper-faq-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.5vw,4.6rem);line-height:1.03;letter-spacing:-.02em;color:var(--color);margin:0 0 22px;max-width:14em}.paper-faq-title em{font-style:italic;color:var(--color)}.paper-faq-lede{color:var(--ink-soft);font-size:18px;line-height:1.55;max-width:38em;margin:0}.paper-faq-lede a{color:var(--color);border-bottom:1px solid var(--color)}.paper-faq-lede a:hover{color:var(--accent);border-bottom-color:var(--accent)}.paper-faq-body{display:grid;grid-template-columns:220px 1fr;gap:60px;align-items:start}.paper-faq-toc{position:sticky;top:32px;font-size:14px}.paper-faq-toc-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--border-color)}.paper-faq-toc nav{display:flex;flex-direction:column}.paper-faq-toc nav a{color:var(--ink-soft);padding:8px 0 8px 14px;border-left:2px solid transparent;text-decoration:none;margin-left:-2px}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.faq-section{min-width:0}.faq-section>div{width:100%}.faq-section h4.faq-cat{font-family:var(--font-serif);font-weight:400;font-size:clamp(1.7rem,2.6vw,2.2rem);letter-spacing:-.015em;color:var(--color);margin:0 0 6px;padding-bottom:14px;border-bottom:1px solid var(--border-color)}.faq-section h4.faq-cat i{display:none}.faq-section .panel-group{margin-bottom:56px}.faq-section .panel-default .panel-title a{display:block;position:relative;padding:22px 0 22px 42px;font-family:var(--font-serif);font-weight:400;font-size:20px;line-height:1.35;letter-spacing:-.005em;color:var(--color);text-decoration:none;cursor:pointer}.faq-section .panel-default .panel-title a:hover{color:var(--accent)}.faq-section .panel-heading{background:0 0;padding:0!important;border:none}.faq-section .panel-default{background:0 0;border:none;border-bottom:1px solid var(--border-soft);border-radius:0;margin-bottom:0!important;box-shadow:none}.faq-section .panel-default .panel-title{margin-bottom:0}.faq-section .panel-default .panel-title a:after{content:"−";position:absolute;left:0;right:auto;top:22px;transform:none;font-family:var(--font-mono);font-size:18px;line-height:1.35;color:var(--ink-muted);float:none;margin:0;font-weight:400}.faq-section .panel-default .panel-title a.collapsed:after{content:"+"}.faq-section .panel-default .panel-body{padding:0 0 22px 42px!important;color:var(--ink-soft);font-size:15px;line-height:1.65;border-top:none;max-width:42em}.table{color:var(--color)}.dropdown-divider,.table td,.table th,hr{border-color:var(--border-color)}.table.repositories td{word-break:break-word}loc{display:block;position:relative;width:100%;height:5px}loc .lang{float:left;height:100%}.rounded-circle.fa{display:inline-block;font-size:75px;height:140px;width:140px;border:4px solid;line-height:140px;text-align:center}.featurette-divider{margin:4.5rem 0;border-color:var(--border-color)}.featurette-heading{font-family:var(--font-serif);font-weight:400;font-size:2rem;line-height:1.15;letter-spacing:-.02em;margin-bottom:14px;color:var(--color)}.dark-mode .shadow{box-shadow:none}.dark-mode .overflow-auto::-webkit-scrollbar{width:10px}.dark-mode .overflow-auto::-webkit-scrollbar-track{-webkit-box-shadow:none;background:inherit;border-radius:0}.dark-mode .overflow-auto::-webkit-scrollbar-thumb{border-radius:10px;border:1px solid var(--border-color);background-color:var(--hover-bg-color)}.dark-mode .rgba-gradient{background:linear-gradient(135deg,#2a2d4a,#151728)}.section-number{padding-right:10px;font-weight:700;font-style:italic}.org-subscript-child{font-size:85%}.highlighted-line{position:absolute;background:rgba(100,200,100,.5);z-index:20}code,pre{font-family:"Fira Code","Courier New",Courier,monospace;line-height:1.1;color:var(--color)}.diff-file,.diff-index,.diff-lines{background:rgba(172,172,172,.5)}.diff-add{background:rgba(100,200,100,.5)}.diff-remove{background:rgba(200,100,100,.5)}.dashboard-title{font-size:1.375rem;font-weight:600;letter-spacing:-.01em}.quota-row{display:flex;gap:16px;margin-bottom:16px;padding:0}.quota-item{flex:1;min-width:0}.quota-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.quota-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;opacity:.7}.quota-value{font-size:.8125rem;font-weight:500;font-variant-numeric:tabular-nums}.quota-progress{height:6px;border-radius:3px;background:var(--hover-bg-color)}.quota-progress .progress-bar{border-radius:3px}.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:.8125rem;font-weight:500;background:var(--primary-bg);color:var(--primary-color);border-radius:12px;line-height:1.4}.filter-chip-close{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:inherit;opacity:.7;cursor:pointer;padding:0;min-width:24px;min-height:24px;margin:-6px -6px -6px 0;font-size:1rem;line-height:1;border-radius:999px}.filter-chip-close:hover{opacity:1}.repo-list{list-style:none;padding:0;margin:0}.repo-list-item{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border-color);gap:12px}.repo-list-item:first-child{border-top:1px solid var(--border-color)}.repo-list-item.repo-inactive{opacity:.6}.repo-list-item-content{flex:1;min-width:0}.repo-list-item-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.repo-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color);word-break:break-word}.repo-name:hover{color:var(--accent)}.repo-source{font-size:.875rem;opacity:.8;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repo-date{opacity:.7}.repo-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.8125rem;opacity:.7}.repo-meta span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.repo-list-item-actions{flex-shrink:0;padding-top:2px;margin-left:14px}.repo-list-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;opacity:.5;font-size:.9375rem;list-style:none;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color)}.repo-list-empty i{font-size:1.75rem}.type-badge{display:inline-flex;align-items:center;gap:3px;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;padding:2px 8px;border-radius:4px;white-space:nowrap}.type-badge{font-family:var(--font-mono);letter-spacing:.06em;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-bg-alt,transparent)}.type-badge.type-pr,.type-badge.type-repo{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.dark-mode .type-badge.type-pr,.dark-mode .type-badge.type-repo{background:rgba(255,255,255,.06);color:var(--ink-muted);border-color:var(--border-color)}.type-badge.type-coauthor{background:rgba(99,102,241,.12);color:#4f46e5;border-color:rgba(99,102,241,.35);margin-left:6px}.dark-mode .type-badge.type-coauthor{background:rgba(129,140,248,.18);color:#a5b4fc;border-color:rgba(165,180,252,.45)}.btn-group .btn:not(.btn-primary){background:var(--hover-bg-color)}.anonymize-page{display:flex;flex-direction:column;min-height:0}.anonymize-landing{flex:1 1 0;min-height:min-content;display:flex;align-items:center;justify-content:center;padding:20px}.anonymize-landing-inner{width:100%;max-width:600px}.anonymize-landing-inner h2{font-weight:700}.anonymize-workspace{display:flex;flex-direction:column;flex:1 1 0;min-height:0;background:var(--canvas-bg-color)}.anonymize-topbar{background:var(--paper-card);border-bottom:1px solid var(--border-color);padding:18px 28px;flex:0 0 auto}.anonymize-topbar-inner{max-width:1400px;margin:0 auto}.anonymize-topbar-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.anonymize-topbar-title{margin:4px 0 0;font-size:clamp(1.8rem,3vw,2.4rem)}.anonymize-split{flex:1 1 auto;display:flex;min-height:0}.anonymize-form-col{flex:0 0 auto;width:100%;min-width:0;background:var(--canvas-bg-color);border-right:1px solid var(--border-color);overflow-y:auto}.anonymize-form-col .paper-settings-main{max-width:720px;padding:28px 32px 40px;margin:0}.anonymize-form-col .paper-settings-section:first-child{padding-top:0}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;background:var(--canvas-bg-color);padding:14px 0 0;border-top:1px solid var(--border-color);margin-top:20px}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{flex:1 1 auto;min-width:0;overflow:auto;background:var(--paper-bg-alt);padding:28px 32px}.anonymize-preview-head{display:flex;align-items:baseline;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--border-color);margin-bottom:20px}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.anonymize-preview-sub{color:var(--ink-soft);font-size:13px}.anonymize-preview-body{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:28px 32px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}@media (max-width:700px){.form-grid-2,.form-grid-3{grid-template-columns:1fr}}.paper-optional{font-family:var(--font-sans);font-weight:400;color:var(--ink-muted);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}.paper-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.paper-plan-card{position:relative;display:block;padding:18px 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;margin:0}.paper-plan-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.paper-plan-card.selected{border-color:var(--color);box-shadow:0 0 0 2px var(--color) inset}.paper-plan-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-plan-price{font-family:var(--font-serif);font-size:2rem;color:var(--color);margin:6px 0 4px}.paper-plan-price .paper-plan-per{font-family:var(--font-sans);font-size:12px;color:var(--ink-soft)}.paper-plan-desc{font-size:13px;color:var(--ink-soft)}.paper-plan-desc ul{padding-left:18px;margin:0}.paper-settings-copy{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.anonymize-section-title{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin:18px 0 8px 0;padding-bottom:6px;border-bottom:1px solid var(--border-color);opacity:.7}.anonymize-section-title i{margin-right:4px}.anonymize-submit-bar{padding:12px 0 4px 0}.anonymize-submit-bar .btn{font-size:1rem;padding:10px 20px;font-weight:600}.anonymize-page .form-check{padding-top:4px;padding-bottom:4px}.anonymize-page .form-check-label{font-weight:500}.anonymize-preview-col{min-height:0;min-width:0}.pr-diff pre{overflow-x:auto;max-width:100%}@media (min-width:768px){.anonymize-form-col{height:100%;width:520px;flex:0 0 520px}.anonymize-preview-col{height:100%;flex:1}}@media (max-width:767px){.anonymize-workspace{flex:0 0 auto;min-height:0}.anonymize-topbar{padding:14px 16px}.anonymize-topbar-title{font-size:1.5rem;margin-top:2px}.anonymize-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.anonymize-form-col{width:100%!important;flex:0 0 auto!important;height:auto!important;border-right:none;border-bottom:1px solid var(--border-color);overflow:visible}.anonymize-form-col .paper-settings-main{padding:18px 16px 24px;max-width:none}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;margin:20px -16px 0;padding:12px 16px;background:var(--canvas-bg-color);border-top:1px solid var(--border-color);z-index:10}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{width:100%;flex:0 0 auto;height:auto!important;max-height:none;padding:18px 16px 24px;overflow:visible}.anonymize-preview-body{padding:16px;border-radius:8px}.anonymize-preview-body .pr-diff pre,.anonymize-preview-body pre{overflow-x:auto;max-width:100%}.anonymize-landing-inner{padding:16px}}@media (min-width:1280px){.anonymize-form-col{width:620px;flex:0 0 620px}}@media (max-width:767px){.btn{min-height:38px;padding:6px 14px;font-size:14px}.btn-sm{min-height:34px;padding:5px 10px}.navbar .nav-link{padding:8px 12px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:24px;line-height:32px}.container.page{padding-left:15px;padding-right:15px;max-width:100%}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.125rem}.repo-list-item{flex-direction:column}.repo-list-item-actions{align-self:flex-start}.quota-row{flex-direction:column;gap:10px;padding:10px 12px}.dropdown-menu{position:absolute;right:0;left:auto}.form-group{margin-bottom:12px}.form-control{font-size:16px}.status-bar{gap:6px;padding:8px 10px}.status-bar .btn{font-size:12px;padding:4px 10px;min-height:32px}.status-bar .paths{font-size:12px;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.status-bar .paths::-webkit-scrollbar{display:none}.status-bar-actions{flex-shrink:0;gap:4px}#home .display-4{font-size:1.75rem}#home h4.subtext-header{font-size:1rem}.progress:not(.quota-progress){min-width:120px!important}.badge{font-size:70%}.col-2.input-group{width:100%!important;max-width:100%;flex:0 0 100%}.color-text-secondary span{display:inline-block;margin-bottom:2px}.floatingchat-container-wrap{display:none!important}.anonymize-landing{align-items:flex-start;padding-top:60px}.anonymize-page .container-fluid>.row{height:auto!important;min-height:100%}.anonymize-form-col{width:100%!important;flex:0 0 100%!important;border-right:none;border-top:1px solid var(--border-color)}.anonymize-preview-col{height:auto!important;max-height:none}.anonymize-section-title{font-size:.8125rem;margin:12px 0 8px 0}.anonymize-submit-bar{position:sticky;bottom:0;background:var(--sidebar-bg-color);padding:10px 0;margin:0 -12px;padding-left:12px;padding-right:12px;border-top:1px solid var(--border-color);z-index:10}.anonymize-submit-bar .btn{font-size:1rem;padding:12px 20px}.anonymize-page .form-check{padding-top:6px;padding-bottom:6px;min-height:36px}.anonymize-page .form-check-label{font-size:.9375rem}.anonymize-page .card-body{padding:12px}.pr-title{font-size:1.125rem}.pr-diff pre{font-size:.75rem}.pr-comment .mb-1 h5{font-size:1rem}.nav-tabs .nav-link{padding:8px 12px;font-size:.875rem}}@media (min-width:768px) and (max-width:991px){.container.page{max-width:100%;padding-left:15px;padding-right:15px}.leftCol{flex:0 0 250px;width:250px}}.explorer-page{display:flex;height:100%;width:100%;background:var(--canvas-bg-color);position:relative}.explorer-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--canvas-bg-color)}.explorer-content{flex:1 1 auto;min-height:0;width:100%;overflow:auto}.leftCol-close,.leftCol-head{display:none}.leftCol-body{flex:1 1 auto;min-height:0;overflow:auto}.leftCol-foot{padding:8px 12px;border-top:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-foot .last-update{display:block;border-top:none;padding:0}.leftCol-backdrop{display:none}.paper-inline-warning{display:flex;align-items:flex-start;gap:8px;margin:8px;padding:10px 12px;background:rgba(138,107,30,.08);border:1px solid rgba(138,107,30,.35);border-radius:8px;color:var(--color);font-size:13px;line-height:1.4}.paper-inline-warning i{color:#8a6b1e;margin-top:2px;flex-shrink:0}.dark-mode .paper-inline-warning i{color:#ffd37a}@media (min-width:768px){.leftCol-body{padding:8px 4px}}.sidebar-toggle{display:none;align-items:center;gap:8px;position:fixed;bottom:18px;right:18px;z-index:1100;padding:10px 14px;background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);border-radius:999px;font-family:var(--font-sans);font-size:13px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;outline:0}.sidebar-toggle:hover{background:var(--primary-hover-bg)}.sidebar-toggle:focus,.sidebar-toggle:focus-visible{outline:0;box-shadow:0 6px 20px rgba(0,0,0,.15)}@media (max-width:991px){.sidebar-toggle{display:inline-flex}.leftCol{position:fixed;top:0;left:0;bottom:0;width:min(86vw,340px);max-width:340px;z-index:1200;border:none;border-right:1px solid var(--border-color);transform:translateX(0);transition:transform .22s ease;box-shadow:4px 0 24px rgba(0,0,0,.18);background:var(--sidebar-bg-color)}.leftCol.collapsed{transform:translateX(-105%);box-shadow:none;pointer-events:none}.leftCol-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.leftCol-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid var(--border-color);border-radius:8px;color:var(--ink-muted);cursor:pointer}.leftCol-close:hover{color:var(--color);border-color:var(--color)}.leftCol-foot{display:block}.leftCol-body{padding:4px 0}.leftCol-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.32);z-index:1150;backdrop-filter:blur(2px)}.dark-mode .leftCol-backdrop{background:rgba(0,0,0,.5)}}.admin-nav{display:flex;gap:4px;padding:4px;margin:8px 0 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;flex-wrap:wrap}.admin-nav a{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;color:var(--ink-muted);text-decoration:none;font-family:var(--font-mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:background-color .15s,color .15s;white-space:nowrap}.admin-nav a:hover{background:var(--paper-bg-alt);color:var(--color)}.admin-nav a.active{background:var(--color);color:var(--paper-card)}.admin-nav a i{font-size:12px;width:14px;text-align:center}@media (max-width:767px){.admin-nav{flex-direction:column}.admin-nav a{justify-content:flex-start}}.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:16px}.admin-stat-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px}.admin-stat-card .stat-value{font-family:var(--font-serif);font-size:1.375rem;font-weight:400;line-height:1.1;color:var(--color)}.admin-stat-card .stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.admin-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 12px}.admin-toolbar .form-control{max-width:320px}@media (max-width:767px){.admin-toolbar .form-control{max-width:100%;width:100%}}.pagination-compact{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pagination-compact input{width:60px;text-align:center;flex-shrink:0}.pagination-compact .btn{padding:4px 10px;min-height:34px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);flex-shrink:0}.pagination-compact>span{white-space:nowrap}.admin-list-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--border-color)}.admin-list-item:last-child{border-bottom:none}.admin-list-item .item-main{flex:1;min-width:0}.admin-list-item .item-title{font-size:1rem;font-weight:600;margin-bottom:4px;word-break:break-word}.admin-list-item .item-meta{font-size:.875rem;opacity:.8}.admin-list-item .item-meta span{margin-right:12px;display:inline-block;margin-bottom:2px}.admin-list-item .item-actions{flex-shrink:0}@media (max-width:767px){.admin-list-item{flex-direction:column;gap:8px}.admin-list-item .item-actions{align-self:flex-start}}.status-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px;vertical-align:middle}.status-badge{font-family:var(--font-sans);font-weight:500;letter-spacing:.02em;border:1px solid transparent;text-transform:none;font-size:12px;padding:1px 9px 2px;border-radius:999px}.status-badge.status-ready{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.status-badge.status-error{background:#fbe7e7;color:#b42318;border-color:#f3c7c7}.status-badge.status-download,.status-badge.status-preparing{background:#eef0ff;color:#3b4ad6;border-color:#d4d8fa}.status-badge.status-expired,.status-badge.status-expiring,.status-badge.status-removed,.status-badge.status-removing{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.status-badge.status-active{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.queue-job-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 18px;margin-bottom:10px}.queue-job-card .job-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px}.queue-job-card .job-id{font-family:var(--font-mono);font-size:.9375rem;color:var(--color);word-break:break-all;display:flex;align-items:center;gap:10px}.queue-job-card .job-timestamps{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);display:flex;flex-wrap:wrap;gap:14px}.queue-job-card .job-actions{display:flex;gap:8px;margin-top:10px}.queue-job-card .job-actions .btn{font-size:12px;padding:4px 12px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.admin-section-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.admin-section-header h2{margin:0;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.admin-section-header h2 i{margin-right:6px;color:var(--ink-muted)}.admin-section-header .section-count{background:var(--paper-bg-alt);color:var(--ink-muted);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;padding:1px 10px;border-radius:999px}.user-detail-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:22px;margin-bottom:24px}.user-detail-card .user-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border-color);flex-wrap:wrap}.user-detail-card .user-header img{border-radius:50%}.user-detail-card .user-header h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:1.5rem;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;font-size:.9375rem}.user-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.user-detail-grid .detail-value{word-break:break-all;color:var(--color)}@media (max-width:767px){.user-detail-grid{grid-template-columns:1fr}.user-detail-grid .detail-label{margin-top:8px;border-top:1px solid var(--border-color);padding-top:8px}.user-detail-grid .detail-label:first-child{border-top:none;margin-top:0;padding-top:0}}.paper-empty{min-height:calc(100vh - 60px);display:flex;align-items:center;justify-content:center;padding:40px 24px}.paper-empty-inner{max-width:560px;text-align:left}.paper-empty-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.4rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:18px 0 20px;color:var(--color)}.paper-empty-title em{color:var(--accent);font-style:italic}.paper-empty-lede{font-size:18px;line-height:1.55;color:var(--ink-soft);text-wrap:pretty}.paper-empty-cta{display:flex;gap:10px;margin-top:28px;flex-wrap:wrap}.paper-page{max-width:1100px;margin:0 auto;padding:32px 32px 80px}@media (max-width:991px){.paper-page,.paper-page.container,.paper-page.container-fluid{padding:20px 18px 60px!important}.paper-page .row{margin-left:0;margin-right:0}.paper-page .row>.w-100,.paper-page .row>[class*=col]{padding-left:0;padding-right:0}.navbar.navbar-expand-lg{padding:10px 18px!important}.navbar .navbar-collapse{margin:10px -18px 0;padding:12px 18px 16px;border-top:1px solid var(--border-color);background:var(--header-bg-color)}.navbar .navbar-nav{align-items:stretch!important;gap:2px}.navbar .navbar-nav .nav-item,.navbar .navbar-nav .nav-link{width:100%}.navbar .nav-link{display:flex!important;align-items:center;justify-content:flex-start;margin:0!important;padding:12px 4px!important;border-bottom:1px solid var(--border-color)!important;border-radius:0;font-size:14px;line-height:1.2;gap:0;min-height:44px;box-sizing:border-box}.navbar .nav-link:not(.btn-signin):not(.user-chip){color:var(--color)!important}.navbar .nav-link .fa,.navbar .nav-link .fab,.navbar .nav-link .fas,.navbar .nav-link i{display:inline-flex!important;align-items:center;justify-content:center;width:28px;flex-shrink:0;font-size:16px;line-height:1;margin:0 10px 0 0!important}.navbar .navbar-nav .nav-item:last-child .nav-link,.navbar .navbar-nav>.nav-link:last-child{border-bottom-color:transparent!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--border-color)!important}.navbar .nav-item>.nav-link:not(.btn-signin):not(.user-chip)::before{content:'';display:inline-block;width:28px;margin-right:10px;flex-shrink:0}.navbar .nav-link.nav-icon::before,.navbar .nav-link:has(>i)::before{display:none!important}.navbar .nav-link.nav-icon{width:100%!important;height:auto!important;justify-content:flex-start!important;padding:12px 4px!important}.navbar .nav-link.nav-icon::after{content:attr(title);font-family:var(--font-sans);font-size:14px;color:var(--color)}.navbar .btn-signin{display:inline-flex!important;width:auto!important;align-self:flex-start;justify-content:center;height:40px;padding:0 18px!important;margin:14px 0 0!important;border-radius:8px;border-bottom:none!important}.navbar .btn-signin i{margin:0 8px 0 0!important;width:auto!important}.navbar .user-chip-wrap{width:100%}.navbar .user-chip{display:flex!important;width:100%;margin:0!important;padding:10px 4px!important;background:0 0!important;border:none!important;border-bottom:1px solid var(--border-color)!important;border-radius:0!important;justify-content:flex-start;gap:0;min-height:44px}.navbar .user-chip::before{display:none!important}.navbar .user-chip img{width:28px!important;height:28px!important;margin-right:10px!important;flex-shrink:0}.navbar .user-chip .user-chip-name{font-size:14px;font-weight:500;color:var(--color)!important}.navbar .user-chip.dropdown-toggle::after{margin-left:auto;color:var(--ink-muted)}.navbar .user-chip-wrap .dropdown-menu{position:static!important;float:none;width:100%;margin:0!important;padding:0!important;background:0 0!important;border:none!important;box-shadow:none!important;transform:none!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item{padding:10px 4px 10px 42px!important;font-size:14px;color:var(--ink-muted)!important;background:0 0!important;border-bottom:1px solid var(--border-color);text-align:left!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item:last-child{border-bottom:none}.navbar .user-chip-wrap .dropdown-divider{display:none}.navbar-brand{border-right:none!important;padding-right:0!important;margin-right:0!important}.dark-mode .navbar .navbar-collapse{background:var(--header-bg-color);border-top-color:var(--border-color)}.dark-mode .navbar .nav-link{border-bottom-color:var(--border-color)!important}.dark-mode .navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--paper-bg-alt);border:1px solid var(--border-color);color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.paper-progress{position:relative;height:auto;background:0 0;margin:18px 0 8px}.paper-progress::before{content:"";display:block;height:8px;background:var(--paper-bg-alt);border-radius:999px}.paper-progress .paper-progress-bar{position:absolute;top:0;left:0;height:8px;background:var(--color);border-radius:999px;transition:width .4s ease;min-width:4px}.paper-progress .paper-progress-label{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.paper-progress .paper-progress-pct{color:var(--color)}.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--color)}.paper-error-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #c53030;border-radius:10px;color:var(--color)}.dark-mode .paper-error-card{border-left-color:#ff8b7b}.paper-ratelimit-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #d69e2e;border-radius:10px;color:var(--color)}.dark-mode .paper-ratelimit-card{border-left-color:#f6e05e}.paper-ratelimit-head{display:flex;align-items:flex-start;gap:14px}.paper-ratelimit-head>i{font-size:18px;color:#d69e2e;margin-top:4px;flex-shrink:0}.dark-mode .paper-ratelimit-head>i{color:#f6e05e}.paper-ratelimit-card strong{color:var(--color)}.status-pill-ratelimit{border-color:#d69e2e;color:#d69e2e}.dark-mode .status-pill-ratelimit{border-color:#f6e05e;color:#f6e05e}.status-ratelimit{background:#d69e2e}.dark-mode .status-ratelimit{background:#f6e05e}.paper-error-head{display:flex;align-items:flex-start;gap:14px}.paper-error-head>i{font-size:18px;color:#c53030;margin-top:4px;flex-shrink:0}.dark-mode .paper-error-head>i{color:#ff8b7b}.paper-error-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-error-title{font-family:var(--font-serif);font-size:1.375rem;line-height:1.2;margin-top:2px;color:var(--color)}.paper-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft);font-family:var(--font-mono);word-break:break-word;white-space:pre-wrap}.paper-error-hints{margin:14px 0 0;padding-left:18px;color:var(--ink-soft);font-size:14px;line-height:1.6}.paper-error-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.paper-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;margin-top:18px;font-size:.9375rem}.paper-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.paper-detail-grid .detail-value{word-break:break-all;color:var(--color)}.paper-detail-grid .detail-value a{color:var(--color);border-bottom:1px solid var(--border-color)}.paper-detail-grid .detail-value a:hover{border-bottom-color:var(--color)}@media (max-width:700px){.paper-detail-grid{grid-template-columns:1fr;gap:4px 0}.paper-detail-grid .detail-label{padding-top:8px}}.paper-support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:18px 0 28px}.paper-support-card{display:flex;flex-direction:column;gap:10px;padding:20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;color:var(--color);text-decoration:none;transition:border-color .15s ease,transform .15s ease}.paper-support-card:hover{border-color:var(--color);text-decoration:none;color:var(--color)}.paper-support-card .paper-support-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);display:flex;align-items:center;gap:8px}.paper-support-card p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.paper-support-card .paper-support-cta{margin-top:auto;font-size:13px;font-weight:500;color:var(--color);display:inline-flex;align-items:center;gap:6px}.paper-support-card:hover .paper-support-cta i{transform:translateX(2px)}.paper-support-card .paper-support-cta i{transition:transform .15s ease}.pr-page{min-height:100%;background:var(--canvas-bg-color)}.pr-page-inner{padding-top:24px;padding-bottom:60px}.pr-header{margin:6px 0 18px}.pr-title{margin:4px 0 10px;font-size:clamp(1.6rem,3vw,2.4rem);line-height:1.15;word-break:break-word}.pr-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pr-header-meta .pr-meta-item{display:inline-flex;align-items:center;gap:6px}.pr-header-meta .pr-meta-item i{color:var(--ink-muted)}.pr-body-card{margin:18px 0 24px;padding:20px 22px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-body-card .paper-section-eyebrow{margin-bottom:12px}.paper-tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--border-color);margin:18px 0 0}.paper-tabs .paper-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:0 0;border:0;border-bottom:2px solid transparent;font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--ink-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease;margin-bottom:-1px}.paper-tabs .paper-tab:hover{color:var(--color)}.paper-tabs .paper-tab.active{color:var(--color);border-bottom-color:var(--color)}.paper-tabs .paper-tab i{color:inherit;opacity:.85}.paper-tabs .paper-tab:active,.paper-tabs .paper-tab:focus,.paper-tabs .paper-tab:focus-visible{outline:0;box-shadow:none}.paper-tabs .paper-tab:focus-visible{color:var(--color);background:var(--hover-bg-color);border-radius:6px 6px 0 0}.pr-diff{margin:16px 0 28px;display:flex;flex-direction:column;gap:16px}.diff-file-block{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;overflow:hidden}.diff-file-header{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper-bg-alt);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:13px;color:var(--color)}.diff-file-icon{color:var(--ink-muted);flex-shrink:0}.diff-file-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}.diff-file-status{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--border-color);color:var(--ink-muted);background:var(--paper-card)}.diff-file-status-added{color:#2f6b3e;border-color:rgba(47,107,62,.35);background:rgba(47,107,62,.08)}.diff-file-status-deleted{color:#a13a2e;border-color:rgba(161,58,46,.35);background:rgba(161,58,46,.08)}.diff-file-status-renamed{color:#8a6b1e;border-color:rgba(138,107,30,.35);background:rgba(138,107,30,.08)}.dark-mode .diff-file-status-added{color:#a7e2a7;border-color:rgba(167,226,167,.35);background:rgba(167,226,167,.08)}.dark-mode .diff-file-status-deleted{color:#ff8b7b;border-color:rgba(255,139,123,.35);background:rgba(255,139,123,.08)}.dark-mode .diff-file-status-renamed{color:#ffd37a;border-color:rgba(255,211,122,.35);background:rgba(255,211,122,.08)}.diff-file-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:13px;line-height:1.55;table-layout:fixed}.diff-file-table tr.diff-row{vertical-align:top}.diff-file-table .diff-gutter{width:48px;padding:0 10px;text-align:right;color:var(--ink-muted);background:var(--paper-bg-alt);border-right:1px solid var(--border-color);user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}.diff-file-table .diff-gutter-new{border-right:1px solid var(--border-color)}.diff-file-table .diff-sign{width:18px;padding:0 6px;text-align:center;color:var(--ink-muted);background:var(--paper-bg-alt);user-select:none;vertical-align:top}.diff-file-table .diff-code{padding:1px 12px;white-space:pre-wrap;word-break:break-word;color:var(--color)}.diff-row-hunk td{background:var(--paper-bg-alt)!important;color:var(--ink-muted);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-size:12px;letter-spacing:.02em;padding-top:6px;padding-bottom:6px}.diff-row-hunk .diff-code{color:var(--ink-muted)}.diff-row-add .diff-code{background:rgba(47,107,62,.1);color:#1f4a2a}.diff-row-add .diff-gutter,.diff-row-add .diff-sign{background:rgba(47,107,62,.06);color:#2f6b3e}.diff-row-remove .diff-code{background:rgba(161,58,46,.1);color:#6e1f1a}.diff-row-remove .diff-gutter,.diff-row-remove .diff-sign{background:rgba(161,58,46,.06);color:#a13a2e}.dark-mode .diff-row-add .diff-code{background:rgba(167,226,167,.1);color:#c9f0c9}.dark-mode .diff-row-add .diff-gutter,.dark-mode .diff-row-add .diff-sign{background:rgba(167,226,167,.06);color:#a7e2a7}.dark-mode .diff-row-remove .diff-code{background:rgba(255,139,123,.1);color:#ffc9c0}.dark-mode .diff-row-remove .diff-gutter,.dark-mode .diff-row-remove .diff-sign{background:rgba(255,139,123,.06);color:#ff8b7b}@media (max-width:700px){.diff-file-table{font-size:12px}.diff-file-table .diff-gutter{width:36px;padding:0 6px}.diff-file-table .diff-sign{width:14px;padding:0 4px}.diff-file-table .diff-code{padding:1px 8px}}.pr-comments{list-style:none;margin:16px 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}.pr-comment{padding:16px 18px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-comment-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border-color)}.pr-comment-author{font-weight:600;color:var(--color);font-size:14px;display:inline-flex;align-items:center;gap:6px}.pr-comment-author i{color:var(--ink-muted);font-size:12px}.pr-comment-date{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.pr-comment-body{color:var(--color);font-size:14px;line-height:1.6}.pr-comment-body :last-child{margin-bottom:0}@media (max-width:700px){.pr-page-inner{padding-top:14px;padding-bottom:40px}.pr-body-card{padding:14px 14px;border-radius:8px}.pr-comment{padding:12px 14px}.paper-tabs .paper-tab{padding:10px 12px;font-size:13px}.pr-diff pre{font-size:12px;padding:12px}}.toast{background-color:var(--paper-card)!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:10px!important;box-shadow:0 8px 24px rgba(0,0,0,.08);backdrop-filter:none;min-width:280px;max-width:calc(100vw - 24px)}.toast .toast-header{background:0 0!important;color:var(--color)!important;border-bottom:1px solid var(--border-color)!important;font-family:var(--font-sans);padding:10px 12px}.toast .toast-header strong{font-weight:600;color:var(--color);letter-spacing:.01em}.toast .toast-header .close{color:var(--ink-muted)!important;text-shadow:none;opacity:.9;font-size:1.25rem}.toast .toast-header .close:hover{color:var(--color)!important;opacity:1}.toast .toast-body{color:var(--color)!important;padding:12px;font-size:14px;line-height:1.45}.dark-mode .toast{box-shadow:0 8px 24px rgba(0,0,0,.5)}.paper-crumbs{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);letter-spacing:0}.paper-crumbs .here,.paper-crumbs a{color:var(--color);text-decoration:none}.paper-page-title{font-family:var(--font-sans);font-weight:600;font-size:32px;line-height:1.2;letter-spacing:-.035em;margin:8px 0 6px;color:var(--color)}.paper-page-title em{color:inherit;font-style:normal}.paper-page-lede{color:var(--ink-soft);font-size:16px;max-width:640px;line-height:1.55}.paper-meta-rule{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;margin:22px 0 18px;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paper-meta-rule b{color:var(--color);font-weight:500}.paper-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:10px;padding:20px 22px}.dark-mode .paper-card{background:var(--admin-stat-bg)}.paper-section-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500;margin-bottom:10px;display:block}.paper-section-title{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.01em;margin:0 0 8px}.paper-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border-color);border-bottom-width:2px;border-radius:3px;background:var(--paper-card,#fff);color:var(--color)}.paper-pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border:1px solid var(--border-color);border-radius:999px;color:var(--ink-soft);background:var(--paper-card,#fff);letter-spacing:.04em}.paper-pill.accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.paper-pill.good{border-color:#2f6b3e;color:#2f6b3e}.paper-pill.warn{border-color:#8a6b1e;color:#8a6b1e}.paper-pill.bad{border-color:#a13a2e;color:#a13a2e}.paper-row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start;padding:18px 0;border-bottom:1px solid var(--border-color)}.paper-row:first-child{border-top:1px solid var(--border-color)}.paper-row .row-title{font-family:var(--font-serif);font-size:20px;letter-spacing:-.01em;line-height:1.2}.paper-row .row-title a{color:var(--color)}.paper-row .row-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.03em;margin-top:6px;display:flex;flex-wrap:wrap;gap:14px}.paper-row .row-actions{display:flex;gap:6px;flex-shrink:0}.paper-form-step{display:grid;grid-template-columns:48px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--border-color)}.paper-form-step:first-child{border-top:1px solid var(--border-color)}.paper-form-step .step-num{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);padding-top:4px;letter-spacing:.02em}.paper-form-step .step-title{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;line-height:1.2;margin-bottom:4px}.paper-form-step .step-sub{color:var(--ink-soft);font-size:14px;margin-bottom:14px;text-wrap:pretty}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.paper-switch-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:16px}.paper-switch-row+.paper-switch-row{border-top:1px dashed var(--border-soft)}.paper-switch-row .sw-label{font-weight:500}.paper-switch-row .sw-sub{display:block;font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-page .custom-select,.paper-page .form-control{border-radius:6px;border-color:var(--border-color);font-size:14px;padding:8px 12px;height:auto;background:var(--input-bg);color:var(--input-color)}.paper-page .custom-select:focus,.paper-page .form-control:focus{color:var(--input-color);background:var(--input-bg);border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.custom-select:focus,.form-control:focus,input:focus,select:focus,textarea:focus{color:var(--input-color)!important;background-color:var(--input-bg)!important}.form-control::selection,input::selection,textarea::selection{background:var(--accent-soft);color:var(--input-color)}.dark-mode .form-control::selection,.dark-mode input::selection,.dark-mode textarea::selection{background:rgba(167,178,255,.3);color:var(--input-color)}.btn.btn-ink{background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);font-weight:500;border-radius:6px;padding:8px 14px}.btn.btn-ink:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color);border-color:var(--primary-hover-bg)}.btn.btn-accent{background:var(--accent);color:#fff;border:1px solid var(--accent);font-weight:500;border-radius:6px}.btn.btn-accent:hover{background:#2e3bb8;border-color:#2e3bb8;color:#fff}.paper-page .dashboard-filter-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);margin:18px 0 0;flex-wrap:wrap}.paper-page .dashboard-filter-row .form-control{height:38px;background:var(--paper-card)}.paper-page .dashboard-filter-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.paper-page .dashboard-filter-row .btn-group .btn,.paper-page .dashboard-filter-row .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);height:38px;padding:0 14px;font-size:14px;font-weight:500;border-radius:var(--radius-control,6px);display:inline-flex;align-items:center;gap:6px;line-height:1}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label{color:var(--ink-muted);font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label::after{content:"·";margin-left:6px;color:var(--ink-faint)}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-value{font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .fas{font-size:11px;color:var(--ink-muted)}.paper-page .dashboard-filter-row .btn-group .btn:hover,.paper-page .dashboard-filter-row .dropdown-toggle:hover{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.paper-page .dashboard-filter-row .btn-group{gap:0}.paper-page .dashboard-filter-row .btn-group .btn{border-radius:0;border-right-width:0}.paper-page .dashboard-filter-row .btn-group .btn:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.paper-page .dashboard-filter-row .btn-group .btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;border-right-width:1px}.paper-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--color);color:var(--canvas-bg-color);border-color:var(--color)}.paper-page .dashboard-filter-row .search-wrap{flex:1 1 280px;min-width:220px}.paper-page .quota-row{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin:24px 0 0;padding:0;background:0 0;border:none;border-radius:0}.paper-page .quota-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);opacity:1}.paper-page .quota-value{font-family:var(--font-mono);font-size:13px;font-variant-numeric:tabular-nums;color:var(--color)}.paper-page .quota-value .quota-unlimited-tag{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);margin-left:4px}.paper-page .quota-track{height:6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;width:100%;min-width:0}.paper-page .quota-track .quota-fill{height:100%;min-width:2px;border-radius:999px;background:var(--color);transition:width .3s ease}.paper-page .quota-track.quota-warn .quota-fill{background:var(--status-progress)}.paper-page .quota-track.quota-danger .quota-fill{background:var(--status-error)}.paper-page .quota-track.quota-unlimited{background:repeating-linear-gradient(-45deg,var(--paper-bg-alt) 0 4px,var(--border-soft,var(--border-color)) 4px 6px)}.paper-page .repo-list{margin-top:8px}.paper-page .repo-list-item{padding:20px 0;gap:16px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-page .repo-list-item:first-child{border-top:none}.paper-page .repo-list-item-header{gap:10px;margin-bottom:6px}.paper-page .repo-name{font-family:var(--font-mono);font-size:15px;color:var(--color)}.paper-page .repo-source{font-size:13px;color:var(--ink-soft);opacity:1;gap:10px}.paper-page .repo-source a{color:var(--ink-soft);border-bottom:1px dotted var(--border-color)}.paper-page .repo-source a:hover{color:var(--color)}.paper-page .repo-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);opacity:1;gap:16px;margin-top:10px}.paper-page .type-badge{font-family:var(--font-mono);font-size:11px;padding:3px 8px;letter-spacing:.1em}.paper-page .repo-list-item-actions .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;font-size:13px;padding:6px 12px;height:auto}.paper-settings{max-width:1180px;margin:0 auto;padding:48px 32px 80px}.paper-settings .paper-page-title{max-width:14em}.paper-settings-body{display:grid;grid-template-columns:220px 1fr;gap:60px;margin-top:32px;border-top:1px solid var(--border-color);padding-top:28px}.paper-settings-toc{position:sticky;top:32px;align-self:start}.paper-settings-toc-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:12px}.paper-settings-toc nav{display:flex;flex-direction:column;gap:2px}.paper-settings-toc nav a{padding:8px 0 8px 14px;border-left:2px solid transparent;color:var(--ink-soft);font-size:14px;text-decoration:none}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.paper-settings-main{min-width:0;max-width:720px}.paper-settings-section{padding:28px 0;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section:first-child{padding-top:0}.paper-settings-section:last-of-type{border-bottom:none}.paper-settings-section .form-group{margin-bottom:18px}.paper-settings-section .form-check{padding:10px 0 10px 28px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section .form-check:last-child{border-bottom:none}.paper-settings-section .form-check-label{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color);cursor:pointer}.paper-settings-section .form-check-input{cursor:pointer;width:16px;height:16px;margin-top:3px;margin-left:-28px;accent-color:var(--color)}.paper-settings-section .form-text{color:var(--ink-soft);font-size:13px;margin-top:4px;max-width:48em}.paper-settings-section .paper-section-copy{margin:-4px 0 14px}.paper-settings-footer{padding-top:24px;display:flex;flex-direction:column;gap:14px}.paper-settings-footer .btn-ink{align-self:flex-start}.paper-settings-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px}.paper-settings-hint{font-size:13px;color:var(--ink-muted)}.paper-inline-alert{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:var(--radius-control,6px);border:1px solid var(--border-color);background:var(--paper-bg-alt);font-size:13px;color:var(--color)}.paper-inline-alert i{margin-top:2px;color:var(--ink-muted)}.paper-inline-alert-error{border-color:var(--status-error);background:var(--status-error-soft)}.paper-inline-alert-error i{color:var(--status-error)}.paper-account-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);background:var(--paper-card);margin-bottom:20px}.paper-account-card img{flex-shrink:0}.paper-account-identity{flex:1 1 auto;min-width:0}.paper-account-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color)}.paper-account-meta{font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-danger-zone{padding:16px;border:1px solid var(--status-error);border-radius:var(--radius-surface,10px);background:var(--status-error-soft)}.paper-danger-head{font-weight:600;font-size:14px;color:var(--status-error);margin-bottom:6px}.paper-danger-copy{font-size:13px;color:var(--ink-soft);max-width:52em;margin-bottom:12px}.paper-danger-zone .paper-inline-alert{margin-bottom:12px}.btn.btn-outline-danger{background:0 0;color:var(--status-error);border:1px solid var(--status-error);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-danger:hover{background:var(--status-error);color:#fff;border-color:var(--status-error)}.navbar .user-menu{min-width:260px}.navbar .user-menu .dropdown-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px!important}.navbar .user-menu .dropdown-item i{width:16px;margin-top:3px;font-size:13px;color:var(--ink-muted);text-align:center}.navbar .user-menu .dropdown-item span{display:flex;flex-direction:column;line-height:1.3}.navbar .user-menu .dropdown-item small{font-size:12px;color:var(--ink-muted)}.navbar .user-menu .dropdown-header{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:24px}.paper-settings-toc{position:static}.paper-settings-toc nav{flex-direction:row;flex-wrap:wrap;gap:8px}.paper-settings-toc nav a{border-left:none;border-bottom:2px solid transparent;padding:4px 0}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--color);border-left:none}}.paper-table{display:block;margin-top:20px;background:0 0;border:none;border-top:1px solid var(--border-color);border-radius:0;overflow:visible}.paper-table .paper-table-head,.paper-table .paper-table-row{display:grid;grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 140px 90px 140px 52px;align-items:center;gap:18px;padding:12px 4px}.paper-table.paper-table-conferences .paper-table-head,.paper-table.paper-table-conferences .paper-table-row{grid-template-columns:minmax(280px,2.4fr) 140px 90px 220px 52px}.paper-table.paper-table-repos .paper-table-head,.paper-table.paper-table-repos .paper-table-row{grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px}.paper-table.paper-table-repos.has-bulk .paper-table-head,.paper-table.paper-table-repos.has-bulk .paper-table-row{grid-template-columns:28px minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px;gap:12px}.paper-table .admin-users-row{grid-template-columns:28px minmax(280px,2.4fr) 90px 120px 100px 52px!important;gap:12px!important}.paper-table.paper-table-dashboard .paper-table-head,.paper-table.paper-table-dashboard .paper-table-row{grid-template-columns:minmax(320px,3fr) 190px 90px 170px 52px;gap:20px;padding:8px 4px}.paper-table.paper-table-dashboard .cell-anon .anon-text{gap:2px}.paper-table.paper-table-dashboard .cell-anon .repo-name{padding:0}.paper-table .paper-table-head{background:0 0;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);padding-top:8px;padding-bottom:8px}.paper-table .paper-table-head .sortable{cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px;background:0 0;border:none;padding:2px 0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;border-radius:4px}.paper-table .paper-table-head .sortable:hover{color:var(--color)}.paper-table .paper-table-head .sortable.active{color:var(--color)}.paper-table .paper-table-head .sortable i{font-size:10px}.paper-table .paper-table-head .num,.paper-table .paper-table-row .num{text-align:right}.paper-table .paper-table-head .num .sortable{flex-direction:row-reverse}.paper-table .paper-table-row{border-top:1px solid var(--border-soft,var(--border-color));font-size:14px;transition:background-color .12s ease}.paper-table .paper-table-row:hover{background:var(--hover-bg-color)}.paper-table .paper-table-row.row-clickable{cursor:pointer}.paper-table .paper-table-row.repo-inactive>:not(.cell-actions){opacity:.55}.paper-table .paper-table-row.repo-error{background:var(--status-error-soft);border-left:2px solid var(--status-error);padding-left:6px}.paper-table .paper-table-row.repo-error:hover{background:var(--status-error-soft-hover)}.cell-status .status-sub.status-sub-error,.paper-table .cell-status .status-sub-error{color:var(--status-error)}.paper-table .cell-status .status-sub-warn{color:var(--status-progress)}.paper-table .cell-anon{display:flex;align-items:center;gap:12px;min-width:0}.paper-table .cell-anon .type-badge{flex-shrink:0;min-width:52px;justify-content:center}.paper-table .cell-anon .anon-text{min-width:0;display:flex;flex-direction:column;gap:3px}.paper-table .cell-anon .anon-title{display:flex;align-items:center;gap:8px;min-width:0}.paper-table .cell-anon .anon-title .type-badge{margin-left:0}.paper-table .cell-anon .repo-name{font-family:var(--font-mono);font-size:14px;color:var(--color);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%;padding:2px 0}.paper-table .cell-anon .repo-name-static{color:var(--ink-muted);font-style:italic}.paper-table .cell-anon .anon-sub{font-family:var(--font-sans);font-size:13px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px;min-width:0}.paper-table .cell-anon .anon-sub .anon-source{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-anon .anon-sub .conf-tag{flex:0 1 auto;min-width:72px;max-width:50%}.paper-table .cell-anon .anon-sub a{color:var(--ink-muted);border-bottom:1px dotted var(--border-color);padding:4px 0;margin:-4px 0}.paper-table .cell-anon .anon-sub a:hover{color:var(--color)}.paper-table .cell-anon .anon-sub .commit-hash{font-family:var(--font-mono);font-size:12px}.paper-table .cell-conf{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-conf span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-status{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:14px;color:var(--color);min-width:0}.paper-table .cell-status .status-line{display:inline-flex;align-items:center;gap:8px}.paper-table .cell-status .status-sub{flex-basis:100%;font-family:var(--font-sans);font-size:13px;line-height:1.3;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.paper-table .cell-expires{font-family:var(--font-sans);font-size:13px;color:var(--ink-soft)}.paper-table .cell-expires .expires-never{color:var(--ink-muted)}.paper-table .cell-expires .expires-past{color:var(--ink-muted)}.paper-table .empty-dash{color:var(--ink-faint)}.paper-table .cell-actions{display:flex;justify-content:flex-end}.status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0;background:var(--status-inactive)}.status-dot.status-ready{background:var(--status-ready)}.status-dot.status-error{background:var(--status-error)}.status-dot.status-preparing,.status-dot.status-progress{background:var(--status-progress)}.status-dot.status-expired,.status-dot.status-removed{background:var(--status-inactive)}.dashboard-page{padding-bottom:96px}.dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;font-size:13px;color:var(--ink-muted)}.dashboard-meta .dashboard-count{font-variant-numeric:tabular-nums}.btn-link-inline{background:0 0;border:none;padding:2px 4px;margin:-2px 0;font:inherit;color:var(--link-color);cursor:pointer;border-radius:4px}.btn-link-inline:hover{color:var(--link-hover-color);text-decoration:underline}.btn.btn-outline-ink{background:0 0;color:var(--color);border:1px solid var(--border-color);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-ink:hover{background:var(--hover-bg-color);color:var(--color);border-color:var(--ink-faint)}.paper-page .dropdown-menu .dropdown-item-danger,.paper-page .dropdown-menu .dropdown-item-danger i{color:var(--status-error)}.paper-page .dropdown-menu .dropdown-item-danger:focus,.paper-page .dropdown-menu .dropdown-item-danger:hover{background:var(--status-error-soft-hover);color:var(--status-error)}.paper-page .dropdown-menu button.dropdown-item{width:100%;text-align:left;background:0 0;border:none}.paper-page .dropdown-menu .dropdown-divider{border-top-color:var(--border-soft,var(--border-color));margin:4px 0}.paper-table .paper-table-skeleton{pointer-events:none}.skeleton{display:block;background:var(--paper-bg-alt);border-radius:4px;position:relative;overflow:hidden}.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--hover-bg-color),transparent);animation:skeleton-shimmer 1.4s infinite}.skeleton-line{height:12px}.skeleton-line+.skeleton-line{margin-top:8px}.skeleton-line-sm{height:10px}.skeleton-badge{width:52px;height:22px;border-radius:999px;flex-shrink:0}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.skeleton::after{animation:none}}.paper-table .paper-table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 20px;color:var(--ink-muted);text-align:center;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table .paper-table-empty>i{font-size:1.5rem;color:var(--ink-faint)}.paper-table .paper-table-empty-actions{display:flex;gap:8px;margin-top:8px}.bulk-bar{display:flex;align-items:center;gap:8px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:8px 12px;margin:8px 0}.paper-page.admin-page .paper-page-title{font-size:1.5rem;margin:4px 0}.paper-page.admin-page .paper-page-lede{display:none}.paper-page.admin-page .paper-crumbs{margin-bottom:4px}.paper-page.admin-page .admin-nav{margin:6px 0 12px}.admin-filter-toolbar{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px;position:sticky;top:0;z-index:4;background:var(--canvas-bg-color);padding:6px 0;border-bottom:1px solid var(--border-soft,var(--border-color));box-shadow:0 1px 0 var(--canvas-bg-color)}@media (max-width:900px){.admin-filter-toolbar{position:static;box-shadow:none}}.admin-filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.admin-filter-row .search-wrap{flex:1;min-width:220px}.admin-filter-row .search-wrap .form-control{height:34px}.admin-filter-inline{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.admin-filter-inline>label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:0;white-space:nowrap}.admin-filter-inline .form-control-sm{height:28px;padding:2px 8px;font-size:12px}.admin-filter-inline input[type=search].form-control-sm,.admin-filter-inline input[type=text].form-control-sm{width:130px}.admin-filter-inline input[type=date].form-control-sm{width:130px}.admin-filter-inline select.form-control-sm{width:auto;min-width:88px}.admin-filter-inline .arrow{color:var(--ink-muted);font-size:11px}.admin-filter-spacer{flex:1}.admin-active-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--ink-muted)}.admin-active-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 10px;border:1px solid var(--border-color);border-radius:999px;background:var(--hover-bg-color);font-size:12px;color:var(--color)}.admin-active-chip .key{color:var(--ink-muted);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.admin-active-chip button{background:0 0;border:none;cursor:pointer;padding:0 4px;color:var(--ink-muted);font-size:12px;border-radius:50%}.admin-active-chip button:hover{color:#b42318}.admin-search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);pointer-events:none;border:1px solid var(--border-color);border-radius:4px;padding:1px 5px;background:var(--paper-card)}.admin-filter-row .search-wrap{position:relative}.admin-filter-row .search-wrap .form-control{padding-right:40px}.paper-table-row.row-selected{background:rgba(47,122,68,.06)}.queue-state-pills{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}.queue-state-pills .pill{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted)}.queue-state-pills .pill-active{color:#c48a2e;border-color:rgba(196,138,46,.4)}.queue-state-pills .pill-failed{color:#b42318;border-color:rgba(180,35,24,.4)}.queue-state-pills .pill-completed{color:#2f7a44;border-color:rgba(47,122,68,.3)}.queue-state-pills .pill-waiting{color:var(--ink-soft)}.queue-state-pills .pill-delayed{color:var(--ink-muted)}.admin-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 12px;font-size:13px}.admin-summary .summary-total{font-family:var(--font-serif);font-size:1rem;color:var(--color);margin-right:8px}.admin-summary .summary-meta{color:var(--ink-muted);font-size:12px;margin-right:8px}.admin-summary .summary-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);cursor:pointer;font-size:12px;user-select:none;transition:background-color .1s,border-color .1s}.admin-summary .summary-pill:hover{background:var(--hover-bg-color)}.admin-summary .summary-pill .count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.admin-summary .summary-pill.active{background:var(--primary-bg);color:var(--primary-color);border-color:var(--primary-bg)}.admin-summary .summary-pill.active .count{color:inherit}.admin-summary .summary-pill.error .count{color:#b42318}.admin-summary .summary-pill.warn .count{color:#c48a2e}.admin-summary .summary-pill.ok .count{color:#2f7a44}.dark-mode .admin-summary .summary-pill.error .count{color:#f08a82}.dark-mode .admin-summary .summary-pill.warn .count{color:#e8b970}.dark-mode .admin-summary .summary-pill.ok .count{color:#7dc894}.dark-mode .queue-state-pills .pill-active{color:#e8b970;border-color:rgba(232,185,112,.4)}.dark-mode .queue-state-pills .pill-failed{color:#f08a82;border-color:rgba(240,138,130,.4)}.dark-mode .queue-state-pills .pill-completed{color:#7dc894;border-color:rgba(125,200,148,.3)}.job-progress{flex:1;height:6px;background:var(--border-soft,var(--border-color));border-radius:999px;overflow:hidden;margin-left:12px;max-width:200px}.job-progress-bar{height:100%;background:#2f7a44;transition:width .3s}.paper-table-empty{padding:48px 4px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:8px;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table-empty>i{font-size:1.5rem}.q-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:4px}.q-header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.q-range-btns{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.q-range-btns .btn{border:none;border-radius:0;padding:5px 14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);background:var(--paper-card)}.q-range-btns .btn+.btn{border-left:1px solid var(--border-color)}.q-range-btns .btn.active{background:var(--color);color:var(--paper-card)}.q-cards{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.q-card{flex:1;min-width:140px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.q-card:hover{border-color:var(--ink-muted)}.q-card.selected{border-color:var(--color);box-shadow:0 0 0 1px var(--color)}.q-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.q-dot{width:8px;height:8px;border-radius:50%;background:#2f7a44;flex-shrink:0}.q-dot-red{background:#b42318}.dark-mode .q-dot{background:#7dc894}.dark-mode .q-dot-red{background:#f08a82}.q-card-name{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-muted);letter-spacing:.04em}.q-card-count{font-family:var(--font-serif);font-size:2rem;font-weight:400;line-height:1.1;color:var(--color);margin-bottom:6px}.q-card-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.04em}.q-card-bar{height:4px;background:var(--border-color);border-radius:2px;overflow:hidden;margin-top:6px}.q-card-bar-fill{height:100%;background:#3b4ad6;border-radius:2px;transition:width .3s}.dark-mode .q-card-bar-fill{background:#a7b2ff}.q-detail{display:grid;grid-template-columns:1fr 320px;gap:16px;margin-bottom:20px}.q-throughput{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-chart-wrap{position:relative}.q-throughput canvas{width:100%;display:block}.q-chart-tooltip{position:absolute;pointer-events:none;background:var(--paper-card);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;font-family:var(--font-mono);font-size:11px;line-height:1.6;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:10}.q-chart-tooltip .q-tip-time{color:var(--ink-muted);margin-bottom:2px}.q-chart-tooltip .q-tip-completed{color:#3b4ad6}.q-chart-tooltip .q-tip-failed{color:#b42318}.dark-mode .q-chart-tooltip .q-tip-completed{color:#a7b2ff}.dark-mode .q-chart-tooltip .q-tip-failed{color:#f08a82}.q-chart-crosshair{position:absolute;top:0;width:1px;height:100%;background:var(--ink-muted);opacity:.3;pointer-events:none;z-index:9}.q-stats-panel{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px;display:flex;flex-direction:column}.q-section-label{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:lowercase;letter-spacing:.04em;margin-bottom:14px}.q-section-right{float:right;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.q-legend-completed{color:#3b4ad6}.q-legend-failed{color:#b42318;margin-left:8px}.q-legend-exec{color:#b8860b;margin-left:8px;letter-spacing:2px}.dark-mode .q-legend-completed{color:#a7b2ff}.dark-mode .q-legend-failed{color:#f08a82}.dark-mode .q-legend-exec{color:#f5c842}.q-chart-tooltip .q-tip-exec{color:#b8860b}.dark-mode .q-chart-tooltip .q-tip-exec{color:#f5c842}.q-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;flex:1}.q-stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}.q-stat-value{font-family:var(--font-serif);font-size:1.25rem;font-weight:400;color:var(--color);line-height:1.2}.q-stats-actions{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.q-stats-actions .btn{font-family:var(--font-mono);font-size:11px;padding:6px 14px;border-radius:8px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.q-jobs{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-jobs-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}.q-state-filters{display:inline-flex;gap:6px;flex-wrap:wrap}.q-state-toggle{cursor:pointer;display:inline-flex;align-items:center}.q-state-toggle input{display:none}.q-state-chip{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:10px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);transition:opacity .15s,background .15s;text-transform:capitalize}.q-state-toggle input:checked+.q-state-chip{opacity:1}.q-state-toggle input:not(:checked)+.q-state-chip{opacity:.4;text-decoration:line-through}.q-state-badge,.q-state-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.q-state-badge{display:inline-block;padding:2px 8px;border-radius:8px}.q-state-active{background:#dbeafe;color:#1d4ed8}.q-state-waiting{background:#fef3c7;color:#92400e}.q-state-delayed{background:#e0e7ff;color:#4338ca}.q-state-failed{background:#fee2e2;color:#b91c1c}.q-state-completed{background:#dcfce7;color:#166534}.dark-mode .q-state-active{background:rgba(59,130,246,.2);color:#93bbfd}.dark-mode .q-state-waiting{background:rgba(251,191,36,.15);color:#fbbf24}.dark-mode .q-state-delayed{background:rgba(99,102,241,.2);color:#a5b4fc}.dark-mode .q-state-failed{background:rgba(239,68,68,.2);color:#fca5a5}.dark-mode .q-state-completed{background:rgba(34,197,94,.15);color:#86efac}.q-cell-state{width:120px}.q-delay-hint{display:block;font-size:10px;color:var(--ink-muted);margin-top:2px;font-family:var(--font-mono)}.q-search-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.q-search-row .form-control{max-width:320px;height:34px}.q-auto-refresh{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.q-table{width:100%;border-collapse:collapse}.q-table thead th{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap}.q-table tbody tr{border-bottom:1px solid var(--border-color);transition:background .1s}.q-table tbody tr:hover{background:var(--paper-bg-alt)}.q-table tbody tr:last-child{border-bottom:none}.q-table tbody td{padding:10px 10px;font-size:.875rem;vertical-align:middle}.q-cell-id{font-family:var(--font-mono);font-size:12px;white-space:nowrap}.q-cell-id{display:flex;align-items:center;gap:8px}.q-chevron{font-size:10px;color:var(--ink-muted);transition:transform .15s;flex-shrink:0}.q-chevron-open{transform:rotate(90deg)}.q-cell-id a{color:var(--color)}.q-cell-payload{font-family:var(--font-mono);font-size:12px;color:var(--color)}.q-payload-detail{color:var(--ink-muted)}.q-cell-num{font-family:var(--font-mono);font-size:12px;text-align:center;white-space:nowrap}.q-cell-progress{min-width:120px}.q-progress-wrap{display:flex;align-items:center;gap:8px}.q-progress-bar{flex:1;height:6px;border-radius:3px;overflow:hidden;background-image:linear-gradient(to right,#3b4ad6 var(--pct,0),var(--border-color) var(--pct,0))}.dark-mode .q-progress-bar{background-image:linear-gradient(to right,#a7b2ff var(--pct,0),var(--border-color) var(--pct,0))}.q-progress-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap;min-width:32px;text-align:right}.q-cell-actions{text-align:right;white-space:nowrap}.q-cell-actions .btn{padding:3px 8px;font-size:11px;background:0 0;border:1px solid var(--border-color);color:var(--ink-muted)}.q-cell-actions .btn:hover{color:var(--color)}.q-row-failed{background:rgba(180,35,24,.04)}.dark-mode .q-row-failed{background:rgba(240,138,130,.06)}.q-error-detail{padding:4px 10px 12px;font-size:12px}.q-error-reason{color:#b42318;font-size:.8125rem;margin-bottom:4px}.dark-mode .q-error-reason{color:#f08a82}.q-toast-error{background:#fbe7e7;color:#b42318;border:1px solid #f3c7c7;border-radius:8px;padding:10px 16px;margin-bottom:12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:8px}.dark-mode .q-toast-error{background:rgba(240,138,130,.1);color:#f08a82;border-color:rgba(240,138,130,.25)}.q-error-stack{font-size:.75rem;max-height:120px;overflow:auto;margin:4px 0 0;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:6px;padding:8px 10px}.q-row-expanded>td{border-bottom-color:transparent}.q-detail-row>td{padding:0 10px 14px!important;border-bottom:1px solid var(--border-color)}.q-job-detail{background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:8px;padding:14px 16px}.q-job-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 20px;margin-bottom:10px}.q-job-detail-item{display:flex;flex-direction:column;gap:2px}.q-job-detail-label{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.q-job-detail-value{font-family:var(--font-mono);font-size:12px;color:var(--color);word-break:break-all}.q-job-detail-value a{color:var(--color)}.q-job-detail-error{margin:8px 0}.q-job-detail-actions{display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color)}.q-job-detail-actions .btn{font-family:var(--font-mono);font-size:11px;padding:5px 12px;border-radius:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}@media (max-width:900px){.q-detail{grid-template-columns:1fr}.q-cards{flex-direction:column}.q-card{min-width:100%}.q-jobs-header{flex-direction:column;align-items:flex-start}.q-tabs{flex-wrap:wrap}.q-search-row{flex-wrap:wrap}.q-search-row .form-control{max-width:100%;flex:1}.q-table{font-size:12px}.q-header{flex-direction:column}.q-job-detail-grid{grid-template-columns:1fr 1fr}}@media (max-width:900px){.paper-table .paper-table-head{display:none}.paper-table .admin-users-row,.paper-table .paper-table-row,.paper-table.paper-table-conferences .paper-table-row,.paper-table.paper-table-repos .paper-table-row{display:flex!important;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:14px 0;grid-template-columns:none!important}.paper-table .cell-anon{flex:1 1 calc(100% - 52px);min-width:0;order:1}.paper-table .cell-actions{flex:0 0 auto;order:2;align-self:center}.paper-table .cell-conf,.paper-table .cell-expires,.paper-table .cell-status,.paper-table .cell-views{order:3;font-size:13px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;text-align:left}.paper-table .cell-status{flex-wrap:nowrap;gap:6px;min-width:0}.paper-table .cell-status .status-sub{flex-basis:auto;font-size:13px;line-height:inherit}.paper-table .cell-status .status-sub::before{content:"·";margin-right:6px;color:var(--ink-faint)}.paper-table .cell-conf{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views.num{text-align:left}.paper-table .paper-table-skeleton .cell-expires,.paper-table .paper-table-skeleton .cell-status,.paper-table .paper-table-skeleton .cell-views{flex:1 1 30%}.paper-table .cell-views::before{content:'\f06e';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table .cell-expires::before{content:'\f017';font-family:'Font Awesome 5 Free';font-weight:400;font-size:10px;color:var(--ink-muted)}.paper-table .cell-conf::before{content:'\f51c';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table-dashboard .cell-conf::before{content:none}.paper-table .cell-conf:has(.empty-dash),.paper-table .cell-expires:has(.empty-dash){display:none}.paper-table .cell-expires::before,.paper-table .cell-views::before{color:var(--ink-faint)}}.paper-page .dropdown-menu{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);box-shadow:0 12px 28px rgba(26,24,21,.08);padding:6px;min-width:220px;font-family:var(--font-sans);font-size:14px;color:var(--color);margin-top:6px}.paper-page .dropdown-menu .dropdown-header{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px;font-weight:500}.paper-page .dropdown-menu .dropdown-item{border-radius:6px;padding:8px 10px;color:var(--color);font-size:14px;display:flex;align-items:center;gap:8px}.paper-page .dropdown-menu .dropdown-item:focus,.paper-page .dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .dropdown-menu .dropdown-item i{width:16px;font-size:13px;color:var(--ink-muted)}.paper-page .dropdown-menu .form-check.dropdown-item{padding:8px 10px 8px 36px!important;position:relative}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-input{position:absolute;left:12px;top:50%;transform:translateY(-50%);margin:0;width:16px;height:16px;accent-color:var(--color);cursor:pointer}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-label{font-family:var(--font-sans);font-size:14px;color:var(--color);font-weight:400;margin:0;cursor:pointer}.btn.btn-icon-dots{width:32px;height:32px;padding:0;border:1px solid transparent;background:0 0;color:var(--ink-muted);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.btn.btn-icon-dots:focus,.btn.btn-icon-dots:hover,.btn.btn-icon-dots[aria-expanded=true]{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.btn.btn-icon-dots::after{display:none}.btn.btn-icon-dots i{font-size:15px}.paper-page .repo-list-empty{border-top:none;padding:56px 20px;color:var(--ink-muted)}.paper-page .filter-chip{background:var(--paper-bg-alt);color:var(--color);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px}@media (max-width:768px){.paper-page .paper-page-title{font-size:clamp(1.4rem,6vw,1.9rem);margin:4px 0 2px}.paper-page .paper-page-lede{font-size:13px;line-height:1.4;margin-bottom:0}.paper-page .btn-ink{padding:6px 12px;font-size:13px}.paper-page .quota-row{grid-template-columns:1fr;gap:12px;padding:0;margin:16px 0 0}.paper-page .dashboard-filter-row{padding:10px 0;margin-top:12px;gap:8px}.paper-page .quota-header{flex-direction:row;align-items:baseline;gap:8px}.paper-page .quota-value{white-space:nowrap}.paper-page .dashboard-filter-controls{width:100%}.paper-page .dashboard-filter-controls .btn-group{flex:1 1 100%;display:flex}.paper-page .dashboard-filter-controls .btn-group .btn{flex:1;justify-content:center}.paper-page .dashboard-filter-controls .dropdown{flex:1 1 0;min-width:0}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{width:100%;justify-content:space-between}.paper-page .dashboard-filter-controls .dropdown .filter-btn-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width:480px){.paper-page .paper-page-lede{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}.empty-state{text-align:center;padding:40px 20px;opacity:.6}.empty-state i{font-size:2rem;margin-bottom:10px;display:block}.paper-page .progress{height:10px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;margin-bottom:20px}.paper-page .progress .progress-bar{background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:10px;line-height:10px}.paper-page .progress .progress-bar.bg-success{background:var(--status-ready)!important}.paper-page .progress .progress-bar.bg-warning{background:var(--status-progress)!important;color:#fff}.paper-page .progress .progress-bar.bg-danger{background:var(--status-error)!important}.paper-page .progress .progress-bar.bg-dark{background:var(--ink-faint)!important}.paper-page .form>h5,.paper-page form>h5,.paper-page>h5{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin:24px 0 8px}.paper-page .accordion .card{background:var(--paper-card,var(--sidebar-bg-color));border:1px solid var(--border-color);border-radius:8px!important;margin-bottom:8px;overflow:hidden}.paper-page .accordion .card+.card{border-top:1px solid var(--border-color)}.paper-page .accordion .card-header{background:0 0;border:none;padding:0}.paper-page .accordion .card-header .btn{color:var(--color)!important;font-family:var(--font-sans);font-weight:500;font-size:14px;padding:14px 18px!important;background:0 0!important;border:none!important;position:relative}.paper-page .accordion .card-header .btn::after{content:"+";position:absolute;right:18px;font-family:var(--font-serif);font-size:20px;color:var(--ink-muted)}.paper-page .accordion .card-header .btn:not(.collapsed)::after{content:"–"}.paper-page .accordion .card-body{padding:6px 18px 18px!important;border-top:1px solid var(--border-soft)}.paper-page .accordion .form-check-label{color:var(--color);font-weight:500;font-size:14px}.paper-page .accordion .form-text{color:var(--ink-muted);font-size:12px;margin-top:2px}.faq-section .panel-body code{font-family:var(--font-mono);font-size:13px;padding:1px 6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:3px;color:var(--color)}.faq-section .panel-body a{color:var(--accent)}@media (max-width:820px){.paper-faq-body{grid-template-columns:1fr;gap:24px}.paper-faq-toc{position:static}}.paper-footer{margin-top:80px;padding:56px max(20px,calc((100vw - 1200px)/ 2)) 28px;border-top:1px solid var(--border-color);background:var(--canvas-bg-color);font-family:var(--font-sans)}.paper-footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}.paper-footer-brand .paper-footer-mark{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--color)}.paper-footer-brand .paper-footer-mark em{font-style:italic;font-weight:400}.paper-footer-tag{margin-top:10px;color:var(--ink-soft);font-size:14px;line-height:1.55;max-width:340px}.paper-footer-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}.paper-footer-col a{display:block;color:var(--color);font-size:14px;padding:4px 0;text-decoration:none}.paper-footer-col a:hover{color:var(--accent)}.paper-footer-rule{height:1px;background:var(--border-color);margin:40px 0 16px}.paper-footer-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-muted);font-family:var(--font-mono);letter-spacing:.02em}.paper-footer-foot .paper-footer-meta{font-family:var(--font-serif);font-style:italic;font-size:14px;letter-spacing:0;color:var(--ink-soft)}@media (max-width:768px){.paper-footer-inner{grid-template-columns:1fr 1fr}}.file.folder.truncated .truncated-warning{color:#d39e00;margin-left:4px;font-size:.85em;flex-shrink:0}.file.folder.truncated>a{color:#d39e00}body{--bucket-error-bg:#FCEDED;--bucket-error-fg:#8A1F1F;--bucket-error-bd:#F0C4C4;--bucket-error-dot:#B53737;--bucket-warn-bg:#FFF3DF;--bucket-warn-fg:#7A4D00;--bucket-warn-bd:#F0D8A0;--bucket-warn-dot:#B07A2F;--bucket-info-bg:#EAF2EC;--bucket-info-fg:#2C5D3A;--bucket-info-bd:#C5DCCD;--bucket-info-dot:#5B8D6B;--card-shadow:0 1px 2px rgba(26, 24, 21, 0.04),0 4px 14px rgba(26, 24, 21, 0.05);--card-shadow-hover:0 1px 2px rgba(26, 24, 21, 0.06),0 8px 24px rgba(26, 24, 21, 0.08)}.dark-mode{--bucket-error-bg:rgba(255, 139, 123, 0.10);--bucket-error-fg:#FF8B7B;--bucket-error-bd:rgba(255, 139, 123, 0.28);--bucket-error-dot:#FF8B7B;--bucket-warn-bg:rgba(255, 211, 122, 0.10);--bucket-warn-fg:#FFD37A;--bucket-warn-bd:rgba(255, 211, 122, 0.28);--bucket-warn-dot:#FFD37A;--bucket-info-bg:rgba(152, 200, 168, 0.10);--bucket-info-fg:#98C8A8;--bucket-info-bd:rgba(152, 200, 168, 0.28);--bucket-info-dot:#98C8A8;--card-shadow:0 1px 2px rgba(0, 0, 0, 0.35),0 6px 18px rgba(0, 0, 0, 0.30);--card-shadow-hover:0 2px 4px rgba(0, 0, 0, 0.45),0 12px 28px rgba(0, 0, 0, 0.40)}.errors-page .errors-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 8px}.errors-page .errors-actions{display:flex;gap:6px}.errors-page .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin:14px 0 18px}.errors-page .kpi-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease,transform 160ms ease}.errors-page .kpi-card:hover{box-shadow:var(--card-shadow-hover)}.errors-page .kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.errors-page .kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.errors-page .kpi-card.kpi-error .kpi-value{color:var(--bucket-error-fg)}.errors-page .kpi-card.kpi-warn .kpi-value{color:var(--bucket-warn-fg)}.errors-page .kpi-card.kpi-info .kpi-value{color:var(--bucket-info-fg)}.errors-page .kpi-sub{font-size:.75rem;color:var(--ink-muted);font-style:italic}.errors-page .kpi-sub.up{color:var(--bucket-error-fg);font-style:normal}.errors-page .kpi-sub.down{color:var(--bucket-info-fg);font-style:normal}.errors-page .dropped-warn{color:var(--bucket-error-fg);font-weight:600;font-style:normal}.errors-page .volume-chart{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;margin-bottom:18px;box-shadow:var(--card-shadow)}.errors-page .volume-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.errors-page .volume-legend{display:flex;gap:14px;align-items:center;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.errors-page .volume-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.errors-page .dot.dot-error{background:var(--bucket-error-dot)}.errors-page .dot.dot-warn{background:var(--bucket-warn-dot)}.errors-page .dot.dot-info{background:var(--bucket-info-dot)}.errors-page .volume-bars{display:flex;align-items:flex-end;gap:4px;height:80px}.errors-page .volume-bar{display:flex;flex-direction:column-reverse;flex:1 1 0;min-width:6px;height:100%}.errors-page .volume-bar .seg{display:block;width:100%}.errors-page .seg.seg-error{background:var(--bucket-error-dot)}.errors-page .seg.seg-warn{background:var(--bucket-warn-dot)}.errors-page .seg.seg-info{background:var(--bucket-info-dot);opacity:.7}.errors-page .errors-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.errors-page .seg-tabs{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--paper-card)}.errors-page .seg-tabs button{background:0 0;border:none;padding:6px 14px;font-size:.875rem;cursor:pointer;color:var(--color);font-family:var(--font-sans)}.errors-page .seg-tabs button+button{border-left:1px solid var(--border-color)}.errors-page .seg-tabs button.active{background:var(--primary-bg);color:var(--primary-color)}.errors-page .errors-toolbar .search-wrap{position:relative;flex:1 1 320px;min-width:220px}.errors-page .errors-toolbar .search-wrap input{width:100%;padding:6px 10px 6px 32px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--font-mono);font-size:.8125rem;background:var(--input-bg);color:var(--input-color)}.errors-page .errors-toolbar .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-muted);font-size:.875rem}.errors-page .errors-toolbar .filter-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:.75rem;color:var(--ink-muted)}.errors-page .errors-toolbar .select-wrap{display:inline-flex;align-items:center;gap:6px}.errors-page .errors-toolbar .select-wrap label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0}.errors-page .errors-toolbar .select-wrap select{background:var(--input-bg);color:var(--input-color);border:1px solid var(--border-color);border-radius:8px}.errors-page .errors-toolbar .autoref{display:inline-flex;gap:6px;align-items:center;font-size:.8125rem;color:var(--color);cursor:pointer;margin:0}.errors-page .btn-icon{width:32px;padding:4px 0}.errors-page .errors-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;box-shadow:var(--card-shadow)}.errors-page .errors-list-head,.errors-page .errors-row-main{display:grid;grid-template-columns:110px 100px 100px 1fr 60px 70px;gap:16px;padding:18px 20px;align-items:start}.errors-page .errors-list-head{padding:12px 20px;align-items:center}.errors-page .errors-list-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.errors-page .errors-row{border-bottom:1px solid var(--border-soft)}.errors-page .errors-row:last-child{border-bottom:none}.errors-page .errors-row.open{background:var(--paper-bg-alt)}.errors-page .errors-row-main{cursor:pointer}.errors-page .errors-row-main:hover{background:var(--hover-bg-color)}.errors-page .col-when .when-rel{font-size:.9375rem;color:var(--color);font-variant-numeric:tabular-nums}.errors-page .col-when .when-abs{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-top:2px}.errors-page .col-sev{display:flex;align-items:center;gap:8px}.errors-page .sev-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.errors-page .sev-dot.sev-error{background:var(--bucket-error-dot)}.errors-page .sev-dot.sev-warn{background:var(--bucket-warn-dot)}.errors-page .sev-dot.sev-info{background:var(--bucket-info-dot)}.errors-page .sev-label{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;color:var(--color)}.errors-page .pill-module{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--paper-bg-alt);color:var(--ink-soft);border:1px solid var(--border-color);padding:3px 10px;border-radius:6px}.errors-page .col-msg .msg-code{font-family:var(--font-mono);font-size:1rem;color:var(--color);font-weight:600}.errors-page .col-msg .msg-context{color:var(--ink-muted);font-style:italic;font-size:.875rem;margin-left:10px}.errors-page .col-msg .msg-detail{color:var(--ink-soft);font-family:var(--font-mono);font-size:.8125rem;margin-left:10px}.errors-page .col-msg .msg-url{color:var(--ink-muted);font-family:var(--font-mono);font-size:.8125rem;margin-top:6px;word-break:break-all}.errors-page .count-pill{display:inline-block;padding:2px 8px;border-radius:4px;background:var(--primary-bg);color:var(--primary-color);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums}.errors-page .count-pill.count-pill-muted{background:0 0;color:var(--ink-muted);border:1px solid var(--border-color)}.errors-page .status-pill{display:inline-block;padding:2px 10px;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid transparent}.errors-page .status-pill.status-error{background:var(--bucket-error-bg);color:var(--bucket-error-fg);border-color:var(--bucket-error-bd)}.errors-page .status-pill.status-warn{background:var(--bucket-warn-bg);color:var(--bucket-warn-fg);border-color:var(--bucket-warn-bd)}.errors-page .status-pill.status-info{background:var(--bucket-info-bg);color:var(--bucket-info-fg);border-color:var(--bucket-info-bd)}.errors-page .errors-row-detail{padding:0 16px 16px}.errors-page .detail-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);margin-bottom:12px}.errors-page .detail-tabs button{background:0 0;border:0;border-bottom:2px solid transparent;padding:8px 12px;font-size:.875rem;cursor:pointer;color:var(--ink-muted);font-family:var(--font-sans)}.errors-page .detail-tabs button.active{color:var(--color);border-bottom-color:var(--color)}.errors-page .detail-body{display:grid;grid-template-columns:1fr 260px;gap:20px}.errors-page .detail-main pre{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;color:var(--color);max-height:26em;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;box-shadow:var(--card-shadow)}.errors-page .related-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;max-height:22em;overflow:auto;box-shadow:var(--card-shadow)}.errors-page .stack-pre{line-height:1.45;white-space:pre;overflow-x:auto}.errors-page .related-row{display:flex;gap:10px;padding:6px 12px;align-items:center;border-bottom:1px solid var(--border-soft);font-size:.8125rem}.errors-page .related-row:last-child{border-bottom:none}.errors-page .detail-actions{display:flex;gap:6px;align-items:center;margin-top:10px}.errors-page .copy-hint{font-size:.75rem;color:var(--bucket-info-fg)}.errors-page .detail-aside{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px;box-shadow:var(--card-shadow)}.errors-page .aside-block+.aside-block{margin-top:16px}.errors-page .aside-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-bottom:4px}.errors-page .aside-value{font-family:var(--font-serif);font-size:1rem;color:var(--color);word-break:break-word;line-height:1.3}.errors-page .aside-value.mono{font-family:var(--font-mono);font-size:.8125rem}.errors-page .aside-sub{color:var(--ink-muted);font-style:italic;font-size:.8125rem;font-family:var(--font-sans)}.errors-page .errors-pager{display:flex;justify-content:space-between;align-items:center;padding:10px 0;color:var(--ink-muted);font-size:.875rem}@media (max-width:720px){.errors-page .errors-list-head,.errors-page .errors-row-main{grid-template-columns:80px 80px 1fr 60px}.errors-page .errors-list-head .col-mod,.errors-page .errors-list-head .col-sev,.errors-page .errors-row-main .col-mod,.errors-page .errors-row-main .col-sev{display:none}.errors-page .detail-body{grid-template-columns:1fr}}.overview-page .ov-header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:2px}.overview-page .ov-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:6px;vertical-align:middle}.overview-page .ov-dot-ok{background:#2f7a44}.overview-page .ov-dot-warn{background:#c48a2e}.overview-page .ov-dot-idle{background:var(--ink-muted)}.dark-mode .overview-page .ov-dot-ok{background:#7dc894}.dark-mode .overview-page .ov-dot-warn{background:#e8b970}.overview-page .ov-kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin:16px 0 22px}.overview-page .ov-kpi-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease}.overview-page .ov-kpi-card:hover{box-shadow:var(--card-shadow-hover)}.overview-page .ov-kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.overview-page .ov-kpi-value.ov-val-warn{color:#b42318}.dark-mode .overview-page .ov-kpi-value.ov-val-warn{color:#f08a82}.overview-page .ov-kpi-sub{font-size:.75rem;color:var(--ink-muted);margin-top:2px}.overview-page .ov-daily-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:-4px 0 22px}.overview-page .ov-daily-card{background:var(--primary-bg);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-daily-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-daily-value{font-family:var(--font-serif);font-size:2.5rem;font-weight:400;line-height:1;color:var(--accent,#3b4ad6);margin-top:6px}.overview-page .ov-daily-sub{font-size:.75rem;color:var(--ink-muted);margin-top:5px}.dark-mode .overview-page .ov-daily-card{background:var(--paper-card)}.dark-mode .overview-page .ov-daily-value{color:#a7b2ff}.overview-page .ov-chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.overview-page .ov-chart-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px 14px;box-shadow:var(--card-shadow)}.overview-page .ov-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.overview-page .ov-chart-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-chart-legend{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);display:flex;align-items:center;gap:5px}.overview-page .ov-dot-legend{display:inline-block;width:8px;height:8px;border-radius:50%}.overview-page .ov-dot-accent{background:var(--accent,#3b4ad6)}.overview-page .ov-dot-ok-fill{background:#2f7a44}.overview-page .ov-dot-user-fill{background:#8b5e2e}.overview-page .ov-dot-new-user-fill{background:#c48a2e}.dark-mode .overview-page .ov-dot-ok-fill{background:#7dc894}.dark-mode .overview-page .ov-dot-user-fill{background:#d0a15f}.dark-mode .overview-page .ov-dot-new-user-fill{background:#e8b970}.overview-page .ov-spark-bars{display:flex;align-items:flex-end;gap:3px;height:140px}.overview-page .ov-spark-col{flex:1;display:flex;align-items:flex-end;height:100%;position:relative}.overview-page .ov-spark-fill{width:100%;background:var(--accent,#3b4ad6);border-radius:2px 2px 0 0;transition:height .3s ease;opacity:.55}.overview-page .ov-spark-fill-alt{background:#2f7a44}.overview-page .ov-spark-fill-user{background:#8b5e2e}.overview-page .ov-spark-fill-new-user{background:#c48a2e}.dark-mode .overview-page .ov-spark-fill-alt{background:#7dc894}.dark-mode .overview-page .ov-spark-fill-user{background:#d0a15f}.dark-mode .overview-page .ov-spark-fill-new-user{background:#e8b970}.overview-page .ov-spark-col:hover .ov-spark-fill{opacity:1}.overview-page .ov-spark-col.has-tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%) translateY(4px);z-index:10;padding:6px 8px;border-radius:6px;background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:.6875rem;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip::before{content:"";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%) translateY(4px);z-index:10;border:5px solid transparent;border-top-color:var(--color);opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip:hover::after,.overview-page .ov-spark-col.has-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}.overview-page .ov-spark-x{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);margin-top:6px}.overview-page .ov-triple-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}.overview-page .ov-panel-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-panel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}.overview-page .ov-panel-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-panel-meta{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.overview-page .ov-panel-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color);font-size:.8125rem}.overview-page .ov-panel-foot a{color:var(--link-color);text-decoration:none}.overview-page .ov-panel-foot a:hover{text-decoration:underline}.overview-page .ov-performance{min-width:0;margin:22px 0}.overview-page .ov-performance-head{align-items:center;flex-wrap:wrap;gap:12px 20px}.overview-page .ov-performance-head h2{margin:0 0 4px}.overview-page .ov-performance-note{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--ink-muted)}.overview-page .ov-performance-head .ov-performance-note{margin:0}.overview-page .ov-performance-window{display:flex;align-items:center;gap:8px;flex-shrink:0}.overview-page .ov-performance-window label{margin:0;font-size:12px;color:var(--ink-muted)}.overview-page .ov-performance-window select{width:auto}.overview-page .ov-performance-tabs{margin:0 0 16px;gap:4px}.overview-page .ov-performance-tabs .paper-tab{white-space:nowrap}.overview-page .ov-metrics-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-color);border-radius:var(--radius-control,8px)}.overview-page .ov-metrics-table{width:100%;border-collapse:collapse;color:var(--color);font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums}.overview-page .ov-metrics-table td,.overview-page .ov-metrics-table th{padding:10px 12px;border-bottom:1px solid var(--border-color);vertical-align:middle;white-space:nowrap}.overview-page .ov-metrics-table thead th{background:var(--paper-bg-alt);color:var(--ink-muted);font-size:12px;font-weight:500}.overview-page .ov-metrics-table .num{text-align:right}.overview-page .ov-metrics-table tr:last-child>*{border-bottom:0}.overview-page .ov-metrics-table thead tr:last-child>*{border-bottom:1px solid var(--border-color)}.overview-page .ov-metrics-table tbody tr:hover{background:var(--hover-bg-color)}.overview-page .ov-metrics-table .ov-metric-name{min-width:190px;max-width:280px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-weight:500}.overview-page .ov-metrics-table small{display:block;margin-top:3px;font-size:11px;font-weight:400;color:var(--ink-muted)}.overview-page .ov-metrics-table small .ui-icon{width:12px;height:12px}.overview-page .ov-metric-warning-row{background:rgba(196,138,46,.07)}.overview-page .ov-metric-warn,.overview-page .ov-metrics-table small.ov-metric-warn{color:#946519}.dark-mode .overview-page .ov-metric-warn,.dark-mode .overview-page .ov-metrics-table small.ov-metric-warn{color:#e8b970}.overview-page .ov-performance-message{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border-color);border-radius:var(--radius-control,8px);font-size:13px;line-height:1.5}.overview-page .ov-performance-message span{flex:1;min-width:160px}.overview-page .ov-performance-warning{background:rgba(196,138,46,.07)}.overview-page .ov-performance-empty{margin:0;padding:24px 12px;text-align:center;font-size:13px;color:var(--ink-muted)}.overview-page .ov-performance-help{margin-top:16px;font-size:12px;line-height:1.6;color:var(--ink-muted)}.overview-page .ov-performance-help summary{width:fit-content;cursor:pointer}.overview-page .ov-performance-help p{margin:8px 0 0;max-width:80ch}@media (max-width:575px){.overview-page .ov-performance{padding:16px 12px}.overview-page .ov-performance-window{width:100%}.overview-page .ov-performance-window select{flex:1;min-width:0}.overview-page .ov-performance-tabs .paper-tab{flex:1;padding:10px 8px}}.overview-page .ov-stacked-bar{display:flex;height:18px;border-radius:6px;overflow:hidden;margin-bottom:14px}.overview-page .ov-bar-seg{min-width:2px;transition:width .4s ease}.overview-page .ov-bar-ready{background:#2f7a44}.overview-page .ov-bar-preparing{background:#c48a2e}.overview-page .ov-bar-error{background:#b42318}.overview-page .ov-bar-expired{background:#8a857c}.overview-page .ov-bar-removed{background:#b5afa2}.dark-mode .overview-page .ov-bar-ready{background:#7dc894}.dark-mode .overview-page .ov-bar-preparing{background:#e8b970}.dark-mode .overview-page .ov-bar-error{background:#f08a82}.dark-mode .overview-page .ov-bar-expired{background:#6b665e}.dark-mode .overview-page .ov-bar-removed{background:#4a453e}.overview-page .ov-bar-legend{display:flex;flex-direction:column;gap:6px}.overview-page .ov-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;text-decoration:none;color:inherit}.overview-page .ov-legend-item:hover{text-decoration:none;color:inherit}.overview-page .ov-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}.overview-page .ov-legend-n{margin-left:auto;font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.overview-page .ov-error-bars{display:flex;flex-direction:column;gap:12px}.overview-page .ov-ebar-row{display:flex;align-items:center;gap:10px}.overview-page .ov-ebar-label{width:30px;flex-shrink:0;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;color:var(--ink-muted)}.overview-page .ov-ebar-track{flex:1;height:10px;background:var(--hover-bg-color);border-radius:5px;overflow:hidden}.overview-page .ov-ebar-fill{height:100%;border-radius:5px;transition:width .4s ease}.overview-page .ov-ebar-error{background:#b42318}.overview-page .ov-ebar-warn{background:#c48a2e}.overview-page .ov-ebar-info{background:var(--accent,#3b4ad6)}.dark-mode .overview-page .ov-ebar-error{background:#f08a82}.dark-mode .overview-page .ov-ebar-warn{background:#e8b970}.overview-page .ov-ebar-n{width:36px;text-align:right;font-family:var(--font-mono);font-size:.8125rem;font-weight:600;flex-shrink:0}.overview-page .ov-routes-table{display:flex;flex-direction:column}.overview-page .ov-route-row{display:grid;grid-template-columns:1fr 60px 60px 60px;padding:8px 0;border-bottom:1px solid var(--border-soft,var(--border-color));text-decoration:none;color:inherit;font-size:.875rem;align-items:center}.overview-page .ov-route-row:last-child{border-bottom:none}.overview-page .ov-route-row:hover{background:var(--hover-bg-color);text-decoration:none;color:inherit}.overview-page .ov-route-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-color)}.overview-page .ov-route-head:hover{background:0 0}.overview-page .ov-route-name{font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-n{text-align:right;font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-lat{color:var(--ink-muted)}.overview-page .ov-n-bad{color:#b42318;font-weight:600}.dark-mode .overview-page .ov-n-bad{color:#f08a82}.overview-page .ov-services-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;box-shadow:var(--card-shadow);margin-bottom:18px}.overview-page .ov-services-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.overview-page .ov-services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.overview-page .ov-svc{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border-soft,var(--border-color));border-radius:10px}.overview-page .ov-svc-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}.overview-page .ov-svc-info{display:flex;flex-direction:column;gap:1px;flex:1}.overview-page .ov-svc-name{font-family:var(--font-mono);font-size:.875rem;font-weight:600}.overview-page .ov-svc-meta{font-size:.75rem;color:var(--ink-muted)}.overview-page .ov-svc-detail{font-size:.75rem;color:var(--ink-muted);white-space:nowrap}@media (max-width:900px){.overview-page .ov-kpi-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-daily-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-triple-row{grid-template-columns:1fr}}@media (max-width:720px){.overview-page .ov-kpi-row{grid-template-columns:repeat(2,1fr)}.overview-page .ov-daily-row{grid-template-columns:1fr}.overview-page .ov-chart-row{grid-template-columns:1fr}.overview-page .ov-header{flex-direction:column;gap:8px}}@media (max-width:480px){.overview-page .ov-kpi-row{grid-template-columns:1fr 1fr}.overview-page .ov-services-grid{grid-template-columns:1fr 1fr}}.dashboard-heading-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-bottom:12px}.dashboard-heading-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}.dashboard-connections-link{display:inline-flex;align-items:center;gap:7px;min-height:32px;color:var(--ink-muted);font-size:12px;line-height:1.5}.dashboard-connections-link:hover{color:var(--accent);text-decoration:none}.dashboard-connections-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}@media (max-width:767px){.dashboard-heading-actions{align-items:flex-start;padding-bottom:0;gap:4px}.dashboard-connections-link{min-height:44px}}.paper-settings-connection-link{display:flex;align-items:center;gap:12px;padding:18px 0;color:var(--color);font-size:14px}.paper-settings-connection-link>i{color:var(--ink-muted);font-size:18px}.paper-settings-connection-link>span:first-of-type{flex:1}.paper-settings-connection-link small{display:block;margin-top:4px;color:var(--ink-muted);font-size:12px}.paper-settings-connection-link:hover{color:var(--accent);text-decoration:none}.paper-settings-connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.connections-heading{margin-bottom:36px}.connections-heading .paper-page-title{font-size:clamp(38px,4.5vw,56px);margin-bottom:12px}.connections-heading .paper-page-lede{font-size:15px}.connections-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:56px;align-items:start;border-top:1px solid var(--border-color);padding-top:28px}.connections-grid>section{min-width:0}.connection-title,.connection-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.connection-top{margin-bottom:24px;min-height:28px}.connection-top>i{color:var(--ink-muted);font-size:24px}.connection-top>.fa-key{font-size:18px}.connection-title{margin-bottom:10px}.connections-page h2{font-family:inherit;font-size:22px;font-weight:600;letter-spacing:-.5px;margin:0}.connections-page p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.connection-badge{background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:600;border-radius:5px;padding:4px 8px;white-space:nowrap}.connection-badge-muted{background:var(--paper-bg-alt);color:var(--ink-muted)}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-muted)}.connection-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}.connection-status.is-connected{color:var(--status-ready)}.connection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:22px 0 16px}.connections-page .btn{font-size:13px;padding:9px 13px;white-space:normal}.connection-revoke p,.connections-page .connection-help{font-size:12px}.connection-link{display:inline-flex;align-items:center;gap:8px;border:0;padding:0;background:0 0;color:var(--accent);font-size:13px;line-height:1.6;font-weight:500;text-align:left;cursor:pointer}.connection-link:hover{color:var(--link-hover-color);text-decoration:underline}.connection-link:disabled{color:var(--ink-muted);opacity:.65;cursor:not-allowed;text-decoration:none}.connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.connection-installations{list-style:none;padding:0;margin:18px 0;border-top:1px solid var(--border-soft)}.connection-installations li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 0;font-size:12px;border-bottom:1px solid var(--border-soft)}.connection-revoke{border-top:1px solid var(--border-soft);padding-top:18px;margin-top:24px}.connection-danger{color:var(--status-error)}.connection-resources{margin-top:36px;padding-top:28px;border-top:1px solid var(--border-color)}.connection-count{color:var(--ink-muted);font-size:12px}.connection-empty{display:flex;align-items:center;gap:18px;padding:20px 0;margin:22px 0}.connection-empty>i{font-size:22px;color:var(--ink-muted)}.connection-empty h3{font-size:14px;font-weight:600;margin:0 0 5px}.connection-empty p{font-size:12px;margin:0}.connection-empty>a{margin-left:auto;flex-shrink:0}.connection-resource{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0;border-bottom:1px solid var(--border-color)}.connection-resource-name{flex:1;min-width:180px;overflow-wrap:anywhere;font-size:14px}.connection-resource-name small{display:block;color:var(--ink-muted);font-size:11px;margin-top:5px}.connection-resource-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.connection-resource-actions .connection-help{flex-basis:100%}.connections-page .connection-footnote{display:flex;align-items:baseline;gap:10px;margin-top:22px;font-size:12px}@media (max-width:767px){.connections-grid{grid-template-columns:1fr;gap:28px}.connections-grid>section+section{border-top:1px solid var(--border-color);padding-top:28px}.connection-empty{flex-wrap:wrap}.connection-empty>div{flex:1;min-width:180px}.connection-empty>a{margin-left:40px}.connection-resource-actions{flex-basis:100%}}.paper-table-empty-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.paper-table-empty-actions .btn>i{font-size:1em;line-height:1;color:inherit;margin-right:0!important}.auth-back{display:inline-flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-muted);margin-bottom:48px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.auth-intro,.auth-options{padding-top:28px}.auth-title-mobile{display:none}.auth-intro .paper-page-title{font-size:clamp(48px,5vw,76px);line-height:1.06;margin:18px 0 24px}.auth-intro .paper-page-lede{max-width:330px}.auth-options{display:grid;gap:28px}.auth-options h2{font-family:inherit;font-size:22px;font-weight:600;margin:0 0 10px}.auth-options p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.auth-options .auth-existing{font-size:12px;border-left:2px solid var(--accent);padding-left:14px;margin:0}.auth-permissions{padding:6px 0 12px;list-style:none;font-size:13px;line-height:1.6}.auth-permissions li{display:flex;gap:10px;margin:12px 0}.auth-permissions i{color:var(--status-ready);margin-top:4px}.auth-continue{display:flex!important;align-items:center;justify-content:space-between;min-height:48px;padding:12px 16px!important}.auth-options small{display:block;font-size:12px;text-align:center;color:var(--ink-muted);margin-top:12px}.auth-legacy{border-top:1px solid var(--border-color);padding-top:24px}.auth-legacy h2{font-size:16px;margin:0}.auth-legacy p{font-size:13px}.source-url-label-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:8px}.source-url-label-row>.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.repo-access{margin:0}.repo-access-details{margin:12px 0 24px}.source-url-label-row .repo-access-switch{padding:2px}.source-url-label-row .repo-access-switch button{padding:6px 10px;font-size:12px;line-height:20px}.repo-access-main{display:flex;align-items:center;gap:10px;padding:0 0 8px;flex-wrap:wrap}.repo-access-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.repo-access-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--border-color);border-radius:7px;flex-wrap:wrap}.repo-access-switch button{border:0;border-radius:4px;background:0 0;color:var(--ink-muted);padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.repo-access-switch button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);opacity:1;cursor:default;font-weight:600}.repo-access-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.repo-access-details .btn{font-size:12px;padding:8px 12px}.repo-access-note{display:flex;gap:6px 16px;flex-wrap:wrap;padding:0;color:var(--ink-muted);font-size:11px;line-height:1.6}@media (max-width:767px){.auth-page{max-width:480px}.auth-back,.auth-intro .paper-eyebrow,.auth-title-desktop{display:none}.auth-title-mobile{display:inline}.auth-layout{grid-template-columns:1fr;gap:24px}.auth-intro,.auth-options{padding-top:0}.auth-intro .paper-page-title{font-size:40px;line-height:1.15;margin:6px 0 12px}.auth-intro .paper-page-lede{max-width:none;font-size:14px;margin:0}.auth-options{gap:24px}.auth-options .connection-top{margin-bottom:16px}.auth-options h2{font-size:18px}.auth-options p{font-size:13px;margin-bottom:12px}.auth-permissions{padding:0;margin:14px 0 20px;font-size:12px}.auth-permissions li{margin:8px 0}.auth-continue{font-size:14px}.auth-legacy{padding-top:20px}.auth-legacy h2{font-size:15px}.auth-legacy .connection-link{min-height:44px}.repo-access-controls{width:100%;gap:12px}}.text-muted{color:var(--ink-muted)!important}.anonymize-review-note,.draft-status{font-size:13px;color:var(--ink-muted)}.anonymize-review-note{padding:12px 0;margin:0}.anonymize-preview-status{padding:20px 32px;color:var(--ink-muted)}.anonymize-preview-status p{margin:0 0 12px}@media (max-width:575px){.dashboard-page .paper-page-lede{margin-bottom:8px}.dashboard-page .dashboard-heading-actions{gap:4px}.dashboard-page .dashboard-connections-link{min-height:32px}.dashboard-page .dashboard-filter-row{margin-top:12px}.anonymize-preview-status{padding:16px}}.paper-page .paper-page-title{font-size:32px}.paper-page.admin-page .paper-page-title{font-size:28px}.paper-page .paper-page-lede{font-size:14px;line-height:1.5}.paper-settings{padding-top:32px}.paper-settings-body{grid-template-columns:180px minmax(0,1fr);gap:40px;margin-top:24px;padding-top:24px;border-top:0}.paper-settings-main .paper-settings-section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px;margin-bottom:16px}.anonymize-page .paper-section-eyebrow,.paper-settings .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:-.01em;margin-bottom:12px}.paper-settings .paper-settings-toc-head{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-settings-section .paper-section-copy{margin-top:0}.paper-settings .quota-row{gap:24px}.paper-settings .quota-header{flex-direction:column;align-items:flex-start;gap:4px}.paper-settings .quota-value{white-space:nowrap}.paper-settings .paper-settings-footer{padding:0 0 20px}.paper-settings .form-control{font-size:14px;border-color:var(--border-color);border-radius:var(--radius-control)}.paper-settings .form-check{padding-top:8px;padding-bottom:8px}.anonymize-page .btn-ink,.explorer-page .btn-ink,.paper-page .btn-ink{background:var(--accent);color:#fff;border-color:var(--accent)}.dark-mode .anonymize-page .btn-ink,.dark-mode .explorer-page .btn-ink,.dark-mode .paper-page .btn-ink{color:#1a1815}.anonymize-page .btn-ink:hover,.explorer-page .btn-ink:hover,.paper-page .btn-ink:hover{background:var(--accent);border-color:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .anonymize-page .btn-ink:hover,.dark-mode .explorer-page .btn-ink:hover,.dark-mode .paper-page .btn-ink:hover{color:#1a1815}.anonymize-page .btn-ink:active,.explorer-page .btn-ink:active,.paper-page .btn-ink:active{filter:brightness(.9)}input[type=date],select{color-scheme:light}.dark-mode input[type=date],.dark-mode select{color-scheme:dark}.draft-status{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 0}.draft-discard{padding:0;border:0;color:var(--accent);font:inherit;font-size:13px;text-decoration:underline;background:0 0;cursor:pointer}.conference-feedback{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;margin-top:16px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);width:100%}.paper-table{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);margin-top:12px}.paper-table .paper-table-head{font-family:var(--font-sans);text-transform:none;letter-spacing:0;font-size:12px;background:var(--paper-bg-alt);border-radius:var(--radius-surface) var(--radius-surface) 0 0}.paper-table .paper-table-head,.paper-table .paper-table-row{padding-left:16px;padding-right:16px}.dashboard-page{--dashboard-space-xs:4px;--dashboard-space-sm:8px;--dashboard-space-md:12px;--dashboard-space-lg:16px;--dashboard-space-xl:24px;padding-top:var(--dashboard-space-xl)}.project-icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.project-type-svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.project-empty-icon{width:28px;height:28px;color:var(--ink-faint)}.project-type-icon{display:inline-flex;color:var(--ink-muted);flex-shrink:0}.dashboard-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--dashboard-space-lg)}.dashboard-heading .paper-page-title{font-size:28px;margin-bottom:var(--dashboard-space-xs)}.dashboard-heading .paper-page-lede{display:none}.dashboard-heading .btn{min-height:40px;display:inline-flex;gap:var(--dashboard-space-sm);align-items:center}.dashboard-new-mobile{display:none}.dashboard-quota{position:relative;margin:0;padding:0;border:0;background:0 0}.dashboard-quota>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:5px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--paper-card);color:var(--color);font-family:var(--font-sans);font-size:12px;cursor:pointer;list-style:none;white-space:nowrap}.dashboard-quota>summary::-webkit-details-marker{display:none}.dashboard-quota>summary:hover,.dashboard-quota[open]>summary{background:var(--paper-bg-alt);border-color:var(--ink-faint)}.quota-summary-label{font-weight:600}.quota-summary-value{color:var(--ink-muted);font-variant-numeric:tabular-nums}.quota-summary-ring{width:18px;height:18px;flex-shrink:0;fill:none;stroke-width:2.5}.quota-ring-track{stroke:var(--border-color)}.quota-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.quota-summary-ring.quota-warn .quota-ring-fill{stroke:var(--status-progress)}.quota-summary-ring.quota-danger .quota-ring-fill{stroke:var(--status-error)}.quota-ring-unlimited{stroke:var(--accent);stroke-width:1.7}.quota-summary-chevron{width:14px;height:14px;margin-left:2px;color:var(--ink-muted);transition:transform .15s ease}.dashboard-quota[open] .quota-summary-chevron{transform:rotate(180deg)}.dashboard-quota .quota-panel{position:absolute;z-index:25;top:calc(100% + 8px);left:0;width:344px;max-width:calc(100vw - 36px);padding:16px;border:1px solid var(--border-color);border-radius:12px;background:var(--paper-card);box-shadow:0 12px 36px rgba(26,24,21,.16)}.quota-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.quota-panel-heading h2{font:600 15px var(--font-sans);margin:0}.quota-panel-heading .project-close{margin:-8px -8px -8px 0}.paper-page .quota-usage{display:grid;grid-template-columns:1fr;gap:16px;margin:0;padding:0}.quota-usage .quota-item+.quota-item{padding-top:16px;border-top:1px solid var(--border-soft,var(--border-color))}.quota-usage .quota-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.quota-usage .quota-label{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--font-sans);letter-spacing:0;text-transform:none;color:var(--ink-muted)}.quota-usage .quota-label .project-type-svg{width:16px;height:16px}.quota-usage .quota-value{display:flex;align-items:baseline;gap:4px;font:12px var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-muted);margin-bottom:8px}.quota-usage .quota-value strong{font-size:20px;line-height:1.2;font-weight:600;color:var(--color)}.quota-percent,.quota-usage .quota-unlimited-tag{margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--paper-bg-alt);font:11px var(--font-sans);color:var(--ink-muted);white-space:nowrap}.quota-warn>.quota-header .quota-percent{color:var(--status-progress)}.quota-danger>.quota-header .quota-percent{color:var(--status-error)}.quota-usage .quota-track{height:5px;border:0;background:var(--paper-bg-alt)}.quota-usage .quota-track .quota-fill{min-width:0;background:var(--accent)}.quota-remaining{margin:6px 0 0;color:var(--ink-muted);font-size:11px}.quota-remaining.quota-limit{color:var(--status-error)}.quota-loading{font-size:12px;color:var(--ink-muted);margin:12px 0 0}.dashboard-page .dashboard-filter-row{display:flex;align-items:center;gap:var(--dashboard-space-md);padding:0;margin:var(--dashboard-space-lg) 0 0;border:0;background:0 0}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 240px;min-width:0}.dashboard-page .dashboard-filter-row .form-control{height:40px;padding:8px 12px;font-size:13px;background:var(--paper-card)}.dashboard-page .dashboard-filter-controls{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--dashboard-space-sm)}.dashboard-extra-filters{display:flex;gap:var(--dashboard-space-sm)}.dashboard-filters-toggle{display:none}.dashboard-page .dashboard-filter-row .btn-group .btn{border:0;background:0 0;border-radius:6px;height:36px;padding:6px 10px}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--accent-soft);color:var(--accent)}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:active,.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.dashboard-page .dashboard-filter-row .dropdown-toggle{height:36px;padding:6px 10px}.dashboard-type-filter .project-type-svg{display:none}.sort-direction{width:14px;height:14px}.sort-direction.ascending{transform:rotate(180deg)}.dashboard-page .dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dashboard-space-sm) var(--dashboard-space-md);margin:var(--dashboard-space-md) 0 0;padding:0}.dashboard-view-tabs{display:flex;align-items:center;gap:var(--dashboard-space-lg)}.dashboard-view-short{display:none}.dashboard-view-tabs button{min-height:36px;border:0;border-bottom:2px solid transparent;border-radius:0;background:0 0;font:inherit;font-size:13px;color:var(--ink-muted);padding:4px 0}.dashboard-view-tabs button[aria-pressed=true]{color:var(--color);border-bottom-color:var(--color);font-weight:600}.attention-count{padding:1px 5px;margin-left:4px;border-radius:4px;background:var(--paper-bg-alt);font-size:11px;font-variant-numeric:tabular-nums}.attention-count.has-attention{color:var(--status-error)}.dashboard-count{margin-left:auto;font-size:12px;color:var(--ink-muted)}.dashboard-active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:var(--dashboard-space-sm);width:100%}.dashboard-page .filter-chip{display:inline-flex;font-family:var(--font-sans);font-size:11px;text-transform:none;letter-spacing:0;border-radius:6px}.dashboard-page .filter-chip .project-type-svg{width:12px;height:12px;margin-left:4px}.dashboard-page .filter-chip-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin:-2px -4px -2px 2px}.dashboard-page .btn-link-inline{color:var(--ink-muted);font-size:12px}.dashboard-page .paper-table-dashboard{margin-top:var(--dashboard-space-md);border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table-dashboard .paper-table-head,.dashboard-page .paper-table-dashboard .paper-table-row{grid-template-columns:minmax(280px,3fr) 180px 72px 148px 64px;gap:var(--dashboard-space-lg);padding:8px 12px}.dashboard-page .paper-table-dashboard .paper-table-head{border-radius:0}.dashboard-page .paper-table .cell-anon{gap:var(--dashboard-space-sm)}.dashboard-page .paper-table .anon-text{flex:1}.dashboard-page .paper-table .repo-name{font-family:var(--font-sans);font-size:14px;font-weight:600}.dashboard-page .paper-table .anon-sub{display:flex;align-items:center;gap:var(--dashboard-space-sm);min-width:0}.anonymous-id{font-size:12px;font-family:var(--font-mono);color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-page .paper-table .type-badge{font-family:var(--font-sans);letter-spacing:0;font-size:11px;text-transform:none;border-radius:6px}.dashboard-page .paper-table .status-sub{font-size:12px}.dashboard-page .paper-table .cell-conf{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.dashboard-page .conf-tag .project-type-svg{width:14px;height:14px}.dashboard-row-meta{display:contents}.dashboard-page .cell-actions{gap:0;align-items:center}.copy-link-inline,.dashboard-page .btn-icon-dots,.project-close{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;background:0 0;color:var(--ink-muted);padding:0;width:32px;height:32px;min-width:32px;cursor:pointer}.copy-link-inline:focus-visible,.copy-link-inline:hover,.dashboard-page .btn-icon-dots:hover,.project-close:hover{background:var(--accent-soft);color:var(--accent)}.copy-link-inline:disabled{opacity:.5;cursor:wait}.mobile-meta-icon{display:none}.project-attention-action{display:inline-block;color:var(--accent);border:0;background:0 0;padding:0;font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.project-attention-action{text-align:left}.dashboard-page .cell-status .project-attention-action{flex-basis:100%}.project-details-row{width:100%;border-bottom:1px solid var(--border-color)}.project-details{padding:var(--dashboard-space-xl);background:var(--paper-bg-alt)}.project-details-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--dashboard-space-sm)}.project-details-heading h2{font:600 16px var(--font-sans);margin:0}.project-details-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--dashboard-space-md) var(--dashboard-space-xl);margin:12px 0}.project-details-list dt{font-size:12px;color:var(--ink-muted);font-weight:500;margin-bottom:4px}.project-details-list dd{margin:0;font-size:13px;overflow-wrap:anywhere}.project-details-list code{color:var(--color);font-size:12px}.project-name-form{margin-top:var(--dashboard-space-lg);padding-top:var(--dashboard-space-lg);border-top:1px solid var(--border-color)}.project-name-form label{display:block;font-size:13px;font-weight:500;margin-bottom:4px}.project-name-form p,.project-progress-help{font-size:12px;color:var(--ink-muted);margin-bottom:8px}.project-name-controls{display:flex;gap:var(--dashboard-space-sm);max-width:560px}.project-name-controls .form-control{min-width:0;font-size:14px}.project-name-controls .btn{flex-shrink:0;min-height:40px}.project-name-form .project-name-error{color:var(--status-error)}.project-details-button{min-height:44px;padding:0 8px;border:0;border-radius:6px;background:0 0;font:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer}.anonymize-page .anonymize-topbar-title{font-family:var(--font-sans);font-size:28px;font-weight:600}.anonymize-topbar{padding:16px 24px}.anonymize-form-col{background:var(--paper-bg-alt)}.anonymize-form-col .paper-settings-main{padding:20px 24px}.anonymize-form-col .paper-settings-section{padding:18px}.anonymize-form-col .paper-settings-section:first-child{padding-top:18px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt);padding:12px 0}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0}.anonymize-preview-col{background:var(--canvas-bg-color);padding:24px}.anonymize-preview-head{flex-wrap:wrap;gap:6px 12px;margin-bottom:16px}.anonymize-preview-body{padding:24px}.anonymize-mobile-tabs,.anonymize-preview-empty,.mobile-preview-jump{display:none}.anonymize-page .repo-access-note{font-size:12px}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:18px}.paper-settings-toc{padding:0}.paper-settings-toc-head{display:none}.paper-table .paper-table-row{padding-left:14px;padding-right:14px}}@media (max-width:767px){.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:24px}.paper-settings{padding:20px 16px 40px}.paper-settings-main .paper-settings-section{padding:16px}.anonymize-topbar{padding:12px 16px}.anonymize-topbar .paper-crumbs{display:none}.anonymize-mobile-tabs{display:flex;gap:4px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--paper-card)}.anonymize-mobile-tabs button{flex:1;font:inherit;font-size:13px;padding:10px;border:0;border-radius:6px;background:0 0;color:var(--ink-muted)}.anonymize-mobile-tabs button[aria-selected=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.anonymize-page:not(.mobile-preview-active) .anonymize-preview-col{display:none}.mobile-preview-active .anonymize-form-col{display:none}.mobile-preview-active .anonymize-preview-empty{display:block;padding:24px 16px;color:var(--ink-muted)}.anonymize-form-col .paper-settings-main{padding:16px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt)}.mobile-preview-jump{display:block;width:100%;min-height:44px}.anonymize-preview-col{padding:16px}.anonymize-preview-body{padding:16px}}@media (max-width:575px){.paper-settings .quota-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 8px}}@media (max-width:1100px) and (min-width:901px){.dashboard-page .dashboard-filter-row{flex-wrap:wrap}.dashboard-page .dashboard-filter-row .search-wrap{flex-basis:100%}.dashboard-page .dashboard-filter-controls{width:100%;justify-content:space-between}}@media (max-width:900px){.dashboard-page .paper-table.paper-table-dashboard .paper-table-row{gap:4px 8px;padding:8px 12px}.dashboard-page .paper-table .cell-anon{flex:1 1 calc(100% - 96px);min-width:0}.dashboard-page .paper-table .cell-actions{flex:0 0 88px}.dashboard-row-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;order:3;width:100%}.dashboard-page .dashboard-row-meta .cell-status{flex:1 1 80px;flex-wrap:wrap;gap:2px 8px}.dashboard-page .dashboard-row-meta .cell-expires,.dashboard-page .dashboard-row-meta .cell-views{flex-shrink:0;font-size:12px}.dashboard-page .cell-expires::before,.dashboard-page .cell-views::before{content:none}.dashboard-page .mobile-meta-icon{display:inline-block;width:14px;height:14px}.dashboard-page .dashboard-row-meta .status-sub-date{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-page .dashboard-row-meta .status-sub-error,.dashboard-page .dashboard-row-meta .status-sub-warn{flex-basis:100%;white-space:normal;overflow-wrap:anywhere}.dashboard-page .dashboard-row-meta .status-sub::before{content:none}.dashboard-page .project-attention-action{min-height:44px;display:inline-flex;align-items:center}.dashboard-page .paper-table .anon-sub .commit-hash,.dashboard-page .paper-table .anon-sub .conf-tag{display:none}}@media (max-width:767px){.container.dashboard-page{padding-top:12px}.dashboard-heading .paper-page-title{font-size:24px}.dashboard-heading-actions .btn-ink{min-height:44px}.dashboard-new-label{display:none}.dashboard-new-mobile{display:inline}.dashboard-quota>summary{min-height:44px;gap:6px;padding:10px;font-size:12px;line-height:20px}.dashboard-quota .quota-panel{max-height:calc(100dvh - 184px);overflow-y:auto;overscroll-behavior:contain}.dashboard-page .dashboard-filter-row{flex-wrap:wrap;gap:8px;margin-top:12px}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 0}.dashboard-page .dashboard-filter-row .form-control{height:44px}.dashboard-page .dashboard-filters-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:8px;min-height:44px;background:0 0;border:0}.dashboard-page .dashboard-filter-controls{display:none;width:100%}.dashboard-page .dashboard-filter-controls.expanded{display:flex;flex-wrap:wrap;gap:8px}.dashboard-page .dashboard-filter-controls .btn-group{width:100%;display:flex}.dashboard-page .dashboard-filter-controls .btn-group .btn{flex:1;min-height:44px}.dashboard-extra-filters{display:flex;width:100%}.dashboard-page .dashboard-extra-filters .dropdown{flex:1;min-width:0}.dashboard-page .dashboard-extra-filters .dropdown-toggle{width:100%;height:44px}.dashboard-type-filter .type-filter-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-type-filter .project-type-svg{display:inline-block}.dashboard-page .dashboard-meta{margin-top:8px;gap:4px 8px}.dashboard-view-tabs{gap:16px}.dashboard-view-tabs button{min-width:44px;min-height:44px;font-size:12px}.dashboard-count{font-size:11px}.dashboard-count{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.dashboard-view-long{display:none}.dashboard-view-short{display:inline}.dashboard-active-filters{display:contents}.dashboard-page .filter-chip{font-size:11px;padding:0 8px;min-height:44px;gap:4px}.dashboard-page .filter-chip-close{min-width:44px;min-height:44px;margin:0}.dashboard-page .btn-link-inline{min-height:44px;font-size:12px}.dashboard-page .paper-table-dashboard{width:calc(100% + 36px);margin:8px -18px 0;border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table .repo-name{font-size:13px}.project-details{padding:16px 12px}.project-details-list{grid-template-columns:1fr;gap:12px}.project-name-controls{flex-wrap:wrap}.project-name-controls .form-control{flex-basis:100%}.project-name-controls .btn{min-height:44px}}@media (max-width:360px){.dashboard-attention-prefix{display:none}.dashboard-attention-prefix+span{text-transform:capitalize}}.ui-icon-definitions{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}.ui-icon{display:inline-block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;vertical-align:-3px}.ui-icon.sort-direction{width:14px;height:14px}.pr-title-row{display:flex;align-items:flex-start;gap:16px}.pr-title-row .pr-title{flex:1;min-width:0}.pr-title-row>.btn{flex-shrink:0}.ui-icon.record-type-icon{color:var(--ink-muted)}.btn .ui-icon,.dropdown-item .ui-icon{width:16px;height:16px}.btn-icon-dots .ui-icon{width:18px;height:18px}.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:28px}.paper-faq,.paper-page{padding-top:24px}.paper-page .paper-page-lede{margin-bottom:16px;overflow-wrap:anywhere}.paper-page-title{overflow-wrap:anywhere}.anonymize-page .form-control,.paper-page .form-control{min-height:40px;font-family:var(--font-sans);font-size:14px;border-radius:var(--radius-control)}.anonymize-page textarea.form-control,.paper-page textarea.form-control{height:auto}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);border-radius:var(--radius-button);gap:6px}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm,.status-bar-actions .btn{min-height:var(--button-compact-height);padding:5px 10px;font-size:13px;border-radius:6px}.anonymize-page .btn-ink,.paper-page .btn-ink{min-height:40px;padding:9px 15px}.btn-hero>i,.btn>.project-type-svg,.btn>.ui-icon,.btn>i{width:16px;height:16px;margin:0!important;flex-shrink:0}.btn.dropdown-toggle::after{margin-left:0}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.disabled:hover,.btn:disabled:hover{filter:none}.paper-page .btn.btn-link{background:0 0;border-color:transparent}.auth-continue.btn{min-height:44px;padding:11px 16px!important}.anonymize-page .btn.btn-icon,.paper-page .btn.btn-icon{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}.paper-page .btn.btn-icon-dots{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;background:0 0;color:var(--ink-muted)}.paper-page .btn-icon-dots:hover{background:var(--accent-soft);color:var(--accent)}.paper-page .btn-group .btn-primary:active,.paper-page .btn-group .btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.paper-page .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0;margin-bottom:12px}.paper-page .paper-field-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.paper-tabs .paper-tab{min-height:44px}.paper-pill,.status-pill{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-meta-rule{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;gap:12px 24px}.paper-meta-rule b:not(.commit-hash){font-family:var(--font-sans);font-weight:500}.connections-grid{gap:16px}.connections-grid>section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px}.connections-heading{margin-bottom:24px}.claim-page .claim-form,.status-page>.paper-settings-section{padding:20px;margin-top:24px;border:1px solid var(--border-color);border-radius:var(--radius-surface);background:var(--paper-card)}.claim-page .claim-form{max-width:640px}.status-page .anonymize-submit-bar{background:0 0;gap:8px;flex-wrap:wrap}.anonymize-landing{padding-top:32px}.paper-settings .quota-usage{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.paper-settings .quota-usage .quota-item+.quota-item{padding-top:0;border-top:0;padding-left:16px;border-left:1px solid var(--border-color)}.paper-settings .quota-usage .quota-header{flex-direction:row;align-items:center;flex-wrap:wrap}.paper-settings .quota-usage .quota-value{white-space:normal;flex-wrap:wrap}.paper-faq-hero{padding-bottom:24px;margin-bottom:24px}.paper-faq-eyebrow,.paper-faq-toc-head{font-family:var(--font-sans);font-size:12px;text-transform:none;letter-spacing:0;margin-bottom:8px}.paper-faq-title{font:600 28px/1.2 var(--font-sans);letter-spacing:-.025em;max-width:720px;margin-bottom:12px}.paper-faq-title em{font-style:normal}.paper-faq-lede{font-size:14px}.paper-faq-body{grid-template-columns:180px minmax(0,1fr);gap:40px}.faq-section h4.faq-cat{font:600 18px/1.4 var(--font-sans);padding-bottom:12px}.faq-section h4.faq-cat .ui-icon{display:none}.faq-section .panel-group{margin-bottom:32px}.faq-section .panel-default .panel-title a{font:500 15px/1.5 var(--font-sans);padding:16px 0 16px 28px;min-height:44px}.faq-section .panel-default .panel-title a:after{top:16px}.paper-empty-title{font:600 32px/1.2 var(--font-sans);letter-spacing:-.025em}.paper-empty-title em{font-style:normal}.btn-hero{justify-content:center;gap:8px;min-height:48px;padding:13px 20px;font-size:15px;line-height:20px;background:var(--accent);border-color:var(--accent);color:#fff;border-radius:var(--radius-button)}.dark-mode .btn-hero{color:#1a1815}.btn-hero:hover{background:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .btn-hero:hover{color:#1a1815}.paper-table:not(.paper-table-dashboard){border-left:0;border-right:0;border-radius:0}.paper-table:not(.paper-table-dashboard) .paper-table-head{border-radius:0}.paper-table .cell-anon{gap:8px}.paper-table .cell-anon .anon-text{flex:1}.paper-table-conferences .cell-anon .repo-name{font-family:var(--font-sans);font-weight:600}.paper-table .anon-sub>a,.paper-table .anon-sub>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.paper-table .anon-sub .ui-icon{width:14px;height:14px}.paper-page .filter-chip{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-page .filter-chip-close .ui-icon{width:12px;height:12px}.admin-nav{gap:4px;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 8px;background:0 0}.admin-nav a{font-family:var(--font-sans);font-size:13px;letter-spacing:0;text-transform:none;border-radius:6px;min-height:40px;padding:8px 12px}.admin-nav a.active{background:var(--accent-soft);color:var(--accent)}.admin-nav .ui-icon{width:16px;height:16px}.admin-filter-toolbar{background:0 0;border:0;padding:0}.admin-filter-inline>label,.admin-filter-inline>span{font-family:var(--font-sans);text-transform:none;letter-spacing:0}.admin-summary .summary-total{font-family:var(--font-sans);font-size:18px;font-weight:600}.admin-summary .summary-pill{font:500 13px/20px var(--font-sans);min-height:32px;padding:5px 10px;border-radius:6px}.admin-summary .summary-pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.admin-summary .summary-pill .count{font-family:var(--font-sans)}.admin-active-chip{font-family:var(--font-sans);font-size:12px}.admin-active-chip button .ui-icon{width:12px;height:12px}.user-detail-card .user-header h2{font:600 20px/1.4 var(--font-sans)}.errors-page .errors-toolbar .select-wrap label,.errors-page .volume-head,.overview-page .ov-panel-meta,.paper-detail-grid .detail-label,.paper-progress .paper-progress-label,.status-page .paper-error-eyebrow,.user-detail-grid .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-chart-title,.overview-page .ov-panel-title,.paper-error-title{font:600 16px/1.4 var(--font-sans)}.paper-error-head>.ui-icon,.paper-ratelimit-head>.ui-icon{margin-top:3px;color:var(--status-error)}.paper-ratelimit-head>.ui-icon{color:var(--status-progress)}.errors-page .seg-tabs{border-radius:var(--radius-control)}.errors-page .seg-tabs button{min-height:36px;padding:7px 12px;font:500 14px/20px var(--font-sans)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.errors-page .errors-list,.errors-page .kpi-card:hover,.errors-page .volume-chart,.overview-page .ov-chart-card,.overview-page .ov-panel-card{box-shadow:none}.errors-page .kpi-value,.overview-page .ov-daily-value,.overview-page .ov-kpi-value,.q-card-count,.user-hero-name{font-family:var(--font-sans);font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.errors-page .kpi-label,.overview-page .ov-daily-label,.overview-page .ov-kpi-label,.q-card-name,.q-section-label,.user-hero-details .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-daily-card{background:var(--paper-card);box-shadow:none;border-radius:var(--radius-surface)}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--accent)}.errors-page .kpi-card,.overview-page .ov-kpi-card{box-shadow:none;border-radius:var(--radius-surface)}.q-card{border-radius:var(--radius-surface)}.q-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.q-range-btns{border-radius:var(--radius-control)}.q-job-detail-actions .btn,.q-range-btns .btn{font-family:var(--font-sans);font-size:13px}.q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}@media (max-width:900px){.paper-settings .quota-usage{grid-template-columns:1fr;gap:16px}.paper-settings .quota-usage .quota-item+.quota-item{padding-left:0;border-left:0;border-top:1px solid var(--border-color);padding-top:16px}.paper-table:not(.paper-table-dashboard) .paper-table-row{gap:4px 8px!important;padding:8px 12px}.paper-table:not(.paper-table-dashboard) .cell-anon{flex:1 1 calc(100% - 52px);order:1}.paper-table:not(.paper-table-dashboard) .cell-actions{order:2;flex:0 0 44px}.paper-table .admin-users-row>[role=cell]:first-child,.paper-table.paper-table-repos.has-bulk .paper-table-row>[role=cell]:first-child{flex:0 0 24px;order:0}.paper-table .admin-users-row .cell-anon,.paper-table.paper-table-repos.has-bulk .cell-anon{flex-basis:calc(100% - 84px)}.paper-table:not(.paper-table-dashboard) .cell-anon .anon-sub{font-size:12px;gap:6px}.paper-table:not(.paper-table-dashboard) .cell-status .status-sub{font-size:12px}.paper-table .cell-expires::before,.paper-table .cell-views::before{content:none}.paper-table .cell-expires .mobile-meta-icon,.paper-table .cell-views .mobile-meta-icon{display:inline-block;width:14px;height:14px}.paper-faq-body{grid-template-columns:1fr;gap:24px}}@media (max-width:767px){.paper-faq,.paper-page{padding-top:20px}.anonymize-page .paper-page-title,.paper-faq-title,.paper-page .paper-page-title,.paper-page.admin-page .paper-page-title{font-size:24px}.anonymize-page .form-control,.paper-page .form-control{min-height:44px}.anonymize-page .btn,.connection-link,.draft-discard,.paper-faq-toc a,.paper-page .btn,.paper-settings-toc nav a{min-height:44px}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:44px;padding:11px 14px;font-size:14px;line-height:20px;white-space:normal}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm{min-height:44px;padding:11px 12px;font-size:14px}.anonymize-page .btn.btn-icon,.copy-link-inline,.paper-page .btn.btn-icon,.paper-page .btn.btn-icon-dots,.project-close{width:44px;height:44px;min-width:44px;min-height:44px;padding:0}.dashboard-page .dashboard-filter-row .btn-group .btn,.dashboard-page .dashboard-filter-row .dropdown-toggle{height:auto;min-height:44px;font-size:14px;padding:11px 10px}.dashboard-heading-actions .btn-ink{padding:11px 16px}.dashboard-page .dashboard-filters-toggle{padding:11px 10px}.errors-page .btn-icon,.pr-title-row .btn,.status-bar-actions .btn{min-width:44px;min-height:44px;padding:0}.status-bar-actions .btn{width:44px;height:44px}.errors-page .seg-tabs button,.paper-tab{min-height:44px}.errors-page .seg-tabs button{padding:11px 12px}.status-bar-actions{flex-wrap:wrap;max-width:100%}.leftCol-close,.tree-search-clear{min-width:44px;min-height:44px}.anonymize-landing{padding:20px 18px}.anonymize-landing .repo-access-switch button,.source-url-label-row .repo-access-switch button{min-height:44px;padding:11px 10px;font-size:13px}.paper-settings-body{margin-top:16px;padding-top:0;gap:16px}.paper-settings-toc nav{gap:0 12px}.paper-settings-toc nav a{display:inline-flex;align-items:center}.paper-faq{padding-left:18px;padding-right:18px}.paper-faq-toc nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:0 16px}.paper-faq-toc a{display:inline-flex;align-items:center;padding:8px 0;border-left:0;border-bottom:2px solid transparent;margin-left:0}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{border-bottom-color:var(--accent);color:var(--accent)}.claim-page .claim-form,.status-page>.paper-settings-section{padding:16px;margin-top:16px}.admin-nav{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:4px;max-width:100%;margin:8px 0 16px}.admin-nav a{flex-shrink:0;min-height:44px}.admin-summary .summary-pill{min-height:44px;padding:11px 12px;font-size:14px}.admin-active-chip button{min-width:44px;min-height:44px}.admin-filter-row{gap:8px}.admin-filter-row .admin-filter-inline{gap:8px;flex-wrap:wrap}.errors-page .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}.q-cards{flex-direction:row}.q-card{min-width:130px}.q-header-actions{flex-wrap:wrap;gap:8px}}.paper-page.container:not(.auth-page){max-width:1180px}.paper-page>.row{margin-left:0;margin-right:0}.paper-page>.row>.w-100,.paper-page>.row>[class*=col]{padding-left:0;padding-right:0}.anonymize-landing{align-items:flex-start}.status-page .paper-support-grid{margin-bottom:0}.explorer-content .ace_editor{font-family:var(--font-mono);line-height:1.6}.dark-mode .explorer-content .ace-nord-dark,.dark-mode .explorer-content .ace-nord-dark .ace_gutter{background:var(--main-bg-color)}.explorer-content .file-content.markdown-body{max-width:960px;padding:32px 40px 96px}.leftCol-project-header .project-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.file-error{font-size:inherit;font-weight:inherit;text-align:left}.file-error-card{width:100%;max-width:520px;margin-top:0}.file-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.file-error-actions{display:flex;gap:8px;margin-top:16px}.file-error .paper-empty-title{font-size:20px;text-align:center}@media (min-width:992px){.leftCol-foot{padding-bottom:72px}}.explorer-content .ace-chrome,.explorer-content .ace-chrome .ace_gutter{background:var(--main-bg-color)}@media (max-width:991px){.explorer-content .file-content.markdown-body{padding:20px 16px 96px}.anonymize-landing{padding:20px 18px}.anonymize-landing-inner{padding:0}.paper-faq-toc nav,.paper-settings-toc nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.paper-faq-toc nav a,.paper-settings-toc nav a{flex-shrink:0;white-space:nowrap}.paper-faq-body,.paper-settings-body{grid-template-columns:minmax(0,1fr)}.paper-faq-toc,.paper-settings-toc{position:static}.paper-faq-toc nav,.paper-settings-toc nav{display:flex;flex-direction:row;gap:0 16px}.paper-faq-toc nav a,.paper-settings-toc nav a{display:inline-flex;align-items:center;padding:8px 0;margin-left:0;border-left:0;border-bottom:2px solid transparent}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover,.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--accent)}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{justify-content:flex-start;gap:6px}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle::after{margin-left:auto}}@media (max-width:480px){.paper-page .paper-page-lede{display:block;-webkit-line-clamp:unset;overflow:visible}}.navbar .btn-signin,.navbar .btn-signin:hover{background:var(--accent);border-color:var(--accent);color:#fff!important}.dark-mode .navbar .btn-signin,.dark-mode .navbar .btn-signin:hover{color:#1a1815!important}.navbar .btn-signin:hover{filter:brightness(.94)}.paper-progress .paper-progress-bar,.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--accent)}.paper-progress .paper-progress-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-error-eyebrow,.paper-support-card .paper-support-eyebrow{font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}.leftCol-foot .last-update{font-family:var(--font-sans);font-size:11px;letter-spacing:0}.paper-proof-venues span{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--ink-soft)}.markdown-body mark.redaction{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.ace_marker-layer .ace_redaction{position:absolute;background:var(--accent-soft);border-radius:3px}.leftCol-project-header{flex-wrap:wrap;row-gap:2px}.project-expiry{flex:1 0 100%;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.project-expiry .ui-icon{width:12px;height:12px}.status-bar-actions .btn-icon-only{width:32px;padding:0;justify-content:center}.share-link-row{display:flex;gap:8px;margin-top:4px}.share-link-input{flex:1;min-width:0;font-family:var(--font-mono);font-size:14px;background:var(--paper-bg-alt)}.share-link-row .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;min-width:112px;justify-content:center}.share-link-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-link-actions .btn{display:inline-flex;align-items:center;gap:6px}.status-page .paper-support-grid{gap:0 32px}.status-page .paper-support-card{padding:16px 0 0;border:0;border-top:1px solid var(--border-color);border-radius:0;background:0 0}.status-page .paper-support-card:hover{border-color:var(--color)}@media (min-width:992px){.paper-table .cell-expires{white-space:nowrap}}.paper-settings .paper-settings-main .paper-settings-section{background:0 0;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 28px;margin-bottom:28px}.paper-settings .paper-settings-main .paper-settings-section:last-of-type{border-bottom:0}@media (max-width:991px){.paper-settings .paper-settings-main .paper-settings-section{padding:0 0 20px;margin-bottom:20px}.share-link-row{flex-direction:column}.share-link-actions{flex-direction:column}.share-link-actions .btn{justify-content:center}.status-page .paper-support-grid{row-gap:20px}}.paper-page .q-range-btns{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card);overflow:visible}.paper-page .q-range-btns .btn,.paper-page .q-range-btns .btn+.btn{min-height:0;height:28px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.paper-page .q-range-btns .btn:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}.q-header-actions>.btn{height:34px;min-height:34px}.paper-page .btn.btn-danger-soft{background:0 0;border-color:var(--status-error);color:var(--status-error)}.paper-page .btn.btn-danger-soft:hover{background:var(--status-error-soft-hover);border-color:var(--status-error);color:var(--status-error)}.q-auto-refresh,.q-section-label,.q-state-chip{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.q-state-chip{font-size:12px;text-transform:capitalize}.overview-page .ov-ebar-fill{display:block}.paper-table .paper-table-row.repo-error{border-left:0;box-shadow:inset 2px 0 0 var(--status-error);padding-left:16px}.admin-page .q-table th,.admin-page .type-badge,.admin-page .user-detail-section h2,.admin-page section>h2,.admin-page th,.admin-page>h2,.errors-page .col-count,.errors-page .col-mod,.errors-page .col-msg,.errors-page .col-sev,.errors-page .col-status,.errors-page .col-when,.overview-page .ov-chart-legend,.overview-page .ov-ebar-label,.overview-page .ov-route-n,.overview-page .ov-route-name,.q-card-sub,.q-delay-hint,.q-legend-completed,.q-legend-exec,.q-legend-failed,.q-section-right,.q-stat-label,.user-detail-grid .detail-label{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.admin-page th,.errors-page [class^=col-]{font-size:12px;font-weight:500;color:var(--ink-muted)}.q-card-sub,.q-stat-label,.user-detail-grid .detail-label{font-size:12px}.q-stat-value{font-family:var(--font-sans);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.q-state-badge{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:capitalize}.admin-page .type-badge{font-size:12px;text-transform:none}.errors-page .col-sev span,.errors-page .sev-label{text-transform:capitalize}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--color)}.dark-mode .overview-page .ov-spark-fill-alt,.dark-mode .overview-page .ov-spark-fill-new-user,.dark-mode .overview-page .ov-spark-fill-user,.overview-page .ov-spark-fill-alt,.overview-page .ov-spark-fill-new-user,.overview-page .ov-spark-fill-user{background:var(--accent)}.dark-mode .overview-page .ov-dot-new-user-fill,.dark-mode .overview-page .ov-dot-ok-fill,.dark-mode .overview-page .ov-dot-user-fill,.overview-page .ov-dot-new-user-fill,.overview-page .ov-dot-ok-fill,.overview-page .ov-dot-user-fill{background:var(--accent)}.errors-page .seg-tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card)}.errors-page .seg-tabs button,.errors-page .seg-tabs button+button{min-height:0;height:30px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.errors-page .seg-tabs button:hover{background:var(--hover-bg-color);color:var(--color)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.user-detail-card .user-header .status-dot-wrap{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-soft)}.user-detail-card .user-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-page .paper-table .cell-anon .anon-sub{flex-wrap:wrap;row-gap:2px}.admin-page .paper-table .anon-sub>a,.admin-page .paper-table .anon-sub>span{flex:0 1 auto;max-width:100%;white-space:nowrap}.admin-page .paper-table .cell-views .mobile-meta-icon{margin-right:4px}.q-jobs{overflow-x:auto}.q-job-detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.admin-section-header h2{font-family:var(--font-sans);font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--color)}.errors-page .sev-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.email-prompt{width:min(560px,calc(100vw - 32px));padding:28px;border:1px solid var(--paper-border,#e5e1d9);border-radius:12px;background:var(--paper-bg,#faf9f6);color:inherit;box-shadow:0 16px 64px #0003}.email-prompt::backdrop{background:#0006}.email-prompt h2{margin:0 0 12px;font-size:24px}.email-prompt p{margin-bottom:20px}.email-prompt-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:24px}body.dark-mode .email-prompt{background:#242320;color:#faf9f6} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index 712c5cb..43fe0be 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -7879,3 +7879,19 @@ input[type="date"], select { color-scheme: light; } .q-job-detail-label { font-family: var(--font-sans); font-size: 12px; letter-spacing: 0; text-transform: none; } .admin-section-header h2 { font-family: var(--font-sans); font-size: 16px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--color); } .errors-page .sev-label { font-family: var(--font-sans); font-size: 13px; letter-spacing: 0; } + +/* Email setup after sign-in. Native dialog traps focus and makes the page inert. */ +.email-prompt { + width: min(560px, calc(100vw - 32px)); + padding: 28px; + border: 1px solid var(--paper-border, #e5e1d9); + border-radius: 12px; + background: var(--paper-bg, #faf9f6); + color: inherit; + box-shadow: 0 16px 64px #0003; +} +.email-prompt::backdrop { background: #0006; } +.email-prompt h2 { margin: 0 0 12px; font-size: 24px; } +.email-prompt p { margin-bottom: 20px; } +.email-prompt-actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; margin-top: 24px; } +body.dark-mode .email-prompt { background: #242320; color: #faf9f6; } diff --git a/public/partials/connections.htm b/public/partials/connections.htm index f2a8421..60c2382 100644 --- a/public/partials/connections.htm +++ b/public/partials/connections.htm @@ -8,6 +8,16 @@

Loading your connections…

+
+

Email alerts

+

We will email you if your GitHub connection stops working or a repository becomes inaccessible. Your address is never shown on anonymous pages.

+
+ + + +

Email address saved.

+
+
Recommended
diff --git a/public/partials/header.htm b/public/partials/header.htm index 8d07356..6517f1f 100644 --- a/public/partials/header.htm +++ b/public/partials/header.htm @@ -115,3 +115,18 @@
+ + +
+

Stay informed about access problems

+

Get email alerts when your GitHub token or repository access fails.

+ + + + +
+
diff --git a/public/script/app.js b/public/script/app.js index a1c2332..34838d6 100644 --- a/public/script/app.js +++ b/public/script/app.js @@ -146,10 +146,40 @@ export const mainController = function (state, http, location, timeout) { state.darkMode(localStorage.getItem("darkMode") == "true"); + state.emailPromptOpen = false; + state.emailPromptAddress = ""; + state.emailPromptBusy = false; + state.emailPromptError = ""; + let emailPromptFocus; + state.respondToEmailPrompt = async (action) => { + if (state.emailPromptBusy) return; + state.emailPromptBusy = true; + state.emailPromptError = ""; + try { + const res = await http.post("/github/connections/email", { action, email: state.emailPromptAddress }, + { headers: { "X-CSRF-Token": state.user.emailPromptCSRF } }); + if (action === "save") state.user.notificationEmail = res.data.notificationEmail; + state.emailPromptOpen = false; + state.user.showEmailPrompt = false; + emailPromptFocus?.focus(); + } catch (error) { state.emailPromptError = error.data?.error || "Unable to save your preference. Please try again."; } + finally { state.emailPromptBusy = false; } + }; + function getUser() { http.get("/api/user").then( (res) => { if (res) state.user = res.data; + if (state.user?.emailNotificationsEnabled && state.user.showEmailPrompt && !state.user.notificationEmail) { + emailPromptFocus = document.activeElement; + state.emailPromptOpen = true; + timeout(() => { + const dialog = document.getElementById("email-prompt"); + if (dialog?.showModal) dialog.showModal(); + else dialog?.setAttribute("open", ""); + document.getElementById("email-prompt-address")?.focus(); + }, 0); + } }, () => { state.user = null; @@ -3297,11 +3327,27 @@ export const conferenceController = function (state, http, location, params) { export const connectionsController = function (state, http) { + state.notificationEmail = ""; + state.emailSaved = false; + state.saveNotificationEmail = async () => { + state.busy = true; + state.emailSaved = false; + state.connectionError = ""; + try { + const res = await http.post("/github/connections/email", { email: state.notificationEmail }, + { headers: { "X-CSRF-Token": state.connections.csrf } }); + state.notificationEmail = res.data.notificationEmail; + if (state.user) state.user.notificationEmail = res.data.notificationEmail; + state.emailSaved = true; + } catch (error) { state.connectionError = error.data?.error || "Unable to save email address."; } + finally { state.busy = false; } + }; state.connections = null; state.connectionError = ""; state.busy = false; state.loadConnections = () => http.get("/github/connections").then(res => { state.connections = res.data; + state.notificationEmail = res.data.notificationEmail || ""; }).catch(error => { state.connectionError = error.data?.error || "Unable to load connections."; }); state.changeConnection = async (resource, connection, preview) => { state.busy = true; diff --git a/public/script/vendor.min.js b/public/script/vendor.min.js index 45c1714..07bb0c9 100644 --- a/public/script/vendor.min.js +++ b/public/script/vendor.min.js @@ -1,63 +1,63 @@ -"use strict";(()=>{var ld=Object.defineProperty;var dd=(e,t)=>{for(var s in t)ld(e,s,{get:t[s],enumerable:!0})};var he=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var ve={editor:"/script/editor.e243722d87.min.js",markdown:"/script/markdown.ad7b1d71c3.min.js",notebook:"/script/notebook.8844e2735f.min.js",org:"/script/org.f4e2a3f59f.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js"};var cs=new Map,pd=ve;function Xt(e){if(!cs.has(e)){let t=document.createElement("script");t.src=pd[e];let s=new Promise((r,n)=>{t.onload=r,t.onerror=()=>{cs.delete(e),t.remove(),n(new Error(`Unable to load ${e}. Please retry.`))}});cs.set(e,s),document.head.appendChild(t)}return cs.get(e)}async function pr(){await Xt("editor"),ace.config.set("basePath","/script/external/ace/")}function ho(e){let t=Object.create(null);for(let s of e.split(","))t[s]=1;return s=>s in t}var Ie={},Zt=[],at=()=>{},an=()=>!1,vo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),go=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Po=(e,t)=>{let s=e.indexOf(t);s>-1&&e.splice(s,1)},fd=Object.prototype.hasOwnProperty,Ne=(e,t)=>fd.call(e,t),ye=Array.isArray,Lt=e=>Vo(e)==="[object Map]",Ut=e=>Vo(e)==="[object Set]",fr=e=>Vo(e)==="[object Date]";var we=e=>typeof e=="function",Fe=e=>typeof e=="string",mt=e=>typeof e=="symbol",Te=e=>e!==null&&typeof e=="object",ln=e=>(Te(e)||we(e))&&we(e.then)&&we(e.catch),vr=Object.prototype.toString,Vo=e=>vr.call(e),dn=e=>Vo(e).slice(8,-1),ps=e=>Vo(e)==="[object Object]",fs=e=>Fe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,yo=ho(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");var ms=e=>{let t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},md=/-\w/g,Je=ms(e=>e.replace(md,t=>t.slice(1).toUpperCase())),hd=/\B([A-Z])/g,St=ms(e=>e.replace(hd,"-$1").toLowerCase()),xt=ms(e=>e.charAt(0).toUpperCase()+e.slice(1)),qo=ms(e=>e?`on${xt(e)}`:""),gt=(e,t)=>!Object.is(e,t),bo=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:s})},wo=e=>{let t=parseFloat(e);return isNaN(t)?e:t};var mr,Mo=()=>mr||(mr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function qe(e){if(ye(e)){let t={};for(let s=0;s{if(s){let r=s.split(gd);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function A(e){let t="";if(Fe(e))t=e;else if(ye(e))for(let s=0;sNt(s,t))}var wr=e=>!!(e&&e.__v_isRef===!0),c=e=>Fe(e)?e:e==null?"":ye(e)||Te(e)&&(e.toString===vr||!we(e.toString))?wr(e)?c(e.value):JSON.stringify(e,kr,2):String(e),kr=(e,t)=>wr(t)?kr(e,t.value):Lt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[r,n],i)=>(s[rn(r,i)+" =>"]=n,s),{})}:Ut(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>rn(s))}:mt(t)?rn(t):Te(t)&&!ye(t)&&!ps(t)?String(t):t,rn=(e,t="")=>{var s;return mt(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};function Ed(e,...t){console.warn(`[Vue warn] ${e}`,...t)}var Qe,Fo=class{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Qe&&(Qe.active?(this.parent=Qe,this.index=(Qe.scopes||(Qe.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){let r=this.scopes.slice();for(t=0,s=r.length;t0&&--this._on===0){if(Qe===this)Qe=this.prevScope;else{let t=Qe;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,r;for(s=0,r=this.effects.length;s0)return;if(Uo){let t=Uo;for(Uo=void 0;t;){let s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Lo;){let t=Lo;for(Lo=void 0;t;){let s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=s}}if(e)throw e}function Dr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Rr(e){let t,s=e.depsTail,r=s;for(;r;){let n=r.prevDep;r.version===-1?(r===s&&(s=n),Cn(r),Cd(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=n}e.deps=t,e.depsTail=s}function fn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Tr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Tr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===zo)||(e.globalVersion=zo,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!fn(e))))return;e.flags|=2;let t=e.dep,s=Le,r=Et;Le=e,Et=!0;try{Dr(e);let n=e.fn(e._value);(t.version===0||gt(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(n){throw t.version++,n}finally{Le=s,Et=r,Rr(e),e.flags&=-3}}function Cn(e,t=!1){let{dep:s,prevSub:r,nextSub:n}=e;if(r&&(r.nextSub=n,e.prevSub=void 0),n&&(n.prevSub=r,e.nextSub=void 0),s.subs===e&&(s.subs=r,!r&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)Cn(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Cd(e){let{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}var Et=!0,Ar=[];function At(){Ar.push(Et),Et=!1}function Ot(){let e=Ar.pop();Et=e===void 0?!0:e}function Er(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let s=Le;Le=void 0;try{t()}finally{Le=s}}}var zo=0,mn=class{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},Ho=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Le||!Et||Le===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Le)s=this.activeLink=new mn(Le,this),Le.deps?(s.prevDep=Le.depsTail,Le.depsTail.nextDep=s,Le.depsTail=s):Le.deps=Le.depsTail=s,Or(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){let r=s.nextDep;r.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=r),s.prevDep=Le.depsTail,s.nextDep=void 0,Le.depsTail.nextDep=s,Le.depsTail=s,Le.deps===s&&(Le.deps=r)}return s}trigger(t){this.version++,zo++,this.notify(t)}notify(t){kn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{En()}}};function Or(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Or(r)}let s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}var hn=new WeakMap,to=Symbol(""),vn=Symbol(""),Bo=Symbol("");function xe(e,t,s){if(Et&&Le){let r=hn.get(e);r||hn.set(e,r=new Map);let n=r.get(s);n||(r.set(s,n=new Ho),n.map=r,n.key=s),n.track()}}function Rt(e,t,s,r,n,i){let a=hn.get(e);if(!a){zo++;return}let u=f=>{f&&f.trigger()};if(kn(),t==="clear")a.forEach(u);else{let f=ye(e),v=f&&fs(s);if(f&&s==="length"){let h=Number(r);a.forEach((k,m)=>{(m==="length"||m===Bo||!mt(m)&&m>=h)&&u(k)})}else switch((s!==void 0||a.has(void 0))&&u(a.get(s)),v&&u(a.get(Bo)),t){case"add":f?v&&u(a.get("length")):(u(a.get(to)),Lt(e)&&u(a.get(vn)));break;case"delete":f||(u(a.get(to)),Lt(e)&&u(a.get(vn)));break;case"set":Lt(e)&&u(a.get(to));break}}En()}function ko(e){let t=De(e);return t===e?t:(xe(t,"iterate",Bo),lt(e)?t:t.map(yt))}function Go(e){return xe(e=De(e),"iterate",Bo),e}function Dt(e,t){return Ct(e)?oo(zt(e)?yt(t):t):yt(t)}var _d={__proto__:null,[Symbol.iterator](){return cn(this,Symbol.iterator,e=>Dt(this,e))},concat(...e){return ko(this).concat(...e.map(t=>ye(t)?ko(t):t))},entries(){return cn(this,"entries",e=>(e[1]=Dt(this,e[1]),e))},every(e,t){return Ft(this,"every",e,t,void 0,arguments)},filter(e,t){return Ft(this,"filter",e,t,s=>s.map(r=>Dt(this,r)),arguments)},find(e,t){return Ft(this,"find",e,t,s=>Dt(this,s),arguments)},findIndex(e,t){return Ft(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ft(this,"findLast",e,t,s=>Dt(this,s),arguments)},findLastIndex(e,t){return Ft(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ft(this,"forEach",e,t,void 0,arguments)},includes(...e){return pn(this,"includes",e)},indexOf(...e){return pn(this,"indexOf",e)},join(e){return ko(this).join(e)},lastIndexOf(...e){return pn(this,"lastIndexOf",e)},map(e,t){return Ft(this,"map",e,t,void 0,arguments)},pop(){return $o(this,"pop")},push(...e){return $o(this,"push",e)},reduce(e,...t){return Cr(this,"reduce",e,t)},reduceRight(e,...t){return Cr(this,"reduceRight",e,t)},shift(){return $o(this,"shift")},some(e,t){return Ft(this,"some",e,t,void 0,arguments)},splice(...e){return $o(this,"splice",e)},toReversed(){return ko(this).toReversed()},toSorted(e){return ko(this).toSorted(e)},toSpliced(...e){return ko(this).toSpliced(...e)},unshift(...e){return $o(this,"unshift",e)},values(){return cn(this,"values",e=>Dt(this,e))}};function cn(e,t,s){let r=Go(e),n=r[t]();return r!==e&&!lt(e)&&(n._next=n.next,n.next=()=>{let i=n._next();return i.done||(i.value=s(i.value)),i}),n}var Sd=Array.prototype;function Ft(e,t,s,r,n,i){let a=Go(e),u=a!==e&&!lt(e),f=a[t];if(f!==Sd[t]){let k=f.apply(e,i);return u?yt(k):k}let v=s;a!==e&&(u?v=function(k,m){return s.call(this,Dt(e,k),m,e)}:s.length>2&&(v=function(k,m){return s.call(this,k,m,e)}));let h=f.call(a,v,r);return u&&n?n(h):h}function Cr(e,t,s,r){let n=Go(e),i=n!==e&&!lt(e),a=s,u=!1;n!==e&&(i?(u=r.length===0,a=function(v,h,k){return u&&(u=!1,v=Dt(e,v)),s.call(this,v,Dt(e,h),k,e)}):s.length>3&&(a=function(v,h,k){return s.call(this,v,h,k,e)}));let f=n[t](a,...r);return u?Dt(e,f):f}function pn(e,t,s){let r=De(e);xe(r,"iterate",Bo);let n=r[t](...s);return(n===-1||n===!1)&&Ko(s[0])?(s[0]=De(s[0]),r[t](...s)):n}function $o(e,t,s=[]){At(),kn();let r=De(e)[t].apply(e,s);return En(),Ot(),r}var Nd=ho("__proto__,__v_isRef,__isVue"),Ir=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mt));function Dd(e){mt(e)||(e=String(e));let t=De(this);return xe(t,"has",e),t.hasOwnProperty(e)}var ws=class{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,r){if(s==="__v_skip")return t.__v_skip;let n=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return i;if(s==="__v_raw")return r===(n?i?Md:qr:i?Vr:Pr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;let a=ye(t);if(!n){let f;if(a&&(f=_d[s]))return f;if(s==="hasOwnProperty")return Dd}let u=Reflect.get(t,s,Ze(t)?t:r);if((mt(s)?Ir.has(s):Nd(s))||(n||xe(t,"get",s),i))return u;if(Ze(u)){let f=a&&fs(s)?u:u.value;return n&&Te(f)?Es(f):f}return Te(u)?n?Es(u):ze(u):u}},ks=class extends ws{constructor(t=!1){super(!1,t)}set(t,s,r,n){let i=t[s],a=ye(t)&&fs(s);if(!this._isShallow){let v=Ct(i);if(!lt(r)&&!Ct(r)&&(i=De(i),r=De(r)),!a&&Ze(i)&&!Ze(r))return v||(i.value=r),!0}let u=a?Number(s)e,gs=e=>Reflect.getPrototypeOf(e);function Od(e,t,s){return function(...r){let n=this.__v_raw,i=De(n),a=Lt(i),u=e==="entries"||e===Symbol.iterator&&a,f=e==="keys"&&a,v=n[e](...r),h=s?yn:t?oo:yt;return!t&&xe(i,"iterate",f?vn:to),Ge(Object.create(v),{next(){let{value:k,done:m}=v.next();return m?{value:k,done:m}:{value:u?[h(k[0]),h(k[1])]:h(k),done:m}}})}}function ys(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Id(e,t){let s={get(n){let i=this.__v_raw,a=De(i),u=De(n);e||(gt(n,u)&&xe(a,"get",n),xe(a,"get",u));let{has:f}=gs(a),v=t?yn:e?oo:yt;if(f.call(a,n))return v(i.get(n));if(f.call(a,u))return v(i.get(u));i!==a&&i.get(n)},get size(){let n=this.__v_raw;return!e&&xe(De(n),"iterate",to),n.size},has(n){let i=this.__v_raw,a=De(i),u=De(n);return e||(gt(n,u)&&xe(a,"has",n),xe(a,"has",u)),n===u?i.has(n):i.has(n)||i.has(u)},forEach(n,i){let a=this,u=a.__v_raw,f=De(u),v=t?yn:e?oo:yt;return!e&&xe(f,"iterate",to),u.forEach((h,k)=>n.call(i,v(h),v(k),a))}};return Ge(s,e?{add:ys("add"),set:ys("set"),delete:ys("delete"),clear:ys("clear")}:{add(n){let i=De(this),a=gs(i),u=De(n),f=!t&&!lt(n)&&!Ct(n)?u:n;return a.has.call(i,f)||gt(n,f)&&a.has.call(i,n)||gt(u,f)&&a.has.call(i,u)||(i.add(f),Rt(i,"add",f,f)),this},set(n,i){!t&&!lt(i)&&!Ct(i)&&(i=De(i));let a=De(this),{has:u,get:f}=gs(a),v=u.call(a,n);v||(n=De(n),v=u.call(a,n));let h=f.call(a,n);return a.set(n,i),v?gt(i,h)&&Rt(a,"set",n,i,h):Rt(a,"add",n,i),this},delete(n){let i=De(this),{has:a,get:u}=gs(i),f=a.call(i,n);f||(n=De(n),f=a.call(i,n));let v=u?u.call(i,n):void 0,h=i.delete(n);return f&&Rt(i,"delete",n,void 0,v),h},clear(){let n=De(this),i=n.size!==0,a=void 0,u=n.clear();return i&&Rt(n,"clear",void 0,void 0,a),u}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=Od(n,e,t)}),s}function _n(e,t){let s=Id(e,t);return(r,n,i)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?r:Reflect.get(Ne(s,n)&&n in r?s:r,n,i)}var Pd={get:_n(!1,!1)},Vd={get:_n(!1,!0)},qd={get:_n(!0,!1)};var Pr=new WeakMap,Vr=new WeakMap,qr=new WeakMap,Md=new WeakMap;function $d(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ze(e){return Ct(e)?e:Sn(e,!1,Rd,Pd,Pr)}function Wo(e){return Sn(e,!1,Ad,Vd,Vr)}function Es(e){return Sn(e,!0,Td,qd,qr)}function Sn(e,t,s,r,n){if(!Te(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let i=n.get(e);if(i)return i;let a=$d(dn(e));if(a===0)return e;let u=new Proxy(e,a===2?r:s);return n.set(e,u),u}function zt(e){return Ct(e)?zt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ct(e){return!!(e&&e.__v_isReadonly)}function lt(e){return!!(e&&e.__v_isShallow)}function Ko(e){return e?!!e.__v_raw:!1}function De(e){let t=e&&e.__v_raw;return t?De(t):e}function Nn(e){return!Ne(e,"__v_skip")&&Object.isExtensible(e)&&hs(e,"__v_skip",!0),e}var yt=e=>Te(e)?ze(e):e,oo=e=>Te(e)?Es(e):e;function Ze(e){return e?e.__v_isRef===!0:!1}function et(e){return Mr(e,!1)}function _s(e){return Mr(e,!0)}function Mr(e,t){return Ze(e)?e:new bn(e,t)}var bn=class{constructor(t,s){this.dep=new Ho,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:De(t),this._value=s?t:yt(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){let s=this._rawValue,r=this.__v_isShallow||lt(t)||Ct(t);t=r?t:De(t),gt(t,s)&&(this._rawValue=t,this._value=r?t:yt(t),this.dep.trigger())}};function Ht(e){return Ze(e)?e.value:e}var Ld={get:(e,t,s)=>t==="__v_raw"?e:Ht(Reflect.get(e,t,s)),set:(e,t,s,r)=>{let n=e[t];return Ze(n)&&!Ze(s)?(n.value=s,!0):Reflect.set(e,t,s,r)}};function Ss(e){return zt(e)?e:new Proxy(e,Ld)}var wn=class{constructor(t,s,r){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Ho(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=zo-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Le!==this)return Nr(this,!0),!0}get value(){let t=this.dep.track();return Tr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}};function $r(e,t,s=!1){let r,n;return we(e)?r=e:(r=e.get,n=e.set),new wn(r,n,s)}var bs={},Cs=new WeakMap,eo;function Lr(e,t=!1,s=eo){if(s){let r=Cs.get(s);r||Cs.set(s,r=[]),r.push(e)}}function Ur(e,t,s=Ie){let{immediate:r,deep:n,once:i,scheduler:a,augmentJob:u,call:f}=s,v=q=>{(s.onWarn||Ed)("Invalid watch source: ",q,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},h=q=>n?q:lt(q)||n===!1||n===0?Tt(q,1):Tt(q),k,m,E,y,w=!1,D=!1;if(Ze(e)?(m=()=>e.value,w=lt(e)):zt(e)?(m=()=>h(e),w=!0):ye(e)?(D=!0,w=e.some(q=>zt(q)||lt(q)),m=()=>e.map(q=>{if(Ze(q))return q.value;if(zt(q))return h(q);if(we(q))return f?f(q,2):q()})):we(e)?t?m=f?()=>f(e,2):e:m=()=>{if(E){At();try{E()}finally{Ot()}}let q=eo;eo=k;try{return f?f(e,3,[y]):e(y)}finally{eo=q}}:m=at,t&&n){let q=m,U=n===!0?1/0:n;m=()=>Tt(q(),U)}let R=_r(),T=()=>{k.stop(),R&&R.active&&Po(R.effects,k)};if(i&&t){let q=t;t=(...U)=>{let ae=q(...U);return T(),ae}}let I=D?new Array(e.length).fill(bs):bs,H=q=>{if(!(!(k.flags&1)||!k.dirty&&!q))if(t){let U=k.run();if(q||n||w||(D?U.some((ae,ie)=>gt(ae,I[ie])):gt(U,I))){E&&E();let ae=eo;eo=k;try{let ie=[U,I===bs?void 0:D&&I[0]===bs?[]:I,y];I=U,f?f(t,3,ie):t(...ie)}finally{eo=ae}}}else k.run()};return u&&u(H),k=new Eo(m),k.scheduler=a?()=>a(H,!1):H,y=q=>Lr(q,!1,k),E=k.onStop=()=>{let q=Cs.get(k);if(q){if(f)f(q,4);else for(let U of q)U();Cs.delete(k)}},t?r?H(!0):I=k.run():a?a(H.bind(null,!0),!0):k.run(),T.pause=k.pause.bind(k),T.resume=k.resume.bind(k),T.stop=T,T}function Tt(e,t=1/0,s){if(t<=0||!Te(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,Ze(e))Tt(e.value,t,s);else if(ye(e))for(let r=0;r{Tt(r,t,s)});else if(ps(e)){for(let r in e)Tt(e[r],t,s);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Tt(e[r],t,s)}return e}function ss(e,t,s,r){try{return r?e(...r):e()}catch(n){ns(n,t,s)}}function bt(e,t,s,r){if(we(e)){let n=ss(e,t,s,r);return n&&ln(n)&&n.catch(i=>{ns(i,t,s)}),n}if(ye(e)){let n=[];for(let i=0;i>>1,n=rt[r],i=es(n);i=es(s)?rt.push(e):rt.splice(Bd(t),0,e),e.flags|=1,si()}}function si(){Rs||(Rs=oi.then(ii))}function ni(e){if(!ye(e))Qt&&e.id===-1?Qt.splice(Co+1,0,e):e.flags&1||(_o.push(e),e.flags|=1);else for(let t=0;tes(s)-es(r));if(_o.length=0,Qt){for(let s=0;se.id==null?e.flags&2?-1:1/0:e.id;function ii(e){let t=at;try{for(Pt=0;Pt{r._d&&Is(-1);let i=Ts(t),a=ro.length,u;try{u=e(...n)}finally{for(let f=ro.length;f>a;f--)Mi();Ts(i),r._d&&Is(1)}return u};return r._n=!0,r._c=!0,r._d=!0,r}function N(e,t){if(ht===null)return e;let s=Hs(ht),r=e.dirs||(e.dirs=[]);for(let n=0;n1)return s&&we(t)?t.call(r&&r.proxy):t}}var Gd=Symbol.for("v-scx"),Wd=()=>{{let e=ut(Gd);return e}};function Be(e,t,s){return li(e,t,s)}function li(e,t,s=Ie){let{immediate:r,deep:n,flush:i,once:a}=s,u=Ge({},s),f=t&&r||!t&&i!=="post",v;if(Do){if(i==="sync"){let E=Wd();v=E.__watcherHandles||(E.__watcherHandles=[])}else if(!f){let E=()=>{};return E.stop=at,E.resume=at,E.pause=at,E}}let h=tt;u.call=(E,y,w)=>bt(E,h,y,w);let k=!1;i==="post"?u.scheduler=E=>{dt(E,h&&h.suspense)}:i!=="sync"&&(k=!0,u.scheduler=(E,y)=>{y?E():qn(E)}),u.augmentJob=E=>{t&&(E.flags|=4),k&&(E.flags|=2,h&&(E.id=h.uid,E.i=h))};let m=Ur(e,t,u);return Do&&(v?v.push(m):f&&m()),m}function Kd(e,t,s){let r=this.proxy,n=Fe(e)?e.includes(".")?di(r,e):()=>r[e]:e.bind(r,r),i;we(t)?i=t:(i=t.handler,s=t);let a=as(this),u=li(n,i.bind(r),s);return a(),u}function di(e,t){let s=t.split(".");return()=>{let r=e;for(let n=0;ne.__isTeleport;var Dn=Symbol("_leaveCb");function Jd(e){let t=e[0];if(e.length>1){let s=!1;for(let r of e)if(r.type!==jt){t=r,s=!0;break}}return t}function ui(e){if(!Ls(e))return Ms(e.type)&&e.children?Jd(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&we(s.default))return s.default()}}function $s(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;let s=e.component.subTree;$s(Ms(s.type)&&ui(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function rs(e,t){return we(e)?Ge({name:e.name},t,{setup:e}):e}function Mn(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function zr(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}var As=new WeakMap;function Qo(e,t,s,r,n=!1){if(ye(e)){e.forEach((w,D)=>Qo(w,t&&(ye(t)?t[D]:t),s,r,n));return}if(Xo(r)&&!n){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Qo(e,t,s,r.component.subTree);return}let i=r.shapeFlag&4?Hs(r.component):r.el,a=n?null:i,{i:u,r:f}=e,v=t&&t.r,h=u.refs===Ie?u.refs={}:u.refs,k=u.setupState,m=De(k),E=k===Ie?an:w=>zr(h,w)?!1:Ne(m,w),y=(w,D)=>!(D&&zr(h,D));if(v!=null&&v!==f){if(Hr(t),Fe(v))h[v]=null,E(v)&&(k[v]=null);else if(Ze(v)){let w=t;y(v,w.k)&&(v.value=null),w.k&&(h[w.k]=null)}}if(we(f))ss(f,u,12,[a,h]);else{let w=Fe(f),D=Ze(f);if(w||D){let R=()=>{if(e.f){let T=w?E(f)?k[f]:h[f]:y(f)||!e.k?f.value:h[e.k];if(n)ye(T)&&Po(T,i);else if(ye(T))T.includes(i)||T.push(i);else if(w)h[f]=[i],E(f)&&(k[f]=h[f]);else{let I=[i];y(f,e.k)&&(f.value=I),e.k&&(h[e.k]=I)}}else w?(h[f]=a,E(f)&&(k[f]=a)):D&&(y(f,e.k)&&(f.value=a),e.k&&(h[e.k]=a))};if(a){let T=()=>{R(),As.delete(e)};T.id=-1,As.set(e,T),dt(T,s)}else Hr(e),R()}}}function Hr(e){let t=As.get(e);t&&(t.flags|=8,As.delete(e))}var Br=e=>e.nodeType===8;var o6=Mo().requestIdleCallback||(e=>setTimeout(e,1)),s6=Mo().cancelIdleCallback||(e=>clearTimeout(e));function Qd(e,t){if(Br(e)&&e.data==="["){let s=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Br(r))if(r.data==="]"){if(--s===0)break}else r.data==="["&&s++;r=r.nextSibling}}else t(e)}var Xo=e=>!!e.type.__asyncLoader;function ci(e){we(e)&&(e={loader:e});let{loader:t,loadingComponent:s,errorComponent:r,delay:n=200,hydrate:i,timeout:a,suspensible:u=!0,onError:f}=e,v=null,h,k=0,m=()=>(k++,v=null,E()),E=()=>{let y;return v||(y=v=t().catch(w=>{if(w=w instanceof Error?w:new Error(String(w)),f)return new Promise((D,R)=>{f(w,()=>D(m()),()=>R(w),k+1)});throw w}).then(w=>y!==v&&v?v:(w&&(w.__esModule||w[Symbol.toStringTag]==="Module")&&(w=w.default),h=w,w)))};return rs({name:"AsyncComponentWrapper",__asyncLoader:E,__asyncHydrate(y,w,D){let R=y.isConnected,T=!1;(w.bu||(w.bu=[])).push(()=>T=!0);let I=()=>{T||!y.parentNode||R&&!y.isConnected||D()},H=i?()=>{let q=i(I,U=>Qd(y,U));q&&(w.bum||(w.bum=[])).push(q)}:I;h?H():E().then(()=>!w.isUnmounted&&H())},get __asyncResolved(){return h},setup(){let y=tt;if(Mn(y),h)return()=>Ns(h,y);let w=q=>{v=null,ns(q,y,13,!r)};if(u&&y.suspense||Do)return E().then(q=>()=>Ns(q,y)).catch(q=>(w(q),()=>r?Ce(r,{error:q}):null));let D=et(!1),R=et(),T=et(!!n),I,H;return is(()=>{I!=null&&clearTimeout(I),H!=null&&clearTimeout(H)}),n&&(H=setTimeout(()=>{y.isUnmounted||(T.value=!1)},n)),a!=null&&(I=setTimeout(()=>{if(!y.isUnmounted&&!D.value&&!R.value){let q=new Error(`Async component timed out after ${a}ms.`);w(q),R.value=q}},a)),E().then(()=>{y.isUnmounted||(D.value=!0,y.parent&&Ls(y.parent.vnode)&&y.parent.update())}).catch(q=>{if(y.isUnmounted){v=null;return}w(q),R.value=q}),()=>{if(D.value&&h)return Ns(h,y);if(R.value&&r)return Ce(r,{error:R.value});if(s&&!T.value)return Ns(s,y)}}})}function Ns(e,t){let{ref:s,props:r,children:n,ce:i}=t.vnode,a=Ce(e,r,n);return a.ref=s,a.ce=i,delete t.vnode.ce,a}var Ls=e=>e.type.__isKeepAlive;function pi(e,t){mi(e,"a",t)}function fi(e,t){mi(e,"da",t)}function mi(e,t,s=tt){let r=e.__wdc||(e.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return e()});if(Us(t,r,s),s){let n=s.parent;for(;n&&n.parent;)Ls(n.parent.vnode)&&Xd(r,t,s,n),n=n.parent}}function Xd(e,t,s,r){let n=Us(t,e,r,!0);is(()=>{Po(r[t],n)},s)}function Us(e,t,s=tt,r=!1){if(s){let n=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...a)=>{At();let u=as(s),f=bt(t,s,e,a);return u(),Ot(),f});return r?n.unshift(i):n.push(i),i}}var Gt=e=>(t,s=tt)=>{(!Do||e==="sp")&&Us(e,(...r)=>t(...r),s)},Zd=Gt("bm"),qt=Gt("m"),hi=Gt("bu"),vi=Gt("u"),ao=Gt("bum"),is=Gt("um"),xd=Gt("sp"),eu=Gt("rtg"),tu=Gt("rtc");function ou(e,t=tt){Us("ec",e,t)}var gi="components",su="directives";function We(e,t){return yi(gi,e,!0,t)||e}var nu=Symbol.for("v-ndc");function be(e){return yi(su,e)}function yi(e,t,s=!0,r=!1){let n=ht||tt;if(n){let i=n.type;if(e===gi){let u=zu(i,!1);if(u&&(u===t||u===Je(t)||u===xt(Je(t))))return i}let a=jr(n[e]||i[e],t)||jr(n.appContext[e],t);return!a&&r?i:a}}function jr(e,t){return e&&(e[t]||e[Je(t)]||e[xt(Je(t))])}function re(e,t,s,r){let n,i=s&&s[r],a=ye(e);if(a||Fe(e)){let u=a&&zt(e),f=!1,v=!1;u&&(f=!lt(e),v=Ct(e),e=Go(e)),n=new Array(e.length);for(let h=0,k=e.length;ht(u,f,void 0,i&&i[f]));else{let u=Object.keys(e);n=new Array(u.length);for(let f=0,v=u.length;fe?Ui(e)?Hs(e):On(e.parent):null;var Zo=Ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>On(e.parent),$root:e=>On(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>$n(e),$forceUpdate:e=>e.f||(e.f=()=>{qn(e.update)}),$nextTick:e=>e.n||(e.n=st.bind(e.proxy)),$watch:e=>Kd.bind(e)});var Rn=(e,t)=>e!==Ie&&!e.__isScriptSetup&&Ne(e,t),ru={get({_:e},t){if(t==="__v_skip")return!0;let{ctx:s,setupState:r,data:n,props:i,accessCache:a,type:u,appContext:f}=e;if(t[0]!=="$"){let m=a[t];if(m!==void 0)switch(m){case 1:return r[t];case 2:return n[t];case 4:return s[t];case 3:return i[t]}else{if(Rn(r,t))return a[t]=1,r[t];if(n!==Ie&&Ne(n,t))return a[t]=2,n[t];if(Ne(i,t))return a[t]=3,i[t];if(s!==Ie&&Ne(s,t))return a[t]=4,s[t];In&&(a[t]=0)}}let v=Zo[t],h,k;if(v)return t==="$attrs"&&xe(e.attrs,"get",""),v(e);if((h=u.__cssModules)&&(h=h[t]))return h;if(s!==Ie&&Ne(s,t))return a[t]=4,s[t];if(k=f.config.globalProperties,Ne(k,t))return k[t]},set({_:e},t,s){let{data:r,setupState:n,ctx:i}=e;return Rn(n,t)?(n[t]=s,!0):r!==Ie&&Ne(r,t)?(r[t]=s,!0):Ne(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:r,appContext:n,props:i,type:a}},u){let f;return!!(s[u]||e!==Ie&&u[0]!=="$"&&Ne(e,u)||Rn(t,u)||Ne(i,u)||Ne(r,u)||Ne(Zo,u)||Ne(n.config.globalProperties,u)||(f=a.__cssModules)&&f[u])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:Ne(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Gr(e){return ye(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}var In=!0;function iu(e){let t=$n(e),s=e.proxy,r=e.ctx;In=!1,t.beforeCreate&&Wr(t.beforeCreate,e,"bc");let{data:n,computed:i,methods:a,watch:u,provide:f,inject:v,created:h,beforeMount:k,mounted:m,beforeUpdate:E,updated:y,activated:w,deactivated:D,beforeDestroy:R,beforeUnmount:T,destroyed:I,unmounted:H,render:q,renderTracked:U,renderTriggered:ae,errorCaptured:ie,serverPrefetch:_,expose:O,inheritAttrs:Y,components:Z,directives:te,filters:J}=t;if(v&&au(v,r,null),a)for(let pe in a){let le=a[pe];we(le)&&(r[pe]=le.bind(s))}if(n){let pe=n.call(s,s);Te(pe)&&(e.data=ze(pe))}if(In=!0,i)for(let pe in i){let le=i[pe],Oe=we(le)?le.bind(s,s):we(le.get)?le.get.bind(s,s):at,_e=!we(le)&&we(le.set)?le.set.bind(s):at,Ue=ot({get:Oe,set:_e});Object.defineProperty(r,pe,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Re=>Ue.value=Re})}if(u)for(let pe in u)bi(u[pe],r,s,pe);if(f){let pe=we(f)?f.call(s):f;Reflect.ownKeys(pe).forEach(le=>{io(le,pe[le])})}h&&Wr(h,e,"c");function ue(pe,le){ye(le)?le.forEach(Oe=>pe(Oe.bind(s))):le&&pe(le.bind(s))}if(ue(Zd,k),ue(qt,m),ue(hi,E),ue(vi,y),ue(pi,w),ue(fi,D),ue(ou,ie),ue(tu,U),ue(eu,ae),ue(ao,T),ue(is,H),ue(xd,_),ye(O))if(O.length){let pe=e.exposed||(e.exposed={});O.forEach(le=>{Object.defineProperty(pe,le,{get:()=>s[le],set:Oe=>s[le]=Oe,enumerable:!0})})}else e.exposed||(e.exposed={});q&&e.render===at&&(e.render=q),Y!=null&&(e.inheritAttrs=Y),Z&&(e.components=Z),te&&(e.directives=te),_&&Mn(e)}function au(e,t,s=at){ye(e)&&(e=Pn(e));for(let r in e){let n=e[r],i;Te(n)?"default"in n?i=ut(n.from||r,n.default,!0):i=ut(n.from||r):i=ut(n),Ze(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:a=>i.value=a}):t[r]=i}}function Wr(e,t,s){bt(ye(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,s)}function bi(e,t,s,r){let n=r.includes(".")?di(s,r):()=>s[r];if(Fe(e)){let i=t[e];we(i)&&Be(n,i)}else if(we(e))Be(n,e.bind(s));else if(Te(e))if(ye(e))e.forEach(i=>bi(i,t,s,r));else{let i=we(e.handler)?e.handler.bind(s):t[e.handler];we(i)&&Be(n,i,e)}}function $n(e){let t=e.type,{mixins:s,extends:r}=t,{mixins:n,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,u=i.get(t),f;return u?f=u:!n.length&&!s&&!r?f=t:(f={},n.length&&n.forEach(v=>Os(f,v,a,!0)),Os(f,t,a)),Te(t)&&i.set(t,f),f}function Os(e,t,s,r=!1){let{mixins:n,extends:i}=t;i&&Os(e,i,s,!0),n&&n.forEach(a=>Os(e,a,s,!0));for(let a in t)if(!(r&&a==="expose")){let u=lu[a]||s&&s[a];e[a]=u?u(e[a],t[a]):t[a]}return e}var lu={data:Kr,props:Yr,emits:Yr,methods:Jo,computed:Jo,beforeCreate:nt,created:nt,beforeMount:nt,mounted:nt,beforeUpdate:nt,updated:nt,beforeDestroy:nt,beforeUnmount:nt,destroyed:nt,unmounted:nt,activated:nt,deactivated:nt,errorCaptured:nt,serverPrefetch:nt,components:Jo,directives:Jo,watch:uu,provide:Kr,inject:du};function Kr(e,t){return t?e?function(){return Ge(we(e)?e.call(this,this):e,we(t)?t.call(this,this):t)}:t:e}function du(e,t){return Jo(Pn(e),Pn(t))}function Pn(e){if(ye(e)){let t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Je(t)}Modifiers`]||e[`${St(t)}Modifiers`];function mu(e,t,...s){if(e.isUnmounted)return;let r=e.vnode.props||Ie,n=s,i=t.startsWith("update:"),a=i&&fu(r,t.slice(7));a&&(a.trim&&(n=s.map(h=>Fe(h)?h.trim():h)),a.number&&(n=n.map(wo)));let u,f=r[u=qo(t)]||r[u=qo(Je(t))];!f&&i&&(f=r[u=qo(St(t))]),f&&bt(f,e,6,n);let v=r[u+"Once"];if(v){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,bt(v,e,6,n)}}var hu=new WeakMap;function ki(e,t,s=!1){let r=s?hu:t.emitsCache,n=r.get(e);if(n!==void 0)return n;let i=e.emits,a={},u=!1;if(!we(e)){let f=v=>{let h=ki(v,t,!0);h&&(u=!0,Ge(a,h))};!s&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!i&&!u?(Te(e)&&r.set(e,null),null):(ye(i)?i.forEach(f=>a[f]=null):Ge(a,i),Te(e)&&r.set(e,a),a)}function Fs(e,t){return!e||!vo(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Ne(e,t[0].toLowerCase()+t.slice(1))||Ne(e,St(t))||Ne(e,t))}function Tn(e){let{type:t,vnode:s,proxy:r,withProxy:n,propsOptions:[i],slots:a,attrs:u,emit:f,render:v,renderCache:h,props:k,data:m,setupState:E,ctx:y,inheritAttrs:w}=e,D=Ts(e),R,T;try{if(s.shapeFlag&4){let q=n||r,U=q;R=Vt(v.call(U,q,h,k,E,m,y)),T=u}else{let q=t;R=Vt(q.length>1?q(k,{attrs:u,slots:a,emit:f}):q(k,null)),T=t.props?u:vu(u)}}catch(q){ro.length=0,ns(q,e,1),R=Ce(jt)}let I=R,H;if(T&&w!==!1){let q=Object.keys(T),{shapeFlag:U}=I;q.length&&U&7&&(i&&q.some(go)&&(T=gu(T,i)),I=No(I,T,!1,!0))}if(s.dirs&&(I=No(I,null,!1,!0),I.dirs=I.dirs?I.dirs.concat(s.dirs):s.dirs),s.transition){let q=Ms(I.type)&&ui(I)||I;$s(q,s.transition)}return R=I,Ts(D),R}var vu=e=>{let t;for(let s in e)(s==="class"||s==="style"||vo(s))&&((t||(t={}))[s]=e[s]);return t},gu=(e,t)=>{let s={};for(let r in e)(!go(r)||!(r.slice(9)in t))&&(s[r]=e[r]);return s};function yu(e,t,s){let{props:r,children:n,component:i}=e,{props:a,children:u,patchFlag:f}=t,v=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&f>=0){if(f&1024)return!0;if(f&16)return r?Jr(r,a,v):!!a;if(f&8){let h=t.dynamicProps;for(let k=0;kObject.create(Ci),Si=e=>Object.getPrototypeOf(e)===Ci;function wu(e,t,s,r=!1){let n={},i=_i();e.propsDefaults=Object.create(null),Ni(e,t,n,i);for(let a in e.propsOptions[0])a in n||(n[a]=void 0);s?e.props=r?n:Wo(n):e.type.props?e.props=n:e.props=i,e.attrs=i}function ku(e,t,s,r){let{props:n,attrs:i,vnode:{patchFlag:a}}=e,u=De(n),[f]=e.propsOptions,v=!1;if((r||a>0)&&!(a&16)){if(a&8){let h=e.vnode.dynamicProps;for(let k=0;k{f=!0;let[m,E]=Di(k,t,!0);Ge(a,m),E&&u.push(...E)};!s&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!f)return Te(e)&&r.set(e,Zt),Zt;if(ye(i))for(let h=0;he==="_"||e==="_ctx"||e==="$stable",Un=e=>ye(e)?e.map(Vt):[Vt(e)],Cu=(e,t,s)=>{if(t._n)return t;let r=jd((...n)=>Un(t(...n)),s);return r._c=!1,r},Ri=(e,t,s)=>{let r=e._ctx;for(let n in e){if(Ln(n))continue;let i=e[n];if(we(i))t[n]=Cu(n,i,r);else if(i!=null){let a=Un(i);t[n]=()=>a}}},Ti=(e,t)=>{let s=Un(t);e.slots.default=()=>s},Ai=(e,t,s)=>{for(let r in t)(s||!Ln(r))&&(e[r]=t[r])},_u=(e,t,s)=>{let r=e.slots=_i();if(e.vnode.shapeFlag&32){let n=t._;n?(Ai(r,t,s),s&&hs(r,"_",n,!0)):Ri(t,r)}else t&&Ti(e,t)},Su=(e,t,s)=>{let{vnode:r,slots:n}=e,i=!0,a=Ie;if(r.shapeFlag&32){let u=t._;u?s&&u===1?i=!1:Ai(n,t,s):(i=!t.$stable,Ri(t,n)),a=t}else t&&(Ti(e,t),a={default:1});if(i)for(let u in n)!Ln(u)&&a[u]==null&&delete n[u]};function Nu(){let e=[]}var dt=Au;function Oi(e){return Du(e)}function Du(e,t){Nu();let s=Mo();s.__VUE__=!0;let{insert:r,remove:n,patchProp:i,createElement:a,createText:u,createComment:f,setText:v,setElementText:h,parentNode:k,nextSibling:m,setScopeId:E=at,insertStaticContent:y}=e,w=(g,S,V,z=null,j=null,L=null,G=void 0,ee=null,x=!!S.dynamicChildren)=>{if(g===S)return;g&&!Yo(g,S)&&(z=oe(g),$e(g,j,L,!0),g=null),S.patchFlag===-2&&(x=!1,S.dynamicChildren=null);let{type:K,ref:fe,shapeFlag:ne}=S;switch(K){case zs:D(g,S,V,z);break;case jt:R(g,S,V,z);break;case xo:g==null&&T(S,V,z,G);break;case X:te(g,S,V,z,j,L,G,ee,x);break;default:ne&1?U(g,S,V,z,j,L,G,ee,x):ne&6?J(g,S,V,z,j,L,G,ee,x):(ne&64||ne&128)&&K.process(g,S,V,z,j,L,G,ee,x,P)}fe!=null&&j?Qo(fe,g&&g.ref,L,S||g,!S):fe==null&&g&&g.ref!=null&&Qo(g.ref,null,L,g,!0)},D=(g,S,V,z)=>{if(g==null)r(S.el=u(S.children),V,z);else{let j=S.el=g.el;S.children!==g.children&&v(j,S.children)}},R=(g,S,V,z)=>{g==null?r(S.el=f(S.children||""),V,z):S.el=g.el},T=(g,S,V,z)=>{[g.el,g.anchor]=y(g.children,S,V,z,g.el,g.anchor)},I=(g,S,V,z)=>{if(S.children!==g.children){let j=m(g.anchor);q(g),[S.el,S.anchor]=y(S.children,V,j,z)}else S.el=g.el,S.anchor=g.anchor},H=({el:g,anchor:S},V,z)=>{let j;for(;g&&g!==S;)j=m(g),r(g,V,z),g=j;r(S,V,z)},q=({el:g,anchor:S})=>{let V;for(;g&&g!==S;)V=m(g),n(g),g=V;n(S)},U=(g,S,V,z,j,L,G,ee,x)=>{if(S.type==="svg"?G="svg":S.type==="math"&&(G="mathml"),g==null)ae(S,V,z,j,L,G,ee,x);else{let K=g.el&&g.el._isVueCE?g.el:null;try{K&&K._beginPatch(),O(g,S,j,L,G,ee,x)}finally{K&&K._endPatch()}}},ae=(g,S,V,z,j,L,G,ee)=>{let x,K,{props:fe,shapeFlag:ne,transition:de,dirs:ge}=g;if(x=g.el=a(g.type,L,fe&&fe.is,fe),ne&8?h(x,g.children):ne&16&&_(g.children,x,null,z,j,An(g,L),G,ee),ge&&so(g,null,z,"created"),ie(x,g,g.scopeId,G,z),fe){for(let Me in fe)Me!=="value"&&!yo(Me)&&i(x,Me,null,fe[Me],L,z);"value"in fe&&i(x,"value",null,fe.value,L),(K=fe.onVnodeBeforeMount)&&It(K,z,g)}ge&&so(g,null,z,"beforeMount");let Se=Ru(j,de);Se&&de.beforeEnter(x),r(x,S,V),((K=fe&&fe.onVnodeMounted)||Se||ge)&&dt(()=>{let Ve;try{K&&It(K,z,g),Se&&de.enter(x),ge&&so(g,null,z,"mounted")}finally{}},j)},ie=(g,S,V,z,j)=>{if(V&&E(g,V),z)for(let L=0;L{for(let K=x;K{let ee=S.el=g.el,{patchFlag:x,dynamicChildren:K,dirs:fe}=S;x|=g.patchFlag&16;let ne=g.props||Ie,de=S.props||Ie,ge;if(V&&no(V,!1),(ge=de.onVnodeBeforeUpdate)&&It(ge,V,S,g),fe&&so(S,g,V,"beforeUpdate"),V&&no(V,!0),K&&(!g.dynamicChildren||g.dynamicChildren.length!==K.length)&&(x=0,G=!1,K=null),(ne.innerHTML&&de.innerHTML==null||ne.textContent&&de.textContent==null)&&h(ee,""),K?Y(g.dynamicChildren,K,ee,V,z,An(S,j),L):G||Oe(g,S,ee,null,V,z,An(S,j),L,!1),x>0){if(x&16)Z(ee,ne,de,V,j);else if(x&2&&ne.class!==de.class&&i(ee,"class",null,de.class,j),x&4&&i(ee,"style",ne.style,de.style,j),x&8){let Se=S.dynamicProps;for(let Me=0;Me{ge&&It(ge,V,S,g),fe&&so(S,g,V,"updated")},z)},Y=(g,S,V,z,j,L,G)=>{for(let ee=0;ee{if(S!==V){if(S!==Ie)for(let L in S)!yo(L)&&!(L in V)&&i(g,L,S[L],null,j,z);for(let L in V){if(yo(L))continue;let G=V[L],ee=S[L];G!==ee&&L!=="value"&&i(g,L,ee,G,j,z)}"value"in V&&i(g,"value",S.value,V.value,j)}},te=(g,S,V,z,j,L,G,ee,x)=>{let K=S.el=g?g.el:u(""),fe=S.anchor=g?g.anchor:u(""),{patchFlag:ne,dynamicChildren:de,slotScopeIds:ge}=S;ge&&(ee=ee?ee.concat(ge):ge),g==null?(r(K,V,z),r(fe,V,z),_(S.children||[],V,fe,j,L,G,ee,x)):ne>0&&ne&64&&de&&g.dynamicChildren&&g.dynamicChildren.length===de.length?(Y(g.dynamicChildren,de,V,j,L,G,ee),(S.key!=null||j&&S===j.subTree)&&Ii(g,S,!0)):Oe(g,S,V,fe,j,L,G,ee,x)},J=(g,S,V,z,j,L,G,ee,x)=>{S.slotScopeIds=ee,g==null?S.shapeFlag&512?j.ctx.activate(S,V,z,G,x):se(S,V,z,j,L,G,x):ue(g,S,x)},se=(g,S,V,z,j,L,G)=>{let ee=g.component=Mu(g,z,j);if(Ls(g)&&(ee.ctx.renderer=P),$u(ee,!1,G),ee.asyncDep){if(j&&j.registerDep(ee,pe,G),!g.el){let x=ee.subTree=Ce(jt);R(null,x,S,V),g.placeholder=x.el}}else pe(ee,g,S,V,j,L,G)},ue=(g,S,V)=>{let z=S.component=g.component;if(yu(g,S,V))if(z.asyncDep&&!z.asyncResolved){le(z,S,V);return}else z.next=S,z.update();else S.el=g.el,z.vnode=S},pe=(g,S,V,z,j,L,G)=>{let ee=()=>{if(g.isMounted){let{next:ne,bu:de,u:ge,parent:Se,vnode:Me}=g;{let pt=Pi(g);if(pt){ne&&(ne.el=Me.el,le(g,ne,G)),pt.asyncDep.then(()=>{dt(()=>{g.isUnmounted||K()},j)});return}}let Ve=ne,Ke;no(g,!1),ne?(ne.el=Me.el,le(g,ne,G)):ne=Me,de&&bo(de),(Ke=ne.props&&ne.props.onVnodeBeforeUpdate)&&It(Ke,Se,ne,Me),no(g,!0);let Ye=Tn(g),kt=g.subTree;g.subTree=Ye,w(kt,Ye,k(kt.el),oe(kt),g,j,L),ne.el=Ye.el,Ve===null&&bu(g,Ye.el),ge&&dt(ge,j),(Ke=ne.props&&ne.props.onVnodeUpdated)&&dt(()=>It(Ke,Se,ne,Me),j)}else{let ne,{el:de,props:ge}=S,{bm:Se,m:Me,parent:Ve,root:Ke,type:Ye}=g,kt=Xo(S);if(no(g,!1),Se&&bo(Se),!kt&&(ne=ge&&ge.onVnodeBeforeMount)&&It(ne,Ve,S),no(g,!0),de&&M){let pt=()=>{g.subTree=Tn(g),M(de,g.subTree,g,j,null)};kt&&Ye.__asyncHydrate?Ye.__asyncHydrate(de,g,pt):pt()}else{Ke.ce&&Ke.ce._hasShadowRoot()&&Ke.ce._injectChildStyle(Ye,g.parent?g.parent.type:void 0);let pt=g.subTree=Tn(g);w(null,pt,V,z,g,j,L),S.el=pt.el}if(Me&&dt(Me,j),!kt&&(ne=ge&&ge.onVnodeMounted)){let pt=S;dt(()=>It(ne,Ve,pt),j)}(S.shapeFlag&256||Ve&&Xo(Ve.vnode)&&Ve.vnode.shapeFlag&256)&&g.a&&dt(g.a,j),g.isMounted=!0,S=V=z=null}};g.scope.on();let x=g.effect=new Eo(ee);g.scope.off();let K=g.update=x.run.bind(x),fe=g.job=x.runIfDirty.bind(x);fe.i=g,fe.id=g.uid,x.scheduler=()=>qn(fe),no(g,!0),K()},le=(g,S,V)=>{S.component=g;let z=g.vnode.props;g.vnode=S,g.next=null,ku(g,S.props,z,V),Su(g,S.children,V),At(),Fr(g),Ot()},Oe=(g,S,V,z,j,L,G,ee,x=!1)=>{let K=g&&g.children,fe=g?g.shapeFlag:0,ne=S.children,{patchFlag:de,shapeFlag:ge}=S;if(de>0){if(de&128){Ue(K,ne,V,z,j,L,G,ee,x);return}else if(de&256){_e(K,ne,V,z,j,L,G,ee,x);return}}ge&8?(fe&16&&F(K,j,L),ne!==K&&h(V,ne)):fe&16?ge&16?Ue(K,ne,V,z,j,L,G,ee,x):F(K,j,L,!0):(fe&8&&h(V,""),ge&16&&_(ne,V,z,j,L,G,ee,x))},_e=(g,S,V,z,j,L,G,ee,x)=>{g=g||Zt,S=S||Zt;let K=g.length,fe=S.length,ne=Math.min(K,fe),de;for(de=0;defe?F(g,j,L,!0,!1,ne):_(S,V,z,j,L,G,ee,x,ne)},Ue=(g,S,V,z,j,L,G,ee,x)=>{let K=0,fe=S.length,ne=g.length-1,de=fe-1;for(;K<=ne&&K<=de;){let ge=g[K],Se=S[K]=x?Bt(S[K]):Vt(S[K]);if(Yo(ge,Se))w(ge,Se,V,null,j,L,G,ee,x);else break;K++}for(;K<=ne&&K<=de;){let ge=g[ne],Se=S[de]=x?Bt(S[de]):Vt(S[de]);if(Yo(ge,Se))w(ge,Se,V,null,j,L,G,ee,x);else break;ne--,de--}if(K>ne){if(K<=de){let ge=de+1,Se=gede)for(;K<=ne;)$e(g[K],j,L,!0),K++;else{let ge=K,Se=K,Me=new Map;for(K=Se;K<=de;K++){let ft=S[K]=x?Bt(S[K]):Vt(S[K]);ft.key!=null&&Me.set(ft.key,K)}let Ve,Ke=0,Ye=de-Se+1,kt=!1,pt=0,Io=new Array(Ye);for(K=0;K=Ye){$e(ft,j,L,!0);continue}let _t;if(ft.key!=null)_t=Me.get(ft.key);else for(Ve=Se;Ve<=de;Ve++)if(Io[Ve-Se]===0&&Yo(ft,S[Ve])){_t=Ve;break}_t===void 0?$e(ft,j,L,!0):(Io[_t-Se]=K+1,_t>=pt?pt=_t:kt=!0,w(ft,S[_t],V,null,j,L,G,ee,x),Ke++)}let dr=kt?Tu(Io):Zt;for(Ve=dr.length-1,K=Ye-1;K>=0;K--){let ft=Se+K,_t=S[ft],ur=S[ft+1],cr=ft+1{let{el:L,type:G,transition:ee,children:x,shapeFlag:K}=g;if(K&6){Re(g.component.subTree,S,V,z);return}if(K&128){g.suspense.move(S,V,z);return}if(K&64){G.move(g,S,V,P);return}if(G===X){r(L,S,V);for(let ne=0;neee.enter(L),j));else{let{leave:ne,delayLeave:de,afterLeave:ge}=ee,Se=()=>{g.ctx.isUnmounted?n(L):r(L,S,V)},Me=()=>{let Ve=L._isLeaving||!!L[Dn];L._isLeaving&&L[Dn](!0),ee.persisted&&!Ve?Se():ne(L,()=>{Se(),ge&&ge()})};de?de(L,Se,Me):Me()}else r(L,S,V)},$e=(g,S,V,z=!1,j=!1)=>{let{type:L,props:G,ref:ee,children:x,dynamicChildren:K,shapeFlag:fe,patchFlag:ne,dirs:de,cacheIndex:ge,memo:Se}=g;if(ne===-2&&(j=!1),ee!=null&&(At(),Qo(ee,null,V,g,!0),Ot()),ge!=null&&(S.renderCache[ge]=void 0),fe&256){S.ctx.deactivate(g);return}let Me=fe&1&&de,Ve=!Xo(g),Ke;if(Ve&&(Ke=G&&G.onVnodeBeforeUnmount)&&It(Ke,S,g),fe&6)Ee(g.component,V,z);else{if(fe&128){g.suspense.unmount(V,z);return}Me&&so(g,null,S,"beforeUnmount"),fe&64?g.type.remove(g,S,V,P,z):K&&!K.hasOnce&&(L!==X||ne>0&&ne&64)?F(K,S,V,!1,!0):(L===X&&ne&384||!j&&fe&16)&&F(x,S,V),z&&Pe(g)}let Ye=Se!=null&&ge==null;(Ve&&(Ke=G&&G.onVnodeUnmounted)||Me||Ye)&&dt(()=>{Ke&&It(Ke,S,g),Me&&so(g,null,S,"unmounted"),Ye&&(g.el=null)},V)},Pe=g=>{let{type:S,el:V,anchor:z,transition:j}=g;if(S===X){He(V,z);return}if(S===xo){q(g);return}let L=()=>{n(V),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(g.shapeFlag&1&&j&&!j.persisted){let{leave:G,delayLeave:ee}=j,x=()=>G(V,L);ee?ee(g.el,L,x):x()}else L()},He=(g,S)=>{let V;for(;g!==S;)V=m(g),n(g),g=V;n(S)},Ee=(g,S,V)=>{let{bum:z,scope:j,job:L,subTree:G,um:ee,m:x,a:K}=g;Xr(x),Xr(K),z&&bo(z),j.stop(),L&&(L.flags|=8,$e(G,g,S,V)),ee&&dt(ee,S),dt(()=>{g.isUnmounted=!0},S)},F=(g,S,V,z=!1,j=!1,L=0)=>{for(let G=L;G{if(g.shapeFlag&6)return oe(g.component.subTree);if(g.shapeFlag&128)return g.suspense.next();let S=m(g.anchor||g.el),V=S&&S[Yd];return V?m(V):S},Q=!1,C=(g,S,V)=>{let z;g==null?S._vnode&&($e(S._vnode,null,null,!0),z=S._vnode.component):w(S._vnode||null,g,S,null,null,null,V),S._vnode=g,Q||(Q=!0,Fr(z),ri(),Q=!1)},P={p:w,um:$e,m:Re,r:Pe,mt:se,mc:_,pc:Oe,pbc:Y,n:oe,o:e},B,M;return t&&([B,M]=t(P)),{render:C,hydrate:B,createApp:pu(C,B)}}function An({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function no({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ru(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ii(e,t,s=!1){let r=e.children,n=t.children;if(ye(r)&&ye(n))for(let i=0;i>1,e[s[u]]0&&(t[r]=s[i-1]),s[i]=r)}}for(i=s.length,a=s[i-1];i-- >0;)s[i]=a,a=t[a];return s}function Pi(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Pi(t)}function Xr(e){if(e)for(let t=0;te.__isSuspense;function Au(e,t){t&&t.pendingBranch?ye(e)?t.effects.push(...e):t.effects.push(e):ni(e)}var X=Symbol.for("v-fgt"),zs=Symbol.for("v-txt"),jt=Symbol.for("v-cmt"),xo=Symbol.for("v-stc"),ro=[],vt=null;function l(e=!1){ro.push(vt=e?null:[])}function Mi(){ro.pop(),vt=ro[ro.length-1]||null}var ts=1;function Is(e,t=!1){ts+=e,e<0&&vt&&t&&(vt.hasOnce=!0)}function $i(e){return e.dynamicChildren=ts>0?vt||Zt:null,Mi(),ts>0&&vt&&vt.push(e),e}function d(e,t,s,r,n,i){return $i(o(e,t,s,r,n,i,!0))}function Mt(e,t,s,r,n){return $i(Ce(e,t,s,r,n,!0))}function Ps(e){return e?e.__v_isVNode===!0:!1}function Yo(e,t){return e.type===t.type&&e.key===t.key}var Li=({key:e})=>e??null,Ds=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Fe(e)||Ze(e)||we(e)?{i:ht,r:e,k:t,f:!!s}:e:null);function o(e,t=null,s=null,r=0,n=null,i=e===X?0:1,a=!1,u=!1){let f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Li(t),ref:t&&Ds(t),scopeId:ai,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:ht};return u?(Vs(f,s),i&128&&e.normalize(f)):s&&(f.shapeFlag|=Fe(s)?8:16),ts>0&&!a&&vt&&(f.patchFlag>0||i&6)&&f.patchFlag!==32&&vt.push(f),f}var Ce=Ou;function Ou(e,t=null,s=null,r=0,n=null,i=!1){if((!e||e===nu)&&(e=jt),Ps(e)){let u=No(e,t,!0);return s&&Vs(u,s),ts>0&&!i&&vt&&(u.shapeFlag&6?vt[vt.indexOf(e)]=u:vt.push(u)),u.patchFlag=-2,u}if(Hu(e)&&(e=e.__vccOpts),t){t=Iu(t);let{class:u,style:f}=t;u&&!Fe(u)&&(t.class=A(u)),Te(f)&&(Ko(f)&&!ye(f)&&(f=Ge({},f)),t.style=qe(f))}let a=Fe(e)?1:qi(e)?128:Ms(e)?64:Te(e)?4:we(e)?2:0;return o(e,t,s,r,n,a,i,!0)}function Iu(e){return e?Ko(e)||Si(e)?Ge({},e):e:null}function No(e,t,s=!1,r=!1){let{props:n,ref:i,patchFlag:a,children:u,transition:f}=e,v=t?Pu(n||{},t):n,h={__v_isVNode:!0,__v_skip:!0,type:e.type,props:v,key:v&&Li(v),ref:t&&t.ref?s&&i?ye(i)?i.concat(Ds(t)):[i,Ds(t)]:Ds(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==X?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&No(e.ssContent),ssFallback:e.ssFallback&&No(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&r&&$s(h,f.clone(h)),h}function b(e=" ",t=0){return Ce(zs,null,e,t)}function ce(e,t){let s=Ce(xo,null,e);return s.staticCount=t,s}function p(e="",t=!1){return t?(l(),Mt(jt,null,e)):Ce(jt,null,e)}function Vt(e){return e==null||typeof e=="boolean"?Ce(jt):ye(e)?Ce(X,null,e.slice()):Ps(e)?Bt(e):Ce(zs,null,String(e))}function Bt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:No(e)}function Vs(e,t){let s=0,{shapeFlag:r}=e;if(t==null)t=null;else if(ye(t))s=16;else if(typeof t=="object")if(r&65){let n=t.default;n&&(n._c&&(n._d=!1),Vs(e,n()),n._c&&(n._d=!0));return}else{s=32;let n=t._;!n&&!Si(t)?t._ctx=ht:n===3&&ht&&(ht.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(we(t)){if(r&65){Vs(e,{default:t});return}t={default:t,_ctx:ht},s=32}else t=String(t),r&64?(s=16,t=[b(t)]):s=8;e.children=t,e.shapeFlag|=s}function Pu(...e){let t={};for(let s=0;stt||ht,qs,os;{let e=Mo(),t=(s,r)=>{let n;return(n=e[s])||(n=e[s]=[]),n.push(r),i=>{n.length>1?n.forEach(a=>a(i)):n[0](i)}};qs=t("__VUE_INSTANCE_SETTERS__",s=>tt=s),os=t("__VUE_SSR_SETTERS__",s=>Do=s)}var as=e=>{let t=tt;return qs(e),e.scope.on(),()=>{e.scope.off(),qs(t)}},Zr=()=>{tt&&tt.scope.off(),qs(null)};function Ui(e){return e.vnode.shapeFlag&4}var Do=!1;function $u(e,t=!1,s=!1){t&&os(t);let{props:r,children:n}=e.vnode,i=Ui(e);wu(e,r,i,t),_u(e,n,s||t);let a=i?Lu(e,t):void 0;return t&&os(!1),a}function Lu(e,t){let s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ru);let{setup:r}=s;if(r){At();let n=e.setupContext=r.length>1?Fu(e):null,i=as(e),a=ss(r,e,0,[e.props,n]),u=ln(a);if(Ot(),i(),(u||e.sp)&&!Xo(e)&&Mn(e),u){if(a.then(Zr,Zr),t)return a.then(f=>{os(!0);try{xr(e,f,t)}finally{os(!1)}}).catch(f=>{ns(f,e,0)});e.asyncDep=a}else xr(e,a,t)}else Fi(e,t)}function xr(e,t,s){we(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Te(t)&&(e.setupState=Ss(t)),Fi(e,s)}var ei,ti;function Fi(e,t,s){let r=e.type;if(!e.render){if(!t&&ei&&!r.render){let n=r.template||$n(e).template;if(n){let{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:u,compilerOptions:f}=r,v=Ge(Ge({isCustomElement:i,delimiters:u},a),f);r.render=ei(n,v)}}e.render=r.render||at,ti&&ti(e)}{let n=as(e);At();try{iu(e)}finally{Ot(),n()}}}var Uu={get(e,t){return xe(e,"get",""),e[t]}};function Fu(e){let t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Uu),slots:e.slots,emit:e.emit,expose:t}}function Hs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ss(Nn(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Zo)return Zo[s](e)},has(t,s){return s in t||s in Zo}})):e.proxy}function zu(e,t=!0){return we(e)?e.displayName||e.name:e.name||t&&e.__name}function Hu(e){return we(e)&&"__vccOpts"in e}var ot=(e,t)=>$r(e,t,Do);function ke(e,t,s){try{Is(-1);let r=arguments.length;return r===2?Te(t)&&!ye(t)?Ps(t)?Ce(e,null,[t]):Ce(e,t):Ce(e,null,t):(r>3?s=Array.prototype.slice.call(arguments,2):r===3&&Ps(s)&&(s=[s]),Ce(e,t,s))}finally{Is(1)}}var Bu="3.5.42";var jn,zi=typeof window<"u"&&window.trustedTypes;if(zi)try{jn=zi.createPolicy("vue",{createHTML:e=>e})}catch{}var Zi=jn?e=>jn.createHTML(e):e=>e,ju="http://www.w3.org/2000/svg",Gu="http://www.w3.org/1998/Math/MathML",Wt=typeof document<"u"?document:null,Hi=Wt&&Wt.createElement("template"),Wu={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,r)=>{let n=t==="svg"?Wt.createElementNS(ju,e):t==="mathml"?Wt.createElementNS(Gu,e):s?Wt.createElement(e,{is:s}):Wt.createElement(e);return e==="select"&&r&&r.multiple!=null&&n.setAttribute("multiple",r.multiple),n},createText:e=>Wt.createTextNode(e),createComment:e=>Wt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Wt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,r,n,i){let a=s?s.previousSibling:t.lastChild;if(n&&(n===i||n.nextSibling))for(;t.insertBefore(n.cloneNode(!0),s),!(n===i||!(n=n.nextSibling)););else{Hi.innerHTML=Zi(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);let u=Hi.content;if(r==="svg"||r==="mathml"){let f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,s)}return[a?a.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}};var Ku=Symbol("_vtc");function Yu(e,t,s){let r=e[Ku];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}var Gs=Symbol("_vod"),xi=Symbol("_vsh"),W={name:"show",beforeMount(e,{value:t},{transition:s}){e[Gs]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):ls(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:r}){!t!=!s&&(r?t?(r.beforeEnter(e),ls(e,!0),r.enter(e)):r.leave(e,()=>{ls(e,!1)}):ls(e,t))},beforeUnmount(e,{value:t}){ls(e,t)}};function ls(e,t){e.style.display=t?e[Gs]:"none",e[xi]=!t}var Ju=Symbol("");var Qu=/(?:^|;)\s*display\s*:/;function Xu(e,t,s){let r=e.style,n=Fe(s),i=!1;if(s&&!n){if(t)if(Fe(t))for(let a of t.split(";")){let u=a.slice(0,a.indexOf(":")).trim();s[u]==null&&ds(r,u,"")}else for(let a in t)s[a]==null&&ds(r,a,"");for(let a in s){a==="display"&&(i=!0);let u=s[a];u!=null?xu(e,a,!Fe(t)&&t?t[a]:void 0,u)||ds(r,a,u):ds(r,a,"")}}else if(n){if(t!==s){let a=r[Ju];a&&(s+=";"+a),r.cssText=s,i=Qu.test(s)}}else t&&e.removeAttribute("style");Gs in e&&(e[Gs]=i?r.display:"",e[xi]&&(r.display="none"))}var Bs=/\s*!important$/;function ds(e,t,s){if(ye(s))s.forEach(r=>ds(e,t,r));else if(s==null&&(s=""),t.startsWith("--"))Bs.test(s)?e.setProperty(t,s.replace(Bs,""),"important"):e.setProperty(t,s);else{let r=Zu(e,t);Bs.test(s)?e.setProperty(St(r),s.replace(Bs,""),"important"):e[r]=s}}var Bi=["Webkit","Moz","ms"],zn={};function Zu(e,t){let s=zn[t];if(s)return s;let r=Je(t);if(r!=="filter"&&r in e)return zn[t]=r;r=xt(r);for(let n=0;nHn||(rc.then(()=>Hn=0),Hn=Date.now());function ac(e,t){let s=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=s.attached)return;let n=s.value;if(ye(n)){let i=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{i.call(r),r._stopped=!0};let a=n.slice(),u=[r];for(let f=0;fe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,lc=(e,t,s,r,n,i)=>{let a=n==="svg";t==="class"?Yu(e,r,a):t==="style"?Xu(e,s,r):vo(t)?go(t)||tc(e,t,s,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):dc(e,t,r,a))?(Wi(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Gi(e,t,r,a,i,t!=="value")):e._isVueCE&&(uc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Fe(r)))?Wi(e,Je(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Gi(e,t,r,a))};function dc(e,t,s,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Yi(t)&&we(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){let n=e.tagName;if(n==="IMG"||n==="VIDEO"||n==="CANVAS"||n==="SOURCE")return!1}return Yi(t)&&Fe(s)?!1:t in e}function uc(e,t){let s=e._def.props;if(!s)return!1;let r=Je(t);return Array.isArray(s)?s.some(n=>Je(n)===r):Object.keys(s).some(n=>Je(n)===r)}var Ws=e=>{let t=e.props["onUpdate:modelValue"]||!1;return ye(t)?s=>bo(t,s):t};function cc(e){e.target.composing=!0}function Ji(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}var uo=Symbol("_assign"),js=Symbol("_initialValue");function Bn(e,t,s){return t&&(e=e.trim()),s&&(e=wo(e)),e}var ea={created(e,{modifiers:{lazy:t,trim:s,number:r}},n){e.parentNode&&(e.type==="text"?e[js]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[js]=e.defaultValue.replace(/\r\n?/g,` -`))),e[uo]=Ws(n);let i=r||n.props&&n.props.type==="number";lo(e,t?"change":"input",a=>{a.target.composing||e[uo](Bn(e.value,s,i))}),(s||i)&&lo(e,"change",()=>{e.value=Bn(e.value,s,i)}),t||(lo(e,"compositionstart",cc),lo(e,"compositionend",Ji),lo(e,"change",Ji))},mounted(e,{value:t,modifiers:{trim:s,number:r}}){let n=t??"",i=e[js];delete e[js],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[uo](Bn(e.value,s,r)):e.value=n},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:r,trim:n,number:i}},a){if(e[uo]=Ws(a),e.composing)return;let u=(i||e.type==="number")&&!/^0\d/.test(e.value)?wo(e.value):e.value,f=t??"";if(u===f)return;let v=e.getRootNode();(v instanceof Document||v instanceof ShadowRoot)&&v.activeElement===e&&e.type!=="range"&&(r&&t===s||n&&e.value.trim()===f)||(e.value=f)}};var ta={deep:!0,created(e,{value:t,modifiers:{number:s}},r){e._modelValue=t,lo(e,"change",()=>{let n=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>s?wo(Ks(f)):Ks(f)),i=e.multiple,a=i?Ut(e._modelValue)?new Set(n):n:n[0],u=e._pendingValue=[i,i?ye(a)?n.slice():n:a];try{e[uo](a)}finally{st(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[uo]=Ws(r)},mounted(e,{value:t}){Qi(e,t)},beforeUpdate(e,{value:t},s){e._modelValue=t,e[uo]=Ws(s)},updated(e,{value:t}){let s=e._pendingValue;e._pendingValue=void 0,(!s||s[0]!==e.multiple||!pc(t,s[1],s[0]))&&Qi(e,t)}};function pc(e,t,s){if(!s)return Nt(e,t);if(ye(e))return Nt(e,t);if(Ut(e)){if(e.size!==t.length)return!1;for(let r of t)if(!e.has(r))return!1;return!0}return!1}function Qi(e,t){let s=e.multiple,r=ye(t);if(!(s&&!r&&!Ut(t))){for(let n=0,i=e.options.length;nString(v)===String(u)):a.selected=br(t,u)>-1}else a.selected=t.has(u);else if(Nt(Ks(a),t)){e.selectedIndex!==n&&(e.selectedIndex=n);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ks(e){return"_value"in e?e._value:e.value}var fc=["ctrl","shift","alt","meta"],mc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>fc.some(s=>e[`${s}Key`]&&!t.includes(s))},me=(e,t)=>{if(!e)return e;let s=e._withMods||(e._withMods={}),r=t.join(".");return s[r]||(s[r]=((n,...i)=>{for(let a=0;a{let s=e._withKeys||(e._withKeys={}),r=t.join(".");return s[r]||(s[r]=(n=>{if(!("key"in n))return;let i=St(n.key);if(t.some(a=>a===i||hc[a]===i))return e(n)}))},vc=Ge({patchProp:lc},Wu),Xi;function gc(){return Xi||(Xi=Oi(vc))}var oa=((...e)=>{let t=gc().createApp(...e),{mount:s}=t;return t.mount=r=>{let n=bc(r);if(!n)return;let i=t._component;!we(i)&&!i.render&&!i.template&&(i.template=n.innerHTML),n.nodeType===1&&(n.textContent="");let a=s(n,!1,yc(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),a},t});function yc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function bc(e){return Fe(e)?document.querySelector(e):e}var fo=typeof document<"u";function na(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function wc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&na(e.default)}var Ae=Object.assign;function Ys(e,t){let s={};for(let r in t){let n=t[r];s[r]=wt(n)?n.map(e):e(n)}return s}var Ao=()=>{},wt=Array.isArray;function Kn(e,t){let s={};for(let r in e)s[r]=r in t?t[r]:e[r];return s}var ra=/#/g,kc=/&/g,Ec=/\//g,Cc=/=/g,_c=/\?/g,ia=/\+/g,Sc=/%5B/g,Nc=/%5D/g,aa=/%5E/g,Dc=/%60/g,la=/%7B/g,Rc=/%7C/g,da=/%7D/g,Tc=/%20/g;function Yn(e){return e==null?"":encodeURI(""+e).replace(Rc,"|").replace(Sc,"[").replace(Nc,"]")}function ua(e){return Yn(e).replace(la,"{").replace(da,"}").replace(aa,"^")}function Gn(e){return Yn(e).replace(ia,"%2B").replace(Tc,"+").replace(ra,"%23").replace(kc,"%26").replace(Dc,"`").replace(la,"{").replace(da,"}").replace(aa,"^")}function Ac(e){return Gn(e).replace(Cc,"%3D")}function Oc(e){return Yn(e).replace(ra,"%23").replace(_c,"%3F")}function ca(e){return Oc(e).replace(Ec,"%2F")}function To(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}var Ic=/\/$/,Pc=e=>e.replace(Ic,"");function Js(e,t,s="/"){let r,n={},i="",a="",u=t.indexOf("#"),f=t.indexOf("?");return f=u>=0&&f>u?-1:f,f>=0&&(r=t.slice(0,f),i=t.slice(f,u>0?u:t.length),n=e(i.slice(1))),u>=0&&(r=r||t.slice(0,u),a=t.slice(u,t.length)),r=qc(r??t,s),{fullPath:r+i+a,path:r,query:n,hash:To(a)}}function pa(e,t){let s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function Jn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function fa(e,t,s){let r=t.matched.length-1,n=s.matched.length-1;return r>-1&&r===n&&co(t.matched[r],s.matched[n])&&Qn(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function co(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Qn(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var s in e)if(!Vc(e[s],t[s]))return!1;return!0}function Vc(e,t){return wt(e)?sa(e,t):wt(t)?sa(t,e):e?.valueOf()===t?.valueOf()}function sa(e,t){return wt(t)?e.length===t.length&&e.every((s,r)=>s===t[r]):e.length===1&&e[0]===t}function qc(e,t){if(e.startsWith("/"))return e;if(!e)return t;let s=t.split("/"),r=e.split("/"),n=r[r.length-1];(n===".."||n===".")&&r.push("");let i=s.length-1,a,u;for(a=0;a1&&i--;else break;return s.slice(0,i).join("/")+"/"+r.slice(a).join("/")}var Yt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Qs=(function(e){return e.pop="pop",e.push="push",e})({}),Xs=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function ma(e){if(!e)if(fo){let t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Pc(e)}var Mc=/^[^#]+#/;function ha(e,t){return e.replace(Mc,"#")+t}function $c(e,t){let s=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-s.left-(t.left||0),top:r.top-s.top-(t.top||0)}}var us=()=>({left:window.scrollX,top:window.scrollY});function va(e){let t;if("el"in e){let s=e.el,r=typeof s=="string"&&s.startsWith("#"),n=typeof s=="string"?r?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!n)return;t=$c(n,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Xn(e,t){return(history.state?history.state.position-t:-1)+e}var Wn=new Map;function ga(e,t){Wn.set(e,t)}function ya(e){let t=Wn.get(e);return Wn.delete(e),t}function Lc(e){return typeof e=="string"||e&&typeof e=="object"}function Zn(e){return typeof e=="string"||typeof e=="symbol"}var je=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({}),ba=Symbol("");var V6={[je.MATCHER_NOT_FOUND]({location:e,currentLocation:t}){return`No match for +"use strict";(()=>{var hd=Object.defineProperty;var vd=(e,t)=>{for(var n in t)hd(e,n,{get:t[n],enumerable:!0})};var he=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var ve={notebook:"/script/notebook.c3144c18ae.min.js",org:"/script/org.f61f262915.min.js",markdown:"/script/markdown.44f2e93820.min.js",editor:"/script/editor.4f142d3adc.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js"};function hr(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let n=new URLSearchParams(t);if([...n.keys()].length!==3||[...n.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let r=n.get("clientId"),s=n.get("intentId"),i=n.get("token");return!/^[a-f0-9]{32}$/.test(r||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(i||"")?null:{contract:"4open.artifacts/1",clientId:r,intentId:s,token:i}}function vr(e,t){let{http:n,promises:r,window:s}=t,i=t.takeReviewHandoff(),a=i?{clientId:i.clientId,intentId:i.intentId}:null,u,f,k,h,w,m=!0,E,y=r.defer(),g=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(F=>F.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:i?"":"Open a new artifact link from your submission. This link is missing or invalid."});let _=()=>m&&e.user?.username===w;function R(){m=!1,i=u=f=void 0,y.resolve(),s.clearTimeout(E)}e.on("dispose",R),e.on("routeLeave",R),e.watch(()=>e.user?.username,F=>{!w&&F?w=F:w&&F!==w&&(R(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let T=()=>({timeout:y.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":f}}),I=F=>F?.status===404?"Artifact linking is not available on this server.":F?.status===401?"Sign in, then open a new artifact link from your submission.":F?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!m||!i||e.busy||e.uncertain||e.saved||!e.user?.username)return;w=e.user.username;let F=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(F)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,u=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(E),h||(h=g());try{let P=(await n.get("/api/review-consent/csrf",{timeout:y.promise})).data;if(!_())return;if(f=P.csrf,e.handoffEnabled=P.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(f||""))throw new Error("invalid_csrf");let M=(await n.post("/api/review-consent/preview",{repositoryId:F,intent:{...i,requestId:h}},T())).data;if(!_())return;if(!M||typeof M.ticket!="string"||!M.ticket||M.ticket.length>8192||typeof M.repositoryName!="string"||!["restricted-review","anonymous-link"].includes(M.policy?.access)||!Number.isSafeInteger(M.policy.version)||!Number.isFinite(Date.parse(M.policy.retainUntil))||!Number.isFinite(Date.parse(M.expiresAt))||Date.parse(M.expiresAt)<=Date.now()||Date.parse(M.expiresAt)>Date.now()+6e5)throw new Error("invalid_preview");u=M.ticket,k=g(),e.preview={repositoryName:M.repositoryName,policy:{...M.policy},expiresAt:M.expiresAt},E=s.setTimeout(()=>{m&&(e.expired=!0)},Math.max(0,Date.parse(M.expiresAt)-Date.now()))}catch(P){_()&&(e.error=I(P))}finally{_()&&(e.busy=!1)}},e.confirmConsent=async()=>{if(!(!_()||e.busy||e.saved||!u||!e.acceptAccess||!e.acceptRetention)){if(Date.parse(e.preview.expiresAt)<=Date.now()){e.expired=!0;return}e.busy=!0,e.error="";try{let F=(await n.post("/api/review-consent/confirm",{ticket:u,requestId:k,acceptAccess:!0,acceptRetention:!0},T())).data;if(!_())return;if(F?.requestId!==k||!Number.isFinite(Date.parse(F.confirmedAt)))throw new Error("invalid_receipt");e.saved=!0,e.uncertain=!1,i=void 0,e.handoffEnabled||(u=void 0)}catch{_()&&(e.uncertain=!0,e.error="The confirmation was not verified. Retry with the same approval, or return to your submission to check its status.")}finally{_()&&(e.busy=!1)}}},e.continueReview=async()=>{if(!_()||e.busy||!e.saved||!e.handoffEnabled||!u||!a)return;e.busy=!0,e.error="";let F,P=()=>{F?.remove(),s.removeEventListener("securitypolicyviolation",M)},M=se=>{se.violatedDirective?.startsWith("form-action")&&(P(),_()&&(e.busy=!1,e.error="The return address was blocked. Return to your submission to check the artifact status."))};try{let se=(await n.post("/api/review-consent/handoff",{ticket:u},T())).data;if(!_())return;let oe=se?.completion,S=new URL(se?.callbackUrl);if(!oe||Object.keys(oe).sort().join(",")!=="clientId,code,contract,expiresAt,intentId"||oe.contract!=="4open.artifacts/1"||oe.clientId!==a.clientId||oe.intentId!==a.intentId||!/^[a-f0-9]{64}$/.test(oe.code||"")||!Number.isFinite(Date.parse(oe.expiresAt))||Date.parse(oe.expiresAt)<=Date.now()||Date.parse(oe.expiresAt)>Date.now()+3e5||S.protocol!=="https:"||S.href!==se.callbackUrl||S.username||S.password||se.callbackUrl.includes("?")||se.callbackUrl.includes("#"))throw new Error("invalid_handoff");F=s.document.createElement("form"),F.method="POST",F.action=S.href;let O=s.document.createElement("input");O.type="hidden",O.name="completion",O.value=JSON.stringify(oe),F.appendChild(O),s.document.body.appendChild(F),s.addEventListener("securitypolicyviolation",M),e.on("dispose",P),F.submit()}catch{P(),_()&&(e.busy=!1,e.error="The return to review could not be prepared. Retry from this page, or return to your submission to check its status.")}}}var hn=new Map,bd=ve;function oo(e){if(!hn.has(e)){let t=document.createElement("script");t.src=bd[e];let n=new Promise((r,s)=>{t.onload=r,t.onerror=()=>{hn.delete(e),t.remove(),s(new Error(`Unable to load ${e}. Please retry.`))}});hn.set(e,n),document.head.appendChild(t)}return hn.get(e)}async function yr(){await oo("editor"),ace.config.set("basePath","/script/external/ace/")}function vo(e){let t=Object.create(null);for(let n of e.split(","))t[n]=1;return n=>n in t}var Ie={},Zt=[],at=()=>{},ds=()=>!1,yo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),go=e=>e.startsWith("onUpdate:"),Ge=Object.assign,qo=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},wd=Object.prototype.hasOwnProperty,Ne=(e,t)=>wd.call(e,t),ye=Array.isArray,zt=e=>Mo(e)==="[object Map]",Ct=e=>Mo(e)==="[object Set]",gr=e=>Mo(e)==="[object Date]";var we=e=>typeof e=="function",Fe=e=>typeof e=="string",mt=e=>typeof e=="symbol",Te=e=>e!==null&&typeof e=="object",us=e=>(Te(e)||we(e))&&we(e.then)&&we(e.catch),Er=Object.prototype.toString,Mo=e=>Er.call(e),cs=e=>Mo(e).slice(8,-1),vn=e=>Mo(e)==="[object Object]",yn=e=>Fe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bo=vo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");var gn=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},kd=/-\w/g,Je=gn(e=>e.replace(kd,t=>t.slice(1).toUpperCase())),Ed=/\B([A-Z])/g,Dt=gn(e=>e.replace(Ed,"-$1").toLowerCase()),no=gn(e=>e.charAt(0).toUpperCase()+e.slice(1)),$o=gn(e=>e?`on${no(e)}`:""),gt=(e,t)=>!Object.is(e,t),wo=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},ko=e=>{let t=parseFloat(e);return isNaN(t)?e:t};var br,Lo=()=>br||(br=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function qe(e){if(ye(e)){let t={};for(let n=0;nn.startsWith("/*")?"":n).split(Cd).forEach(n=>{if(n){let r=n.split(_d);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function A(e){let t="";if(Fe(e))t=e;else if(ye(e))for(let n=0;n_t(n,t))}var Sr=e=>!!(e&&e.__v_isRef===!0),c=e=>Fe(e)?e:e==null?"":ye(e)||Te(e)&&(e.toString===Er||!we(e.toString))?Sr(e)?c(e.value):JSON.stringify(e,Nr,2):String(e),Nr=(e,t)=>Sr(t)?Nr(e,t.value):zt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[ls(r,i)+" =>"]=s,n),{})}:Ct(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ls(n))}:mt(t)?ls(t):Te(t)&&!ye(t)&&!vn(t)?String(t):t,ls=(e,t="")=>{var n;return mt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function Ad(e,...t){console.warn(`[Vue warn] ${e}`,...t)}var Qe,Ho=class{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Qe&&(Qe.active?(this.parent=Qe,this.index=(Qe.scopes||(Qe.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){let r=this.scopes.slice();for(t=0,n=r.length;t0&&--this._on===0){if(Qe===this)Qe=this.prevScope;else{let t=Qe;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(zo){let t=zo;for(zo=void 0;t;){let n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Fo;){let t=Fo;for(Fo=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Ir(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Pr(e){let t,n=e.depsTail,r=n;for(;r;){let s=r.prevDep;r.version===-1?(r===n&&(n=s),Ss(r),Od(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function hs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Vr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Vr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Bo)||(e.globalVersion=Bo,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!hs(e))))return;e.flags|=2;let t=e.dep,n=Le,r=St;Le=e,St=!0;try{Ir(e);let s=e.fn(e._value);(t.version===0||gt(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Le=n,St=r,Pr(e),e.flags&=-3}}function Ss(e,t=!1){let{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ss(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Od(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var St=!0,qr=[];function It(){qr.push(St),St=!1}function Pt(){let e=qr.pop();St=e===void 0?!0:e}function Dr(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let n=Le;Le=void 0;try{t()}finally{Le=n}}}var Bo=0,vs=class{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},jo=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Le||!St||Le===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Le)n=this.activeLink=new vs(Le,this),Le.deps?(n.prevDep=Le.depsTail,Le.depsTail.nextDep=n,Le.depsTail=n):Le.deps=Le.depsTail=n,Mr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){let r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Le.depsTail,n.nextDep=void 0,Le.depsTail.nextDep=n,Le.depsTail=n,Le.deps===n&&(Le.deps=r)}return n}trigger(t){this.version++,Bo++,this.notify(t)}notify(t){Cs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{_s()}}};function Mr(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Mr(r)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var ys=new WeakMap,ro=Symbol(""),gs=Symbol(""),Go=Symbol("");function xe(e,t,n){if(St&&Le){let r=ys.get(e);r||ys.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new jo),s.map=r,s.key=n),s.track()}}function Tt(e,t,n,r,s,i){let a=ys.get(e);if(!a){Bo++;return}let u=f=>{f&&f.trigger()};if(Cs(),t==="clear")a.forEach(u);else{let f=ye(e),k=f&&yn(n);if(f&&n==="length"){let h=Number(r);a.forEach((w,m)=>{(m==="length"||m===Go||!mt(m)&&m>=h)&&u(w)})}else switch((n!==void 0||a.has(void 0))&&u(a.get(n)),k&&u(a.get(Go)),t){case"add":f?k&&u(a.get("length")):(u(a.get(ro)),zt(e)&&u(a.get(gs)));break;case"delete":f||(u(a.get(ro)),zt(e)&&u(a.get(gs)));break;case"set":zt(e)&&u(a.get(ro));break}}_s()}function Eo(e){let t=De(e);return t===e||(xe(t,"iterate",Go),lt(e))?t:bt(e)?Ot(e)?t.map(n=>Bt(ht(n))):t.map(Bt):t.map(ht)}function Ko(e){return xe(e=De(e),"iterate",Go),e}function Rt(e,t){return bt(e)?Bt(Ot(e)?ht(t):t):ht(t)}var Id={__proto__:null,[Symbol.iterator](){return fs(this,Symbol.iterator,e=>Rt(this,e))},concat(...e){return Eo(this).concat(...e.map(t=>ye(t)?Eo(t):t))},entries(){return fs(this,"entries",e=>(e[1]=Rt(this,e[1]),e))},every(e,t){return Ht(this,"every",e,t,void 0,arguments)},filter(e,t){return Ht(this,"filter",e,t,n=>n.map(r=>Rt(this,r)),arguments)},find(e,t){return Ht(this,"find",e,t,n=>Rt(this,n),arguments)},findIndex(e,t){return Ht(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ht(this,"findLast",e,t,n=>Rt(this,n),arguments)},findLastIndex(e,t){return Ht(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ht(this,"forEach",e,t,void 0,arguments)},includes(...e){return ms(this,"includes",e)},indexOf(...e){return ms(this,"indexOf",e)},join(e){return Eo(this).join(e)},lastIndexOf(...e){return ms(this,"lastIndexOf",e)},map(e,t){return Ht(this,"map",e,t,void 0,arguments)},pop(){return Uo(this,"pop")},push(...e){return Uo(this,"push",e)},reduce(e,...t){return Rr(this,"reduce",e,t)},reduceRight(e,...t){return Rr(this,"reduceRight",e,t)},shift(){return Uo(this,"shift")},some(e,t){return Ht(this,"some",e,t,void 0,arguments)},splice(...e){return Uo(this,"splice",e)},toReversed(){return Eo(this).toReversed()},toSorted(e){return Eo(this).toSorted(e)},toSpliced(...e){return Eo(this).toSpliced(...e)},unshift(...e){return Uo(this,"unshift",e)},values(){return fs(this,"values",e=>Rt(this,e))}};function fs(e,t,n){let r=Ko(e),s=r[t]();return r!==e&&!lt(e)&&(s._next=s.next,s.next=()=>{let i=s._next();return i.done||(i.value=n(i.value)),i}),s}var Pd=Array.prototype;function Ht(e,t,n,r,s,i){let a=Ko(e),u=a!==e&&!lt(e),f=a[t];if(f!==Pd[t]){let w=f.apply(e,i);return u?ht(w):w}let k=n;a!==e&&(u?k=function(w,m){return n.call(this,Rt(e,w),m,e)}:n.length>2&&(k=function(w,m){return n.call(this,w,m,e)}));let h=f.call(a,k,r);return u&&s?s(h):h}function Rr(e,t,n,r){let s=Ko(e),i=s!==e&&!lt(e),a=n,u=!1;s!==e&&(i?(u=r.length===0,a=function(k,h,w){return u&&(u=!1,k=Rt(e,k)),n.call(this,k,Rt(e,h),w,e)}):n.length>3&&(a=function(k,h,w){return n.call(this,k,h,w,e)}));let f=s[t](a,...r);return u?Rt(e,f):f}function ms(e,t,n){let r=De(e);xe(r,"iterate",Go);let s=r[t](...n);return(s===-1||s===!1)&&Jo(n[0])?(n[0]=De(n[0]),r[t](...n)):s}function Uo(e,t,n=[]){It(),Cs();let r=De(e)[t].apply(e,n);return _s(),Pt(),r}var Vd=vo("__proto__,__v_isRef,__isVue"),$r=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mt));function qd(e){mt(e)||(e=String(e));let t=De(this);return xe(t,"has",e),t.hasOwnProperty(e)}var Sn=class{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;let s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?jd:Fr:i?Ur:Lr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;let a=ye(t);if(!s){let f;if(a&&(f=Id[n]))return f;if(n==="hasOwnProperty")return qd}let u=Reflect.get(t,n,Ze(t)?t:r);if((mt(n)?$r.has(n):Vd(n))||(s||xe(t,"get",n),i))return u;if(Ze(u)){let f=a&&yn(n)?u:u.value;return s&&Te(f)?Dn(f):f}return Te(u)?s?Dn(u):ze(u):u}},Nn=class extends Sn{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n],a=ye(t)&&yn(n);if(!this._isShallow){let k=bt(i);if(!lt(r)&&!bt(r)&&(i=De(i),r=De(r)),!a&&Ze(i)&&!Ze(r))return k||(i.value=r),!0}let u=a?Number(n)e,En=e=>Reflect.getPrototypeOf(e);function Ud(e,t,n){return function(...r){let s=this.__v_raw,i=De(s),a=zt(i),u=e==="entries"||e===Symbol.iterator&&a,f=e==="keys"&&a,k=s[e](...r),h=n?ws:t?Bt:ht;return!t&&xe(i,"iterate",f?gs:ro),Ge(Object.create(k),{next(){let{value:w,done:m}=k.next();return m?{value:w,done:m}:{value:u?[h(w[0]),h(w[1])]:h(w),done:m}}})}}function Cn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fd(e,t){let n={get(s){let i=this.__v_raw,a=De(i),u=De(s);e||(gt(s,u)&&xe(a,"get",s),xe(a,"get",u));let{has:f}=En(a),k=t?ws:e?Bt:ht;if(f.call(a,s))return k(i.get(s));if(f.call(a,u))return k(i.get(u));i!==a&&i.get(s)},get size(){let s=this.__v_raw;return!e&&xe(De(s),"iterate",ro),s.size},has(s){let i=this.__v_raw,a=De(i),u=De(s);return e||(gt(s,u)&&xe(a,"has",s),xe(a,"has",u)),s===u?i.has(s):i.has(s)||i.has(u)},forEach(s,i){let a=this,u=a.__v_raw,f=De(u),k=t?ws:e?Bt:ht;return!e&&xe(f,"iterate",ro),u.forEach((h,w)=>s.call(i,k(h),k(w),a))}};return Ge(n,e?{add:Cn("add"),set:Cn("set"),delete:Cn("delete"),clear:Cn("clear")}:{add(s){let i=De(this),a=En(i),u=De(s),f=!t&&!lt(s)&&!bt(s)?u:s;return a.has.call(i,f)||gt(s,f)&&a.has.call(i,s)||gt(u,f)&&a.has.call(i,u)||(i.add(f),Tt(i,"add",f,f)),this},set(s,i){!t&&!lt(i)&&!bt(i)&&(i=De(i));let a=De(this),{has:u,get:f}=En(a),k=u.call(a,s);k||(s=De(s),k=u.call(a,s));let h=f.call(a,s);return a.set(s,i),k?gt(i,h)&&Tt(a,"set",s,i,h):Tt(a,"add",s,i),this},delete(s){let i=De(this),{has:a,get:u}=En(i),f=a.call(i,s);f||(s=De(s),f=a.call(i,s));let k=u?u.call(i,s):void 0,h=i.delete(s);return f&&Tt(i,"delete",s,void 0,k),h},clear(){let s=De(this),i=s.size!==0,a=void 0,u=s.clear();return i&&Tt(s,"clear",void 0,void 0,a),u}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=Ud(s,e,t)}),n}function Ns(e,t){let n=Fd(e,t);return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Ne(n,s)&&s in r?n:r,s,i)}var zd={get:Ns(!1,!1)},Hd={get:Ns(!1,!0)},Bd={get:Ns(!0,!1)};var Lr=new WeakMap,Ur=new WeakMap,Fr=new WeakMap,jd=new WeakMap;function Gd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ze(e){return bt(e)?e:Ds(e,!1,Md,zd,Lr)}function Yo(e){return Ds(e,!1,Ld,Hd,Ur)}function Dn(e){return Ds(e,!0,$d,Bd,Fr)}function Ds(e,t,n,r,s){if(!Te(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let i=s.get(e);if(i)return i;let a=Gd(cs(e));if(a===0)return e;let u=new Proxy(e,a===2?r:n);return s.set(e,u),u}function Ot(e){return bt(e)?Ot(e.__v_raw):!!(e&&e.__v_isReactive)}function bt(e){return!!(e&&e.__v_isReadonly)}function lt(e){return!!(e&&e.__v_isShallow)}function Jo(e){return e?!!e.__v_raw:!1}function De(e){let t=e&&e.__v_raw;return t?De(t):e}function Rs(e){return!Ne(e,"__v_skip")&&Object.isExtensible(e)&&bn(e,"__v_skip",!0),e}var ht=e=>Te(e)?ze(e):e,Bt=e=>Te(e)?Dn(e):e;function Ze(e){return e?e.__v_isRef===!0:!1}function et(e){return zr(e,!1)}function Tn(e){return zr(e,!0)}function zr(e,t){return Ze(e)?e:new ks(e,t)}var ks=class{constructor(t,n){this.dep=new jo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:De(t),this._value=n?t:ht(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){let n=this._rawValue,r=this.__v_isShallow||lt(t)||bt(t);t=r?t:De(t),gt(t,n)&&(this._rawValue=t,this._value=r?t:ht(t),this.dep.trigger())}};function jt(e){return Ze(e)?e.value:e}var Wd={get:(e,t,n)=>t==="__v_raw"?e:jt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let s=e[t];return Ze(s)&&!Ze(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function An(e){return Ot(e)?e:new Proxy(e,Wd)}var Es=class{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new jo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Bo-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Le!==this)return Or(this,!0),!0}get value(){let t=this.dep.track();return Vr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}};function Hr(e,t,n=!1){let r,s;return we(e)?r=e:(r=e.get,s=e.set),new Es(r,s,n)}var _n={},Rn=new WeakMap,so;function Br(e,t=!1,n=so){if(n){let r=Rn.get(n);r||Rn.set(n,r=[]),r.push(e)}}function jr(e,t,n=Ie){let{immediate:r,deep:s,once:i,scheduler:a,augmentJob:u,call:f}=n,k=P=>{(n.onWarn||Ad)("Invalid watch source: ",P,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},h=P=>s?P:lt(P)||s===!1||s===0?At(P,1):At(P),w,m,E,y,g=!1,_=!1;if(Ze(e)?(m=()=>e.value,g=lt(e)):Ot(e)?(m=()=>h(e),g=!0):ye(e)?(_=!0,g=e.some(P=>Ot(P)||lt(P)),m=()=>e.map(P=>{if(Ze(P))return P.value;if(Ot(P))return h(P);if(we(P))return f?f(P,2):P()})):we(e)?t?m=f?()=>f(e,2):e:m=()=>{if(E){It();try{E()}finally{Pt()}}let P=so;so=w;try{return f?f(e,3,[y]):e(y)}finally{so=P}}:m=at,t&&s){let P=m,M=s===!0?1/0:s;m=()=>At(P(),M)}let R=Tr(),T=()=>{w.stop(),R&&R.active&&qo(R.effects,w)};if(i&&t){let P=t;t=(...M)=>{let se=P(...M);return T(),se}}let I=_?new Array(e.length).fill(_n):_n,F=P=>{if(!(!(w.flags&1)||!w.dirty&&!P))if(t){let M=w.run();if(P||s||g||(_?M.some((se,oe)=>gt(se,I[oe])):gt(M,I))){E&&E();let se=so;so=w;try{let oe=[M,I===_n?void 0:_&&I[0]===_n?[]:I,y];I=M,f?f(t,3,oe):t(...oe)}finally{so=se}}}else w.run()};return u&&u(F),w=new Co(m),w.scheduler=a?()=>a(F,!1):F,y=P=>Br(P,!1,w),E=w.onStop=()=>{let P=Rn.get(w);if(P){if(f)f(P,4);else for(let M of P)M();Rn.delete(w)}},t?r?F(!0):I=w.run():a?a(F.bind(null,!0),!0):w.run(),T.pause=w.pause.bind(w),T.resume=w.resume.bind(w),T.stop=T,T}function At(e,t=1/0,n){if(t<=0||!Te(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ze(e))At(e.value,t,n);else if(ye(e))for(let r=0;r{At(r,t,n)});else if(vn(e)){for(let r in e)At(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&At(e[r],t,n)}return e}function rn(e,t,n,r){try{return r?e(...r):e()}catch(s){an(s,t,n)}}function wt(e,t,n,r){if(we(e)){let s=rn(e,t,n,r);return s&&us(s)&&s.catch(i=>{an(i,t,n)}),s}if(ye(e)){let s=[];for(let i=0;i>>1,s=rt[r],i=on(s);i=on(n)?rt.push(e):rt.splice(Xd(t),0,e),e.flags|=1,li()}}function li(){Pn||(Pn=ai.then(ci))}function di(e){if(!ye(e))xt&&e.id===-1?xt.splice(_o+1,0,e):e.flags&1||(So.push(e),e.flags|=1);else for(let t=0;ton(n)-on(r));if(So.length=0,xt){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function ci(e){let t=at;try{for(qt=0;qt{r._d&&$n(-1);let i=Vn(t),a=lo.length,u;try{u=e(...s)}finally{for(let f=lo.length;f>a;f--)zi();Vn(i),r._d&&$n(1)}return u};return r._n=!0,r._c=!0,r._d=!0,r}function D(e,t){if(vt===null)return e;let n=Kn(vt),r=e.dirs||(e.dirs=[]);for(let s=0;s1)return n&&we(t)?t.call(r&&r.proxy):t}}var xd=Symbol.for("v-scx"),eu=()=>{{let e=ut(xd);return e}};function Be(e,t,n){return fi(e,t,n)}function fi(e,t,n=Ie){let{immediate:r,deep:s,flush:i,once:a}=n,u=Ge({},n),f=t&&r||!t&&i!=="post",k;if(Ro){if(i==="sync"){let E=eu();k=E.__watcherHandles||(E.__watcherHandles=[])}else if(!f){let E=()=>{};return E.stop=at,E.resume=at,E.pause=at,E}}let h=tt;u.call=(E,y,g)=>wt(E,h,y,g);let w=!1;i==="post"?u.scheduler=E=>{dt(E,h&&h.suspense)}:i!=="sync"&&(w=!0,u.scheduler=(E,y)=>{y?E():$s(E)}),u.augmentJob=E=>{t&&(E.flags|=4),w&&(E.flags|=2,h&&(E.id=h.uid,E.i=h))};let m=jr(e,t,u);return Ro&&(k?k.push(m):f&&m()),m}function tu(e,t,n){let r=this.proxy,s=Fe(e)?e.includes(".")?mi(r,e):()=>r[e]:e.bind(r,r),i;we(t)?i=t:(i=t.handler,n=t);let a=un(this),u=fi(s,i.bind(r),n);return a(),u}function mi(e,t){let n=t.split(".");return()=>{let r=e;for(let s=0;se.__isTeleport;var Ts=Symbol("_leaveCb");function nu(e){let t=e[0];if(e.length>1){let n=!1;for(let r of e)if(r.type!==Wt){t=r,n=!0;break}}return t}function hi(e){if(!Bn(e))return zn(e.type)&&e.children?nu(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&we(n.default))return n.default()}}function Hn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;let n=e.component.subTree;Hn(zn(n.type)&&hi(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ln(e,t){return we(e)?Ge({name:e.name},t,{setup:e}):e}function Ls(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Wr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}var qn=new WeakMap;function Zo(e,t,n,r,s=!1){if(ye(e)){e.forEach((g,_)=>Zo(g,t&&(ye(t)?t[_]:t),n,r,s));return}if(xo(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Zo(e,t,n,r.component.subTree);return}let i=r.shapeFlag&4?Kn(r.component):r.el,a=s?null:i,{i:u,r:f}=e,k=t&&t.r,h=u.refs===Ie?u.refs={}:u.refs,w=u.setupState,m=De(w),E=w===Ie?ds:g=>Wr(h,g)?!1:Ne(m,g),y=(g,_)=>!(_&&Wr(h,_));if(k!=null&&k!==f){if(Kr(t),Fe(k))h[k]=null,E(k)&&(w[k]=null);else if(Ze(k)){let g=t;y(k,g.k)&&(k.value=null),g.k&&(h[g.k]=null)}}if(we(f))rn(f,u,12,[a,h]);else{let g=Fe(f),_=Ze(f);if(g||_){let R=()=>{if(e.f){let T=g?E(f)?w[f]:h[f]:y(f)||!e.k?f.value:h[e.k];if(s)ye(T)&&qo(T,i);else if(ye(T))T.includes(i)||T.push(i);else if(g)h[f]=[i],E(f)&&(w[f]=h[f]);else{let I=[i];y(f,e.k)&&(f.value=I),e.k&&(h[e.k]=I)}}else g?(h[f]=a,E(f)&&(w[f]=a)):_&&(y(f,e.k)&&(f.value=a),e.k&&(h[e.k]=a))};if(a){let T=()=>{R(),qn.delete(e)};T.id=-1,qn.set(e,T),dt(T,n)}else Kr(e),R()}}}function Kr(e){let t=qn.get(e);t&&(t.flags|=8,qn.delete(e))}var Yr=e=>e.nodeType===8;var U6=Lo().requestIdleCallback||(e=>setTimeout(e,1)),F6=Lo().cancelIdleCallback||(e=>clearTimeout(e));function su(e,t){if(Yr(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Yr(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}var xo=e=>!!e.type.__asyncLoader;function vi(e){we(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,hydrate:i,timeout:a,suspensible:u=!0,onError:f}=e,k=null,h,w=0,m=()=>(w++,k=null,E()),E=()=>{let y;return k||(y=k=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),f)return new Promise((_,R)=>{f(g,()=>_(m()),()=>R(g),w+1)});throw g}).then(g=>y!==k&&k?k:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),h=g,g)))};return ln({name:"AsyncComponentWrapper",__asyncLoader:E,__asyncHydrate(y,g,_){let R=y.isConnected,T=!1;(g.bu||(g.bu=[])).push(()=>T=!0);let I=()=>{T||!y.parentNode||R&&!y.isConnected||_()},F=i?()=>{let P=i(I,M=>su(y,M));P&&(g.bum||(g.bum=[])).push(P)}:I;h?F():E().then(()=>!g.isUnmounted&&F())},get __asyncResolved(){return h},setup(){let y=tt;if(Ls(y),h)return()=>On(h,y);let g=P=>{k=null,an(P,y,13,!r)};if(u&&y.suspense||Ro)return E().then(P=>()=>On(P,y)).catch(P=>(g(P),()=>r?Ce(r,{error:P}):null));let _=et(!1),R=et(),T=et(!!s),I,F;return dn(()=>{I!=null&&clearTimeout(I),F!=null&&clearTimeout(F)}),s&&(F=setTimeout(()=>{y.isUnmounted||(T.value=!1)},s)),a!=null&&(I=setTimeout(()=>{if(!y.isUnmounted&&!_.value&&!R.value){let P=new Error(`Async component timed out after ${a}ms.`);g(P),R.value=P}},a)),E().then(()=>{y.isUnmounted||(_.value=!0,y.parent&&Bn(y.parent.vnode)&&y.parent.update())}).catch(P=>{if(y.isUnmounted){k=null;return}g(P),R.value=P}),()=>{if(_.value&&h)return On(h,y);if(R.value&&r)return Ce(r,{error:R.value});if(n&&!T.value)return On(n,y)}}})}function On(e,t){let{ref:n,props:r,children:s,ce:i}=t.vnode,a=Ce(e,r,s);return a.ref=n,a.ce=i,delete t.vnode.ce,a}var Bn=e=>e.type.__isKeepAlive;function yi(e,t){bi(e,"a",t)}function gi(e,t){bi(e,"da",t)}function bi(e,t,n=tt){let r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(jn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Bn(s.parent.vnode)&&ru(r,t,n,s),s=s.parent}}function ru(e,t,n,r){let s=jn(t,e,r,!0);dn(()=>{qo(r[t],s)},n)}function jn(e,t,n=tt,r=!1){if(n){let s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{It();let u=un(n),f=wt(t,n,e,a);return u(),Pt(),f});return r?s.unshift(i):s.push(i),i}}var Kt=e=>(t,n=tt)=>{(!Ro||e==="sp")&&jn(e,(...r)=>t(...r),n)},iu=Kt("bm"),$t=Kt("m"),wi=Kt("bu"),ki=Kt("u"),co=Kt("bum"),dn=Kt("um"),au=Kt("sp"),lu=Kt("rtg"),du=Kt("rtc");function uu(e,t=tt){jn("ec",e,t)}var Ei="components",cu="directives";function We(e,t){return Ci(Ei,e,!0,t)||e}var pu=Symbol.for("v-ndc");function be(e){return Ci(cu,e)}function Ci(e,t,n=!0,r=!1){let s=vt||tt;if(s){let i=s.type;if(e===Ei){let u=Ju(i,!1);if(u&&(u===t||u===Je(t)||u===no(Je(t))))return i}let a=Jr(s[e]||i[e],t)||Jr(s.appContext[e],t);return!a&&r?i:a}}function Jr(e,t){return e&&(e[t]||e[Je(t)]||e[no(Je(t))])}function ae(e,t,n,r){let s,i=n&&n[r],a=ye(e);if(a||Fe(e)){let u=a&&Ot(e),f=!1,k=!1;u&&(f=!lt(e),k=bt(e),e=Ko(e)),s=new Array(e.length);for(let h=0,w=e.length;ht(u,f,void 0,i&&i[f]));else{let u=Object.keys(e);s=new Array(u.length);for(let f=0,k=u.length;fe?ji(e)?Kn(e):Ps(e.parent):null;var en=Ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ps(e.parent),$root:e=>Ps(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Us(e),$forceUpdate:e=>e.f||(e.f=()=>{$s(e.update)}),$nextTick:e=>e.n||(e.n=nt.bind(e.proxy)),$watch:e=>tu.bind(e)});var As=(e,t)=>e!==Ie&&!e.__isScriptSetup&&Ne(e,t),fu={get({_:e},t){if(t==="__v_skip")return!0;let{ctx:n,setupState:r,data:s,props:i,accessCache:a,type:u,appContext:f}=e;if(t[0]!=="$"){let m=a[t];if(m!==void 0)switch(m){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(As(r,t))return a[t]=1,r[t];if(s!==Ie&&Ne(s,t))return a[t]=2,s[t];if(Ne(i,t))return a[t]=3,i[t];if(n!==Ie&&Ne(n,t))return a[t]=4,n[t];Vs&&(a[t]=0)}}let k=en[t],h,w;if(k)return t==="$attrs"&&xe(e.attrs,"get",""),k(e);if((h=u.__cssModules)&&(h=h[t]))return h;if(n!==Ie&&Ne(n,t))return a[t]=4,n[t];if(w=f.config.globalProperties,Ne(w,t))return w[t]},set({_:e},t,n){let{data:r,setupState:s,ctx:i}=e;return As(s,t)?(s[t]=n,!0):r!==Ie&&Ne(r,t)?(r[t]=n,!0):Ne(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,props:i,type:a}},u){let f;return!!(n[u]||e!==Ie&&u[0]!=="$"&&Ne(e,u)||As(t,u)||Ne(i,u)||Ne(r,u)||Ne(en,u)||Ne(s.config.globalProperties,u)||(f=a.__cssModules)&&f[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ne(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Qr(e){return ye(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}var Vs=!0;function mu(e){let t=Us(e),n=e.proxy,r=e.ctx;Vs=!1,t.beforeCreate&&Xr(t.beforeCreate,e,"bc");let{data:s,computed:i,methods:a,watch:u,provide:f,inject:k,created:h,beforeMount:w,mounted:m,beforeUpdate:E,updated:y,activated:g,deactivated:_,beforeDestroy:R,beforeUnmount:T,destroyed:I,unmounted:F,render:P,renderTracked:M,renderTriggered:se,errorCaptured:oe,serverPrefetch:S,expose:O,inheritAttrs:Y,components:Z,directives:te,filters:J}=t;if(k&&hu(k,r,null),a)for(let fe in a){let le=a[fe];we(le)&&(r[fe]=le.bind(n))}if(s){let fe=s.call(n,n);Te(fe)&&(e.data=ze(fe))}if(Vs=!0,i)for(let fe in i){let le=i[fe],Oe=we(le)?le.bind(n,n):we(le.get)?le.get.bind(n,n):at,_e=!we(le)&&we(le.set)?le.set.bind(n):at,Ue=ot({get:Oe,set:_e});Object.defineProperty(r,fe,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Re=>Ue.value=Re})}if(u)for(let fe in u)_i(u[fe],r,n,fe);if(f){let fe=we(f)?f.call(n):f;Reflect.ownKeys(fe).forEach(le=>{uo(le,fe[le])})}h&&Xr(h,e,"c");function ce(fe,le){ye(le)?le.forEach(Oe=>fe(Oe.bind(n))):le&&fe(le.bind(n))}if(ce(iu,w),ce($t,m),ce(wi,E),ce(ki,y),ce(yi,g),ce(gi,_),ce(uu,oe),ce(du,M),ce(lu,se),ce(co,T),ce(dn,F),ce(au,S),ye(O))if(O.length){let fe=e.exposed||(e.exposed={});O.forEach(le=>{Object.defineProperty(fe,le,{get:()=>n[le],set:Oe=>n[le]=Oe,enumerable:!0})})}else e.exposed||(e.exposed={});P&&e.render===at&&(e.render=P),Y!=null&&(e.inheritAttrs=Y),Z&&(e.components=Z),te&&(e.directives=te),S&&Ls(e)}function hu(e,t,n=at){ye(e)&&(e=qs(e));for(let r in e){let s=e[r],i;Te(s)?"default"in s?i=ut(s.from||r,s.default,!0):i=ut(s.from||r):i=ut(s),Ze(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:a=>i.value=a}):t[r]=i}}function Xr(e,t,n){wt(ye(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function _i(e,t,n,r){let s=r.includes(".")?mi(n,r):()=>n[r];if(Fe(e)){let i=t[e];we(i)&&Be(s,i)}else if(we(e))Be(s,e.bind(n));else if(Te(e))if(ye(e))e.forEach(i=>_i(i,t,n,r));else{let i=we(e.handler)?e.handler.bind(n):t[e.handler];we(i)&&Be(s,i,e)}}function Us(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,u=i.get(t),f;return u?f=u:!s.length&&!n&&!r?f=t:(f={},s.length&&s.forEach(k=>Mn(f,k,a,!0)),Mn(f,t,a)),Te(t)&&i.set(t,f),f}function Mn(e,t,n,r=!1){let{mixins:s,extends:i}=t;i&&Mn(e,i,n,!0),s&&s.forEach(a=>Mn(e,a,n,!0));for(let a in t)if(!(r&&a==="expose")){let u=vu[a]||n&&n[a];e[a]=u?u(e[a],t[a]):t[a]}return e}var vu={data:Zr,props:xr,emits:xr,methods:Xo,computed:Xo,beforeCreate:st,created:st,beforeMount:st,mounted:st,beforeUpdate:st,updated:st,beforeDestroy:st,beforeUnmount:st,destroyed:st,unmounted:st,activated:st,deactivated:st,errorCaptured:st,serverPrefetch:st,components:Xo,directives:Xo,watch:gu,provide:Zr,inject:yu};function Zr(e,t){return t?e?function(){return Ge(we(e)?e.call(this,this):e,we(t)?t.call(this,this):t)}:t:e}function yu(e,t){return Xo(qs(e),qs(t))}function qs(e){if(ye(e)){let t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Je(t)}Modifiers`]||e[`${Dt(t)}Modifiers`];function Eu(e,t,...n){if(e.isUnmounted)return;let r=e.vnode.props||Ie,s=n,i=t.startsWith("update:"),a=i&&ku(r,t.slice(7));a&&(a.trim&&(s=n.map(h=>Fe(h)?h.trim():h)),a.number&&(s=s.map(ko)));let u,f=r[u=$o(t)]||r[u=$o(Je(t))];!f&&i&&(f=r[u=$o(Dt(t))]),f&&wt(f,e,6,s);let k=r[u+"Once"];if(k){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,wt(k,e,6,s)}}var Cu=new WeakMap;function Ni(e,t,n=!1){let r=n?Cu:t.emitsCache,s=r.get(e);if(s!==void 0)return s;let i=e.emits,a={},u=!1;if(!we(e)){let f=k=>{let h=Ni(k,t,!0);h&&(u=!0,Ge(a,h))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!i&&!u?(Te(e)&&r.set(e,null),null):(ye(i)?i.forEach(f=>a[f]=null):Ge(a,i),Te(e)&&r.set(e,a),a)}function Gn(e,t){return!e||!yo(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Ne(e,t[0].toLowerCase()+t.slice(1))||Ne(e,Dt(t))||Ne(e,t))}function Os(e){let{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:a,attrs:u,emit:f,render:k,renderCache:h,props:w,data:m,setupState:E,ctx:y,inheritAttrs:g}=e,_=Vn(e),R,T;try{if(n.shapeFlag&4){let P=s||r,M=P;R=Mt(k.call(M,P,h,w,E,m,y)),T=u}else{let P=t;R=Mt(P.length>1?P(w,{attrs:u,slots:a,emit:f}):P(w,null)),T=t.props?u:_u(u)}}catch(P){lo.length=0,an(P,e,1),R=Ce(Wt)}let I=R,F;if(T&&g!==!1){let P=Object.keys(T),{shapeFlag:M}=I;P.length&&M&7&&(i&&P.some(go)&&(T=Su(T,i)),I=Do(I,T,!1,!0))}if(n.dirs&&(I=Do(I,null,!1,!0),I.dirs=I.dirs?I.dirs.concat(n.dirs):n.dirs),n.transition){let P=zn(I.type)&&hi(I)||I;Hn(P,n.transition)}return R=I,Vn(_),R}var _u=e=>{let t;for(let n in e)(n==="class"||n==="style"||yo(n))&&((t||(t={}))[n]=e[n]);return t},Su=(e,t)=>{let n={};for(let r in e)(!go(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Nu(e,t,n){let{props:r,children:s,component:i}=e,{props:a,children:u,patchFlag:f}=t,k=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return r?ei(r,a,k):!!a;if(f&8){let h=t.dynamicProps;for(let w=0;wObject.create(Ri),Ai=e=>Object.getPrototypeOf(e)===Ri;function Ru(e,t,n,r=!1){let s={},i=Ti();e.propsDefaults=Object.create(null),Oi(e,t,s,i);for(let a in e.propsOptions[0])a in s||(s[a]=void 0);n?e.props=r?s:Yo(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function Tu(e,t,n,r){let{props:s,attrs:i,vnode:{patchFlag:a}}=e,u=De(s),[f]=e.propsOptions,k=!1;if((r||a>0)&&!(a&16)){if(a&8){let h=e.vnode.dynamicProps;for(let w=0;w{f=!0;let[m,E]=Ii(w,t,!0);Ge(a,m),E&&u.push(...E)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!f)return Te(e)&&r.set(e,Zt),Zt;if(ye(i))for(let h=0;he==="_"||e==="_ctx"||e==="$stable",zs=e=>ye(e)?e.map(Mt):[Mt(e)],Ou=(e,t,n)=>{if(t._n)return t;let r=Zd((...s)=>zs(t(...s)),n);return r._c=!1,r},Pi=(e,t,n)=>{let r=e._ctx;for(let s in e){if(Fs(s))continue;let i=e[s];if(we(i))t[s]=Ou(s,i,r);else if(i!=null){let a=zs(i);t[s]=()=>a}}},Vi=(e,t)=>{let n=zs(t);e.slots.default=()=>n},qi=(e,t,n)=>{for(let r in t)(n||!Fs(r))&&(e[r]=t[r])},Iu=(e,t,n)=>{let r=e.slots=Ti();if(e.vnode.shapeFlag&32){let s=t._;s?(qi(r,t,n),n&&bn(r,"_",s,!0)):Pi(t,r)}else t&&Vi(e,t)},Pu=(e,t,n)=>{let{vnode:r,slots:s}=e,i=!0,a=Ie;if(r.shapeFlag&32){let u=t._;u?n&&u===1?i=!1:qi(s,t,n):(i=!t.$stable,Pi(t,s)),a=t}else t&&(Vi(e,t),a={default:1});if(i)for(let u in s)!Fs(u)&&a[u]==null&&delete s[u]};function Vu(){let e=[]}var dt=Lu;function Mi(e){return qu(e)}function qu(e,t){Vu();let n=Lo();n.__VUE__=!0;let{insert:r,remove:s,patchProp:i,createElement:a,createText:u,createComment:f,setText:k,setElementText:h,parentNode:w,nextSibling:m,setScopeId:E=at,insertStaticContent:y}=e,g=(v,N,q,H=null,j=null,U=null,G=void 0,ee=null,x=!!N.dynamicChildren)=>{if(v===N)return;v&&!Qo(v,N)&&(H=ne(v),Me(v,j,U,!0),v=null),N.patchFlag===-2&&(x=!1,N.dynamicChildren=null),N.dynamicChildren&&v&&v.dynamicChildren&&v.dynamicChildren.hasOnce&&(N.dynamicChildren===Zt&&(N.dynamicChildren=[]),N.dynamicChildren.hasOnce=!0);let{type:W,ref:me,shapeFlag:ie}=N;switch(W){case Wn:_(v,N,q,H);break;case Wt:R(v,N,q,H);break;case tn:v==null&&T(N,q,H,G);break;case X:te(v,N,q,H,j,U,G,ee,x);break;default:ie&1?M(v,N,q,H,j,U,G,ee,x):ie&6?J(v,N,q,H,j,U,G,ee,x):(ie&64||ie&128)&&W.process(v,N,q,H,j,U,G,ee,x,V)}me!=null&&j?Zo(me,v&&v.ref,U,N||v,!N):me==null&&v&&v.ref!=null&&Zo(v.ref,null,U,v,!0)},_=(v,N,q,H)=>{if(v==null)r(N.el=u(N.children),q,H);else{let j=N.el=v.el;N.children!==v.children&&k(j,N.children)}},R=(v,N,q,H)=>{v==null?r(N.el=f(N.children||""),q,H):N.el=v.el},T=(v,N,q,H)=>{[v.el,v.anchor]=y(v.children,N,q,H,v.el,v.anchor)},I=(v,N,q,H)=>{if(N.children!==v.children){let j=m(v.anchor);P(v),[N.el,N.anchor]=y(N.children,q,j,H)}else N.el=v.el,N.anchor=v.anchor},F=({el:v,anchor:N},q,H)=>{let j;for(;v&&v!==N;)j=m(v),r(v,q,H),v=j;r(N,q,H)},P=({el:v,anchor:N})=>{let q;for(;v&&v!==N;)q=m(v),s(v),v=q;s(N)},M=(v,N,q,H,j,U,G,ee,x)=>{if(N.type==="svg"?G="svg":N.type==="math"&&(G="mathml"),v==null)se(N,q,H,j,U,G,ee,x);else{let W=v.el&&v.el._isVueCE?v.el:null;try{W&&W._beginPatch(),O(v,N,j,U,G,ee,x)}finally{W&&W._endPatch()}}},se=(v,N,q,H,j,U,G,ee)=>{let x,W,{props:me,shapeFlag:ie,transition:ue,dirs:ge}=v;if(x=v.el=a(v.type,U,me&&me.is,me),ie&8?h(x,v.children):ie&16&&S(v.children,x,null,H,j,Is(v,U),G,ee),ge&&io(v,null,H,"created"),oe(x,v,v.scopeId,G,H),me){for(let $e in me)$e!=="value"&&!bo($e)&&i(x,$e,null,me[$e],U,H);"value"in me&&i(x,"value",null,me.value,U),(W=me.onVnodeBeforeMount)&&Vt(W,H,v)}ge&&io(v,null,H,"beforeMount");let Se=Mu(j,ue);Se&&ue.beforeEnter(x),r(x,N,q),((W=me&&me.onVnodeMounted)||Se||ge)&&dt(()=>{let Ve;W&&Vt(W,H,v),Se&&ue.enter(x),ge&&io(v,null,H,"mounted")},j)},oe=(v,N,q,H,j)=>{if(q&&E(v,q),H)for(let U=0;U{for(let W=x;W{let ee=N.el=v.el,{patchFlag:x,dynamicChildren:W,dirs:me}=N;x|=v.patchFlag&16;let ie=v.props||Ie,ue=N.props||Ie,ge;if(q&&ao(q,!1),(ge=ue.onVnodeBeforeUpdate)&&Vt(ge,q,N,v),me&&io(N,v,q,"beforeUpdate"),q&&ao(q,!0),W&&(!v.dynamicChildren||v.dynamicChildren.length!==W.length)&&(x=0,G=!1,W=null),(ie.innerHTML&&ue.innerHTML==null||ie.textContent&&ue.textContent==null)&&h(ee,""),W?Y(v.dynamicChildren,W,ee,q,H,Is(N,j),U):G||Oe(v,N,ee,null,q,H,Is(N,j),U,!1),x>0){if(x&16)Z(ee,ie,ue,q,j);else if(x&2&&ie.class!==ue.class&&i(ee,"class",null,ue.class,j),x&4&&i(ee,"style",ie.style,ue.style,j),x&8){let Se=N.dynamicProps;for(let $e=0;$e{ge&&Vt(ge,q,N,v),me&&io(N,v,q,"updated")},H)},Y=(v,N,q,H,j,U,G)=>{for(let ee=0;ee{if(N!==q){if(N!==Ie)for(let U in N)!bo(U)&&!(U in q)&&i(v,U,N[U],null,j,H);for(let U in q){if(bo(U))continue;let G=q[U],ee=N[U];G!==ee&&U!=="value"&&i(v,U,ee,G,j,H)}"value"in q&&i(v,"value",N.value,q.value,j)}},te=(v,N,q,H,j,U,G,ee,x)=>{let W=N.el=v?v.el:u(""),me=N.anchor=v?v.anchor:u(""),{patchFlag:ie,dynamicChildren:ue,slotScopeIds:ge}=N;ge&&(ee=ee?ee.concat(ge):ge),v==null?(r(W,q,H),r(me,q,H),S(N.children||[],q,me,j,U,G,ee,x)):ie>0&&ie&64&&ue&&v.dynamicChildren&&v.dynamicChildren.length===ue.length?(Y(v.dynamicChildren,ue,q,j,U,G,ee),(N.key!=null||j&&N===j.subTree)&&$i(v,N,!0)):Oe(v,N,q,me,j,U,G,ee,x)},J=(v,N,q,H,j,U,G,ee,x)=>{N.slotScopeIds=ee,v==null?N.shapeFlag&512?j.ctx.activate(N,q,H,G,x):re(N,q,H,j,U,G,x):ce(v,N,x)},re=(v,N,q,H,j,U,G)=>{let ee=v.component=ju(v,H,j);if(Bn(v)&&(ee.ctx.renderer=V),Gu(ee,!1,G),ee.asyncDep){if(j&&j.registerDep(ee,fe,G),!v.el){let x=ee.subTree=Ce(Wt);R(null,x,N,q),v.placeholder=x.el}}else fe(ee,v,N,q,j,U,G)},ce=(v,N,q)=>{let H=N.component=v.component;if(Nu(v,N,q))if(H.asyncDep&&!H.asyncResolved){N.el=v.el,le(H,N,q);return}else H.next=N,H.update();else N.el=v.el,H.vnode=N},fe=(v,N,q,H,j,U,G)=>{let ee=()=>{if(v.isMounted){let{next:ie,bu:ue,u:ge,parent:Se,vnode:$e}=v;{let pt=Li(v);if(pt){ie&&(ie.el=$e.el,le(v,ie,G)),pt.asyncDep.then(()=>{dt(()=>{v.isUnmounted||W()},j)});return}}let Ve=ie,Ke;ao(v,!1),ie?(ie.el=$e.el,le(v,ie,G)):ie=$e,ue&&wo(ue),(Ke=ie.props&&ie.props.onVnodeBeforeUpdate)&&Vt(Ke,Se,ie,$e),ao(v,!0);let Ye=Os(v),Et=v.subTree;v.subTree=Ye,g(Et,Ye,w(Et.el),ne(Et),v,j,U),ie.el=Ye.el,Ve===null&&Du(v,Ye.el),ge&&dt(ge,j),(Ke=ie.props&&ie.props.onVnodeUpdated)&&dt(()=>Vt(Ke,Se,ie,$e),j)}else{let ie,{el:ue,props:ge}=N,{bm:Se,m:$e,parent:Ve,root:Ke,type:Ye}=v,Et=xo(N);if(ao(v,!1),Se&&wo(Se),!Et&&(ie=ge&&ge.onVnodeBeforeMount)&&Vt(ie,Ve,N),ao(v,!0),ue&&L){let pt=()=>{v.subTree=Os(v),L(ue,v.subTree,v,j,null)};Et&&Ye.__asyncHydrate?Ye.__asyncHydrate(ue,v,pt):pt()}else{Ke.ce&&Ke.ce._hasShadowRoot()&&Ke.ce._injectChildStyle(Ye,v.parent?v.parent.type:void 0);let pt=v.subTree=Os(v);g(null,pt,q,H,v,j,U),N.el=pt.el}if($e&&dt($e,j),!Et&&(ie=ge&&ge.onVnodeMounted)){let pt=N;dt(()=>Vt(ie,Ve,pt),j)}(N.shapeFlag&256||Ve&&xo(Ve.vnode)&&Ve.vnode.shapeFlag&256)&&v.a&&dt(v.a,j),v.isMounted=!0,N=q=H=null}};v.scope.on();let x=v.effect=new Co(ee);v.scope.off();let W=v.update=x.run.bind(x),me=v.job=x.runIfDirty.bind(x);me.i=v,me.id=v.uid,x.scheduler=()=>$s(me),ao(v,!0),W()},le=(v,N,q)=>{N.component=v;let H=v.vnode.props;v.vnode=N,v.next=null,Tu(v,N.props,H,q),Pu(v,N.children,q),It(),Gr(v),Pt()},Oe=(v,N,q,H,j,U,G,ee,x=!1)=>{let W=v&&v.children,me=v?v.shapeFlag:0,ie=N.children,{patchFlag:ue,shapeFlag:ge}=N;if(ue>0){if(ue&128){Ue(W,ie,q,H,j,U,G,ee,x);return}else if(ue&256){_e(W,ie,q,H,j,U,G,ee,x);return}}ge&8?(me&16&&z(W,j,U),ie!==W&&h(q,ie)):me&16?ge&16?Ue(W,ie,q,H,j,U,G,ee,x):z(W,j,U,!0):(me&8&&h(q,""),ge&16&&S(ie,q,H,j,U,G,ee,x))},_e=(v,N,q,H,j,U,G,ee,x)=>{v=v||Zt,N=N||Zt;let W=v.length,me=N.length,ie=Math.min(W,me),ue;for(ue=0;ueme?z(v,j,U,!0,!1,ie):S(N,q,H,j,U,G,ee,x,ie)},Ue=(v,N,q,H,j,U,G,ee,x)=>{let W=0,me=N.length,ie=v.length-1,ue=me-1;for(;W<=ie&&W<=ue;){let ge=v[W],Se=N[W]=x?Gt(N[W]):Mt(N[W]);if(Qo(ge,Se))g(ge,Se,q,null,j,U,G,ee,x);else break;W++}for(;W<=ie&&W<=ue;){let ge=v[ie],Se=N[ue]=x?Gt(N[ue]):Mt(N[ue]);if(Qo(ge,Se))g(ge,Se,q,null,j,U,G,ee,x);else break;ie--,ue--}if(W>ie){if(W<=ue){let ge=ue+1,Se=geue)for(;W<=ie;)Me(v[W],j,U,!0),W++;else{let ge=W,Se=W,$e=new Map;for(W=Se;W<=ue;W++){let ft=N[W]=x?Gt(N[W]):Mt(N[W]);ft.key!=null&&$e.set(ft.key,W)}let Ve,Ke=0,Ye=ue-Se+1,Et=!1,pt=0,Vo=new Array(Ye);for(W=0;W=Ye){Me(ft,j,U,!0);continue}let Nt;if(ft.key!=null)Nt=$e.get(ft.key);else for(Ve=Se;Ve<=ue;Ve++)if(Vo[Ve-Se]===0&&Qo(ft,N[Ve])){Nt=Ve;break}Nt===void 0?Me(ft,j,U,!0):(Vo[Nt-Se]=W+1,Nt>=pt?pt=Nt:Et=!0,g(ft,N[Nt],q,null,j,U,G,ee,x),Ke++)}let pr=Et?$u(Vo):Zt;for(Ve=pr.length-1,W=Ye-1;W>=0;W--){let ft=Se+W,Nt=N[ft],fr=N[ft+1],mr=ft+1{let{el:U,type:G,transition:ee,children:x,shapeFlag:W}=v;if(W&6){Re(v.component.subTree,N,q,H);return}if(W&128){v.suspense.move(N,q,H);return}if(W&64){G.move(v,N,q,V);return}if(G===X){r(U,N,q);for(let ie=0;ieee.enter(U),j));else{let{leave:ie,delayLeave:ue,afterLeave:ge}=ee,Se=()=>{v.ctx.isUnmounted?s(U):r(U,N,q)},$e=()=>{let Ve=U._isLeaving||!!U[Ts];U._isLeaving&&U[Ts](!0),ee.persisted&&!Ve?Se():ie(U,()=>{Se(),ge&&ge()})};ue?ue(U,Se,$e):$e()}else r(U,N,q)},Me=(v,N,q,H=!1,j=!1)=>{let{type:U,props:G,ref:ee,children:x,dynamicChildren:W,shapeFlag:me,patchFlag:ie,dirs:ue,cacheIndex:ge,memo:Se}=v;if((ie===-2||W&&W.hasOnce)&&(j=!1),ee!=null&&(It(),Zo(ee,null,q,v,!0),Pt()),ge!=null&&(!v.ctx||v.ctx===N)&&(N.renderCache[ge]=void 0),me&256){N.ctx.deactivate(v);return}let $e=me&1&&ue,Ve=!xo(v),Ke;if(Ve&&(Ke=G&&G.onVnodeBeforeUnmount)&&Vt(Ke,N,v),me&6)Ee(v.component,q,H);else{if(me&128){v.suspense.unmount(q,H);return}$e&&io(v,null,N,"beforeUnmount"),me&64?v.type.remove(v,N,q,V,H):W&&!W.hasOnce&&(U!==X||ie>0&&ie&64)?z(W,N,q,!1,!0):(U===X&&ie&384||!j&&me&16)&&z(x,N,q),H&&Pe(v)}let Ye=Se!=null&&ge==null;(Ve&&(Ke=G&&G.onVnodeUnmounted)||$e||Ye)&&dt(()=>{Ke&&Vt(Ke,N,v),$e&&io(v,null,N,"unmounted"),Ye&&(v.el=null)},q)},Pe=v=>{let{type:N,el:q,anchor:H,transition:j}=v;if(N===X){He(q,H);return}if(N===tn){P(v),j&&!j.persisted&&j.afterLeave&&j.afterLeave();return}let U=()=>{s(q),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(v.shapeFlag&1&&j&&!j.persisted){let{leave:G,delayLeave:ee}=j,x=()=>G(q,U);ee?ee(v.el,U,x):x()}else U()},He=(v,N)=>{let q;for(;v!==N;)q=m(v),s(v),v=q;s(N)},Ee=(v,N,q)=>{let{bum:H,scope:j,job:U,subTree:G,um:ee,m:x,a:W}=v;oi(x),oi(W),H&&wo(H),j.stop(),U?(U.flags|=8,Me(G,v,N,q)):v.vnode.el&&G&&(G.transition=v.vnode.transition,Me(G,v,N,q)),ee&&dt(ee,N),dt(()=>{v.isUnmounted=!0},N)},z=(v,N,q,H=!1,j=!1,U=0)=>{for(let G=U;G{if(v.shapeFlag&6)return ne(v.component.subTree);if(v.shapeFlag&128)return v.suspense.next();let N=m(v.anchor||v.el),q=N&&N[ou];return q?m(q):N},Q=!1,C=(v,N,q)=>{let H;v==null?N._vnode&&(Me(N._vnode,null,null,!0),H=N._vnode.component):g(N._vnode||null,v,N,null,null,null,q),N._vnode=v,Q||(Q=!0,Gr(H),ui(),Q=!1)},V={p:g,um:Me,m:Re,r:Pe,mt:re,mc:S,pc:Oe,pbc:Y,n:ne,o:e},B,L;return t&&([B,L]=t(V)),{render:C,hydrate:B,createApp:wu(C,B)}}function Is({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ao({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Mu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function $i(e,t,n=!1){let r=e.children,s=t.children;if(ye(r)&&ye(s))for(let i=0;i>1,e[n[u]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}function Li(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Li(t)}function oi(e){if(e)for(let t=0;te.__isSuspense;function Lu(e,t){t&&t.pendingBranch?ye(e)?t.effects.push(...e):t.effects.push(e):di(e)}var X=Symbol.for("v-fgt"),Wn=Symbol.for("v-txt"),Wt=Symbol.for("v-cmt"),tn=Symbol.for("v-stc"),lo=[],yt=null;function l(e=!1){lo.push(yt=e?null:[])}function zi(){lo.pop(),yt=lo[lo.length-1]||null}var nn=1;function $n(e,t=!1){nn+=e,e<0&&yt&&t&&(yt.hasOnce=!0)}function Hi(e){return e.dynamicChildren=nn>0?yt||Zt:null,zi(),nn>0&&yt&&yt.push(e),e}function d(e,t,n,r,s,i){return Hi(o(e,t,n,r,s,i,!0))}function Lt(e,t,n,r,s){return Hi(Ce(e,t,n,r,s,!0))}function Ln(e){return e?e.__v_isVNode===!0:!1}function Qo(e,t){return e.type===t.type&&e.key===t.key}var Bi=({key:e})=>e??null,In=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Fe(e)||Ze(e)||we(e)?{i:vt,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,r=0,s=null,i=e===X?0:1,a=!1,u=!1){let f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Bi(t),ref:t&&In(t),scopeId:pi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:vt};return u?(Un(f,n),i&128&&e.normalize(f)):n&&(f.shapeFlag|=Fe(n)?8:16),nn>0&&!a&&yt&&(f.patchFlag>0||i&6)&&f.patchFlag!==32&&yt.push(f),f}var Ce=Uu;function Uu(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===pu)&&(e=Wt),Ln(e)){let u=Do(e,t,!0);return n&&Un(u,n),nn>0&&!i&&yt&&(u.shapeFlag&6?yt[yt.indexOf(e)]=u:yt.push(u)),u.patchFlag=-2,u}if(Qu(e)&&(e=e.__vccOpts),t){t=Fu(t);let{class:u,style:f}=t;u&&!Fe(u)&&(t.class=A(u)),Te(f)&&(Jo(f)&&!ye(f)&&(f=Ge({},f)),t.style=qe(f))}let a=Fe(e)?1:Fi(e)?128:zn(e)?64:Te(e)?4:we(e)?2:0;return o(e,t,n,r,s,a,i,!0)}function Fu(e){return e?Jo(e)||Ai(e)?Ge({},e):e:null}function Do(e,t,n=!1,r=!1){let{props:s,ref:i,patchFlag:a,children:u,transition:f}=e,k=t?zu(s||{},t):s,h={__v_isVNode:!0,__v_skip:!0,type:e.type,props:k,key:k&&Bi(k),ref:t&&t.ref?n&&i?ye(i)?i.concat(In(t)):[i,In(t)]:In(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==X?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Do(e.ssContent),ssFallback:e.ssFallback&&Do(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return f&&r&&Hn(h,f.clone(h)),h}function b(e=" ",t=0){return Ce(Wn,null,e,t)}function pe(e,t){let n=Ce(tn,null,e);return n.staticCount=t,n}function p(e="",t=!1){return t?(l(),Lt(Wt,null,e)):Ce(Wt,null,e)}function Mt(e){return e==null||typeof e=="boolean"?Ce(Wt):ye(e)?Ce(X,null,e.slice()):Ln(e)?Gt(e):Ce(Wn,null,String(e))}function Gt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Do(e)}function Un(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(ye(t))n=16;else if(typeof t=="object")if(r&65){let s=t.default;s&&(s._c&&(s._d=!1),Un(e,s()),s._c&&(s._d=!0));return}else{n=32;let s=t._;!s&&!Ai(t)?t._ctx=vt:s===3&&vt&&(vt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(we(t)){if(r&65){Un(e,{default:t});return}t={default:t,_ctx:vt},n=32}else t=String(t),r&64?(n=16,t=[b(t)]):n=8;e.children=t,e.shapeFlag|=n}function zu(...e){let t={};for(let n=0;ntt||vt,Fn,sn;{let e=Lo(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(a=>a(i)):s[0](i)}};Fn=t("__VUE_INSTANCE_SETTERS__",n=>tt=n),sn=t("__VUE_SSR_SETTERS__",n=>Ro=n)}var un=e=>{let t=tt;return Fn(e),e.scope.on(),()=>{e.scope.off(),Fn(t)}},ni=()=>{tt&&tt.scope.off(),Fn(null)};function ji(e){return e.vnode.shapeFlag&4}var Ro=!1;function Gu(e,t=!1,n=!1){t&&sn(t);let{props:r,children:s}=e.vnode,i=ji(e);Ru(e,r,i,t),Iu(e,s,n||t);let a=i?Wu(e,t):void 0;return t&&sn(!1),a}function Wu(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,fu);let{setup:r}=n;if(r){It();let s=e.setupContext=r.length>1?Yu(e):null,i=un(e),a=rn(r,e,0,[e.props,s]),u=us(a);if(Pt(),i(),(u||e.sp)&&!xo(e)&&Ls(e),u){if(a.then(ni,ni),t)return a.then(f=>{sn(!0);try{si(e,f,t)}finally{sn(!1)}}).catch(f=>{an(f,e,0)});e.asyncDep=a}else si(e,a,t)}else Gi(e,t)}function si(e,t,n){we(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Te(t)&&(e.setupState=An(t)),Gi(e,n)}var ri,ii;function Gi(e,t,n){let r=e.type;if(!e.render){if(!t&&ri&&!r.render){let s=r.template||Us(e).template;if(s){let{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:u,compilerOptions:f}=r,k=Ge(Ge({isCustomElement:i,delimiters:u},a),f);r.render=ri(s,k)}}e.render=r.render||at,ii&&ii(e)}{let s=un(e);It();try{mu(e)}finally{Pt(),s()}}}var Ku={get(e,t){return xe(e,"get",""),e[t]}};function Yu(e){let t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ku),slots:e.slots,emit:e.emit,expose:t}}function Kn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(An(Rs(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in en)return en[n](e)},has(t,n){return n in t||n in en}})):e.proxy}function Ju(e,t=!0){return we(e)?e.displayName||e.name:e.name||t&&e.__name}function Qu(e){return we(e)&&"__vccOpts"in e}var ot=(e,t)=>Hr(e,t,Ro);function ke(e,t,n){try{$n(-1);let r=arguments.length;return r===2?Te(t)&&!ye(t)?Ln(t)?Ce(e,null,[t]):Ce(e,t):Ce(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ln(n)&&(n=[n]),Ce(e,t,n))}finally{$n(1)}}var Xu="3.5.43";var Ws,Wi=typeof window<"u"&&window.trustedTypes;if(Wi)try{Ws=Wi.createPolicy("vue",{createHTML:e=>e})}catch{}var sa=Ws?e=>Ws.createHTML(e):e=>e,Zu="http://www.w3.org/2000/svg",xu="http://www.w3.org/1998/Math/MathML",Yt=typeof document<"u"?document:null,Ki=Yt&&Yt.createElement("template"),ec={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let s=t==="svg"?Yt.createElementNS(Zu,e):t==="mathml"?Yt.createElementNS(xu,e):n?Yt.createElement(e,{is:n}):Yt.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Yt.createTextNode(e),createComment:e=>Yt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Yt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){let a=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{Ki.innerHTML=sa(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);let u=Ki.content;if(r==="svg"||r==="mathml"){let f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};var tc=Symbol("_vtc");function oc(e,t,n){let r=e[tc];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}var Qn=Symbol("_vod"),ra=Symbol("_vsh"),K={name:"show",beforeMount(e,{value:t},{transition:n}){e[Qn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):cn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),cn(e,!0),r.enter(e)):r.leave(e,()=>{cn(e,!1)}):cn(e,t))},beforeUnmount(e,{value:t}){cn(e,t)}};function cn(e,t){e.style.display=t?e[Qn]:"none",e[ra]=!t}var nc=Symbol("");var sc=/(?:^|;)\s*display\s*:/;function rc(e,t,n){let r=e.style,s=Fe(n),i=!1;if(n&&!s){if(t)if(Fe(t))for(let a of t.split(";")){let u=a.slice(0,a.indexOf(":")).trim();n[u]==null&&pn(r,u,"")}else for(let a in t)n[a]==null&&pn(r,a,"");for(let a in n){a==="display"&&(i=!0);let u=n[a];u!=null?ac(e,a,!Fe(t)&&t?t[a]:void 0,u)||pn(r,a,u):pn(r,a,"")}}else if(s){if(t!==n){let a=r[nc];a&&(n+=";"+a),r.cssText=n,i=sc.test(n)}}else t&&e.removeAttribute("style");Qn in e&&(e[Qn]=i?r.display:"",e[ra]&&(r.display="none"))}var Yn=/\s*!important$/;function pn(e,t,n){if(ye(n))n.forEach(r=>pn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))Yn.test(n)?e.setProperty(t,n.replace(Yn,""),"important"):e.setProperty(t,n);else{let r=ic(e,t);Yn.test(n)?e.setProperty(Dt(r),n.replace(Yn,""),"important"):e[r]=n}}var Yi=["Webkit","Moz","ms"],Bs={};function ic(e,t){let n=Bs[t];if(n)return n;let r=Je(t);if(r!=="filter"&&r in e)return Bs[t]=r;r=no(r);for(let s=0;sjs||(fc.then(()=>js=0),js=Date.now());function hc(e,t){let n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;let s=n.value;if(ye(s)){let i=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{i.call(r),r._stopped=!0};let a=s.slice(),u=[r];for(let f=0;fe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,vc=(e,t,n,r,s,i)=>{let a=s==="svg";t==="class"?oc(e,r,a):t==="style"?rc(e,n,r):yo(t)?go(t)||dc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):yc(e,t,r,a))?(Xi(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Qi(e,t,r,a,i,t!=="value")):e._isVueCE&&(gc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Fe(r)))?Xi(e,Je(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Qi(e,t,r,a))};function yc(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&xi(t)&&we(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){let s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return xi(t)&&Fe(n)?!1:t in e}function gc(e,t){let n=e._def.props;if(!n)return!1;let r=Je(t);return Array.isArray(n)?n.some(s=>Je(s)===r):Object.keys(n).some(s=>Je(s)===r)}var To=e=>{let t=e.props["onUpdate:modelValue"]||!1;return ye(t)?n=>wo(t,n):t};function bc(e){e.target.composing=!0}function ea(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}var Ut=Symbol("_assign"),Jn=Symbol("_initialValue");function Gs(e,t,n){return t&&(e=e.trim()),n&&(e=ko(e)),e}var to={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e.parentNode&&(e.type==="text"?e[Jn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Jn]=e.defaultValue.replace(/\r\n?/g,` +`))),e[Ut]=To(s);let i=r||s.props&&s.props.type==="number";eo(e,t?"change":"input",a=>{a.target.composing||e[Ut](Gs(e.value,n,i))}),(n||i)&&eo(e,"change",()=>{e.value=Gs(e.value,n,i)}),t||(eo(e,"compositionstart",bc),eo(e,"compositionend",ea),eo(e,"change",ea))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let s=t??"",i=e[Jn];delete e[Jn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Ut](Gs(e.value,n,r)):e.value=s},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},a){if(e[Ut]=To(a),e.composing)return;let u=(i||e.type==="number")&&!/^0\d/.test(e.value)?ko(e.value):e.value,f=t??"";if(u===f)return;let k=e.getRootNode();(k instanceof Document||k instanceof ShadowRoot)&&k.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===f)||(e.value=f)}},Ks={deep:!0,created(e,t,n){e[Ut]=To(n),eo(e,"change",()=>{let r=e._modelValue,s=fn(e),i=e.checked,a=e[Ut];if(ye(r)){let u=kn(r,s),f=u!==-1;if(i&&!f)a(r.concat(s));else if(!i&&f){let k=[...r];k.splice(u,1),a(k)}}else if(Ct(r)){let u=new Set(r);i?u.add(s):u.delete(s),a(u)}else a(aa(e,i))})},mounted:ta,beforeUpdate(e,t,n){e[Ut]=To(n),ta(e,t,n)}};function ta(e,{value:t,oldValue:n},r){e._modelValue=t;let s;if(ye(t))s=kn(t,r.props.value)>-1;else if(Ct(t))s=t.has(r.props.value);else{if(t===n)return;s=_t(t,aa(e,!0))}e.checked!==s&&(e.checked=s)}var ia={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,eo(e,"change",()=>{let s=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>n?ko(fn(f)):fn(f)),i=e.multiple,a=i?Ct(e._modelValue)?new Set(s):s:s[0],u=e._pendingValue=[i,i?ye(a)?s.slice():s:a];try{e[Ut](a)}finally{nt(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[Ut]=To(r)},mounted(e,{value:t}){oa(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Ut]=To(n)},updated(e,{value:t}){let n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!wc(t,n[1],n[0]))&&oa(e,t)}};function wc(e,t,n){if(!n)return _t(e,t);if(ye(e))return _t(e,t);if(Ct(e)){if(e.size!==t.length)return!1;for(let r of t)if(!e.has(r))return!1;return!0}return!1}function oa(e,t){let n=e.multiple,r=ye(t);if(!(n&&!r&&!Ct(t))){for(let s=0,i=e.options.length;sString(k)===String(u)):a.selected=kn(t,u)>-1}else a.selected=t.has(u);else if(_t(fn(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function fn(e){return"_value"in e?e._value:e.value}function aa(e,t){let n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}var kc=["ctrl","shift","alt","meta"],Ec={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>kc.some(n=>e[`${n}Key`]&&!t.includes(n))},de=(e,t)=>{if(!e)return e;let n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=((s,...i)=>{for(let a=0;a{let n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=(s=>{if(!("key"in s))return;let i=Dt(s.key);if(t.some(a=>a===i||Cc[a]===i))return e(s)}))},_c=Ge({patchProp:vc},ec),na;function Sc(){return na||(na=Mi(_c))}var la=((...e)=>{let t=Sc().createApp(...e),{mount:n}=t;return t.mount=r=>{let s=Dc(r);if(!s)return;let i=t._component;!we(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=n(s,!1,Nc(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Nc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Dc(e){return Fe(e)?document.querySelector(e):e}var mo=typeof document<"u";function ua(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Rc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ua(e.default)}var Ae=Object.assign;function Xn(e,t){let n={};for(let r in t){let s=t[r];n[r]=kt(s)?s.map(e):e(s)}return n}var Io=()=>{},kt=Array.isArray;function Qs(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var ca=/#/g,Tc=/&/g,Ac=/\//g,Oc=/=/g,Ic=/\?/g,pa=/\+/g,Pc=/%5B/g,Vc=/%5D/g,fa=/%5E/g,qc=/%60/g,ma=/%7B/g,Mc=/%7C/g,ha=/%7D/g,$c=/%20/g;function Xs(e){return e==null?"":encodeURI(""+e).replace(Mc,"|").replace(Pc,"[").replace(Vc,"]")}function va(e){return Xs(e).replace(ma,"{").replace(ha,"}").replace(fa,"^")}function Ys(e){return Xs(e).replace(pa,"%2B").replace($c,"+").replace(ca,"%23").replace(Tc,"%26").replace(qc,"`").replace(ma,"{").replace(ha,"}").replace(fa,"^")}function Lc(e){return Ys(e).replace(Oc,"%3D")}function Uc(e){return Xs(e).replace(ca,"%23").replace(Ic,"%3F")}function ya(e){return Uc(e).replace(Ac,"%2F")}function Oo(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}var Fc=/\/$/,zc=e=>e.replace(Fc,"");function Zn(e,t,n="/"){let r,s={},i="",a="",u=t.indexOf("#"),f=t.indexOf("?");return f=u>=0&&f>u?-1:f,f>=0&&(r=t.slice(0,f),i=t.slice(f,u>0?u:t.length),s=e(i.slice(1))),u>=0&&(r=r||t.slice(0,u),a=t.slice(u,t.length)),r=Bc(r??t,n),{fullPath:r+i+a,path:r,query:s,hash:Oo(a)}}function ga(e,t){let n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Zs(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ba(e,t,n){let r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&po(t.matched[r],n.matched[s])&&xs(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function po(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function xs(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Hc(e[n],t[n]))return!1;return!0}function Hc(e,t){return kt(e)?da(e,t):kt(t)?da(t,e):e?.valueOf()===t?.valueOf()}function da(e,t){return kt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Bc(e,t){if(e.startsWith("/"))return e;if(!e)return t;let n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let i=n.length-1,a,u;for(a=0;a1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(a).join("/")}var Qt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},xn=(function(e){return e.pop="pop",e.push="push",e})({}),es=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function wa(e){if(!e)if(mo){let t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),zc(e)}var jc=/^[^#]+#/;function ka(e,t){return e.replace(jc,"#")+t}function Gc(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var mn=()=>({left:window.scrollX,top:window.scrollY});function Ea(e){let t;if("el"in e){let n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=Gc(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function er(e,t){return(history.state?history.state.position-t:-1)+e}var Js=new Map;function Ca(e,t){Js.set(e,t)}function _a(e){let t=Js.get(e);return Js.delete(e),t}function Wc(e){return typeof e=="string"||e&&typeof e=="object"}function tr(e){return typeof e=="string"||typeof e=="symbol"}var je=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({}),Sa=Symbol("");var y$={[je.MATCHER_NOT_FOUND]({location:e,currentLocation:t}){return`No match for ${JSON.stringify(e)}${t?` while being at -`+JSON.stringify(t):""}`},[je.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${Fc(t)}" via a navigation guard.`},[je.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[je.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[je.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function po(e,t){return Ae(new Error,{type:e,[ba]:!0},t)}function $t(e,t){return e instanceof Error&&ba in e&&(t==null||!!(e.type&t))}var Uc=["params","query","hash"];function Fc(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let s of Uc)s in e&&(t[s]=e[s]);return JSON.stringify(t,null,2)}function wa(e){let t={};if(e===""||e==="?")return t;let s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;rn&&Gn(n)):[r&&Gn(r)]).forEach(n=>{n!==void 0&&(t+=(t.length?"&":"")+s,n!=null&&(t+="="+n))})}return t}function ka(e){let t={};for(let s in e){let r=e[s];r!==void 0&&(t[s]=wt(r)?r.map(n=>n==null?null:""+n):r==null?r:""+r)}return t}var Ea=Symbol(""),er=Symbol(""),Zs=Symbol(""),xs=Symbol(""),en=Symbol("");function Oo(){let e=[];function t(r){return e.push(r),()=>{let n=e.indexOf(r);n>-1&&e.splice(n,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function Kt(e,t,s,r,n,i=a=>a()){let a=r&&(r.enterCallbacks[n]=r.enterCallbacks[n]||[]);return()=>new Promise((u,f)=>{let v=m=>{m===!1?f(po(je.NAVIGATION_ABORTED,{from:s,to:t})):m instanceof Error?f(m):Lc(m)?f(po(je.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(a&&r.enterCallbacks[n]===a&&typeof m=="function"&&a.push(m),u())},h=i(()=>e.call(r&&r.instances[n],t,s,v)),k=Promise.resolve(h);e.length<3&&(k=k.then(v)),k.catch(m=>f(m))})}function tn(e,t,s,r,n=i=>i()){let i=[];for(let a of e)for(let u in a.components){let f=a.components[u];if(!(t!=="beforeRouteEnter"&&!a.instances[u]))if(na(f)){let v=(f.__vccOpts||f)[t];v&&i.push(Kt(v,s,r,a,u,n))}else{let v=f();i.push(()=>v.then(h=>{if(!h)throw new Error(`Couldn't resolve component "${u}" at "${a.path}"`);let k=wc(h)?h.default:h;a.mods[u]=h,a.components[u]=k;let m=(k.__vccOpts||k)[t];return m&&Kt(m,s,r,a,u,n)()}))}}return i}function Ca(e,t){let s=[],r=[],n=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;aco(v,u))?r.push(u):s.push(u));let f=e.matched[a];f&&(t.matched.find(v=>co(v,f))||n.push(f))}return[s,r,n]}var zc=()=>location.protocol+"//"+location.host;function Va(e,t){let{pathname:s,search:r,hash:n}=t,i=e.indexOf("#");if(i>-1){let a=n.includes(e.slice(i))?e.slice(i).length:1,u=n.slice(a);return u[0]!=="/"&&(u="/"+u),Jn(u,"")}return Jn(s,e)+r+n}function Hc(e,t,s,r){let n=[],i=[],a=null,u=({state:m})=>{let E=Va(e,location),y=s.value,w=t.value,D=0;if(m){if(s.value=E,t.value=m,a&&a===y){a=null;return}D=w?m.position-w.position:0}else r(E);n.forEach(R=>{R(s.value,y,{delta:D,type:Qs.pop,direction:D?D>0?Xs.forward:Xs.back:Xs.unknown})})};function f(){a=s.value}function v(m){n.push(m);let E=()=>{let y=n.indexOf(m);y>-1&&n.splice(y,1)};return i.push(E),E}function h(){if(document.visibilityState==="hidden"){let{history:m}=window;if(!m.state)return;m.replaceState(Ae({},m.state,{scroll:us()}),"")}}function k(){for(let m of i)m();i=[],window.removeEventListener("popstate",u),window.removeEventListener("pagehide",h),document.removeEventListener("visibilitychange",h)}return window.addEventListener("popstate",u),window.addEventListener("pagehide",h),document.addEventListener("visibilitychange",h),{pauseListeners:f,listen:v,destroy:k}}function _a(e,t,s,r=!1,n=!1){return{back:e,current:t,forward:s,replaced:r,position:window.history.length,scroll:n?us():null}}function Bc(e){let{history:t,location:s}=window,r={value:Va(e,s)},n={value:t.state};n.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(f,v,h){let k=e.indexOf("#"),m=k>-1?(s.host&&document.querySelector("base")?e:e.slice(k))+f:zc()+e+f;try{t[h?"replaceState":"pushState"](v,"",m),n.value=v}catch(E){console.error(E),s[h?"replace":"assign"](m)}}function a(f,v){i(f,Ae({},t.state,_a(n.value.back,f,n.value.forward,!0),v,{position:n.value.position}),!0),r.value=f}function u(f,v){let h=Ae({},n.value,t.state,{forward:f,scroll:us()});i(h.current,h,!0),i(f,Ae({},_a(r.value,f,null),{position:h.position+1},v),!1),r.value=f}return{location:r,state:n,push:u,replace:a}}function qa(e){e=ma(e);let t=Bc(e),s=Hc(e,t.state,t.location,t.replace);function r(i,a=!0){a||s.pauseListeners(),history.go(i)}let n=Ae({location:"",base:e,go:r,createHref:ha.bind(null,e)},t,s);return Object.defineProperty(n,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(n,"state",{enumerable:!0,get:()=>t.state.value}),n}var mo=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({}),Xe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Xe||{}),jc={type:mo.Static,value:""},Gc=/[a-zA-Z0-9_]/;function Wc(e){if(!e)return[[]];if(e==="/")return[[jc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(E){throw new Error(`ERR (${s})/"${v}": ${E}`)}let s=Xe.Static,r=s,n=[],i;function a(){i&&n.push(i),i=[]}let u=0,f,v="",h="";function k(){v&&(s===Xe.Static?i.push({type:mo.Static,value:v}):s===Xe.Param||s===Xe.ParamRegExp||s===Xe.ParamRegExpEnd?(i.length>1&&(f==="*"||f==="+")&&t(`A repeatable param (${v}) must be alone in its segment. eg: '/:ids+.`),i.push({type:mo.Param,value:v,regexp:h,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):t("Invalid state to consume buffer"),v="")}function m(){v+=f}for(;ut.length?t.length===1&&t[0]===it.Static+it.Segment?1:-1:0}function Ma(e,t){let s=0,r=e.score,n=t.score;for(;s0&&t[t.length-1]<0}var Xc={strict:!1,end:!0,sensitive:!1};function Zc(e,t,s){let r=Jc(Wc(e.path),s),n=Ae(r,{record:e,parent:t,children:[],alias:[]});return t&&!n.record.aliasOf==!t.record.aliasOf&&t.children.push(n),n}function xc(e,t){let s=[],r=new Map;t=Kn(Xc,t);function n(k){return r.get(k)}function i(k,m,E){let y=!E,w=Ra(k);w.aliasOf=E&&E.record;let D=Kn(t,k),R=[w];if("alias"in k){let H=typeof k.alias=="string"?[k.alias]:k.alias;for(let q of H)R.push(Ra(Ae({},w,{components:E?E.record.components:w.components,path:q,aliasOf:E?E.record:w})))}let T,I;for(let H of R){let{path:q}=H;if(m&&q[0]!=="/"){let U=m.record.path,ae=U[U.length-1]==="/"?"":"/";H.path=m.record.path+(q&&ae+q)}if(T=Zc(H,m,D),E?E.alias.push(T):(I=I||T,I!==T&&I.alias.push(T),y&&k.name&&!Ta(T)&&a(k.name)),$a(T)&&f(T),w.children){let U=w.children;for(let ae=0;ae{a(I)}:Ao}function a(k){if(Zn(k)){let m=r.get(k);m&&(r.delete(k),s.splice(s.indexOf(m),1),m.children.forEach(a),m.alias.forEach(a))}else{let m=s.indexOf(k);m>-1&&(s.splice(m,1),k.record.name&&r.delete(k.record.name),k.children.forEach(a),k.alias.forEach(a))}}function u(){return s}function f(k){let m=op(k,s);s.splice(m,0,k),k.record.name&&!Ta(k)&&r.set(k.record.name,k)}function v(k,m){let E,y={},w,D;if("name"in k&&k.name){if(E=r.get(k.name),!E)throw po(je.MATCHER_NOT_FOUND,{location:k});D=E.record.name,y=Ae(Da(m.params,E.keys.filter(I=>!I.optional).concat(E.parent?E.parent.keys.filter(I=>I.optional):[]).map(I=>I.name)),k.params&&Da(k.params,E.keys.map(I=>I.name))),w=E.stringify(y)}else if(k.path!=null)w=k.path,E=s.find(I=>I.re.test(w)),E&&(y=E.parse(w),D=E.record.name);else{if(E=m.name?r.get(m.name):s.find(I=>I.re.test(m.path)),!E)throw po(je.MATCHER_NOT_FOUND,{location:k,currentLocation:m});D=E.record.name,y=Ae({},m.params,k.params),w=E.stringify(y)}let R=[],T=E;for(;T;)R.unshift(T.record),T=T.parent;return{name:D,path:w,params:y,matched:R,meta:tp(R)}}e.forEach(k=>i(k));function h(){s.length=0,r.clear()}return{addRoute:i,resolve:v,removeRoute:a,clearRoutes:h,getRoutes:u,getRecordMatcher:n}}function Da(e,t){let s={};for(let r of t)r in e&&(s[r]=e[r]);return s}function Ra(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:ep(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function ep(e){let t={},s=e.props||!1;if("component"in e)t.default=s;else for(let r in e.components)t[r]=typeof s=="object"?s[r]:s;return t}function Ta(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function tp(e){return e.reduce((t,s)=>Ae(t,s.meta),{})}function op(e,t){let s=0,r=t.length;for(;s!==r;){let i=s+r>>1;Ma(e,t[i])<0?r=i:s=i+1}let n=sp(e);return n&&(r=t.lastIndexOf(n,r-1)),r}function sp(e){let t=e;for(;t=t.parent;)if($a(t)&&Ma(e,t)===0)return t}function $a({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Aa(e){let t=ut(Zs),s=ut(xs),r=!1,n=null,i=ot(()=>{let h=Ht(e.to);return t.resolve(h)}),a=ot(()=>{let{matched:h}=i.value,{length:k}=h,m=h[k-1],E=s.matched;if(!m||!E.length)return-1;let y=E.findIndex(co.bind(null,m));if(y>-1)return y;let w=Oa(h[k-2]);return k>1&&Oa(m)===w&&E[E.length-1].path!==w?E.findIndex(co.bind(null,h[k-2])):y}),u=ot(()=>a.value>-1&&lp(s.params,i.value.params)),f=ot(()=>a.value>-1&&a.value===s.matched.length-1&&Qn(s.params,i.value.params));function v(h={}){if(ap(h)){let k=t[Ht(e.replace)?"replace":"push"](Ht(e.to)).catch(Ao);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>k),k}return Promise.resolve()}return{route:i,href:ot(()=>i.value.href),isActive:u,isExactActive:f,navigate:v}}function np(e){return e.length===1?e[0]:e}var rp=rs({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Aa,setup(e,{slots:t}){let s=ze(Aa(e)),{options:r}=ut(Zs),n=ot(()=>({[Ia(e.activeClass,r.linkActiveClass,"router-link-active")]:s.isActive,[Ia(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{let i=t.default&&np(t.default(s));return e.custom?i:ke("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:n.value},i)}}}),ip=rp;function ap(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function lp(e,t){for(let s in t){let r=t[s],n=e[s];if(typeof r=="string"){if(r!==n)return!1}else if(!wt(n)||n.length!==r.length||r.some((i,a)=>i.valueOf()!==n[a].valueOf()))return!1}return!0}function Oa(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}var Ia=(e,t,s)=>e??t??s,dp=rs({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){let r=ut(en),n=ot(()=>e.route||r.value),i=ut(er,0),a=ot(()=>{let v=Ht(i),{matched:h}=n.value,k;for(;(k=h[v])&&!k.components;)v++;return v}),u=ot(()=>n.value.matched[a.value]);io(er,ot(()=>a.value+1)),io(Ea,u),io(en,n);let f=et();return Be(()=>[f.value,u.value,e.name],([v,h,k],[m,E,y])=>{h&&(h.instances[k]=v,E&&E!==h&&v&&v===m&&(h.leaveGuards.size||(h.leaveGuards=E.leaveGuards),h.updateGuards.size||(h.updateGuards=E.updateGuards))),v&&h&&(!E||!co(h,E)||!m)&&(h.enterCallbacks[k]||[]).forEach(w=>w(v))},{flush:"post"}),()=>{let v=n.value,h=e.name,k=u.value,m=k&&k.components[h];if(!m)return Pa(s.default,{Component:m,route:v});let E=k.props[h],y=E?E===!0?v.params:typeof E=="function"?E(v):E:null,D=ke(m,Ae({},y,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(k.instances[h]=null)},ref:f}));return Pa(s.default,{Component:D,route:v})||D}}});function Pa(e,t){if(!e)return null;let s=e(t);return s.length===1?s[0]:s}var tr=dp;function La(e){let t=xc(e.routes,e),s=e.parseQuery||wa,r=e.stringifyQuery||xn,n=e.history,i=Oo(),a=Oo(),u=Oo(),f=_s(Yt),v=Yt;fo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");let h=Ys.bind(null,F=>""+F),k=Ys.bind(null,ca),m=Ys.bind(null,To);function E(F,oe){let Q,C;return Zn(F)?(Q=t.getRecordMatcher(F),C=oe):C=F,t.addRoute(C,Q)}function y(F){let oe=t.getRecordMatcher(F);oe&&t.removeRoute(oe)}function w(){return t.getRoutes().map(F=>F.record)}function D(F){return!!t.getRecordMatcher(F)}function R(F,oe){if(oe=Ae({},oe||f.value),typeof F=="string"){let g=Js(s,F,oe.path),S=t.resolve({path:g.path},oe),V=n.createHref(g.fullPath);return Ae(g,S,{params:m(S.params),hash:To(g.hash),redirectedFrom:void 0,href:V})}let Q;if(F.path!=null)Q=Ae({},F,{path:Js(s,F.path,oe.path).path});else{let g=Ae({},F.params);for(let S in g)g[S]==null&&delete g[S];Q=Ae({},F,{params:k(g)}),oe.params=k(oe.params)}let C=t.resolve(Q,oe),P=F.hash||"";C.params=h(m(C.params));let B=pa(r,Ae({},F,{hash:ua(P),path:C.path})),M=n.createHref(B);return Ae({fullPath:B,hash:P,query:r===xn?ka(F.query):F.query||{}},C,{redirectedFrom:void 0,href:M})}function T(F){return typeof F=="string"?Js(s,F,f.value.path):Ae({},F)}function I(F,oe){if(v!==F)return po(je.NAVIGATION_CANCELLED,{from:oe,to:F})}function H(F){return ae(F)}function q(F){return H(Ae(T(F),{replace:!0}))}function U(F,oe){let Q=F.matched[F.matched.length-1];if(Q&&Q.redirect){let{redirect:C}=Q,P=typeof C=="function"?C(F,oe):C;return typeof P=="string"&&(P=P.includes("?")||P.includes("#")?P=T(P):{path:P},P.params={}),Ae({query:F.query,hash:F.hash,params:P.path!=null?{}:F.params},P)}}function ae(F,oe){let Q=v=R(F),C=f.value,P=F.state,B=F.force,M=F.replace===!0,g=U(Q,C);if(g)return ae(Ae(T(g),{state:typeof g=="object"?Ae({},P,g.state):P,force:B,replace:M}),oe||Q);let S=Q;S.redirectedFrom=oe;let V;return!B&&fa(r,C,Q)&&(V=po(je.NAVIGATION_DUPLICATED,{to:S,from:C}),Ue(C,C,!0,!1)),(V?Promise.resolve(V):O(S,C)).catch(z=>$t(z)?$t(z,je.NAVIGATION_GUARD_REDIRECT)?z:_e(z):le(z,S,C)).then(z=>{if(z){if($t(z,je.NAVIGATION_GUARD_REDIRECT))return ae(Ae({replace:M},T(z.to),{state:typeof z.to=="object"?Ae({},P,z.to.state):P,force:B}),oe||S)}else z=Z(S,C,!0,M,P);return Y(S,C,z),z})}function ie(F,oe){let Q=I(F,oe);return Q?Promise.reject(Q):Promise.resolve()}function _(F){let oe=Pe.values().next().value;return oe&&typeof oe.runWithContext=="function"?oe.runWithContext(F):F()}function O(F,oe){let Q,[C,P,B]=Ca(F,oe);Q=tn(C.reverse(),"beforeRouteLeave",F,oe);for(let g of C)g.leaveGuards.forEach(S=>{Q.push(Kt(S,F,oe))});let M=ie.bind(null,F,oe);return Q.push(M),Ee(Q).then(()=>{Q=[];for(let g of i.list())Q.push(Kt(g,F,oe));return Q.push(M),Ee(Q)}).then(()=>{Q=tn(P,"beforeRouteUpdate",F,oe);for(let g of P)g.updateGuards.forEach(S=>{Q.push(Kt(S,F,oe))});return Q.push(M),Ee(Q)}).then(()=>{Q=[];for(let g of B)if(g.beforeEnter)if(wt(g.beforeEnter))for(let S of g.beforeEnter)Q.push(Kt(S,F,oe));else Q.push(Kt(g.beforeEnter,F,oe));return Q.push(M),Ee(Q)}).then(()=>(F.matched.forEach(g=>g.enterCallbacks={}),Q=tn(B,"beforeRouteEnter",F,oe,_),Q.push(M),Ee(Q))).then(()=>{Q=[];for(let g of a.list())Q.push(Kt(g,F,oe));return Q.push(M),Ee(Q)}).catch(g=>$t(g,je.NAVIGATION_CANCELLED)?g:Promise.reject(g))}function Y(F,oe,Q){u.list().forEach(C=>_(()=>C(F,oe,Q)))}function Z(F,oe,Q,C,P){let B=I(F,oe);if(B)return B;let M=oe===Yt,g=fo?history.state:{};Q&&(C||M?n.replace(F.fullPath,Ae({scroll:M&&g&&g.scroll},P)):n.push(F.fullPath,P)),f.value=F,Ue(F,oe,Q,M),_e()}let te;function J(){te||(te=n.listen((F,oe,Q)=>{if(!He.listening)return;let C=R(F),P=U(C,He.currentRoute.value);if(P){ae(Ae(P,{replace:!0,force:!0}),C).catch(Ao);return}v=C;let B=f.value;fo&&ga(Xn(B.fullPath,Q.delta),us()),O(C,B).catch(M=>$t(M,je.NAVIGATION_ABORTED|je.NAVIGATION_CANCELLED)?M:$t(M,je.NAVIGATION_GUARD_REDIRECT)?(ae(Ae(T(M.to),{force:!0}),C).then(g=>{$t(g,je.NAVIGATION_ABORTED|je.NAVIGATION_DUPLICATED)&&!Q.delta&&Q.type===Qs.pop&&n.go(-1,!1)}).catch(Ao),Promise.reject()):(Q.delta&&n.go(-Q.delta,!1),le(M,C,B))).then(M=>{M=M||Z(C,B,!1),M&&(Q.delta&&!$t(M,je.NAVIGATION_CANCELLED)?n.go(-Q.delta,!1):Q.type===Qs.pop&&$t(M,je.NAVIGATION_ABORTED|je.NAVIGATION_DUPLICATED)&&n.go(-1,!1)),Y(C,B,M)}).catch(Ao)}))}let se=Oo(),ue=Oo(),pe;function le(F,oe,Q){_e(F);let C=ue.list();return C.length?C.forEach(P=>P(F,oe,Q)):console.error(F),Promise.reject(F)}function Oe(){return pe&&f.value!==Yt?Promise.resolve():new Promise((F,oe)=>{se.add([F,oe])})}function _e(F){return pe||(pe=!F,J(),se.list().forEach(([oe,Q])=>F?Q(F):oe()),se.reset()),F}function Ue(F,oe,Q,C){let{scrollBehavior:P}=e;if(!fo||!P)return Promise.resolve();let B=!Q&&ya(Xn(F.fullPath,0))||(C||!Q)&&history.state&&history.state.scroll||null;return st().then(()=>P(F,oe,B)).then(M=>M&&va(M)).catch(M=>le(M,F,oe))}let Re=F=>n.go(F),$e,Pe=new Set,He={currentRoute:f,listening:!0,addRoute:E,removeRoute:y,clearRoutes:t.clearRoutes,hasRoute:D,getRoutes:w,resolve:R,options:e,push:H,replace:q,go:Re,back:()=>Re(-1),forward:()=>Re(1),beforeEach:i.add,beforeResolve:a.add,afterEach:u.add,onError:ue.add,isReady:Oe,install(F){F.component("RouterLink",ip),F.component("RouterView",tr),F.config.globalProperties.$router=He,Object.defineProperty(F.config.globalProperties,"$route",{enumerable:!0,get:()=>Ht(f)}),fo&&!$e&&f.value===Yt&&($e=!0,H(n.location).catch(C=>{}));let oe={};for(let C in Yt)Object.defineProperty(oe,C,{get:()=>f.value[C],enumerable:!0});F.provide(Zs,He),F.provide(xs,Wo(oe)),F.provide(en,f);let Q=F.unmount;Pe.add(F),F.unmount=function(){Pe.delete(F),Pe.size<1&&(v=Yt,te&&te(),te=null,f.value=Yt,$e=!1,pe=!1),Q()}}};function Ee(F){return F.reduce((oe,Q)=>oe.then(()=>_(Q)),Promise.resolve())}return He}function Ua(e){return ut(xs)}function Fa(e,t){return t?.split(".").reduce((s,r)=>s?.[r],e)}function or(e=null,t=new Map){let s=ze({}),r=[],n=!1,i=new Proxy(s,{get(a,u){return typeof u=="string"&&u.startsWith("__v_")||Reflect.has(a,u)?Reflect.get(a,u):e?.[u]}});return Object.defineProperty(s,"parent",{value:e,configurable:!0}),Object.defineProperty(s,"viewState",{get:()=>i}),i.watch=(a,u,f=!1,v=!0)=>{let h=typeof a=="function"?()=>a(i):()=>Fa(i,a),k=Be(h,u,{deep:f,flush:"post"});return r.push(k),v&&st(()=>{n||u(h(),h())}),k},i.watchGroup=(a,u,f=!0)=>i.watch(()=>a.map(v=>Fa(i,v)),u,!0,f),i.on=(a,u)=>{if(a==="dispose")return r.push(u),()=>{};t.has(a)||t.set(a,new Set),t.get(a).add(u);let f=()=>t.get(a)?.delete(u);return r.push(f),f},i.emit=(a,...u)=>{for(let f of[...t.get(a)||[]])f({},...u)},i.dispose=()=>{n=!0,r.splice(0).reverse().forEach(a=>a())},jo(i.dispose),i}function ct(){let e=new Set,t=new Set,s=!1,r=(i,a=0)=>{if(s)return;let u=setTimeout(()=>{e.delete(u),i()},a);return e.add(u),u};r.cancel=i=>{clearTimeout(i),e.delete(i)};let n=(i,a)=>{if(s)return;let u=setInterval(i,a);return t.add(u),u};return n.cancel=i=>{clearInterval(i),t.delete(i)},jo(()=>{s=!0,e.forEach(clearTimeout),t.forEach(clearInterval)}),{timeout:r,interval:n}}function Jt(){let e=new Set;return jo(()=>{e.forEach(t=>t()),e.clear()}),(t,s,r,n)=>{t.addEventListener(s,r,n);let i=()=>{t.removeEventListener(s,r,n),e.delete(i)};return e.add(i),i}}function sr(e,t,s){let r,n=!1,i="form-draft:"+s,a=()=>Object.fromEntries(t.map(m=>[m,e[m]])),u=()=>JSON.stringify(a()),f=m=>{for(let E of t)Object.prototype.hasOwnProperty.call(m,E)&&(e[E]=m[E]);e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate))},v=()=>{try{window.sessionStorage.removeItem(i)}catch{}},h=(m=!1)=>{if(r!==void 0){if(m&&document.querySelectorAll("input, select, textarea").forEach(E=>{E._field?.binding.state===e&&E._field.timer&&E._field.commit()}),e.unsavedChanges=u()!==r,e.draftSaved=!1,!e.unsavedChanges){v();return}try{window.sessionStorage.setItem(i,JSON.stringify({account:e.user?.username||null,savedAt:Date.now(),values:a()})),e.draftSaved=!0}catch{}}},k=()=>h(!0);return e.on("routeLeave",k),window.addEventListener("beforeunload",k),e.on("dispose",()=>window.removeEventListener("beforeunload",k)),{restore(){r=u();let m;try{m=JSON.parse(window.sessionStorage.getItem(i)||"null")}catch{}let E=m&&m.account===(e.user?.username||null)&&Date.now()-m.savedAt<30*6e4&&m.values;return E&&(f(m.values),e.draftRestored=!0),n||(n=!0,e.watch(()=>a(),()=>h(),!0)),e.unsavedChanges=u()!==r,!!E},checkpoint(){return JSON.parse(u())},accept(m){r=JSON.stringify(m),e.draftRestored=!1,h()},discard(){document.querySelectorAll("input, select, textarea").forEach(m=>{m._field?.binding.state!==e||!m._field.timer||(clearTimeout(m._field.timer),m._field.timer=null,m.value=m._field.binding.value??"")}),r!==void 0&&f(JSON.parse(r)),e.draftRestored=!1,h()},clear(){r=u(),e.unsavedChanges=!1,e.draftRestored=!1,e.draftSaved=!1,v()}}}var on="XXXX",up=e=>{on=e||"XXXX"},za=(e=on)=>{if(!e)return null;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(t+"(?:-\\d+)?","g")},Ha=(e,t=on)=>{let s=za(t);if(!s||!e||!e.textContent.includes(t))return;let r=e.ownerDocument,n=r.createTreeWalker(e,NodeFilter.SHOW_TEXT),i=[];for(;n.nextNode();)i.push(n.currentNode);for(let a of i){let u=a.nodeValue,f=a.parentElement;if(!u.includes(t)||!f||f.closest("script, style, mark.redaction, .mermaid"))continue;let v=f.closest('code[class*="language-"]');if(v&&!v.contains(e))continue;let h=r.createDocumentFragment(),k=0;for(let m of u.matchAll(s)){h.append(u.slice(k,m.index));let E=r.createElement("mark");E.className="redaction",E.title="Redacted by Anonymous GitHub",E.textContent=m[0],h.append(E),k=m.index+m[0].length}h.append(u.slice(k)),a.replaceWith(h)}},Ba=(e,t=on)=>{if(!e||!t||!e.includes(t))return e;let s=new DOMParser().parseFromString(""+e+"","text/html");return Ha(s.body,t),s.body.innerHTML};async function ja(e){if(window.navigator.clipboard?.writeText){await window.navigator.clipboard.writeText(e);return}let t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0";let s=document.activeElement;document.body.appendChild(t);try{if(t.select(),!document.execCommand?.("copy"))throw Error("Copy unavailable")}finally{t.remove(),s?.focus()}}function cp(e){if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;let t=[...e.currentTarget.closest('[role="tablist"]').querySelectorAll('[role="tab"]')],s=t.indexOf(e.currentTarget),r=e.key==="Home"?0:e.key==="End"?t.length-1:(s+(e.key==="ArrowRight"?1:-1)+t.length)%t.length;e.preventDefault(),t[r]?.focus(),t[r]?.click()}var Ga=function(e,t,s,r){e.previewTabKeydown=cp,e.title="Main",e.user={status:"connection"},e.site_options,e.toasts=[],e.removeToast=function(v){let h=e.toasts.indexOf(v);h!==-1&&e.toasts.splice(h,1)},e.addToast=function(v){return e.toasts.push(v),r(function(){e.removeToast(v)},8e3),v};let n=/^\/(r|repository|pr|gist)\//;e.path=s.url(),e.paths=s.path().substring(1).split("/"),e.isReviewerRoute=n.test(s.path()),e.darkMode=function(v){localStorage.setItem("darkMode",v),e.isDarkMode=v;let h="/css/prism-okaidia.css",k="/css/prism.css";if(v){$("body").addClass("dark-mode");let E=document.createElement("link");E.href=h,E.rel="stylesheet",document.head.append(E),$(`link[href='${k}']`).remove()}else{$("body").removeClass("dark-mode");let E=document.createElement("link");E.href=k,E.rel="stylesheet",document.head.append(E),$(`link[href='${h}']`).remove()}let m=document.querySelector("[class*='floatingchat-container-wrap'] [class*='floating-chat-kofi-text-container-wrap']");m&&(m.style.backgroundColor=v?"#34312C":"#1A1815",m.style.color="#FAF9F6"),e.emit("dark-mode",v)},e.darkMode(localStorage.getItem("darkMode")=="true");function i(){t.get("/api/user").then(v=>{v&&(e.user=v.data)},()=>{e.user=null})}i();function a(){t.get("/api/options").then(v=>{v&&(e.site_options=v.data),up(v?.data?.ANONYMIZATION_MASK),e.emit("site-options")},()=>{e.site_options=null})}a();function u(){t.get("/api/message").then(v=>{v&&(e.generalMessage=v.data)},()=>{e.generalMessage=null})}u();function f(v,h){h&&(e.title=h.title),e.path=s.url(),e.paths=s.path().substring(1).split("/"),e.isReviewerRoute=n.test(s.path())}e.on("routeChange",f),e.on("routeUpdate",f)},Wa=function(e,t){let s=Jt(),r=ct(),n=()=>{let i=window.location.hash.slice(1),a=document.getElementById(i);if(!a?.classList.contains("panel-collapse"))return;$(a).collapse("show");let u=document.getElementById(a.getAttribute("aria-labelledby"));u?.setAttribute("tabindex","-1"),u?.focus({preventScroll:!0}),u?.scrollIntoView?.({block:"start"})};e.on("routeUpdate",()=>r.timeout(n,0)),s(window,"hashchange",n),r.timeout(n,0)},Ka=function(e,t,s,r,n){e.terms="",e.options={expirationMode:"remove",update:!1,image:!0,pdf:!0,notebook:!0,loc:!0,link:!0},e.saving=!1,e.message=null,e.error=null,n.load().then(f=>{e.quota=f},console.error);let i=sr(e,["terms","options"],"profile");e.discardDraft=()=>i.discard();function a(){t.get("/api/user/default").then(f=>{let v=f.data||{};v.terms&&(e.terms=v.terms.join(` -`)),e.options=Object.assign({},e.options,v.options),i.restore()})}a();let u=null;e.saveDefault=f=>{if(f&&f.preventDefault&&f.preventDefault(),e.saving)return;let v=i.checkpoint(),h={terms:e.terms.split(` -`).map(k=>k.trim()).filter(k=>k.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",h).then(()=>{i.accept(v),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",u&&r.cancel(u),u=r(()=>{e.message=null},2500)},k=>{e.saving=!1;let m=k&&k.data&&k.data.error,E="Unable to save your defaults. Please try again.";Promise.all([s("ERRORS."+m),s("ERRORS.unknown_error")]).then(([y,w])=>{e.error=m&&y!==w?y:E},()=>{e.error=E})})},e.deleteAccount=()=>{confirm("Delete your account? All your anonymized repositories, gists, and pull requests will be removed, and your personal data will be erased. This cannot be undone.")&&(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},Ya=function(e,t,s){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(r=>{s.url("/dashboard")},r=>{e.error=r.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},Ja=function(e,t,s,r,n){e.user&&!e.user.status&&s.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&s.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(u){e.feature=u},e.featureHref=function(u){return u.needsUser&&!e.user?"/signin":u.href},e.featureTarget=function(u){return u.needsUser&&!e.user?"_self":u.target||void 0},e.featureKeydown=function(u,f){let v={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[u.key];if(v===void 0)return;u.preventDefault();let h=e.features.length,k=v==="first"?0:v==="last"?h-1:(f+v+h)%h;e.feature=e.features[k].key,n(()=>{let m=r.document.getElementById("feature-tab-"+e.feature);m&&m.focus()})},e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}];function i(){t.get("/api/stat/").then(u=>{e.stat=u.data,e.cards[0].total=u.data.nbRepositories,e.cards[1].total=u.data.nbUsers,e.cards[2].total=u.data.nbPageViews,e.cards[3].total=u.data.nbPullRequests})}i();function a(u){let f={series:u,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!u||u.length<2)return f;let v=new Array(u.length-1);for(let w=1;w=2){let w=v[h-2];w&&(f.pctChange=(f.deltaToday-w)/w*100)}return f.pctAbs=Math.round(Math.abs(f.pctChange)),f.isUp=f.pctChange>=0,f}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(u=>{let f=u.data||[];e.history={repositories:a(f.map(v=>v.nbRepositories||0)),users:a(f.map(v=>v.nbUsers||0)),pageViews:a(f.map(v=>v.nbPageViews||0)),pullRequests:a(f.map(v=>v.nbPullRequests||0))}})},Qa=function(e,t,s,r,n,i){let a=ct();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,st(()=>document.querySelector(".dashboard-quota > summary")?.focus())},Jt()(document,"click",_=>{e.quotaExpanded&&!_.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=_=>_.status==="error"||_._broken||f(_.status)==="progress"&&_._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=_=>{e.projectView=_,_==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.projectDetailsId=_=>"project-details-"+encodeURIComponent(_._type+":"+(_._id||_._source||"unknown")),e.showProjectDetails=async _=>{e.selectedProject=_,e.projectName=_.projectName||"",e.nameError="",e.nameMessage="",await st();let O=document.getElementById(e.projectDetailsId(_));O?.focus(),O?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=_=>{e.selectedProject=null,st(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(_._type+":"+_._id)}"]`)?.focus())},e.saveProjectName=async _=>{if(e.nameSaving||!_._id)return;let O=e.projectName.trim();if(O.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let Y=await t.post("/api/user/project-name",{type:_._type,id:_._id,name:O});_.projectName=Y.data.name,_._label=_.projectName||_._fallbackLabel,e.selectedProject===_&&(e.nameMessage=O?"Project name saved.":"Default project name restored."),T||(e.dashboardCursor=null,await H(),e.selectedProject===_&&(e.selectedProject=e.items.find(Z=>Z._type===_._type&&Z._id===_._id)||null))}catch{e.selectedProject===_&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async _=>{if(!_._viewUrl||e.copyingId)return;let O=new URL(_._viewUrl,n.location.origin).href;e.copyingId=_._type+":"+_._id;try{await ja(O),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:O})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"In progress",error:"Error",expired:"Expired",removed:"Removed"};let u=["queue","download","downloaded","preparing","anonymizing"];function f(_){return _==="ready"||_==="error"?_:_==="expired"||_==="expiring"?"expired":_==="removed"||_==="removing"?"removed":(u.indexOf(_)>-1,"progress")}let v=7200*1e3,h="dashboard.filterPrefs",k={typeFilter:"all",filters:{status:{ready:!0,progress:!0,error:!0,expired:!0,removed:!1}},orderBy:"-anonymizeDate"},m=loadFilterPrefs(h)||{};e.typeFilter=m.typeFilter||k.typeFilter,e.filters={status:Object.assign({},k.filters.status,m.filters&&m.filters.status||{})},e.orderBy=m.orderBy||k.orderBy;let E={_name:{label:"Anonymous ID",defaultDesc:!1},_label:{label:"Project",defaultDesc:!1},anonymizeDate:{label:"Anonymize date",defaultDesc:!0},status:{label:"Status",defaultDesc:!1},lastView:{label:"Last view",defaultDesc:!0},pageView:{label:"Views",defaultDesc:!0},"options.expirationDate":{label:"Expiration",defaultDesc:!1}};e.sortFields=E,e.sortField=()=>e.orderBy.replace(/^-/,""),e.sortDesc=()=>e.orderBy.charAt(0)==="-",e.sortLabel=()=>{let _=E[e.sortField()];return _?_.label:"Custom"},e.isSortedBy=_=>e.sortField()===_,e.setSort=(_,O)=>{typeof O!="boolean"&&(O=e.isSortedBy(_)?!e.sortDesc():!!(E[_]&&E[_].defaultDesc)),e.orderBy=(O?"-":"")+_},e.toggleSortDirection=()=>{e.setSort(e.sortField(),!e.sortDesc())},e.watchGroup(["typeFilter","orderBy"],()=>{saveFilterPrefs(h,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(h,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})},!0),i.load().then(_=>{e.quota=_},console.error);function y(_,O,Y,Z,te,J){_.pageView||(_.pageView=0),_.lastView||(_.lastView=""),_.options=_.options||{},_.options.terms=(_.options.terms||[]).filter(ue=>ue),_._id=O||"",_._source=Z,_._broken=!O,_._name=O||Z||"(unnamed)",_._fallbackLabel=_._type==="gist"?"Gist "+(O||Z||"without an ID"):Z||Y||_._name,_._label=_.projectName||_._fallbackLabel,_._editUrl=O?te:null,_._viewUrl=O?J:null,_._broken&&(_.status="error",_.statusMessage="incomplete_record"),_._statusKey=f(_.status);let se=_.anonymizeDate||_.lastView;return _._stale=_._statusKey==="progress"&&!!se&&Date.now()-new Date(se).getTime()>v,_.status==="expired"||_.status==="expiring"?_._expiry={kind:"expired",date:_.options.expirationDate}:_.status!=="ready"?_._expiry={kind:"none"}:_.options.expirationMode==="never"||!_.options.expirationDate?_._expiry={kind:"never"}:_._expiry={kind:"date",date:_.options.expirationDate},_}function w(_){return t.get(_).then(O=>O.data||[],O=>(console.error(O),[]))}function D(){return e.loading=!0,r.all([w("/api/user/anonymized_repositories"),w("/api/user/anonymized_pull_requests"),w("/api/user/anonymized_gists")]).then(_=>{let O=_[0],Y=_[1],Z=_[2],te=[];O.forEach(J=>{J._type="repo";let se=J.source||{};te.push(y(J,J.repoId,J.repoId,se.fullName,"/anonymize/"+J.repoId,"/r/"+J.repoId+"/"))}),Y.forEach(J=>{J._type="pr";let se=J.source||{};te.push(y(J,J.pullRequestId,J.pullRequestId,se.repositoryFullName?se.repositoryFullName+"#"+se.pullRequestId:void 0,"/pull-request-anonymize/"+J.pullRequestId,"/pr/"+J.pullRequestId+"/"))}),Z.forEach(J=>{J._type="gist";let se=J.source||{};te.push(y(J,J.gistId,J.gistId,se.gistId,"/gist-anonymize/"+J.gistId,"/gist/"+J.gistId+"/"))}),e.items=te,e.loading=!1})}let R=0,T=!1;e.dashboardCursor=null,e.dashboardError="";function I(_){let O=_.source||{};return _._type==="repo"?y(_,_.repoId,_.repoId,O.fullName,"/anonymize/"+_.repoId,"/r/"+_.repoId+"/"):_._type==="pr"?y(_,_.pullRequestId,_.pullRequestId,O.repositoryFullName?O.repositoryFullName+"#"+O.pullRequestId:void 0,"/pull-request-anonymize/"+_.pullRequestId,"/pr/"+_.pullRequestId+"/"):y(_,_.gistId,_.gistId,O.gistId,"/gist-anonymize/"+_.gistId,"/gist/"+_.gistId+"/")}function H(_=!1){if(T)return D();let O=++R;return e.loading=!_,e.loadingMore=_,e.dashboardError="",t.get("/api/user/dashboard",{params:{q:e.search,type:e.typeFilter,sort:e.orderBy,statuses:Object.keys(e.filters.status).filter(Y=>e.filters.status[Y]!==!1).join(",")||"none",attention:String(e.projectView==="attention"),cursor:_?e.dashboardCursor:void 0}}).then(Y=>{if(O===R){if(!Array.isArray(Y.data?.items))return T=!0,D();e.items=(_?e.items:[]).concat(Y.data.items.map(I)),e.dashboardCursor=Y.data.cursor,e.dashboardTotals=Y.data}},Y=>{if(O===R){if(Y.status===404)return T=!0,D();e.dashboardError="Projects could not be loaded. Please try again."}}).finally(()=>{O===R&&(e.loading=!1,e.loadingMore=!1)})}e.loadMoreProjects=()=>H(!0);let q;e.watchGroup(["search","typeFilter","orderBy","projectView"],()=>{T||(q&&a.timeout.cancel(q),q=a.timeout(()=>H(),150))},!1),e.watch("filters",()=>{T||H()},!0,!1),e.on("dispose",()=>{R++}),H(),e.openItem=(_,O)=>{if(!_._viewUrl)return;let Y=O&&O.target;Y&&Y.closest&&Y.closest("a, button, .dropdown, input")||(n.location.href=_._viewUrl)},e.hiddenStatusCount=()=>Object.keys(e.filters.status).filter(_=>e.filters.status[_]===!1).length,e.hasHiddenStatus=()=>e.hiddenStatusCount()>0,e.hasActiveFilters=()=>e.projectView!=="all"||e.typeFilter!=="all"||e.search.trim().length>0||Object.keys(e.filters.status).some(_=>e.filters.status[_]===!1),e.showClearFilters=()=>e.search.trim().length>0||e.typeFilter!=="all"||e.hiddenStatusCount()>1,e.clearFilters=()=>{e.projectView="all",e.typeFilter="all",e.search="",Object.keys(e.filters.status).forEach(_=>{e.filters.status[_]=!0})};function U(_,O,Y,Z){t.get("/api/repo/"+_).then(async te=>{let J=Z!==void 0&&Z!==te.data.status;for(let se of e.items)if(se._type==="repo"&&se.repoId==_){J=J||se.status!==te.data.status;let ue=e.needsAttention(se);se.status=te.data.status,se.statusMessage=te.data.statusMessage,se._statusKey=f(se.status),se._statusKey!=="progress"&&(se._stale=!1);let pe=e.needsAttention(se);e.dashboardTotals&&ue!==pe&&(e.dashboardTotals.attention=Math.max(0,e.dashboardTotals.attention+(pe?1:-1)));break}if(J&&!T){e.dashboardCursor=null;let se=e.selectedProject;await H(),se&&e.selectedProject===se&&(e.selectedProject=e.items.find(ue=>ue._type===se._type&&ue._id===se._id)||null)}if(te.data.status=="ready"||te.data.status=="error"||te.data.status=="removed"||te.data.status=="expired"){O(te.data);return}a.timeout(()=>U(_,O,Y,te.data.status),2500)},Y)}let ae=_=>_==="repo"?"repository":_==="gist"?"gist":"pull request",ie=_=>_==="repo"?"/api/repo":_==="gist"?"/api/gist":"/api/pr";e.removeItem=_=>{let O=ae(_._type);if(confirm(`Are you sure that you want to remove the ${O} ${_._id}?`)){let Y=ze({title:`Removing ${_._id}...`,date:new Date,body:`The ${O} ${_._id} is going to be removed.`});e.addToast(Y);let Z=`${ie(_._type)}/${_._id}`;t.delete(Z).then(()=>{_._type==="repo"?U(_._id,()=>{Y.title=`${_._id} is removed.`,Y.body=`The ${O} ${_._id} is removed.`},void 0,_.status):(Y.title=`${_._id} is removed.`,Y.body=`The ${O} ${_._id} is removed.`,H())},te=>{Y.title=`Error during the removal of ${_._id}.`,Y.body=te.body,H()})}},e.refreshItem=_=>{let O=ae(_._type),Y=ze({title:`Refreshing ${_._id}...`,date:new Date,body:`The ${O} ${_._id} is going to be refreshed.`});e.addToast(Y);let Z=J=>{Y.title=`Error during the refresh of ${_._id}.`,Y.body=J.data?.error||J.body||"The refresh could not be completed. Please try again.",H()},te=`${ie(_._type)}/${_._id}/refresh`;t.post(te).then(()=>{_._type==="repo"?U(_._id,J=>{if(J.status!=="ready"){Z({body:J.statusMessage||`The repository is ${J.status}.`});return}Y.title=`${_._id} is refreshed.`,Y.body=`The ${O} ${_._id} is refreshed.`},Z,_.status):(Y.title=`${_._id} is refreshed.`,Y.body=`The ${O} ${_._id} is refreshed.`,H())},Z)},e.extendItem=_=>{let O=ae(_._type),Y=ze({title:`Extending ${_._id}...`,date:new Date,body:`The expiration of ${O} ${_._id} is going to be extended by 6 months.`});e.addToast(Y);let Z=`${ie(_._type)}/${_._id}/extend`;t.post(Z).then(()=>{_._type==="repo"?U(_._id,()=>{Y.title=`${_._id} is extended.`,Y.body=`The expiration of ${O} ${_._id} is extended by 6 months.`},void 0,_.status):(Y.title=`${_._id} is extended.`,Y.body=`The expiration of ${O} ${_._id} is extended by 6 months.`,H())},te=>{Y.title=`Error during the extension of ${_._id}.`,Y.body=te.data&&te.data.error||te.body,H()})},e.itemFilter=_=>{if(e.projectView==="attention"&&!e.needsAttention(_)||e.typeFilter!=="all"&&_._type!==e.typeFilter||e.filters.status[_._statusKey]===!1)return!1;let O=e.search.trim().toLowerCase();return!!(O.length==0||_._label&&String(_._label).toLowerCase().indexOf(O)>-1||_._source&&String(_._source).toLowerCase().indexOf(O)>-1||_._id&&String(_._id).toLowerCase().indexOf(O)>-1||_.conference&&String(_.conference).toLowerCase().indexOf(O)>-1)}};var Xa=function(e,t,s){let r=ct();e.repoId=s.repoId,e.repo=null,e.progress=0,e.rateLimitResetAt=0,e.rateLimitCountdown="",e.shareUrl=(window.location?.origin||"")+"/r/"+encodeURIComponent(e.repoId)+"/",e.copied=!1;let n=null;e.copyShareUrl=async()=>{try{await ja(e.shareUrl),e.copied=!0,n&&r.timeout.cancel(n),n=r.timeout(()=>{e.copied=!1},2e3)}catch{e.addToast?.({title:"Copy this anonymous link",body:e.shareUrl})}};var i=null;let a=null,u=!1;function f(h){e.rateLimitResetAt=h,i&&r.interval.cancel(i);function k(){var m=Math.max(0,Math.ceil((h-Date.now())/1e3));if(m<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,r.interval.cancel(i),i=null;else{var E=Math.floor(m/60),y=m%60;e.rateLimitCountdown=E>0?E+"m "+y+"s":y+"s"}}k(),i=r.interval(k,1e3)}e.on("dispose",function(){u=!0,i&&r.interval.cancel(i),a&&r.timeout.cancel(a)});function v(h){if(!h)return h;var k=h.match(/^rate_limited:(\d+)$/);return k?(f(parseInt(k[1],10)),null):(e.rateLimitResetAt=0,h)}e.getStatus=()=>{u||t.get("/api/repo/"+e.repoId,{repoId:e.repoId,repoUrl:e.repoUrl}).then(h=>{if(!u){e.repo=h.data,h.data.rateLimitResetAt?f(h.data.rateLimitResetAt):e.repo.statusMessage=v(e.repo.statusMessage),e.repo.status=="ready"?e.progress=100:e.repo.status=="queue"?e.progress=10:e.repo.status=="downloaded"?e.progress=50:e.repo.status=="download"||e.repo.status=="preparing"?e.progress=25:e.repo.status=="anonymizing"&&(e.progress=75);var k=!["ready","removed","expired"].includes(e.repo.status);e.repo.status=="error"&&!e.rateLimitResetAt&&(k=!1),k&&(a=r.timeout(e.getStatus,2e3))}},h=>{e.error=h.data.error})},e.getStatus()},sn=function(e,t,s,r,n,i,a){e.sourceUrl="",e.workspaceOpen=!1,e.sourceUrlError="",e.previewStatus="idle",e.sourceLoading=!1,e.mobilePane="settings";let u=window.matchMedia?.("(max-width: 767px)");e.mobileWorkspace=!!u?.matches,u?.addEventListener&&Jt()(u,"change",C=>{e.mobileWorkspace=C.matches}),e.selectMobilePane=C=>{e.mobilePane=C};let f=0,v=!1,h=new Set,k=(C,P=!1)=>!v&&C.generation===f&&C.url===e.sourceUrl.trim()&&C.connection===e.githubConnection&&(!P||C.branch===e.source.branch),m=()=>{let C={generation:f,url:e.sourceUrl.trim(),connection:e.githubConnection,branch:e.source.branch};return h.add(C),e.sourceLoading=!0,C},E=C=>{h.delete(C),v||(e.sourceLoading=[...h].some(P=>k(P)))};e.on("dispose",()=>{v=!0,f++});let y=null,w=C=>C.gistId&&!C.repo?"gist:"+C.gistId.toLowerCase():(C.owner+"/"+C.repo).toLowerCase()+(C.pullRequestId?"/pull/"+C.pullRequestId:""),D=sr(e,["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"],"anonymize:"+(n.path?.()||""));e.discardDraft=async()=>{D.discard(),e.workspaceOpen=!!e.sourceUrl,e.error=null,e.sourceUrl?await e.urlSelected(!0):(f++,e.sourceLoading=!1,e.detectedType=null,e.details=null,e.sourceUrlError="",se.cancel(),_e.cancel(),Pe.cancel(),e.previewStatus="idle")},e.githubConnection=void 0,e.githubConnections=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1;let R=()=>{let C={};for(let P of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])C[P]=e[P];sessionStorage.setItem("github-access-draft",JSON.stringify({path:n.path(),savedAt:Date.now(),draft:C}))};e.connectGistApp=()=>{R(),window.location.href="/github/app/login?returnTo="+encodeURIComponent(n.path())},e.connectGistOAuth=()=>{R(),window.location.href="/github/login?returnTo="+encodeURIComponent(n.path())},e.grantGitHubAccess=()=>{R();let C=n.path(),P=ae(e.sourceUrl)||"",B=e.githubConnections?.appConnected?"/github/app/install":"/github/app/login";window.location.href=B+"?returnTo="+encodeURIComponent(C)+"&repository="+encodeURIComponent(P)+"&install=1"},e.chooseGitHubConnection=async C=>{e.githubConnection=C,e.readme="",e.sourceUrl&&await _()},e.detectedType=null,e.repoId="",e.pullRequestId="",e.gistId="",e.terms="",e.defaultTerms="",e.branches=[],e.source={branch:"",commit:""},e.options={expirationMode:"remove",expirationDate:new Date,update:!1,image:!0,pdf:!0,notebook:!0,link:!0,body:!0,title:!0,origin:!1,diff:!0,content:!0,comments:!0,username:!0,date:!0};function T(){let C=new Date;return C.setMonth(C.getMonth()+6),C}e.options.expirationDate=T();function I(C){let P=C.getFullYear(),B=String(C.getMonth()+1).padStart(2,"0"),M=String(C.getDate()).padStart(2,"0");return`${P}-${B}-${M}`}e.minExpirationDate=I(new Date);let H=new Date;H.setFullYear(H.getFullYear()+1),e.maxExpirationDate=I(H),e.anonymize_readme="",e.readme="",e.html_readme="",e.isUpdate=!1;function q(C){t.get("/api/user/default").then(P=>{let B=P.data;B.terms&&(e.defaultTerms=B.terms.join(` -`)),e.options=Object.assign({},e.options,B.options),e.options.expirationDate=B.options&&B.options.expirationDate?new Date(B.options.expirationDate):T(),!r.repoId&&!r.pullRequestId&&!r.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),C&&C()})}function U(C,P,B){e.anonymize&&e.anonymize[C]&&e.anonymize[C].setValidity(P,B)}function ae(C){try{let P=parseGithubUrl(C);if(P&&P.owner&&P.repo)return P.owner+"/"+P.repo}catch{}return null}e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await Y()}catch{}}};function ie(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:ae(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function _(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function O(){let C;try{C=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!C||C.path!==n.path()||Date.now()-C.savedAt>=30*6e4)return D.restore()?(e.sourceUrl&&await _(),!0):!1;D.restore();for(let P of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(C.draft,P)&&(e[P]=C.draft[P]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await _(),sessionStorage.removeItem("github-access-draft"),!0}q(()=>{!r.repoId&&!r.pullRequestId&&!r.gistId&&a(O,0),r.repoId&&r.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=r.repoId,t.get("/api/repo/"+e.repoId).then(async C=>{e.githubConnection=C.data.connection||"oauth",e.sourceUrl="https://github.com/"+C.data.source.fullName,e._originalFullName=C.data.source.fullName,e.terms=C.data.options.terms.filter(P=>P).join(` -`),e.source=C.data.source,e.role=C.data.role||"owner",e.coauthors=C.data.coauthors||[],e._originalBranch=C.data.source.branch,e.options=Object.assign({},e.options,C.data.options),e.conference=C.data.conference,e._originalConference=C.data.conference,e.repositoryID=C.data.source.repositoryID,e._originalRepositoryID=C.data.source.repositoryID,C.data.options.expirationDate&&(e.options.expirationDate=new Date(C.data.options.expirationDate)),y=w(parseGithubUrl(e.sourceUrl)),!await O()&&(await Promise.all([Y(),Z()]),ue())},()=>{n.url("/404")})),r.pullRequestId&&r.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=r.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async C=>{if(e.githubConnection=C.data.connection||"oauth",e.sourceUrl="https://github.com/"+C.data.source.repositoryFullName+"/pull/"+C.data.source.pullRequestId,e.terms=C.data.options.terms.filter(P=>P).join(` -`),e.source=C.data.source,e.options=Object.assign({},e.options,C.data.options),e.conference=C.data.conference,e._originalConference=C.data.conference,C.data.options.expirationDate&&(e.options.expirationDate=new Date(C.data.options.expirationDate)),y=w(parseGithubUrl(e.sourceUrl)),!await O())try{await pe()}catch{}},()=>{n.url("/404")})),r.gistId&&r.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=r.gistId,t.get("/api/gist/"+e.gistId).then(async C=>{e.sourceUrl="https://gist.github.com/"+C.data.source.gistId,e.terms=C.data.options.terms.filter(P=>P).join(` -`),e.source=C.data.source,e.options=Object.assign({},e.options,C.data.options),e.conference=C.data.conference,e._originalConference=C.data.conference,C.data.options.expirationDate&&(e.options.expirationDate=new Date(C.data.options.expirationDate)),y=w(parseGithubUrl(e.sourceUrl)),!await O()&&await Ue()},()=>{n.url("/404")}))}),t.get("/github/connections").then(C=>{e.githubConnections=C.data,!r.repoId&&!r.pullRequestId&&!r.gistId&&e.githubConnection===void 0&&C.data.appEnabled&&C.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&_())}).catch(()=>{}),e.urlSelected=async(C=!1)=>{let P=++f,B;try{B=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,se.cancel(),_e.cancel(),Pe.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",U("sourceUrl","github",!1);return}let M=w(B),g=C||y===M;y=M,e.sourceUrlError="",U("sourceUrl","github",!0);let S=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,S&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!g&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],g||(e.source={type:"GitHubStream",branch:"",commit:""}),se.cancel(),_e.cancel(),Pe.cancel(),le.clear(),Re.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=g;try{B.gistId&&!B.repo?(e.detectedType="gist",e.source={gistId:B.gistId},await Ue()):B.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:B.owner+"/"+B.repo,pullRequestId:B.pullRequestId},await pe()):(e.detectedType="repo",await Promise.all([Y(),Z()]),ue())}catch{}finally{P===f&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let C=e.branches.filter(B=>B.name==e.source.branch)[0];if(!C)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&!!e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=C.commit),e.readme=C.readme,await Z(),ue()}),e.getBranches=async C=>{let P=parseGithubUrl(e.sourceUrl),B=m();try{let M=await t.get(`/api/repo/${P.owner}/${P.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&ae(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:C===!0||e.reconnectingSource?"1":"0",repositoryID:ie()}});if(!k(B))return;e.branches=M.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let g=e.branches.filter(S=>S.name==e.source.branch);g.length>0&&(!(!e.reconnectingSource&&!C&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=g[0].commit),e.readme=g[0].readme,await Z(C))}catch(M){if(!k(B))return;e.branches=[],e.sourceUnreachable=M&&(M.status===404||M.data&&M.data.error==="repo_not_found");let g=M&&M.data&&M.data.error||(M&&M.status===404?"repo_not_found":"unknown_error");i("ERRORS."+g).then(S=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:S}),e.error=S},console.error),typeof U=="function"&&U("sourceUrl","missing",!1)}finally{E(B)}};async function Y(){let C=parseGithubUrl(e.sourceUrl),P=m();try{F();let B=await t.get(`/api/repo/${C.owner}/${C.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&ae(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,repositoryID:ie(),force:"1"}});if(!k(P))return;e.details=B.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(B){if(!k(P))return;throw B.data&&(i("ERRORS."+B.data.error).then(M=>{e.addToast({title:"Error",date:new Date,body:M}),e.error=M},console.error),Q(B.data.error)),U("sourceUrl","missing",!1),B}finally{E(P)}}async function Z(C){if(e.readme&&!C)return e.readme;let P=parseGithubUrl(e.sourceUrl),B=m();try{let M=await t.get(`/api/repo/${P.owner}/${P.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&ae(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:C===!0?"1":"0",branch:e.source.branch,repositoryID:ie()}});k(B,!0)&&(e.readme=M.data)}catch{k(B,!0)&&(e.readme="")}finally{E(B)}}function te(){let C={terms:e.terms?e.terms.split(` -`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(C.branchName=e.source.branch);try{let P=parseGithubUrl(e.sourceUrl);C.repoName=`${P.owner}/${P.repo}`}catch{}return C}function J(C,P,B){let M=null,g=0,S=()=>{if(e.detectedType!==C)return;M&&a.cancel(M);let V=++g;e.previewStatus="loading",M=a(()=>{M=null;let z=P();if(!z){e.previewStatus="idle";return}t.post("/api/anonymize-preview",z).then(j=>{V===g&&(B(j.data,z),e.previewStatus="ready")}).catch(()=>{V===g&&(e.previewStatus="error")})},200)};return S.cancel=()=>{g++,M&&a.cancel(M),M=null},e.on("dispose",S.cancel),S}e.retryPreview=()=>{e.detectedType==="repo"&&se(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()};let se=J("repo",()=>e.readme?{content:e.readme,options:te()}:null,C=>{if(typeof C?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=C.content;let P="";try{let M=parseGithubUrl(e.sourceUrl),g=e.source.branch||e.details&&e.details.defaultBranch||"main";P=`https://github.com/${M.owner}/${M.repo}/raw/${g}/`}catch{}let B=renderMD(e.anonymize_readme,P);e.html_readme=B,a(Prism.highlightAll,150)});function ue(){!e.anonymize||!e.anonymize.terms||(e.termsRegexWarning=!!e.terms&&!!e.terms.match(/[-[\]{}()*+?.,\\^$|#]/g),se())}async function pe(){let C=parseGithubUrl(e.sourceUrl),P=m();try{F();let B=await t.get(`/api/pr/${C.owner}/${C.repo}/${C.pullRequestId}`,{params:{connection:e.githubConnection}});if(!k(P))return;e.details=B.data,e.pullRequestId||(e.pullRequestId=C.repo+"-PR"+C.pullRequestId+"-"+generateRandomId(4))}catch(B){if(!k(P))return;throw B.data&&(i("ERRORS."+B.data.error).then(M=>{e.addToast({title:"Error",date:new Date,body:M}),e.error=M},console.error),Q(B.data.error)),U("sourceUrl","missing",!1),B}finally{E(P)}}let le=ze(new Map);function Oe(){let C=new Set,P=e.details&&e.details.pullRequest;if(!P)return C;typeof P.title=="string"&&C.add(P.title),typeof P.body=="string"&&C.add(P.body),typeof P.diff=="string"&&C.add(P.diff);let B=P.comments||[];for(let M of B)typeof M.author=="string"&&C.add(M.author),typeof M.body=="string"&&C.add(M.body);return C}let _e=J("pr",()=>{let C=Oe(),P=Array.from(C);return P.length===0?null:{contents:P,options:te()}},(C,P)=>{if(!Array.isArray(C?.contents)||C.contents.length!==P.contents.length||C.contents.some(g=>typeof g!="string"))throw Error("Invalid preview response");let B=P.contents,M=new Map;for(let g=0;gle.set(S,g))});e.anonymizePrContent=function(C){return C&&(le.has(C)?le.get(C):"")};async function Ue(){let C=parseGithubUrl(e.sourceUrl),P=m();try{F(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let B=await t.get(`/api/gist/source/${C.gistId}`);if(!k(P))return;e.details=B.data,e.gistId||(e.gistId="gist-"+C.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(B){if(!k(P))return;if(B.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,U("sourceUrl","missing",!1);return}if(B.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,U("sourceUrl","missing",!1);return}throw B.data&&(i("ERRORS."+B.data.error).then(M=>{e.addToast({title:"Error",date:new Date,body:M}),e.error=M},console.error),Q(B.data.error)),U("sourceUrl","missing",!1),B}finally{E(P)}}let Re=ze(new Map);function $e(){let C=new Set,P=e.details&&e.details.gist;if(!P)return C;typeof P.description=="string"&&C.add(P.description),typeof P.ownerLogin=="string"&&C.add(P.ownerLogin);let B=P.files||[];for(let g of B)typeof g.filename=="string"&&C.add(g.filename),typeof g.content=="string"&&C.add(g.content);let M=P.comments||[];for(let g of M)typeof g.author=="string"&&C.add(g.author),typeof g.body=="string"&&C.add(g.body);return C}let Pe=J("gist",()=>{let C=$e(),P=Array.from(C);return P.length===0?null:{contents:P,options:te()}},(C,P)=>{if(!Array.isArray(C?.contents)||C.contents.length!==P.contents.length||C.contents.some(g=>typeof g!="string"))throw Error("Invalid preview response");let B=P.contents,M=new Map;for(let g=0;gRe.set(S,g)),He()});e.anonymizeGistContent=function(C){return C&&(Re.has(C)?Re.get(C):"")},e.previewGistFiles=[];function He(){let C=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=C.map(P=>({filename:e.anonymizeGistContent(P.filename),content:e.anonymizeGistContent(P.content),language:P.language}))}e.watch("details.gist.files",He,!0),e.watch("terms",He);function Ee(){let C=e.conference;if(e.conference_data=null,!C)return;let P=e.isUpdate&&C===e._originalConference;t.get("/api/conferences/"+C).then(B=>{e.conference===C&&(e.conference_data=B.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!P&&(e.options.expirationDate=new Date(e.conference_data.endDate),e.options.expirationMode="remove",e.options.update=e.conference_data.options.update,e.options.image=e.conference_data.options.image,e.options.pdf=e.conference_data.options.pdf,e.options.notebook=e.conference_data.options.notebook,e.options.link=e.conference_data.options.link))},()=>{e.conference===C&&(e.conference_data=null)})}function F(){U("repoId","used",!0),U("repoId","format",!0),U("pullRequestId","used",!0),U("pullRequestId","format",!0),U("gistId","used",!0),U("gistId","format",!0),U("sourceUrl","used",!0),U("sourceUrl","missing",!0),U("sourceUrl","access",!0),U("sourceUrl","github",!0),U("commit","exists",!0),U("conference","activated",!0),U("terms","format",!0),e.termsRegexWarning=!1}function oe(){let C=e.anonymize&&e.anonymize.expirationDate;return!e.options.expirationDate||C&&C.invalid?(C&&C.setDirty&&C.setDirty(),e.error="Please choose a valid expiration date.",!0):!1}function Q(C){let P=e.detectedType==="pr"?"pullRequestId":e.detectedType==="gist"?"gistId":"repoId";switch(C){case"repoId_already_used":U(P,"used",!1);break;case"invalid_repoId":U(P,"format",!1);break;case"options_not_provided":U(P,"format",!1);break;case"repo_already_anonymized":U("sourceUrl","used",!1);break;case"invalid_terms_format":U("terms","format",!1);break;case"repo_not_found":U("sourceUrl","missing",!1);break;case"repo_not_accessible":U("sourceUrl","access",!1);break;case"commit_not_found":U("commit","exists",!1);break;case"conf_not_activated":U("conference","activated",!1);break}}e.coauthors=e.coauthors||[],e.coauthorResults=[],e.coauthorError="",e.searchCoauthors=()=>{let C=(e.coauthorSearch||"").trim();if(e.coauthorError="",C.length<2){e.coauthorResults=[];return}t.get("/api/user/search/github-users",{params:{q:C}}).then(P=>{let B=new Set((e.coauthors||[]).map(M=>(M.username||"").toLowerCase()));e.coauthorResults=(P.data||[]).filter(M=>!B.has((M.username||"").toLowerCase()))},()=>{e.coauthorResults=[]})},e.addCoauthor=(C,P)=>{P&&P.preventDefault(),!(!C||!C.username)&&t.post("/api/repo/"+e.repoId+"/coauthors",{username:C.username}).then(B=>{e.coauthors=B.data||[],e.coauthorResults=[],e.coauthorSearch="",e.coauthorError=""},B=>{let M=B&&B.data&&B.data.error||"unknown_error";e.coauthorError=M})},e.removeCoauthor=C=>{!C||!C.username||confirm("Remove co-author "+C.username+"?")&&t.delete("/api/repo/"+e.repoId+"/coauthors/"+encodeURIComponent(C.username)).then(P=>{e.coauthors=P.data||[]},P=>{let B=P&&P.data&&P.data.error||"unknown_error";e.coauthorError=B})},e.anonymizeRepo=C=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(e.reconnectingSource&&!e.reconnectRepositoryId||oe())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let P=C.currentTarget||C.target.closest?.("button")||C.target;P.disabled=!0;let B=parseGithubUrl(e.sourceUrl),M={repoId:e.repoId,terms:e.terms.trim().split(` -`).filter(S=>S),connection:e.githubConnection,fullName:`${B.owner}/${B.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(M.options.pageSource=e.details.pageSource),F();let g=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(g,M,{headers:{"Content-Type":"application/json"}}).then(()=>{D.clear(),window.location.href="/status/"+e.repoId},S=>{S.data&&(i("ERRORS."+S.data.error).then(V=>{e.error=V},console.error),Q(S.data.error))}).finally(()=>{P.disabled=!1})},e.anonymizeGist=C=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(oe())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let P=C.currentTarget||C.target.closest?.("button")||C.target;P.disabled=!0;let B=parseGithubUrl(e.sourceUrl),M={gistId:e.gistId,terms:e.terms.trim().split(` -`).filter(S=>S),source:{gistId:B.gistId},options:e.options,conference:e.conference};F();let g=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(g,M,{headers:{"Content-Type":"application/json"}}).then(()=>{D.clear(),window.location.href="/gist/"+e.gistId},S=>{S.data&&(i("ERRORS."+S.data.error).then(V=>{e.error=V},console.error),Q(S.data.error))}).finally(()=>{P.disabled=!1})},e.anonymizePullRequest=C=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(oe())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let P=C.currentTarget||C.target.closest?.("button")||C.target;P.disabled=!0;let B=parseGithubUrl(e.sourceUrl),M={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(` -`).filter(S=>S),source:{repositoryFullName:`${B.owner}/${B.repo}`,pullRequestId:B.pullRequestId},options:e.options,conference:e.conference};F();let g=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(g,M,{headers:{"Content-Type":"application/json"}}).then(()=>{D.clear(),window.location.href="/pr/"+e.pullRequestId},S=>{S.data&&(i("ERRORS."+S.data.error).then(V=>{e.error=V},console.error),Q(S.data.error))}).finally(()=>{P.disabled=!1})},e.watch("conference",()=>{Ee()}),e.watch("terms",()=>{e.detectedType==="repo"&&ue(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()}),e.watch("options.image",()=>{e.detectedType==="repo"&&ue(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()}),e.watch("options.link",()=>{e.detectedType==="repo"&&ue(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()}),e.watch("details",()=>{e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()},!0)},nr=function(e,t,s,r,n,i){let a=ct();window.Prism?.hooks&&!window.Prism.redactionHook&&(window.Prism.hooks.add("complete",O=>Ha(O.element)),window.Prism.redactionHook=!0);let u=Jt();e.on("dark-mode",(O,Y)=>{e.aceOption&&(Y?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let f=0,v=!1;e.on("dispose",()=>{v=!0,f++,h&&h.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"keydown",function(O){if((O.metaKey||O.ctrlKey)&&O.key==="k"){O.preventDefault();var Y=document.querySelector(".tree-search-input");Y&&(Y.focus(),Y.select())}});var h=null;e.onFileSearchChange=function(){h&&(h.resolve(),h=null);let O=e.fileSearchQuery;if(!O||O.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let Y=i.defer();h=Y,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(O)}`,{timeout:Y.promise}).then(function(Z){if(!(v||h!==Y)){h=null,e.fileSearchLoading=!1;var te={};e.files.forEach(function(F){te[(F.path||"")+"/"+F.name]=!0});for(var J=[],se={},ue=0;ue0&&e.files.push.apply(e.files,J);for(var $e=[],Pe=0;Pe0&&e.files.push.apply(e.files,$e),e.fileSearchResults=Z.data}},function(){!v&&h===Y&&(h=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let k={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},m=["license","txt"],E=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],y=["wav","mp3","ogg","wma","flac","aac","m4a"],w=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(O,Y){if(e.repoId!=r.repoId)return _();if((r.path||"")!=e.filePath){e.filePath=r.path||"",e.paths=e.filePath.split("/").filter(Z=>Z&&Z.trim().length>0),ie();for(let Z=0;Z0?e.paths.slice(0,Z).join("/"):"";e.files.some(se=>se.path===te)||e.getFiles(te)}}});function D(){if(e.paths[0]!="")return;let O=["readme.md","readme.txt","readme.org","readme.1st","readme"],Y={};for(let te of e.files)te.name.toLowerCase().indexOf("readme")>-1&&(Y[te.name.toLowerCase()]=te.name);let Z=null;for(let te of O)if(Y[te]){Z=te;break}if(!Z&&Object.keys(Y).length>0&&(Z=Object.keys(Y)[0]),Z){let te=s.url();te[te.length-1]!="/"&&(te+="/"),s.url(te+encodePathForUrl(Y[Z]))}}e.fileCounts=null,e.getFiles=function(O){let Y=e.repoId;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(O)}&v=${e.options.lastUpdateDate}`).then(function(Z){if(v||Y!==e.repoId)return[];let te=O||"";return e.files=e.files.filter(J=>J.path!==te),e.files.push(...Z.data),Z.data},function(Z){if(v||Y!==e.repoId)return[];e.type="error",e.content=Z&&Z.data&&Z.data.error||"unknown_error",e.files=[]})};function R(){let O=e.repoId;t.get(`/api/repo/${e.repoId}/files/counts`).then(function(Y){v||O!==e.repoId||(e.fileCounts=Y.data)},function(){e.fileCounts={}})}function T(){return e.files.filter(O=>O.name==e.paths[e.paths.length-1]&&O.path==e.paths.slice(0,e.paths.length-1).join("/"))[0]}var I=null;e.on("dispose",function(){I&&a.interval.cancel(I)});function H(O){if(v)return;let Y=e.repoId;t.get(`/api/repo/${e.repoId}/options`).then(Z=>{if(!(v||Y!==e.repoId)){if(e.options=Z.data,e.options.url){window.location=e.options.url;return}O&&O(Z.data)}},Z=>{if(!(v||Y!==e.repoId)){var te=Z.data||{};if(te.error==="rate_limited"&&te.resetAt){let se=function(){var ue=Math.max(0,Math.ceil((e.rateLimitResetAt-Date.now())/1e3));if(ue<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,I&&(a.interval.cancel(I),I=null),H(O);else{var pe=Math.floor(ue/60),le=ue%60;e.rateLimitCountdown=pe>0?pe+"m "+le+"s":le+"s"}};var J=se;e.type="rate_limited",e.rateLimitResetAt=te.resetAt,I&&a.interval.cancel(I),se(),I=a.interval(se,1e3)}else te.error==="repository_not_ready"?(e.type="loading",a.timeout(function(){H(O)},3e3)):(e.type="error",e.content=te.error)}})}e.toggleSource=function(){e.showSource=!e.showSource},e.toggleAllowScripts=function(){e.allowScripts=!e.allowScripts};function q(O){return k[O]?k[O]:O}function U(O){return O=="pdf"?"pdf":O=="html"||O=="htm"?"html-doc":O=="md"?"md":O=="org"?"org":O=="ipynb"?"IPython":m.indexOf(O)>-1?"text":E.indexOf(O)>-1?"image":w.indexOf(O)>-1?"media":y.indexOf(O)>-1?"audio":"code"}function ae(O,Y){let Z=f;if(!O){e.type="error",e.content="no_file_selected";return}let te=e.type;e.type="loading",e.content="loading";let J=Y&&Y.sha||"0";t.get(`/api/repo/${e.repoId}/file/${encodePathForUrl(O)}?v=`+J,{transformResponse:se=>se}).then(se=>{if(!(v||Z!==f)){if(e.type=te,e.content=se.data,e.content==""&&(e.content=null),e.type=="md"&&(e.content=renderMD(se.data,s.url()+"/../"),e.type="html"),e.type=="org"){let pe=contentAbs2Relative(se.data);var ue=new Org.Parser().parse(pe).convert(Org.ConverterHTML,{headerOffset:1,exportFromLineNumber:!1,suppressSubScriptHandling:!0,suppressAutoLink:!1});e.content=DOMPurify.sanitize(ue.toString()),e.type="html"}e.type=="code"&&se.headers("content-type")=="application/octet-stream"&&(e.type="binary",e.content="binary"),a.timeout(()=>{Prism.highlightAll()},50)}},se=>{if(!(v||Z!==f)){e.type="error",e.content="unknown_error";try{se.data=JSON.parse(se.data),se.data.error?e.content=se.data.error:e.content=se.data}catch{console.log(se),se.status==-1?e.content="request_error":se.status==502&&(e.content="unreachable")}}})}function ie(){f++,e.content="",e.file=T();let O="0";e.file&&e.file.sha&&(O=e.file.sha),e.url=`/api/repo/${e.repoId}/file/${encodePathForUrl(e.filePath)}?v=${O}`;let Y=e.filePath.substring(0,e.filePath.lastIndexOf("/")+1);e.fileBaseUrl=`/api/repo/${e.repoId}/file/${Y?encodePathForUrl(Y):""}`,e.showSource=!1,e.allowScripts=!1;let Z=e.filePath.toLowerCase(),te=Z.lastIndexOf(".");if(te>-1&&(Z=Z.substring(te+1)),e.aceOption={readOnly:!0,useWrapMode:!0,showGutter:!0,theme:"chrome",useSoftTab:!0,tabSize:2,fontSize:13,keyBinding:"vscode",fullLineSelection:!0,highlightActiveLine:!1,highlightGutterLine:!1,cursor:"hide",showInvisibles:!1,showIndentGuides:!0,showPrintMargin:!1,highlightSelectedWord:!1,enableBehaviours:!0,fadeFoldWidgets:!1,mode:q(Z),onLoad:function(J){let se=ace.require("ace/range").Range,ue=null;function pe(Ee,F){ue!==null&&(J.session.removeMarker(ue),ue=null),Ee!=null&&(ue=J.session.addMarker(new se(Ee,0,F,1),"highlighted-line","fullLine"))}function le(Ee){let F=window.location.hash.match(/^#L(\d+)(?:-L(\d+))?/);if(!F){pe(null);return}let oe=parseInt(F[1])-1,Q=F[2]?parseInt(F[2])-1:oe;pe(oe,Q),Ee&&a.timeout(()=>{J.scrollToLine(oe,!0,!0,function(){})},100)}le(!0);let Oe=null;J.on("guttermousedown",function(Ee){let F=Ee.getDocumentPosition().row,oe=Ee.domEvent&&Ee.domEvent.shiftKey,Q=F,C=F;oe&&Oe!==null?(Q=Math.min(Oe,F),C=Math.max(Oe,F)):Oe=F;let P=Q===C?`#L${Q+1}`:`#L${Q+1}-L${C+1}`,B=window.location.pathname+window.location.search+P;window.history.replaceState(null,"",B),pe(Q,C),Ee.stop()});let _e=u(window,"hashchange",()=>le(!1));J.setFontSize(e.aceOption.fontSize),J.setReadOnly(e.aceOption.readOnly),J.setKeyboardHandler(e.aceOption.keyBinding),J.setSelectionStyle(e.aceOption.fullLineSelection?"line":"text"),J.setOption("displayIndentGuides",!0),J.setHighlightActiveLine(e.aceOption.highlightActiveLine),e.aceOption.cursor=="hide"&&(J.renderer.$cursorLayer.element.style.display="none"),J.setHighlightGutterLine(e.aceOption.highlightGutterLine),J.setShowInvisibles(e.aceOption.showInvisibles),J.setDisplayIndentGuides(e.aceOption.showIndentGuides),J.renderer.setShowPrintMargin(e.aceOption.showPrintMargin),J.setHighlightSelectedWord(e.aceOption.highlightSelectedWord),J.session.setUseSoftTabs(e.aceOption.useSoftTab),J.session.setTabSize(e.aceOption.tabSize);let Ue=window.matchMedia("(max-width: 991px)"),Re=()=>J.session.setUseWrapMode(e.aceOption.useWrapMode&&Ue.matches);Re(),Ue.addEventListener?.("change",Re),J.setBehavioursEnabled(e.aceOption.enableBehaviours),J.setFadeFoldWidgets(e.aceOption.fadeFoldWidgets);let $e=[],Pe=()=>{$e.forEach(oe=>J.session.removeMarker(oe)),$e=[];let Ee=za();if(!Ee)return;J.session.getDocument().getAllLines().forEach((oe,Q)=>{for(let C of oe.matchAll(Ee))$e.push(J.session.addMarker(new se(Q,C.index,Q,C.index+C[0].length),"ace_redaction","text"))})};Pe(),J.session.on("change",()=>a.timeout(Pe,0));let He=e.on("site-options",Pe);return()=>{_e(),He(),Ue.removeEventListener?.("change",Re)}}},e.isDarkMode&&(e.aceOption.theme="nord_dark"),e.type=U(Z),e.type=="pdf"){e.content="pdf";return}ae(e.filePath,e.file)}function _(){f++,e.files=[],e.content=null,e.fileCounts=null,e.fileSearchQuery="",e.onFileSearchChange(),e.repoId=r.repoId,e.type="loading",e.filePath=r.path||"",e.paths=e.filePath.split("/");let O=e.repoId;H(function(Y){R();var Z=i.resolve();for(let te=0;te0?e.paths.slice(0,te).join("/"):"";Z=Z.then(function(){return e.getFiles(J)}).then(function(){if(e.type==="error")return i.reject("error")})}Z.then(function(){v||O!==e.repoId||(e.files.length==1&&e.files[0].name==""?(e.files=[],e.type="empty"):(D(),ie()))})})}_()},Za=function(e,t,s,r,n){async function i(f){t.get(`/api/pr/${e.pullRequestId}/options`).then(v=>{if(e.options=v.data,e.options.url){window.location=e.options.url;return}f&&f(v.data)},v=>{e.type="error",e.content=v.data.error})}async function a(f){t.get(`/api/pr/${e.pullRequestId}/content`).then(v=>{e.details=v.data,e.tabState={active:v.data.diff?"diff":"comments"},f&&f(v.data)},v=>{e.type="error",e.content=v.data.error})}function u(){e.pullRequestId=r.pullRequestId,e.type="loading",i(f=>{a()})}u()},xa=function(e,t,s,r,n){async function i(f){t.get(`/api/gist/${e.gistId}/options`).then(v=>{if(e.options=v.data,e.options.url){window.location=e.options.url;return}f&&f(v.data)},v=>{e.type="error",e.content=v.data.error})}async function a(f){t.get(`/api/gist/${e.gistId}/content`).then(v=>{e.details=v.data;let h=v.data&&v.data.files&&v.data.files.length;e.tabState={active:h?"files":"comments"},f&&f(v.data)},v=>{e.type="error",e.content=v.data.error})}function u(){e.gistId=r.gistId,e.type="loading",i(()=>{a()})}u()},el=function(e,t,s){e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.conferences=[],e.loading=!0,e.error="",e.search="";let r="conferences.filterPrefs",n={filters:{status:{ready:!0,expired:!1,removed:!1}},orderBy:"name"},i=loadFilterPrefs(r)||{};e.filters={status:Object.assign({},n.filters.status,i.filters&&i.filters.status||{})},e.orderBy=i.orderBy||n.orderBy,e.watch("orderBy",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})},!0),e.removeConference=function(a){if(!a.removing&&confirm(`Are you sure that you want to remove the conference ${a.name}? All the repositories linked to this conference will expire.`)){a.removing=!0;let u=ze({title:`Removing ${a.name}...`,date:new Date,body:`The conference ${a.name} is going to be removed.`});e.addToast(u),t.delete(`/api/conferences/${a.conferenceID}`).then(()=>{u.title=`${a.name} is removed.`,u.body=`The conference ${a.name} is removed.`,e.loadConferences()}).catch(()=>{u.title="Unable to remove conference",u.body="Please try again. The conference has not been removed."}).finally(()=>{a.removing=!1})}},e.loadConferences=()=>(e.loading=!0,e.error="",t.get("/api/conferences/").then(a=>{e.conferences=a.data||[]},a=>{e.error="Unable to load your conferences. Please try again."}).finally(()=>{e.loading=!1})),e.loadConferences(),e.conferenceFilter=a=>{if(e.filters.status[a.status]==!1)return!1;let u=e.search.trim().toLowerCase();return!!(!u||(a.name||"").toLowerCase().includes(u)||(a.conferenceID||"").toLowerCase().includes(u))}},rr=function(e,t,s,r){e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.plans=[],e.editionMode=!1,e.saving=!1,e.error="";function n(){t.get("/api/conferences/"+r.conferenceId).then(h=>{e.options={...e.options,...h.data,billing:h.data.billing||{}},e.options.startDate=new Date(e.options.startDate),e.options.endDate=new Date(e.options.endDate)})}r.conferenceId&&(e.editionMode=!0,n());function i(){t.get("/api/conferences/plans").then(h=>{e.plans=h.data,e.plan=e.plans.filter(k=>k.id==e.options.plan.planID)[0]})}i();let a=new Date;a.setDate(1),a.setMonth(a.getMonth()+1);let u=new Date(a);u.setMonth(a.getMonth()+7,0),e.options={billing:{},startDate:a,endDate:u,plan:{planID:"free_conference"},options:{link:!0,image:!0,pdf:!0,notebook:!0,update:!0,page:!0}},e.plan=null,e.watch("options.plan.planID",()=>{e.plan=e.plans.filter(h=>h.id==e.options.plan.planID)[0]});function f(){e.conference.name.setValidity("required",!0),e.conference.conferenceID.setValidity("pattern",!0),e.conference.conferenceID.setValidity("required",!0),e.conference.conferenceID.setValidity("used",!0),e.conference.startDate.setValidity("required",!0),e.conference.startDate.setValidity("invalid",!0),e.conference.endDate.setValidity("required",!0),e.conference.endDate.setValidity("invalid",!0),e.conference.setValidity("error",!0)}function v(h){switch(h){case"conf_name_missing":e.conference.name.setValidity("required",!1);break;case"conf_id_missing":e.conference.conferenceID.setValidity("required",!1);break;case"conf_id_format":e.conference.conferenceID.setValidity("pattern",!1);break;case"conf_id_used":e.conference.conferenceID.setValidity("used",!1);break;case"conf_start_date_missing":e.conference.startDate.setValidity("required",!1);break;case"conf_end_date_missing":e.conference.endDate.setValidity("required",!1);break;case"conf_start_date_invalid":e.conference.startDate.setValidity("invalid",!1);break;case"conf_end_date_invalid":e.conference.endDate.setValidity("invalid",!1);break;default:e.conference.setValidity("error",!1);break}}e.submit=function(){if(e.saving)return;e.saving=!0,e.error="";let h=JSON.parse(JSON.stringify(e.options)),k=ze({title:`Creating ${h.name}...`,date:new Date,body:`The conference ${h.conferenceID} is in creation.`});e.editionMode&&(k.title=`Updating ${h.name}...`,k.body=`The conference '${h.conferenceID}' is updating.`),e.addToast(k),f(),t.post("/api/conferences/"+(e.editionMode?h.conferenceID:""),h).then(()=>{e.editionMode?(k.title=`${h.name} updated`,k.body=`The conference '${h.conferenceID}' is updated.`):(k.title=`${h.name} created`,k.body=`The conference '${h.conferenceID}' is created.`),s.url("/conference/"+h.conferenceID)},m=>{v(m.data?.error),e.error="Unable to save the conference. Please correct any highlighted fields and try again.",e.removeToast(k)}).finally(()=>{e.saving=!1})}},tl=function(e,t,s,r){e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.conference=null,e.search="",e.filters={status:{ready:!0,expired:!1,removed:!1}},e.orderBy="-anonymizeDate",e.repoFiler=i=>{if(e.filters.status[i.status]==!1)return!1;let a=e.search.trim().toLowerCase();return!!(!a||(i.source?.fullName||"").toLowerCase().includes(a)||(i.repoId||"").toLowerCase().includes(a))};function n(){t.get("/api/conferences/"+r.conferenceId).then(i=>{e.conference=i.data})}n()},ol=function(e,t){e.connections=null,e.connectionError="",e.busy=!1,e.loadConnections=()=>t.get("/github/connections").then(s=>{e.connections=s.data}).catch(s=>{e.connectionError=s.data?.error||"Unable to load connections."}),e.changeConnection=async(s,r,n)=>{e.busy=!0,e.connectionError="";try{let i=await t.post("/github/connections/migrate",{type:s.type,id:s.id,connection:r,preview:n},{headers:{"X-CSRF-Token":e.connections.csrf}});n?s.eligible=i.data.eligible:await e.loadConnections()}catch(i){e.connectionError=i.data?.error||"Unable to change connection."}finally{e.busy=!1}},e.disconnectOAuth=async()=>{e.busy=!0;try{await t.post("/github/connections/disconnect-oauth",{},{headers:{"X-CSRF-Token":e.connections.csrf}}),await e.loadConnections()}catch(s){e.connectionError=s.data?.error||"Unable to disconnect OAuth."}finally{e.busy=!1}},e.loadConnections()},sl=function(e,t){e.accountRecovery=!1,t.get("/github/account-recovery").then(s=>{e.accountRecovery=s.data.required}).catch(()=>{})};var nl=function(e,t,s){let r=ct(),n=Jt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.repositories=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.totalSize=0,e.selected={},e.allSelected=!1;let i=y=>{if(y.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){y.preventDefault();let w=document.querySelector('.admin-filter-toolbar input[type="search"]');w&&w.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=y=>{y==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[y]="",e.query.page=1},e.chips=[];let a=()=>{let y=[];e.query.owner&&y.push({key:"owner",label:"Owner",value:e.query.owner}),e.query.conference&&y.push({key:"conference",label:"Conference",value:e.query.conference}),e.chips=y};e.showStatusMessage=y=>{let w=y.statusMessage||"(no message)";window.prompt(`Status message for ${y.repoId} (${y.status}):`,w)},e.fetchGithubInfo=y=>{let w=window.open("","_blank");w&&w.document.write("
Loading GitHub info for "+y.repoId+"...
"),t.get("/api/admin/repos/"+y.repoId+"/github").then(D=>{w&&(w.document.open(),w.document.write('
'+JSON.stringify(D.data,null,2).replace(/[<>]/g,R=>R==="<"?"<":">")+"
"),w.document.close())},D=>{let R=D&&D.data?JSON.stringify(D.data,null,2):String(D);w&&(w.document.body.innerHTML='
'+R+"
")})},e.statusCountFor=y=>{let w=(e.statusCounts||[]).find(D=>D._id===y);return w?w.count:0},e.statusStorageFor=y=>{let w=(e.statusCounts||[]).find(D=>D._id===y);return w?w.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=y=>{e.query.sort===y?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=y,e.query.direction="desc"),e.query.page=1},e.sortIcon=y=>e.query.sort===y?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",f={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},v=loadFilterPrefs(u)||{};e.query=Object.assign({},f,v,{page:1,search:""});let h=s.search();h.owner&&(e.query.owner=h.owner),h.conference&&(e.query.conference=h.conference),h.search&&(e.query.search=h.search);let k="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(k)||"[]"),e.savePreset=()=>{let y=window.prompt("Preset name:");if(!y)return;let w=Object.assign({},e.query);delete w.page,e.presets=(e.presets||[]).filter(D=>D.name!==y),e.presets.push({name:y,query:w}),localStorage.setItem(k,JSON.stringify(e.presets))},e.applyPreset=y=>{Object.assign(e.query,y.query,{page:1})},e.deletePreset=y=>{e.presets=(e.presets||[]).filter(w=>w.name!==y.name),localStorage.setItem(k,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(y=>{e.selected[y.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(y=>e.selected[y.repoId]),e.bulkRefresh=()=>{let y=e.selectedRepos();y.length&&confirm(`Force refresh ${y.length} repositories?`)&&y.forEach(w=>e.updateRepository(w))},e.bulkRemoveCache=()=>{let y=e.selectedRepos();y.length&&confirm(`Purge cache for ${y.length} repositories?`)&&y.forEach(w=>e.removeCache(w))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let y=new URLSearchParams(Object.entries(e.query).filter(([,w])=>w!==""&&w!==!1&&w!=null));y.set("format","csv"),y.set("limit","10000"),window.open("/api/admin/repos?"+y.toString(),"_blank")},e.removeCache=y=>{confirm("Remove cached files for "+y.repoId+"?")&&t.delete("/api/admin/repos/"+y.repoId).then(()=>m(),w=>console.error(w))},e.removeRepository=y=>{confirm("Remove repository "+y.repoId+"?")&&t.delete("/api/repo/"+y.repoId+"/").then(()=>m(),w=>console.error(w))},e.updateRepository=y=>{let w=ze({title:`Refreshing ${y.repoId}...`,date:new Date,body:`The repository ${y.repoId} is going to be refreshed.`});e.toasts.push(w),t.post(`/api/repo/${y.repoId}/refresh`).then(D=>{D.data.status=="ready"?w.title=`${y.repoId} is refreshed.`:w.title=`Refreshing of ${y.repoId}.`},D=>{w.title=`Error during the refresh of ${y.repoId}.`,w.body=D.body})},e.fetchError=null;function m(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(y=>{e.total=y.data.total,e.totalPage=Math.ceil(y.data.total/e.query.limit),e.repositories=y.data.results,e.statusCounts=y.data.statusCounts||[],e.totalSize=y.data.totalSize||0,e.allSelected=!1},y=>{e.fetchError=y&&y.data&&y.data.error||"Failed to load repositories",console.error(y)})}m();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(m,500);let{page:y,search:w,...D}=e.query;saveFilterPrefs(u,D),a()},!0),a()},rl=function(e,t,s){let r=ct(),n=Jt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=m=>{if(m.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){m.preventDefault();let E=document.querySelector('.admin-filter-toolbar input[type="search"]');E&&E.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=m=>{m==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[m]="",e.query.page=1},e.chips=[];let a=()=>{let m=[];e.query.role&&m.push({key:"role",label:"Role",value:e.query.role}),e.chips=m};e.statusCountFor=m=>{let E=(e.statusCounts||[]).find(y=>y._id===m);return E?E.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=m=>{e.query.sort===m?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=m,e.query.direction="desc"),e.query.page=1},e.sortIcon=m=>e.query.sort===m?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",f={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},v=loadFilterPrefs(u)||{};e.query=Object.assign({},f,v,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(m=>{e.selected[m.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(m=>e.selected[m.username]),e.banUser=m=>{confirm(`Ban user ${m.username}?`)&&t.post(`/api/admin/users/${m.username}/ban`).then(h,E=>console.error(E))},e.activateUser=m=>{t.post(`/api/admin/users/${m.username}/activate`).then(h,E=>console.error(E))},e.bulkBan=()=>{let m=e.selectedUsers();m.length&&confirm(`Ban ${m.length} users?`)&&m.forEach(E=>e.banUser(E))},e.exportCsv=()=>{let m=new URLSearchParams(Object.entries(e.query).filter(([,E])=>E!==""&&E!==!1&&E!=null));m.set("format","csv"),m.set("limit","10000"),window.open("/api/admin/users?"+m.toString(),"_blank")},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(m=>{e.total=m.data.total,e.totalPage=Math.ceil(m.data.total/e.query.limit),e.users=m.data.results,e.statusCounts=m.data.statusCounts||[],e.allSelected=!1},m=>{e.fetchError=m&&m.data&&m.data.error||"Failed to load users",console.error(m)})}h();let k=null;e.watch("query",()=>{r.timeout.cancel(k),k=r.timeout(h,500);let{page:m,search:E,...y}=e.query;saveFilterPrefs(u,y),a()},!0),a()},il=function(e,t,s,r){let n=ct();e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=m=>{e.query.sort===m?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=m,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=m=>e.query.sort===m?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=m=>(e.repositories||[]).filter(E=>E.status===m).length,e.repoFiler=m=>e.filters.status[m.status]==!1?!1:!!(e.search.trim().length==0||m.source.fullName.indexOf(e.search)>-1||m.repoId.indexOf(e.search)>-1||m.statusMessage&&m.statusMessage.indexOf(e.search)>-1||m.conference&&m.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(m=>{e.selected[m.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(m=>e.selected[m.repoId]),e.bulkRefresh=()=>{let m=e.selectedRepos();m.length&&confirm(`Force refresh ${m.length} repositories?`)&&m.forEach(E=>e.updateRepository(E))},e.bulkRemoveCache=()=>{let m=e.selectedRepos();m.length&&confirm(`Purge cache for ${m.length} repositories?`)&&m.forEach(E=>e.removeCache(E))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let m=e.filteredRepositories||e.repositories,y=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),w=m.map(T=>[T.repoId,T.status,T.statusMessage||"",T.pageView||0,T.anonymizeDate||"",T.source&&T.source.fullName||"",T.conference||"",T.size&&T.size.storage||0].map(I=>{let H=String(I??"");return/[",\n\r]/.test(H)?'"'+H.replace(/"/g,'""')+'"':H}).join(",")),D=new Blob([y+` -`+w.join(` -`)],{type:"text/csv"}),R=document.createElement("a");R.href=URL.createObjectURL(D),R.download=r.username+"-repositories.csv",R.click()},e.showStatusMessage=m=>{let E=m.statusMessage||"(no message)";window.prompt(`Status message for ${m.repoId} (${m.status}):`,E)},e.fetchGithubInfo=m=>{let E=window.open("","_blank");E&&E.document.write("
Loading GitHub info for "+m.repoId+"...
"),t.get("/api/admin/repos/"+m.repoId+"/github").then(y=>{E&&(E.document.open(),E.document.write('
'+JSON.stringify(y.data,null,2).replace(/[<>]/g,w=>w==="<"?"<":">")+"
"),E.document.close())},y=>{let w=y&&y.data?JSON.stringify(y.data,null,2):String(y);E&&(E.document.body.innerHTML='
'+w+"
")})};function f(m){t.get("/api/admin/users/"+m+"/repos",{}).then(E=>{e.repositories=E.data},E=>{console.error(E)})}function v(m){t.get("/api/admin/users/"+m,{}).then(E=>{e.userInfo=E.data},E=>{console.error(E)})}v(r.username),f(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>v(r.username),m=>console.error(m))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>v(r.username),m=>console.error(m))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>v(r.username),m=>console.error(m))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>v(r.username),m=>console.error(m))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function h(){t.get("/api/admin/tokens").then(m=>{e.tokens=m.data||[]},m=>{m.status!==401&&m.status!==403&&console.error(m)})}h(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(m=>{e.tokenForm.plaintext=m.data.token,e.tokenForm.name="",h()},m=>console.error(m))},e.revokeToken=m=>{confirm(`Revoke token "${m.name}"?`)&&t.delete("/api/admin/tokens/"+m.id).then(()=>h(),E=>console.error(E))},e.removeCache=m=>{confirm("Remove cached files for "+m.repoId+"?")&&t.delete("/api/admin/repos/"+m.repoId).then(()=>f(r.username),E=>console.error(E))},e.removeRepository=m=>{confirm("Remove repository "+m.repoId+"?")&&t.delete("/api/repo/"+m.repoId+"/").then(()=>f(r.username),E=>console.error(E))},e.updateRepository=m=>{let E=ze({title:`Refreshing ${m.repoId}...`,date:new Date,body:`The repository ${m.repoId} is going to be refreshed.`});e.toasts.push(E),t.post(`/api/repo/${m.repoId}/refresh`).then(y=>{y.data.status=="ready"?E.title=`${m.repoId} is refreshed.`:E.title=`Refreshing of ${m.repoId}.`},y=>{E.title=`Error during the refresh of ${m.repoId}.`,E.body=y.body})},e.getGitHubRepositories=m=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(E=>{e.userInfo.repositories=E.data})};let k=null;e.watch("query",()=>{n.timeout.cancel(k),k=n.timeout(()=>{f(r.username)},500)},!0)},al=function(e,t,s){let r=ct(),n=Jt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=y=>{if(y.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){y.preventDefault();let w=document.querySelector('.admin-filter-toolbar input[type="search"]');w&&w.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=y=>{y==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[y]="",e.query.page=1},e.chips=[];let a=()=>{let y=[];(e.query.dateFrom||e.query.dateTo)&&y.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=y};e.statusCountFor=y=>{let w=(e.statusCounts||[]).find(D=>D._id===y);return w?w.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=y=>{e.query.sort===y?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=y,e.query.direction="desc"),e.query.page=1},e.sortIcon=y=>e.query.sort===y?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",f={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},v=loadFilterPrefs(u)||{};e.query=Object.assign({},f,v,{page:1,search:""});let h=s.search();h.search&&(e.query.search=h.search);let k="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(k)||"[]"),e.savePreset=()=>{let y=window.prompt("Preset name:");if(!y)return;let w=Object.assign({},e.query);delete w.page,e.presets=(e.presets||[]).filter(D=>D.name!==y),e.presets.push({name:y,query:w}),localStorage.setItem(k,JSON.stringify(e.presets))},e.applyPreset=y=>{Object.assign(e.query,y.query,{page:1})},e.deletePreset=y=>{e.presets=(e.presets||[]).filter(w=>w.name!==y.name),localStorage.setItem(k,JSON.stringify(e.presets))},e.removeConference=y=>{confirm("Remove conference "+y.conferenceID+"?")&&t.delete("/api/admin/conferences/"+y.conferenceID).then(()=>m(),w=>console.error(w))},e.exportCsv=()=>{let y=new URLSearchParams(Object.entries(e.query).filter(([,w])=>w!==""&&w!==!1&&w!=null));y.set("format","csv"),y.set("limit","10000"),window.open("/api/admin/conferences?"+y.toString(),"_blank")},e.fetchError=null;function m(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(y=>{e.total=y.data.total,e.totalPage=Math.ceil(y.data.total/e.query.limit),e.conferences=y.data.results,e.statusCounts=y.data.statusCounts||[]},y=>{e.fetchError=y&&y.data&&y.data.error||"Failed to load conferences",console.error(y)})}m();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(m,500);let{page:y,search:w,...D}=e.query;saveFilterPrefs(u,D),a()},!0),a()},ll=function(e,t,s,r,n){let i=ct();e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(w=>e.stateFilter[w._state]),e.jobProgressPct=w=>w&&w.progress&&typeof w.progress=="object"&&typeof w.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(w.progress.percent))):typeof w.progress=="number"?Math.max(0,Math.min(100,Math.round(w.progress))):null,e.jobDuration=w=>{if(!w.processedOn)return"-";let R=(w.finishedOn||Date.now())-w.processedOn;return R<1e3?R+"ms":(R/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=w=>{e.selectedQueue=w,a(),u()},e.setRange=w=>{e.range=w,u()};function a(){let w={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:w}).then(D=>{e.queueList=D.data.queues||[],e.jobs=D.data.jobs||[],e.selectedStats=e.queueList.find(R=>R.key===e.selectedQueue)||e.queueList[0]||null},D=>console.error(D))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(w=>{e.metricsPoints=w.data.points||[],n(m,0)},w=>console.error(w))}a(),u();let f=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(f)),e.refreshNow=function(){a(),u()};function v(w){let D=w&&w.data&&(w.data.message||w.data.error)||"Request failed";e.actionError=D,n(()=>{e.actionError=null},5e3),console.error(w)}e.actionError=null,e.removeJob=w=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${w.id}`).then(a,v)},e.retryJob=w=>{t.post(`/api/admin/queue/${e.selectedQueue}/${w.id}`).then(a,v)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,w=>console.error(w))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,w=>console.error(w))},e.togglePause=()=>{let w=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${w}`).then(a,D=>console.error(D))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,w=>console.error(w))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,w=>console.error(w))};let h=null;e.watch("query.search",()=>{i.timeout.cancel(h),h=i.timeout(a,350)}),e.expanded={},e.toggleJob=w=>{e.expanded[w.id]=!e.expanded[w.id]},e.humanTime=w=>{if(!w)return"";let D=new Date(w);return D.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+D.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=w=>{if(!w)return"";var D=Math.max(0,Math.ceil((w-Date.now())/1e3));if(D<=0)return"resuming soon";var R=Math.floor(D/60),T=D%60;return"in "+(R>0?R+"m "+T+"s":T+"s")};function k(w){if(w<=0)return{ticks:[0],niceMax:1};let D=Math.pow(10,Math.floor(Math.log10(w))),R=D;w/R<2?R=D/2:w/R>5&&(R=D*2);let T=Math.ceil(w/R)*R,I=[];for(let H=0;H<=T;H+=R)I.push(H);return{ticks:I,niceMax:T}}function m(){var w=document.getElementById("q-throughput-chart");if(!w)return;var D=w.getContext("2d"),R=window.devicePixelRatio||1,T=w.parentElement.getBoundingClientRect(),I=44,H=50,q=20,U=T.width-40,ae=180,ie=U-I-H,_=ae-q;w.width=U*R,w.height=ae*R,w.style.width=U+"px",w.style.height=ae+"px",D.setTransform(R,0,0,R,0,0);var O=document.body.classList.contains("dark-mode"),Y="#8A857C",Z=O?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",te=O?"#A7B2FF":"#3B4AD6",J=O?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",se=O?"#F08A82":"#B42318",ue=O?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",pe=O?"#F5C842":"#B8860B",le=e.metricsPoints||[];if(le.length===0){D.fillStyle=Y,D.font="12px monospace",D.textAlign="center",D.fillText("No metrics data yet",U/2,ae/2),E=null;return}var Oe=le.map(function(L){return L.completed}),_e=le.map(function(L){return L.failed}),Ue=le.map(function(L){return L.avgMs}),Re=le.length,$e=ie/(Re-1||1),Pe=Math.max(1,Math.max.apply(null,Oe),Math.max.apply(null,_e)),He=k(Pe),Ee=Math.max.apply(null,Ue),F=Ee>0?k(Ee):{ticks:[0],niceMax:1},oe=function(L){return _-L/He.niceMax*(_-10)},Q=function(L){return _-L/F.niceMax*(_-10)},C=function(L){return I+L*$e};D.textAlign="right",D.textBaseline="middle",D.font="10px monospace",He.ticks.forEach(function(L){var G=oe(L);D.strokeStyle=Z,D.lineWidth=1,D.beginPath(),D.moveTo(I,G),D.lineTo(U-H,G),D.stroke(),D.fillStyle=Y,D.fillText(L>=1e3?(L/1e3).toFixed(1)+"k":String(L),I-6,G)}),Ee>0&&(D.textAlign="left",F.ticks.forEach(function(L){var G=Q(L);D.fillStyle=pe,D.fillText(L>=1e3?(L/1e3).toFixed(1)+"s":L+"ms",U-H+6,G)}));var P=Date.now(),B=Math.min(6,Re);D.textAlign="center",D.textBaseline="top";for(var M=0;M0&&(D.beginPath(),Ue.forEach(function(L,G){var ee=C(G),x=Q(L);if(G===0)D.moveTo(ee,x);else{var K=(C(G-1)+ee)/2;D.bezierCurveTo(K,Q(Ue[G-1]),K,x,ee,x)}}),D.strokeStyle=pe,D.lineWidth=1,D.setLineDash([4,3]),D.stroke(),D.setLineDash([])),E={pts:le,maxLen:Re,marginLeft:I,step:$e,totalW:U,toX:C}}var E=null;function y(){var w=document.getElementById("q-throughput-chart");if(!(!w||w._tipBound)){w._tipBound=!0;var D=document.getElementById("q-chart-tooltip"),R=document.getElementById("q-chart-crosshair");w.addEventListener("mousemove",function(T){if(!(!E||!D||!R)){var I=E,H=w.getBoundingClientRect(),q=T.clientX-H.left,U=Math.round((q-I.marginLeft)/I.step);if(U<0||U>=I.maxLen){D.style.display="none",R.style.display="none";return}var ae=I.pts[U],ie=Date.now(),_=Math.round((ie-ae.ts)/6e4),O;if(_<=0)O="now";else if(_<60)O=_+"m ago";else if(_<1440){var Y=Math.floor(_/60),Z=_%60;O=Y+"h"+(Z?" "+Z+"m":"")+" ago"}else O=Math.round(_/1440)+"d ago";var te='
'+O+'
● completed: '+ae.completed+'/min
● failed: '+ae.failed+"/min
";if(ae.avgMs>0){var J=ae.avgMs>=1e3?(ae.avgMs/1e3).toFixed(1)+"s":ae.avgMs+"ms";te+='
● avg time: '+J+"
"}D.innerHTML=te;var se=I.toX(U),ue=D.offsetWidth,pe=se+10;pe+ue>I.totalW&&(pe=se-ue-10),D.style.display="block",D.style.left=pe+"px",D.style.top="8px",R.style.display="block",R.style.left=se+"px"}}),w.addEventListener("mouseleave",function(){D&&(D.style.display="none"),R&&(R.style.display="none")})}}e.watch("metricsPoints",function(){n(y,50)})},dl=function(e,t,s,r){let n=ct();e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null&&s.url("/"),e.entries=[],e.visible=[],e.available=!0,e.cap=1e3,e.total=0,e.pageSize=250,e.expanded={},e.detailTab={},e.copyHint="",e.parsedFilterCount=0,e.stats={last24h:0,prev24h:0,delta:0,severity:{error:0,warn:0,info:0},unique:{error:0,warn:0,info:0},buckets:[],dropped:0},e.query={search:"",bucket:"",sort:"recent",group:"code",autoRefresh:!0},e.relTime=R=>{if(!R)return"";let T=new Date(R).getTime();if(isNaN(T))return R;let I=Math.max(0,Date.now()-T),H=Math.floor(I/1e3);if(H<5)return"just now";if(H<60)return`${H}s ago`;let q=Math.floor(H/60);if(q<60)return`${q}m ago`;let U=Math.floor(q/60);if(U<24)return`${U}h ago`;let ae=Math.floor(U/24);return ae<7?`${ae}d ago`:new Date(R).toLocaleDateString()},e.absTime=R=>{if(!R)return"";let T=new Date(R);return isNaN(T.getTime())?R:T.toLocaleString()},e.absTimeShort=R=>{if(!R)return"";let T=new Date(R);return isNaN(T.getTime())?R:T.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})};let i=/^[a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)+$/;function a(R,T){let I=R&&(R.httpStatus||R.status)||null;if(typeof I=="number"){if(I>=500)return"error";if(I===401||I===403||I===404)return"info";if(I>=400)return"warn"}return T==="error"?"error":T==="warn"?"warn":"info"}function u(R){let T=(R.raw||[]).find(U=>U&&typeof U=="object"&&!Array.isArray(U));if(T){T.message&&i.test(T.message)?(R.displayMessage=T.message,R.displayContext=R.message):T.code&&i.test(String(T.code))?(R.displayMessage=String(T.code),R.displayContext=R.message):T.name&&T.name!=="AnonymousError"&&T.name!=="Error"?(R.displayMessage=T.name,R.displayContext=T.message||R.message):R.displayMessage=R.message,R._status=T.httpStatus||T.status||null,R._url=T.url||null,R._method=T.method||null,R._repoId=T.repoId||T.detail||null,R._detail=T.detail&&T.detail!==R._repoId?T.detail:null;let U=typeof T.stack=="string"?T.stack:null;for(var I=[T.cause,T.err].filter(Boolean),H=0;!U&&H{_==null||_===""||I.push([ie,_])};H("name",T&&T.name),H("code",R.displayMessage||T&&T.message),R._bucket&&H("kind",R._bucket),H("httpStatus",T&&T.httpStatus),T&&T.status&&!T.httpStatus&&H("status",T.status),H("module",R.module);let q=T&&T.detail;if(typeof q=="string"){let ie=q.trim();if(ie[0]==="{"||ie[0]==="[")try{q=JSON.parse(q)}catch{}}if(H("detail",q),H("repoId",T&&T.repoId),H("filePath",T&&T.filePath),H("upstreamStatus",T&&T.upstreamStatus),H("upstreamBody",T&&T.upstreamBody),H("url",R._url),H("err",T&&T.err),H("cause",T&&!T.err&&T.cause),H("ts",R.ts),!I.length)return JSON.stringify(R,null,2);let U=I.reduce((ie,_)=>Math.max(ie,_[0].length),0),ae=["{"];return I.forEach(([ie,_],O)=>{let Z=` ${`"${ie}":`.padEnd(U+3," ")} `,te=Ope===0?ue:se+ue).join(` -`)}else typeof _=="number"||typeof _=="boolean"?J=String(_):J=JSON.stringify(_);ae.push(`${Z}${J}${te}`)}),ae.push("}"),ae.join(` -`)}function v(R){let T=[],I="",H=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,q=0,U;for(;U=H.exec(R);)I+=R.slice(q,U.index),q=H.lastIndex,T.push({key:U[1],op:U[2]||"=",val:U[3]});return I+=R.slice(q),{filters:T,free:I.trim().toLowerCase()}}function h(R,T){for(let I of T.filters){let H=(U,ae,ie)=>{let _=parseFloat(U),O=parseFloat(ae);return ie==="="?String(U)===String(ae):ie==="!="?String(U)!==String(ae):ie===">="?_>=O:ie==="<="?_<=O:ie===">"?_>O:ie==="<"?_T&&q._bucket!==T?!1:h(q,R)),H=e.query.group;if(H){let q=ie=>H==="module"?ie.module:ie.displayMessage||ie.message||"_",U=new Map;for(let ie of I){let _=q(ie);if(U.has(_)){let O=U.get(_);O.count++,O._related.push(ie),new Date(ie.ts)>new Date(O.ts)&&(O.ts=ie.ts,O._url=ie._url,O._status=ie._status),new Date(ie.ts)new Date(_.ts).getTime()>=ae).length;I=Array.from(U.values())}else I=I.map((q,U)=>(q._key="row:"+U+":"+q.ts,q._related=[q],q._firstSeen=q.ts,q._lastHourCount=0,q.count=1,q));e.query.sort==="count"?I.sort((q,U)=>U.count-q.count||new Date(U.ts)-new Date(q.ts)):I.sort((q,U)=>new Date(U.ts)-new Date(q.ts)),e.visible=I}function m(R){let T=R?e.entries.length:0,I=R?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:T,limit:I}}).then(H=>{let q=(H.data.entries||[]).map(u);e.entries=R?e.entries.concat(q):q,e.available=!!H.data.available,e.cap=H.data.max||e.cap,e.total=H.data.total||e.entries.length,k()},H=>console.error(H))}e.loadMore=()=>m(!0),e.canLoadMore=()=>e.entries.length{let T=R.data||{},I=T.prev24h?Math.round((T.last24h-T.prev24h)/T.prev24h*100):0;e.stats={last24h:T.last24h||0,prev24h:T.prev24h||0,delta:I,severity:T.severity||{error:0,warn:0,info:0},unique:T.unique||{error:0,warn:0,info:0},buckets:T.buckets||[],dropped:T.dropped||0}},R=>console.error(R))}function y(){m(),E()}e.barPx=(R,T)=>{let I=e.stats.buckets||[],H=0;for(let ie of I)H=Math.max(H,(ie.error||0)+(ie.warn||0)+(ie.info||0));if(!H)return 0;let q=(R.error||0)+(R.warn||0)+(R.info||0);if(!q)return 0;let U=Math.round(q/H*60),ae=R[T]||0;return Math.round(ae/q*U)},e.bucketTitle=R=>`${new Date(R.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${R.error||0} err \xB7 ${R.warn||0} warn \xB7 ${R.info||0} info`,e.toggle=R=>{e.expanded[R._key]=!e.expanded[R._key]},e.setBucket=R=>{e.query.bucket=R},e.refreshNow=y,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(y,R=>console.error(R))},e.exportCsv=()=>{let R=["ts","level","module","displayMessage","_status","_url","_repoId"],T=[R.join(",")];for(let U of e.visible)T.push(R.map(ae=>{let ie=U[ae]==null?"":String(U[ae]);return/[",\n]/.test(ie)?`"${ie.replace(/"/g,'""')}"`:ie}).join(","));let I=new Blob([T.join(` -`)],{type:"text/csv;charset=utf-8"}),H=URL.createObjectURL(I),q=document.createElement("a");q.href=H,q.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(q),q.click(),document.body.removeChild(q),URL.revokeObjectURL(H)};function w(R){e.copyHint=`${R} copied`,n.timeout(()=>{e.copyHint=""},1500)}e.copyJson=R=>{navigator.clipboard.writeText(R._detailJson).then(()=>w("JSON"))},e.copyCurl=R=>{if(!R._url)return;let I=`curl -X ${R._method||"GET"} '${window.location.origin}${R._url}'`;navigator.clipboard.writeText(I).then(()=>w("curl"))},y();let D=r(()=>{e.query.autoRefresh&&y()},15e3);e.on("dispose",()=>r.cancel(D)),e.watch("query.search",k),e.watch("query.bucket",k),e.watch("query.sort",k),e.watch("query.group",k)},ul=function(e,t,s,r){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&s.url("/")}),e.user==null){s.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.performanceError=null,e.formatMs=function(y){return y==null?"":y<1e3?y+" ms":+(y/1e3).toFixed(1)+" s"},e.latencyBound=function(y,w){return y.count?y[w]==null?"> 60 s":"\u2264 "+e.formatMs(y[w]):"No samples"},e.firstByteBound=function(y){return e.latencyBound({count:y.firstByteCount,p95UpperMs:y.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(y){return Math.max(0,Math.round((Date.now()-y.sampledAt)/1e3))},e.peakRss=function(y){return(e.performance.runtimeSeries||[]).filter(function(w){return w.instance===y.instance}).reduce(function(w,D){return Math.max(w,D.rss)},y.memory.rss)},e.performanceWarning=function(y){return e.sampleAge(y)>45||y.droppedBatches||y.droppedMetrics||y.sockets?.closeWait>0||y.eventLoop.p95Ms>100||y.memoryLimitBytes&&y.memory.rss>y.memoryLimitBytes*.8};var n=!1;e.loadPerformance=function(){var y=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==y&&(e.performance=null),!n&&(n=!0,t.get("/api/admin/performance",{params:{minutes:y}}).then(function(w){y===e.performanceMinutes&&(e.performance=w.data,e.performanceError=w.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){y===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){n=!1,y!==e.performanceMinutes&&e.loadPerformance()}))};function i(y){if(y==null)return"\u2014";for(var w=["B","KB","MB","GB","TB"],D=0,R=y;R>=1024&&D0?1:0)+" "+w[D]}e.humanBytes=i;function a(y){if(!y)return"\u2014";var w=Math.floor(y/86400),D=Math.floor(y%86400/3600),R=Math.floor(y%3600/60);return w>0?w+"d "+(D<10?"0":"")+D+"h":D>0?D+"h "+(R<10?"0":"")+R+"m":R+"m"}e.humanDuration=a;function u(y){return y==null?"\u2014":y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":String(y)}e.humanNum=u,e.queueTotal=function(y){return y?(y.waiting||0)+(y.active||0)+(y.delayed||0)+(y.failed||0):0},e.statusCount=function(y){if(!e.data||!e.data.repos)return 0;for(var w=e.data.repos.statusBreakdown||[],D=0;Dh[D])&&(h[D]=w[D]),(k[D]==null||w[D]ol(e,t.http)},{path:"/signin",template:"partials/signin.htm",title:"Sign in \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sl(e,t.http)},{path:"/",template:"partials/home.htm",title:"Anonymous GitHub \u2013 Share the code, not the author",preserveExplorer:!1,setup:(e,t)=>Ja(e,t.http,t.location,t.window,t.timeout)},{path:"/dashboard",template:"partials/dashboard.htm",title:"Your anonymizations \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Qa(e,t.http,t.location,t.promises,t.window,t.quotaService)},{path:"/pr-dashboard",redirect:"/dashboard"},{path:"/anonymize/:repoId?",template:"partials/anonymize.htm",title:"New anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sn(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/pull-request-anonymize/:pullRequestId?",template:"partials/anonymize.htm",title:"Anonymize a pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sn(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/gist-anonymize/:gistId?",template:"partials/anonymize.htm",title:"Anonymize a gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sn(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/status/:repoId",template:"partials/status.htm",title:"Repository status \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Xa(e,t.http,t.params)},{path:"/conferences",template:"partials/conferences.htm",title:"Your conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>el(e,t.http,t.location)},{path:"/conference/new",template:"partials/newConference.htm",title:"New conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>rr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId/edit",template:"partials/newConference.htm",title:"Edit conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>rr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId",template:"partials/conference.htm",title:"Conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>tl(e,t.http,t.location,t.params)},{path:"/faq",template:"partials/faq.htm",title:"FAQ \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Wa(e,t.http)},{path:"/profile",template:"partials/profile.htm",title:"Your settings \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Ka(e,t.http,t.translate,t.timeout,t.quotaService)},{path:"/claim",template:"partials/claim.htm",title:"Claim an anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Ya(e,t.http,t.location)},{path:"/pr/:pullRequestId/:path(.*)*",template:"partials/pullRequest.htm",title:"Anonymous pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Za(e,t.http,t.location,t.params,t.html)},{path:"/gist/:gistId/:path(.*)*",template:"partials/gist.htm",title:"Anonymous gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>xa(e,t.http,t.location,t.params,t.html)},{path:"/r/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>nr(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/repository/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>nr(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/admin/",template:"partials/admin/overview.htm",title:"Admin \xB7 Overview \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ul(e,t.http,t.location,t.interval)},{path:"/admin/repositories",template:"partials/admin/repositories.htm",title:"Admin \xB7 Repositories \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>nl(e,t.http,t.location)},{path:"/admin/users",template:"partials/admin/users.htm",title:"Admin \xB7 Users \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>rl(e,t.http,t.location)},{path:"/admin/users/:username",template:"partials/admin/user.htm",title:"Admin \xB7 User details \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>il(e,t.http,t.location,t.params)},{path:"/admin/conferences",template:"partials/admin/conferences.htm",title:"Admin \xB7 Conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>al(e,t.http,t.location)},{path:"/admin/queues",template:"partials/admin/queues.htm",title:"Admin \xB7 Queues \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ll(e,t.http,t.location,t.interval,t.timeout)},{path:"/admin/errors",template:"partials/admin/errors.htm",title:"Admin \xB7 Errors \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>dl(e,t.http,t.location,t.interval)},{path:"/404",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",preserveExplorer:!1,setup:()=>{}},{path:"/:pathMatch(.*)*",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",setup:()=>{}}];var mp={class:"container paper-page connections-page"},hp={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},vp={key:1,role:"status"},gp=["disabled"],yp={key:3},bp={class:"connections-grid"},wp={key:0},kp={class:"connection-title"},Ep={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Cp={class:"connection-actions"},_p={key:0,class:"btn btn-ink",target:"_self",href:"/github/app/install"},Sp={key:1,class:"connection-installations"},Np={key:0},Dp=["href"],Rp={class:"sr-only"},Tp=["disabled"],Ap={class:"connection-title"},Op={key:0,target:"_self",href:"/github/login",class:"btn btn-outline-ink"},Ip={key:1,class:"connection-revoke"},Pp={key:0},Vp=["disabled"],qp={class:"connection-resources"},Mp={class:"connection-title"},$p={class:"connection-count"},Lp={key:0,class:"connection-empty"},Up={class:"connection-resource-name"},Fp={key:0,class:"connection-resource-actions"},zp=["disabled","onClick"],Hp=["disabled","onClick"],Bp={key:1,class:"connection-help",role:"status"},jp=["disabled","onClick"];function pl(e,t){return l(),d("div",mp,[t[20]||(t[20]=ce('
My work / GitHub connections

GitHub connections

Manage how GitHub shares your code. Your anonymizations and URLs stay the same.

',2)),e.connectionError?(l(),d("p",hp,c(e.connectionError),1)):p("v-if",!0),!e.connections&&!e.connectionError?(l(),d("p",vp,"Loading your connections\u2026")):p("v-if",!0),!e.connections&&e.connectionError?(l(),d("button",{key:2,class:"btn btn-outline-ink",disabled:e.busy,onClick:t[0]||(t[0]=s=>e.loadConnections())},"Try again",8,gp)):p("v-if",!0),e.connections?(l(),d("div",yp,[o("div",bp,[e.connections.appEnabled?(l(),d("section",wp,[t[8]||(t[8]=o("div",{class:"connection-top"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",{class:"connection-badge"},"Recommended")],-1)),o("div",kp,[t[3]||(t[3]=o("h2",null,"GitHub App",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.appConnected&&!e.connections.appError}])},c(e.connections.appError?"Needs attention":e.connections.appConnected?"Connected":"Not connected"),3)]),t[9]||(t[9]=o("p",null,"Read-only access to gists and the repositories you choose.",-1)),e.connections.appError?(l(),d("p",Ep,c(e.connections.appError)+". Reconnect to restore access.",1)):p("v-if",!0),o("div",Cp,[e.connections.appConnected&&!e.connections.appError?(l(),d("a",_p,[...t[4]||(t[4]=[b("Manage repository access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):p("v-if",!0),o("a",{class:A(e.connections.appConnected&&!e.connections.appError?"connection-link":"btn btn-ink"),target:"_self",href:"/github/app/login"},c(e.connections.appConnected?"Reconnect account":"Connect GitHub account"),3)]),t[10]||(t[10]=o("p",{class:"connection-help"},"Choose repositories on GitHub. Organization access may need an administrator's approval.",-1)),e.connections.installations?.length?(l(),d("ul",Sp,[(l(!0),d(X,null,re(e.connections.installations,s=>(l(),d("li",{key:s.id},[o("div",null,[o("strong",null,c(s.account),1),s.suspended?(l(),d("span",Np," \xB7 Suspended")):p("v-if",!0)]),o("a",{target:"_self",href:"/github/app/install?installationId="+s.id},[t[5]||(t[5]=b("Manage access ",-1)),o("span",Rp,"for "+c(s.account),1),t[6]||(t[6]=b(" \u2192",-1))],8,Dp)]))),128))])):p("v-if",!0),o("button",{class:"connection-link",disabled:e.busy,onClick:t[1]||(t[1]=s=>e.loadConnections())},[...t[7]||(t[7]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Refresh access",-1)])],8,Tp)])):p("v-if",!0),o("section",null,[t[13]||(t[13]=o("div",{class:"connection-top"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),o("span",{class:"connection-badge connection-badge-muted"},"Legacy")],-1)),o("div",Ap,[t[11]||(t[11]=o("h2",null,"GitHub OAuth",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.oauthConnected}])},c(e.connections.oauthConnected?"Connected":"Not connected"),3)]),t[14]||(t[14]=o("p",null,"For existing OAuth anonymizations.",-1)),t[15]||(t[15]=o("p",{class:"connection-help"},"This connection uses GitHub's broader repository permissions. Existing work keeps using it until you switch below.",-1)),e.connections.oauthEnabled?(l(),d("a",Op,c(e.connections.oauthConnected?"Reconnect OAuth":"Connect legacy OAuth"),1)):p("v-if",!0),e.connections.oauthConnected?(l(),d("div",Ip,[e.connections.gistCount?(l(),d("p",Pp,c(e.connections.gistCount)+" gist(s) use your GitHub App connection when available.",1)):p("v-if",!0),t[12]||(t[12]=o("p",null,"Switch all dependent repositories before revoking access. Gists can use your GitHub App connection.",-1)),e.connections.appConnected?(l(),d("button",{key:1,class:"connection-link connection-danger",disabled:e.busy||e.connections.resources.some(s=>s.connection==="oauth"),onClick:t[2]||(t[2]=s=>e.disconnectOAuth())},"Revoke OAuth access",8,Vp)):p("v-if",!0)])):p("v-if",!0)])]),o("section",qp,[o("div",Mp,[t[16]||(t[16]=o("h2",null,"Repository connections",-1)),o("span",$p,c(e.connections.resources?.length||0)+" resources",1)]),t[18]||(t[18]=o("p",null,"Check access, then switch each resource to the GitHub App. After reinstalling the App, reconnect existing resources here to keep their anonymous URLs and published snapshots.",-1)),e.connections.resources?.length?p("v-if",!0):(l(),d("div",Lp,[...t[17]||(t[17]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("div",null,[o("h3",null,"No repository connections yet"),o("p",null,"Your repositories and pull requests will appear here once you anonymize them.")],-1),o("a",{class:"connection-link",href:"/anonymize"},"New anonymization \u2192",-1)])])),(l(!0),d(X,null,re(e.connections.resources,s=>(l(),d("div",{class:"connection-resource",key:s.type+s.id},[o("div",Up,[o("strong",null,c(s.name||s.id),1),o("small",null,c(s.type)+" \xB7 "+c(s.id),1)]),o("span",{class:A(["connection-badge",{"connection-badge-muted":s.connection==="oauth"}])},c(s.connection==="github-app"?"Read-only App":"Legacy OAuth"),3),!["archived","removed","preparing","queue","removing","expiring"].includes(s.status)&&(s.status!=="download"||s.type==="pull-request"&&(!s.statusDate||new Date(s.statusDate).getTime()<=Date.now()-3e5))&&e.connections.appEnabled&&e.connections.appConnected?(l(),d("div",Fp,[o("button",{class:"btn btn-outline-ink",disabled:e.busy,onClick:r=>e.changeConnection(s,"github-app",!0)},"Check read-only access",8,zp),s.eligible?(l(),d("button",{key:0,class:"btn btn-ink",disabled:e.busy,onClick:r=>e.changeConnection(s,"github-app",!1)},c(s.connection==="github-app"?"Reconnect read-only access":"Switch to read-only access"),9,Hp)):p("v-if",!0),s.eligible===!1?(l(),d("span",Bp,"Access unavailable. Allow this repository on GitHub, then check again.")):p("v-if",!0)])):p("v-if",!0),!["archived","removed","preparing","queue","removing","expiring"].includes(s.status)&&(s.status!=="download"||s.type==="pull-request"&&(!s.statusDate||new Date(s.statusDate).getTime()<=Date.now()-3e5))&&s.connection==="github-app"&&e.connections.oauthConnected?(l(),d("button",{key:1,class:"connection-link",disabled:e.busy,onClick:r=>e.changeConnection(s,"oauth",!1)},"Use OAuth",8,jp)):p("v-if",!0)]))),128)),t[19]||(t[19]=o("p",{class:"connection-footnote"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Removing access stops new fetches from GitHub. Published content keeps its current expiration and removal settings.")],-1))])])):p("v-if",!0)])}var Gp={class:"container paper-page auth-page"},Wp={class:"auth-layout"},Kp={class:"auth-options"},Yp={key:0},Jp={key:0,class:"btn btn-ink auth-continue",target:"_self",href:"/github/login?recover=1"},Qp={key:1},Xp={key:1},Zp={key:2,class:"auth-legacy"},xp={key:3,role:"status"};function fl(e,t){return l(),d("div",Gp,[t[5]||(t[5]=o("a",{class:"auth-back",href:"/"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-left"})]),b(" Anonymous GitHub")],-1)),o("div",Wp,[t[4]||(t[4]=ce('
Your research, ready for review

Your code.
Your identity,
protected.
Sign in to GitHub

Sign in to create and manage your anonymizations.

',1)),o("div",Kp,[e.accountRecovery?(l(),d("section",Yp,[t[0]||(t[0]=o("h2",null,"Verify your existing account",-1)),t[1]||(t[1]=o("p",null,"We found an existing account. Verify it with your previous GitHub connection to keep your anonymizations. Future sign-ins will use the GitHub App.",-1)),e.site_options?.GITHUB_OAUTH_ENABLED?(l(),d("a",Jp,"Verify with previous GitHub connection")):(l(),d("p",Qp,"Account verification is currently unavailable. Please try again later."))])):p("v-if",!0),e.site_options?.GITHUB_APP_ENABLED&&!e.accountRecovery?(l(),d("section",Xp,[...t[2]||(t[2]=[ce('
Read-only access

Continue with GitHub

Connect through the GitHub App with read-only repository access.

  • You choose which repositories to share
  • No permission to write to your code
Sign in with GitHub Your existing anonymizations and connections stay with your account.',6)])])):p("v-if",!0),!e.site_options?.GITHUB_APP_ENABLED&&e.site_options?.GITHUB_OAUTH_ENABLED&&!e.accountRecovery?(l(),d("section",Zp,[...t[3]||(t[3]=[o("div",{class:"connection-title"},[o("h2",null,"Continue with GitHub")],-1),o("p",null,"Sign in to access your account. GitHub OAuth includes write access to private repositories.",-1),o("a",{class:"connection-link",target:"_self",href:"/github/login"},[b("Sign in with GitHub "),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-right"})])],-1)])])):p("v-if",!0),e.site_options&&!e.site_options.GITHUB_APP_ENABLED&&!e.site_options.GITHUB_OAUTH_ENABLED?(l(),d("p",xp,"GitHub sign-in is currently unavailable. Please try again later.")):p("v-if",!0)])])])}var ef={class:"paper-empty"};function ml(e,t){return l(),d("div",ef,[...t[0]||(t[0]=[ce('
Error \xB7 404

This link
isn\u2019t here.

The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.

',1)])])}var tf={class:"container paper-page admin-page"},of={class:"admin-summary"},sf={class:"summary-total"},nf=["aria-pressed"],rf={class:"count"},af=["aria-pressed"],lf={class:"count"},df=["aria-pressed"],uf={class:"count"},cf=["aria-pressed"],pf={class:"count"},ff=["aria-pressed"],mf={class:"count"},hf={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},vf={class:"w-100 admin-filter-toolbar","aria-label":"Conferences","accept-charset":"UTF-8"},gf={class:"admin-filter-row"},yf={class:"search-wrap"},bf={type:"search",class:"form-control",placeholder:"Search conferences\u2026",autocomplete:"off"},wf={key:0,class:"admin-search-hint"},kf={class:"admin-filter-inline","aria-label":"Pagination"},Ef=["disabled"],Cf={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},_f=["disabled"],Sf={key:0,class:"admin-filter-row"},Nf={class:"admin-active-chips"},Df={class:"key"},Rf=["onClick"],Tf={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},Af={class:"paper-table-head",role:"row"},Of={role:"columnheader"},If={role:"columnheader"},Pf={role:"columnheader"},Vf={class:"paper-table-row",role:"row"},qf={class:"cell-anon",role:"cell"},Mf={class:"anon-text"},$f=["textContent","href"],Lf={class:"anon-sub"},Uf={class:"cell-status",role:"cell"},Ff=["textContent"],zf={class:"cell-views num",role:"cell"},Hf=["textContent","href"],Bf={class:"cell-expires",role:"cell"},jf={class:"cell-actions",role:"cell"},Gf={class:"dropdown"},Wf={class:"dropdown-menu dropdown-menu-right"},Kf=["href"],Yf=["href"],Jf=["href"],Qf=["onClick"],Xf={key:0,class:"paper-table-empty"},Zf={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},xf={style:{"font-size":"12px",color:"var(--ink-muted)"}},em={key:0,class:"pagination-compact"},tm=["disabled"],om=["max"],sm=["disabled"],nm={class:"admin-filter-inline"},rm={class:"form-control form-control-sm"};function hl(e,t){let s=be("field"),r=be("form");return l(),d("div",tf,[t[47]||(t[47]=ce('
Admin \xA0/\xA0 Conferences

Conferences

',3)),o("div",of,[o("span",sf,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=n=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[13]||(t[13]=b("Ready ",-1)),o("span",rf,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,nf),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=n=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[14]||(t[14]=b("Preparing ",-1)),o("span",lf,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,af),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=n=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[15]||(t[15]=b("Errored ",-1)),o("span",uf,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,df),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=n=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[16]||(t[16]=b("Expired ",-1)),o("span",pf,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,cf),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=n=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[17]||(t[17]=b("Removed ",-1)),o("span",mf,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,ff)]),e.fetchError?(l(),d("div",hf,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):p("v-if",!0),N((l(),d("form",vf,[o("div",gf,[o("div",yf,[N(o("input",bf,null,512),[[s,{state:e.viewState,set:n=>{e.query.search=n},value:e.query?.search,form:null,options:{}}]]),e.query?.search?p("v-if",!0):(l(),d("span",wf,"/"))]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[5]||(t[5]=n=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",kf,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=n=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,Ef),o("span",Cf,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=n=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,_f)])]),e.chips?.length?(l(),d("div",Sf,[o("div",Nf,[(l(!0),d(X,null,re(e.chips,(n,i)=>(l(),d("span",{class:"admin-active-chip",key:n?.key},[o("span",Df,c(n?.label),1),o("span",null,c(n?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(n.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,Rf)]))),128))])])):p("v-if",!0)])),[[r,e.viewState]]),o("div",Tf,[o("div",Af,[o("div",Of,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="name"}]),onClick:t[8]||(t[8]=n=>e.sortBy("name"))},[t[25]||(t[25]=b("Conference ",-1)),e.sortIcon("name")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("name")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[24]||(t[24]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",If,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[9]||(t[9]=n=>e.sortBy("status"))},[t[27]||(t[27]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",Pf,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="startDate"}]),onClick:t[10]||(t[10]=n=>e.sortBy("startDate"))},[t[29]||(t[29]=b("Window ",-1)),e.sortIcon("startDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("startDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,re(e.filteredConferences,(n,i)=>(l(),d("div",Vf,[o("div",qf,[t[33]||(t[33]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",Mf,[o("a",{class:"repo-name",textContent:c(n?.name),href:e.safeUrl("/conference/"+n?.conferenceID)},null,8,$f),o("div",Lf,[o("span",null,c(n?.conferenceID),1),t[32]||(t[32]=b("\xA0\xB7\xA0",-1)),o("span",null,c(e.fmt?.number(n?.price||0))+" \u20AC",1)])])]),o("div",Uf,[o("span",{class:A(["status-dot",{"status-removed":n?.status=="removed"||n?.status=="expired","status-ready":n?.status=="ready","status-error":n?.status=="error","status-preparing":n?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(n?.status))},null,8,Ff)]),o("div",zf,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show repositories in this conference",textContent:c(e.fmt?.number(n?.repositories?.length||0)),href:e.safeUrl("/admin/?conference="+n?.conferenceID)},null,8,Hf)]),o("div",Bf,[t[35]||(t[35]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" "+c(e.fmt?.date(n?.startDate))+" \u2013 "+c(e.fmt?.date(n?.endDate)),1)]),o("div",jf,[o("div",Gf,[t[41]||(t[41]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",Wf,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+n?.conferenceID+"/edit")},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,Kf),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+n?.conferenceID+"/")},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View",-1)])],8,Yf),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/?conference="+n?.conferenceID)},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),b(" View repositories",-1)])],8,Jf),t[40]||(t[40]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:me(a=>e.removeConference(n),["prevent"])},[...t[39]||(t[39]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,Qf),[[W,n?.status!="removed"]])])])])]))),256)),e.filteredConferences?.length==0?(l(),d("div",Xf,[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No conferences match the current filters.",-1)])])):p("v-if",!0)]),o("div",Zf,[o("span",xf,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",em,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=n=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous",-1)])],8,tm),N(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,om),[[s,{state:e.viewState,set:n=>{e.query.page=n},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=n=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[44]||(t[44]=[b("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,sm)])):p("v-if",!0),o("span",nm,[t[46]||(t[46]=o("label",null,"Per page",-1)),N((l(),d("select",rm,[...t[45]||(t[45]=[ce('',5)])])),[[s,{state:e.viewState,set:n=>{e.query.limit=n},value:e.query?.limit,form:null,options:{}}]])])])])}var im={class:"container paper-page admin-page errors-page"},am={class:"errors-header"},lm={class:"errors-actions"},dm={class:"kpi-grid"},um={class:"kpi-card"},cm={class:"kpi-value"},pm={key:0},fm={key:1},mm={class:"kpi-card kpi-error"},hm={class:"kpi-value"},vm={class:"kpi-sub"},gm={class:"kpi-card kpi-warn"},ym={class:"kpi-value"},bm={class:"kpi-sub"},wm={class:"kpi-card kpi-info"},km={class:"kpi-value"},Em={class:"kpi-sub"},Cm={class:"kpi-value"},_m={class:"kpi-sub"},Sm={key:0,class:"dropped-warn"},Nm={class:"volume-chart"},Dm={class:"volume-bars"},Rm=["title"],Tm={class:"errors-toolbar","aria-label":"Error filters"},Am={class:"seg-tabs"},Om={class:"search-wrap"},Im={type:"search",class:"form-control",placeholder:"code:repo_not_found module:route status:>=400",autocomplete:"off"},Pm={key:0,class:"filter-count"},Vm={class:"select-wrap"},qm={class:"form-control form-control-sm"},Mm={class:"select-wrap"},$m={class:"form-control form-control-sm"},Lm={class:"autoref"},Um={type:"checkbox"},Fm={key:0,class:"admin-empty"},zm={key:1,class:"errors-pager"},Hm={key:2,class:"errors-list"},Bm=["onClick"],jm={class:"col-when"},Gm={class:"when-rel"},Wm={class:"when-abs"},Km={class:"col-sev"},Ym={class:"sev-label"},Jm={class:"col-mod"},Qm={class:"pill pill-module"},Xm={class:"col-msg"},Zm={class:"msg-code"},xm={key:0,class:"msg-context"},eh={key:1,class:"msg-detail"},th={key:2,class:"msg-url"},oh={class:"col-count"},sh={key:0,class:"count-pill"},nh={key:1,class:"count-pill count-pill-muted"},rh={class:"col-status"},ih={key:0,class:"errors-row-detail"},ah={class:"detail-tabs"},lh=["onClick"],dh=["onClick"],uh=["onClick"],ch={class:"detail-body"},ph={class:"detail-main"},fh={key:0},mh={key:1,class:"stack-pre"},hh={key:2,class:"related-list"},vh={class:"when-abs"},gh={class:"msg-url"},yh={class:"detail-actions"},bh=["onClick"],wh=["onClick"],kh={key:0,class:"copy-hint"},Eh={class:"detail-aside"},Ch={class:"aside-block"},_h=["title"],Sh={class:"aside-block"},Nh=["title"],Dh={class:"aside-block"},Rh={class:"aside-value"},Th={key:0,class:"aside-sub"},Ah={key:0,class:"aside-block"},Oh=["href"],Ih={key:1,class:"aside-block"},Ph={class:"aside-value mono"};function vl(e,t){let s=be("field"),r=be("form");return l(),d("div",im,[t[32]||(t[32]=o("div",{class:"paper-crumbs"},[b("Admin \xA0/\xA0 "),o("span",{class:"here"},"Errors")],-1)),o("header",am,[t[10]||(t[10]=o("h1",{class:"paper-page-title"},"Errors",-1)),o("div",lm,[o("button",{class:"btn btn-sm",type:"button",onClick:t[0]||(t[0]=n=>e.exportCsv())},[...t[8]||(t[8]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export CSV",-1)])]),o("button",{class:"btn btn-sm btn-danger-soft",type:"button",onClick:t[1]||(t[1]=n=>e.clearAll())},[...t[9]||(t[9]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Clear all",-1)])])])]),t[33]||(t[33]=ce('',1)),o("section",dm,[o("div",um,[t[11]||(t[11]=o("div",{class:"kpi-label"},"Last 24h",-1)),o("div",cm,c(e.stats?.last24h),1),o("div",{class:A(["kpi-sub",{up:e.stats?.delta>0,down:e.stats?.delta<0}])},[e.stats?.prev24h?(l(),d("span",pm,c(e.stats?.delta>0?"+":"")+c(e.stats?.delta)+"% vs yesterday",1)):p("v-if",!0),e.stats?.prev24h?p("v-if",!0):(l(),d("span",fm,"no prior baseline"))],2)]),o("div",mm,[t[12]||(t[12]=o("div",{class:"kpi-label"},"Errors (5xx)",-1)),o("div",hm,c(e.stats?.severity?.error),1),o("div",vm,c(e.stats?.unique?.error)+" unique",1)]),o("div",gm,[t[13]||(t[13]=o("div",{class:"kpi-label"},"Warnings (4xx)",-1)),o("div",ym,c(e.stats?.severity?.warn),1),o("div",bm,c(e.stats?.unique?.warn)+" unique",1)]),o("div",wm,[t[14]||(t[14]=o("div",{class:"kpi-label"},"Info (auth, 404)",-1)),o("div",km,c(e.stats?.severity?.info),1),o("div",Em,c(e.stats?.unique?.info)+" unique",1)]),o("div",{class:A(["kpi-card",{"kpi-error":e.stats?.dropped>0}])},[t[15]||(t[15]=o("div",{class:"kpi-label"},"Captured",-1)),o("div",Cm,c(e.total),1),o("div",_m,[b(" cap "+c(e.cap)+" \xB7 "+c(e.available?"live":"redis off")+" ",1),e.stats?.dropped>0?(l(),d("span",Sm," \xB7 "+c(e.stats?.dropped)+" dropped",1)):p("v-if",!0)])],2)]),o("section",Nm,[t[16]||(t[16]=ce('
Volume \xB7 24h \xB7 1h bucketserror warn info
',1)),o("div",Dm,[(l(!0),d(X,null,re(e.stats?.buckets,(n,i)=>(l(),d("div",{class:"volume-bar",key:i,title:e.bucketTitle(n)},[o("span",{class:"seg seg-error",style:qe({height:e.barPx(n,"error")+"px"})},null,4),o("span",{class:"seg seg-warn",style:qe({height:e.barPx(n,"warn")+"px"})},null,4),o("span",{class:"seg seg-info",style:qe({height:e.barPx(n,"info")+"px"})},null,4)],8,Rm))),128))])]),N((l(),d("form",Tm,[o("div",Am,[o("button",{type:"button",class:A({active:e.query?.bucket===""}),onClick:t[2]||(t[2]=n=>e.setBucket(""))},"All",2),o("button",{type:"button",class:A({active:e.query?.bucket==="error"}),onClick:t[3]||(t[3]=n=>e.setBucket("error"))},"5xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="warn"}),onClick:t[4]||(t[4]=n=>e.setBucket("warn"))},"4xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="info"}),onClick:t[5]||(t[5]=n=>e.setBucket("info"))},"Info",2)]),o("div",Om,[t[17]||(t[17]=o("svg",{class:"ui-icon search-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-search"})],-1)),N(o("input",Im,null,512),[[s,{state:e.viewState,set:n=>{e.query.search=n},value:e.query?.search,form:null,options:{}}]]),e.parsedFilterCount?(l(),d("span",Pm,c(e.parsedFilterCount)+" filter"+c(e.parsedFilterCount>1?"s":""),1)):p("v-if",!0)]),o("div",Vm,[t[19]||(t[19]=o("label",null,"Sort",-1)),N((l(),d("select",qm,[...t[18]||(t[18]=[o("option",{value:"recent"},"Most recent",-1),o("option",{value:"count"},"Most frequent",-1)])])),[[s,{state:e.viewState,set:n=>{e.query.sort=n},value:e.query?.sort,form:null,options:{}}]])]),o("div",Mm,[t[21]||(t[21]=o("label",null,"Group",-1)),N((l(),d("select",$m,[...t[20]||(t[20]=[o("option",{value:""},"Off",-1),o("option",{value:"code"},"By code",-1),o("option",{value:"module"},"By module",-1)])])),[[s,{state:e.viewState,set:n=>{e.query.group=n},value:e.query?.group,form:null,options:{}}]])]),o("label",Lm,[N(o("input",Um,null,512),[[s,{state:e.viewState,set:n=>{e.query.autoRefresh=n},value:e.query?.autoRefresh,form:null,options:{}}]]),t[22]||(t[22]=b(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[6]||(t[6]=n=>e.refreshNow()),"aria-label":"Refresh"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])),[[r,e.viewState]]),e.visible?.length?p("v-if",!0):(l(),d("div",Fm,"No errors captured.")),e.canLoadMore()&&e.visible?.length?(l(),d("div",zm,[o("span",null,"Showing "+c(e.entries?.length)+" of "+c(e.total)+" captured",1),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=n=>e.loadMore())},"Load older")])):p("v-if",!0),e.visible?.length?(l(),d("div",Hm,[t[31]||(t[31]=ce('
WhenSeverityModuleMessageCountStatus
',1)),(l(!0),d(X,null,re(e.visible,(n,i)=>(l(),d("div",{class:A(["errors-row",{open:e.expanded[n?._key]}]),key:n?._key},[o("div",{class:"errors-row-main",onClick:a=>e.toggle(n)},[o("div",jm,[o("div",Gm,c(e.relTime(n?.ts)),1),o("div",Wm,c(e.absTimeShort(n?.ts)),1)]),o("div",Km,[o("span",{class:A(["sev-dot","sev-"+n?._bucket])},null,2),o("span",Ym,c(e.fmt?.title(n?._bucket)),1)]),o("div",Jm,[o("span",Qm,c(n?.module),1)]),o("div",Xm,[o("strong",Zm,c(n?.displayMessage),1),n?.displayContext&&n?.displayContext!==n?.displayMessage?(l(),d("span",xm,c(n?.displayContext),1)):p("v-if",!0),n?._detail?(l(),d("span",eh,c(n?._detail),1)):p("v-if",!0),n?._url?(l(),d("div",th,c(n?._url),1)):p("v-if",!0)]),o("div",oh,[n?.count>1?(l(),d("span",sh,"\xD7"+c(n?.count),1)):p("v-if",!0),n?.count===1?(l(),d("span",nh,"\xD71")):p("v-if",!0)]),o("div",rh,[n?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+n?._bucket])},c(n?._status),3)):p("v-if",!0)])],8,Bm),e.expanded[n?._key]?(l(),d("div",ih,[o("div",ah,[o("button",{type:"button",class:A({active:e.detailTab[n?._key]==="raw"||!e.detailTab[n?._key]}),onClick:a=>e.detailTab[n._key]="raw"},"Raw",10,lh),n?._stack?(l(),d("button",{key:0,type:"button",class:A({active:e.detailTab[n?._key]==="stack"}),onClick:a=>e.detailTab[n._key]="stack"},"Stack",10,dh)):p("v-if",!0),n?.count>1?(l(),d("button",{key:1,type:"button",class:A({active:e.detailTab[n?._key]==="related"}),onClick:a=>e.detailTab[n._key]="related"},"Related ("+c(n?.count)+")",11,uh)):p("v-if",!0)]),o("div",ch,[o("div",ph,[(e.detailTab[n?._key]||"raw")==="raw"?(l(),d("pre",fh,c(n?._detailJson),1)):p("v-if",!0),e.detailTab[n?._key]==="stack"?(l(),d("pre",mh,c(n?._stack),1)):p("v-if",!0),e.detailTab[n?._key]==="related"?(l(),d("div",hh,[(l(!0),d(X,null,re(n?._related,(a,u)=>(l(),d("div",{class:"related-row",key:u},[o("span",vh,c(e.absTimeShort(a?.ts)),1),o("span",gh,c(a?._url),1),a?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+a?._bucket])},c(a?._status),3)):p("v-if",!0)]))),128))])):p("v-if",!0),o("div",yh,[o("button",{class:"btn btn-sm",type:"button",title:"Copy a curl that reproduces the request",onClick:a=>e.copyCurl(n)},[...t[24]||(t[24]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Copy curl",-1)])],8,bh),o("button",{class:"btn btn-sm",type:"button",onClick:a=>e.copyJson(n)},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-clipboard"})],-1),b(" Copy JSON",-1)])],8,wh),e.copyHint?(l(),d("span",kh,c(e.copyHint),1)):p("v-if",!0)])]),o("aside",Eh,[o("div",Ch,[t[26]||(t[26]=o("div",{class:"aside-label"},"First seen",-1)),o("div",{class:"aside-value",title:e.absTime(n?._firstSeen)},c(e.relTime(n?._firstSeen)),9,_h)]),o("div",Sh,[t[27]||(t[27]=o("div",{class:"aside-label"},"Last seen",-1)),o("div",{class:"aside-value",title:e.absTime(n?.ts)},c(e.relTime(n?.ts)),9,Nh)]),o("div",Dh,[t[28]||(t[28]=o("div",{class:"aside-label"},"Occurrences",-1)),o("div",Rh,[b(c(n?.count),1),n?._lastHourCount?(l(),d("span",Th," \xB7 "+c(n?._lastHourCount)+" this hour",1)):p("v-if",!0)])]),n?._repoId?(l(),d("div",Ah,[t[29]||(t[29]=o("div",{class:"aside-label"},"Repository",-1)),o("a",{class:"aside-value",href:e.safeUrl("/r/"+n?._repoId)},c(n?._repoId),9,Oh)])):p("v-if",!0),n?._url?(l(),d("div",Ih,[t[30]||(t[30]=o("div",{class:"aside-label"},"URL",-1)),o("div",Ph,c(n?._url),1)])):p("v-if",!0)])])])):p("v-if",!0)],2))),128))])):p("v-if",!0)])}var Vh={class:"container paper-page admin-page overview-page"},qh={key:0,class:"admin-empty"},Mh={key:1,class:"alert alert-danger",style:{margin:"12px 0"}},$h={key:2},Lh={class:"ov-kpi-row"},Uh={class:"ov-kpi-card"},Fh={class:"ov-kpi-value"},zh={class:"ov-kpi-sub"},Hh={class:"ov-kpi-card"},Bh={class:"ov-kpi-sub"},jh={class:"ov-kpi-card"},Gh={class:"ov-kpi-sub"},Wh={class:"ov-kpi-card"},Kh={class:"ov-kpi-sub"},Yh={class:"ov-kpi-card"},Jh={class:"ov-kpi-value"},Qh={class:"ov-kpi-sub"},Xh={class:"ov-daily-row"},Zh={class:"ov-daily-card"},xh={class:"ov-daily-value"},ev={class:"ov-daily-card"},tv={class:"ov-daily-value"},ov={class:"ov-daily-sub"},sv={class:"ov-daily-card"},nv={class:"ov-daily-value"},rv={class:"ov-chart-row"},iv={class:"ov-chart-card"},av={key:0,class:"ov-spark-bars"},lv=["data-tip","aria-label"],dv={key:1,class:"ov-spark-x"},uv={class:"ov-chart-card"},cv={key:0,class:"ov-spark-bars"},pv=["data-tip","aria-label"],fv={key:1,class:"ov-spark-x"},mv={class:"ov-chart-card"},hv={class:"ov-chart-head"},vv={class:"ov-chart-legend"},gv={key:0,class:"ov-spark-bars"},yv=["data-tip","aria-label"],bv={key:1,class:"ov-spark-x"},wv={class:"ov-chart-card"},kv={key:0,class:"ov-spark-bars"},Ev=["data-tip","aria-label"],Cv={key:1,class:"ov-spark-x"},_v={class:"ov-triple-row"},Sv={class:"ov-panel-card"},Nv={class:"ov-panel-head"},Dv={class:"ov-panel-meta"},Rv={class:"ov-stacked-bar"},Tv={class:"ov-bar-legend"},Av={href:"/admin/repositories",class:"ov-legend-item"},Ov={class:"ov-legend-n"},Iv={href:"/admin/repositories",class:"ov-legend-item"},Pv={class:"ov-legend-n"},Vv={href:"/admin/repositories",class:"ov-legend-item"},qv={class:"ov-legend-n"},Mv={href:"/admin/repositories",class:"ov-legend-item"},$v={class:"ov-legend-n"},Lv={href:"/admin/repositories",class:"ov-legend-item"},Uv={class:"ov-legend-n"},Fv={class:"ov-panel-card"},zv={class:"ov-panel-head"},Hv={class:"ov-panel-meta"},Bv={class:"ov-error-bars"},jv={class:"ov-ebar-row"},Gv={class:"ov-ebar-track"},Wv={class:"ov-ebar-n"},Kv={class:"ov-ebar-row"},Yv={class:"ov-ebar-track"},Jv={class:"ov-ebar-n"},Qv={class:"ov-ebar-row"},Xv={class:"ov-ebar-track"},Zv={class:"ov-ebar-n"},xv={key:0,class:"ov-panel-foot"},eg={href:"/admin/errors"},tg={class:"ov-panel-card"},og={class:"ov-routes-table"},sg={class:"ov-route-row",href:"/admin/queues"},ng={class:"ov-route-n"},rg={class:"ov-route-n"},ig={class:"ov-route-row",href:"/admin/queues"},ag={class:"ov-route-n"},lg={class:"ov-route-n"},dg={class:"ov-route-row",href:"/admin/queues"},ug={class:"ov-route-n"},cg={class:"ov-route-n"},pg={class:"ov-services-card"},fg={class:"ov-services-head"},mg={class:"ov-panel-meta"},hg={class:"ov-services-grid"},vg={class:"ov-svc"},gg={class:"ov-svc-info"},yg={class:"ov-svc-meta"},bg={class:"ov-svc-detail"},wg={class:"ov-svc"},kg={class:"ov-svc-info"},Eg={key:0,class:"ov-svc-meta"},Cg={key:1,class:"ov-svc-meta"},_g={class:"ov-svc"},Sg={class:"ov-svc-info"},Ng={key:0,class:"ov-svc-meta"},Dg={key:1,class:"ov-svc-meta"},Rg={class:"ov-svc"},Tg={class:"ov-svc-info"},Ag={key:0,class:"ov-svc-meta"},Og={key:1,class:"ov-svc-meta"},Ig={class:"ov-svc"},Pg={class:"ov-svc-info"},Vg={class:"ov-svc-meta"},qg={class:"ov-panel-card ov-performance","aria-labelledby":"performance-heading"},Mg={class:"ov-panel-head ov-performance-head"},$g={class:"ov-performance-window"},Lg={key:0,class:"ov-performance-message ov-performance-warning",role:"alert"},Ug={key:1,class:"ov-performance-empty",role:"status"},Fg={key:2},zg={class:"paper-tabs ov-performance-tabs",role:"tablist","aria-label":"Performance metrics"},Hg=["aria-selected","tabindex"],Bg=["aria-selected","tabindex"],jg=["aria-selected","tabindex"],Gg={id:"performance-routes",role:"tabpanel","aria-labelledby":"performance-routes-tab"},Wg={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Route latency metrics, scroll for more columns"},Kg={class:"ov-metrics-table"},Yg={scope:"row",class:"ov-metric-name"},Jg={class:"num"},Qg={class:"num"},Xg={class:"num"},Zg={class:"num"},xg={class:"num"},ey={key:1,class:"ov-performance-empty"},ty={id:"performance-processes",role:"tabpanel","aria-labelledby":"performance-processes-tab"},oy={key:0,class:"ov-performance-message ov-performance-warning",role:"status"},sy={key:1,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Process resource metrics, scroll for more columns"},ny={class:"ov-metrics-table"},ry={scope:"row",class:"ov-metric-name"},iy={key:0,class:"ov-metric-warn"},ay={class:"num"},ly={class:"num"},dy={class:"num"},uy={class:"num"},cy={class:"num"},py={class:"num"},fy={class:"num"},my={class:"num"},hy={id:"performance-stages",role:"tabpanel","aria-labelledby":"performance-stages-tab"},vy={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Work stage metrics, scroll for more columns"},gy={class:"ov-metrics-table"},yy={scope:"row",class:"ov-metric-name"},by={class:"num"},wy={class:"num"},ky={class:"num"},Ey={key:1,class:"ov-performance-empty"};function gl(e,t){return l(),d("div",Vh,[t[65]||(t[65]=ce('
Admin \xA0/\xA0 Overview

Overview

',3)),e.loading?(l(),d("div",qh,"Loading overview\u2026")):p("v-if",!0),e.error?(l(),d("div",Mh,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.error),1)])):p("v-if",!0),e.data?(l(),d("div",$h,[p(" \u2500\u2500 Top KPI row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Lh,[o("div",Uh,[t[10]||(t[10]=o("div",{class:"ov-kpi-label"},[b("Repositories "),o("span",{class:"ov-dot ov-dot-ok"})],-1)),o("div",Fh,c(e.humanNum(e.data?.repos?.total)),1),o("div",zh,"+"+c(e.data?.repos?.newRepos24h)+" \xB7 last 24h",1)]),o("div",Hh,[t[11]||(t[11]=o("div",{class:"ov-kpi-label"},"CPU",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.cpuPercent>80}])},c(e.data?.system?.cpuPercent)+"%",3),o("div",Bh,c(e.data?.system?.cpuCount)+" cores \xB7 load "+c(e.data?.system?.loadAvg?.[0]?.toFixed(1)),1)]),o("div",jh,[t[12]||(t[12]=o("div",{class:"ov-kpi-label"},"Memory",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.memPercent>85}])},c(e.data?.system?.memPercent)+"%",3),o("div",Gh,c(e.humanBytes(e.data?.system?.memUsed))+" / "+c(e.humanBytes(e.data?.system?.memTotal)),1)]),o("div",Wh,[t[13]||(t[13]=o("div",{class:"ov-kpi-label"},"Disk",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.diskPercent>85}])},c(e.data?.system?.diskPercent)+"%",3),o("div",Kh,c(e.humanBytes(e.data?.system?.diskUsed))+" / "+c(e.humanBytes(e.data?.system?.diskTotal))+" \xB7 "+c(e.data?.system?.diskMount),1)]),o("div",Yh,[t[14]||(t[14]=o("div",{class:"ov-kpi-label"},"Uptime",-1)),o("div",Jh,c(e.humanDuration(e.data?.system?.uptime)),1),o("div",Qh,c(e.data?.system?.nodeVersion)+" \xB7 "+c(e.data?.system?.platform),1)])]),p(" \u2500\u2500 Daily activity highlights \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Xh,[o("div",Zh,[t[15]||(t[15]=o("div",{class:"ov-daily-label"},"New repos today",-1)),o("div",xh,"+"+c(e.fmt?.number(e.data?.daily?.today?.repositories)),1),t[16]||(t[16]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))]),o("div",ev,[t[17]||(t[17]=o("div",{class:"ov-daily-label"},"New users today",-1)),o("div",tv,"+"+c(e.fmt?.number(e.data?.daily?.today?.users)),1),o("div",ov,c(e.fmt?.number(e.data?.users?.total))+" total users",1)]),o("div",sv,[t[18]||(t[18]=o("div",{class:"ov-daily-label"},"Page views today",-1)),o("div",nv,"+"+c(e.fmt?.number(e.data?.daily?.today?.pageViews)),1),t[19]||(t[19]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))])]),p(" \u2500\u2500 Daily charts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",rv,[o("div",iv,[t[20]||(t[20]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"Daily page views \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-accent"}),b("views/day")])],-1)),e.data?.history?.length?(l(),d("div",av,[(l(!0),d(X,null,re(e.data?.history,(s,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(s)+": +"+e.fmt?.number(s?.dailyPageViews)+" views","aria-label":e.historyLabel(s)+": +"+e.fmt?.number(s?.dailyPageViews)+" views"},[o("span",{class:"ov-spark-fill",style:qe({height:e.historyBarH(s,"dailyPageViews")+"px"})},null,4)],8,lv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",dv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)]),o("div",uv,[t[21]||(t[21]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New repos \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-ok-fill"}),b("repos/day")])],-1)),e.data?.history?.length?(l(),d("div",cv,[(l(!0),d(X,null,re(e.data?.history,(s,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(s)+": +"+e.fmt?.number(s?.dailyRepositories)+" repos","aria-label":e.historyLabel(s)+": +"+e.fmt?.number(s?.dailyRepositories)+" repos"},[o("span",{class:"ov-spark-fill ov-spark-fill-alt",style:qe({height:e.historyBarH(s,"dailyRepositories")+"px"})},null,4)],8,pv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",fv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)]),o("div",mv,[o("div",hv,[t[23]||(t[23]=o("span",{class:"ov-chart-title"},"Users \xB7 30d",-1)),o("span",vv,[t[22]||(t[22]=o("span",{class:"ov-dot-legend ov-dot-user-fill"},null,-1)),b("total users \xB7 "+c(e.fmt?.number(e.historyRange("nbUsers").min))+"\u2013"+c(e.fmt?.number(e.historyRange("nbUsers").max)),1)])]),e.data?.history?.length?(l(),d("div",gv,[(l(!0),d(X,null,re(e.data?.history,(s,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(s)+": "+e.fmt?.number(s?.nbUsers)+" users","aria-label":e.historyLabel(s)+": "+e.fmt?.number(s?.nbUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-user",style:qe({height:e.historyRangeH(s,"nbUsers")+"px"})},null,4)],8,yv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",bv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)]),o("div",wv,[t[24]||(t[24]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New users \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-new-user-fill"}),b("users/day")])],-1)),e.data?.history?.length?(l(),d("div",kv,[(l(!0),d(X,null,re(e.data?.history,(s,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(s)+": +"+e.fmt?.number(s?.dailyUsers)+" users","aria-label":e.historyLabel(s)+": +"+e.fmt?.number(s?.dailyUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-new-user",style:qe({height:e.historyBarH(s,"dailyUsers")+"px"})},null,4)],8,Ev))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",Cv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)])]),p(" \u2500\u2500 Three-panel row: Status / Errors / Queues \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",_v,[p(" Repo status breakdown "),o("div",Sv,[o("div",Nv,[t[25]||(t[25]=o("span",{class:"ov-panel-title"},"Repo status",-1)),o("span",Dv,c(e.fmt?.number(e.data?.repos?.total))+" total",1)]),o("div",Rv,[o("span",{class:"ov-bar-seg ov-bar-ready",title:"Ready",style:qe({width:e.barPct("ready")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-preparing",title:"Preparing",style:qe({width:e.barPct("preparing")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-error",title:"Error",style:qe({width:e.barPct("error")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-expired",title:"Expired",style:qe({width:e.barPct("expired")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-removed",title:"Removed",style:qe({width:e.barPct("removed")+"%"})},null,4)]),o("div",Tv,[o("a",Av,[t[26]||(t[26]=o("span",{class:"ov-swatch ov-bar-ready"},null,-1)),t[27]||(t[27]=b(" ready ",-1)),o("span",Ov,c(e.fmt?.number(e.statusCount("ready"))),1)]),o("a",Iv,[t[28]||(t[28]=o("span",{class:"ov-swatch ov-bar-preparing"},null,-1)),t[29]||(t[29]=b(" preparing ",-1)),o("span",Pv,c(e.fmt?.number(e.statusCount("preparing")+e.statusCount("download"))),1)]),o("a",Vv,[t[30]||(t[30]=o("span",{class:"ov-swatch ov-bar-error"},null,-1)),t[31]||(t[31]=b(" error ",-1)),o("span",qv,c(e.fmt?.number(e.statusCount("error"))),1)]),o("a",Mv,[t[32]||(t[32]=o("span",{class:"ov-swatch ov-bar-expired"},null,-1)),t[33]||(t[33]=b(" expired ",-1)),o("span",$v,c(e.fmt?.number(e.statusCount("expired")+e.statusCount("expiring"))),1)]),o("a",Lv,[t[34]||(t[34]=o("span",{class:"ov-swatch ov-bar-removed"},null,-1)),t[35]||(t[35]=b(" removed ",-1)),o("span",Uv,c(e.fmt?.number(e.statusCount("removed")+e.statusCount("removing"))),1)])])]),p(" Error breakdown "),o("div",Fv,[o("div",zv,[t[36]||(t[36]=o("span",{class:"ov-panel-title"},"Errors \xB7 24h",-1)),o("span",Hv,c(e.data?.errors?.last24h)+" total",1)]),o("div",Bv,[o("div",jv,[t[37]||(t[37]=o("span",{class:"ov-ebar-label"},"5xx",-1)),o("span",Gv,[o("span",{class:"ov-ebar-fill ov-ebar-error",style:qe({width:e.errPct("error")+"%"})},null,4)]),o("span",Wv,c(e.data?.errors?.severity?.error),1)]),o("div",Kv,[t[38]||(t[38]=o("span",{class:"ov-ebar-label"},"4xx",-1)),o("span",Yv,[o("span",{class:"ov-ebar-fill ov-ebar-warn",style:qe({width:e.errPct("warn")+"%"})},null,4)]),o("span",Jv,c(e.data?.errors?.severity?.warn),1)]),o("div",Qv,[t[39]||(t[39]=o("span",{class:"ov-ebar-label"},"Info",-1)),o("span",Xv,[o("span",{class:"ov-ebar-fill ov-ebar-info",style:qe({width:e.errPct("info")+"%"})},null,4)]),o("span",Zv,c(e.data?.errors?.severity?.info),1)])]),e.data?.repos?.recentErrors24h?(l(),d("div",xv,[o("a",eg,c(e.data?.repos?.recentErrors24h)+" repos in error state \u2192",1)])):p("v-if",!0)]),p(" Top routes / queues "),o("div",tg,[t[44]||(t[44]=o("div",{class:"ov-panel-head"},[o("span",{class:"ov-panel-title"},"Queues"),o("span",{class:"ov-panel-meta"},"by state")],-1)),o("div",og,[t[43]||(t[43]=ce('
QueueActiveWaitFailed
',1)),o("a",sg,[t[40]||(t[40]=o("span",{class:"ov-route-name"},"download",-1)),o("span",ng,c(e.data?.queues?.download?.active),1),o("span",rg,c(e.data?.queues?.download?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.download?.failed>0}])},c(e.data?.queues?.download?.failed),3)]),o("a",ig,[t[41]||(t[41]=o("span",{class:"ov-route-name"},"remove",-1)),o("span",ag,c(e.data?.queues?.remove?.active),1),o("span",lg,c(e.data?.queues?.remove?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.remove?.failed>0}])},c(e.data?.queues?.remove?.failed),3)]),o("a",dg,[t[42]||(t[42]=o("span",{class:"ov-route-name"},"cache",-1)),o("span",ug,c(e.data?.queues?.cache?.active),1),o("span",cg,c(e.data?.queues?.cache?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.cache?.failed>0}])},c(e.data?.queues?.cache?.failed),3)])])])]),p(" \u2500\u2500 Services bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",pg,[o("div",fg,[t[45]||(t[45]=o("span",{class:"ov-panel-title"},"Services",-1)),o("span",mg,c(e.fmt?.number(e.data?.users?.total))+" users \xB7 "+c(e.data?.conferences?.total)+" conferences",1)]),o("div",hg,[o("div",vg,[t[47]||(t[47]=o("span",{class:"ov-svc-dot ov-dot-ok"},null,-1)),o("div",gg,[t[46]||(t[46]=o("span",{class:"ov-svc-name"},"web",-1)),o("span",yg,c(e.data?.system?.nodeVersion),1)]),o("span",bg,"uptime "+c(e.humanDuration(e.data?.system?.uptime)),1)]),o("div",wg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.download)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",kg,[t[48]||(t[48]=o("span",{class:"ov-svc-name"},"download",-1)),e.queueTotal(e.data?.queues?.download)?(l(),d("span",Eg,c(e.queueTotal(e.data?.queues?.download))+" jobs",1)):p("v-if",!0),e.queueTotal(e.data?.queues?.download)?p("v-if",!0):(l(),d("span",Cg,"idle"))])]),o("div",_g,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.cache)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",Sg,[t[49]||(t[49]=o("span",{class:"ov-svc-name"},"cache",-1)),e.queueTotal(e.data?.queues?.cache)?(l(),d("span",Ng,c(e.queueTotal(e.data?.queues?.cache))+" jobs",1)):p("v-if",!0),e.queueTotal(e.data?.queues?.cache)?p("v-if",!0):(l(),d("span",Dg,"idle"))])]),o("div",Rg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.remove)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",Tg,[t[50]||(t[50]=o("span",{class:"ov-svc-name"},"remove",-1)),e.queueTotal(e.data?.queues?.remove)?(l(),d("span",Ag,c(e.queueTotal(e.data?.queues?.remove))+" jobs",1)):p("v-if",!0),e.queueTotal(e.data?.queues?.remove)?p("v-if",!0):(l(),d("span",Og,"idle"))])]),o("div",Ig,[o("span",{class:A(["ov-svc-dot",e.data?.repos?.recentErrors24h>10?"ov-dot-warn":"ov-dot-ok"])},null,2),o("div",Pg,[t[51]||(t[51]=o("span",{class:"ov-svc-name"},"errors",-1)),o("span",Vg,c(e.data?.errors?.last24h)+" / 24h",1)])])])])])):p("v-if",!0),o("section",qg,[o("div",Mg,[t[54]||(t[54]=o("div",null,[o("h2",{class:"ov-panel-title",id:"performance-heading"},"Request performance"),o("p",{class:"ov-performance-note"},"Request latency and process health \xB7 refreshes every 30 seconds")],-1)),o("div",$g,[t[53]||(t[53]=o("label",{for:"performance-window"},"Time range",-1)),N(o("select",{id:"performance-window",class:"form-control form-control-sm","onUpdate:modelValue":t[0]||(t[0]=s=>e.performanceMinutes=s),onChange:t[1]||(t[1]=s=>e.loadPerformance()),"aria-label":"Performance time range"},[...t[52]||(t[52]=[o("option",{value:15},"Last 15 minutes",-1),o("option",{value:60},"Last hour",-1)])],544),[[ta,e.performanceMinutes,void 0,{number:!0}]])])]),e.performanceError?(l(),d("div",Lg,[t[55]||(t[55]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),o("span",null,c(e.performanceError),1),o("button",{type:"button",class:"btn btn-sm",onClick:t[2]||(t[2]=s=>e.loadPerformance())},"Retry")])):p("v-if",!0),!e.performance&&!e.performanceError?(l(),d("p",Ug,"Loading performance monitoring\u2026")):p("v-if",!0),e.performance?.available?(l(),d("div",Fg,[o("div",zg,[o("button",{id:"performance-routes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="routes"}]),role:"tab","aria-selected":e.performanceTab==="routes",tabindex:e.performanceTab==="routes"?0:-1,"aria-controls":"performance-routes",onClick:t[3]||(t[3]=s=>e.performanceTab="routes"),onKeydown:t[4]||(t[4]=s=>e.previewTabKeydown(s))},"Routes",42,Hg),o("button",{id:"performance-processes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="processes"}]),role:"tab","aria-selected":e.performanceTab==="processes",tabindex:e.performanceTab==="processes"?0:-1,"aria-controls":"performance-processes",onClick:t[5]||(t[5]=s=>e.performanceTab="processes"),onKeydown:t[6]||(t[6]=s=>e.previewTabKeydown(s))},"Processes",42,Bg),o("button",{id:"performance-stages-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="stages"}]),role:"tab","aria-selected":e.performanceTab==="stages",tabindex:e.performanceTab==="stages"?0:-1,"aria-controls":"performance-stages",onClick:t[7]||(t[7]=s=>e.performanceTab="stages"),onKeydown:t[8]||(t[8]=s=>e.previewTabKeydown(s))},"Work stages",42,jg)]),N(o("div",Gg,[e.performance.routes?.length?(l(),d("div",Wg,[o("table",Kg,[t[56]||(t[56]=o("caption",{class:"sr-only"},"Route latency for the selected time range",-1)),t[57]||(t[57]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Route"),o("th",{scope:"col",class:"num"},"Requests"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"First byte p95"),o("th",{scope:"col",class:"num"},"p95"),o("th",{scope:"col",class:"num"},"p99"),o("th",{scope:"col",class:"num"},"Interrupted"),o("th",{scope:"col",class:"num"},"5xx"),o("th",{scope:"col",class:"num"},"Slow")])],-1)),o("tbody",null,[(l(!0),d(X,null,re(e.performance.routes,s=>(l(),d("tr",{key:s.service+s.method+s.route},[o("th",Yg,[o("span",null,c(s.route),1),o("small",null,c(s.service)+" \xB7 "+c(s.method),1)]),o("td",Jg,c(e.fmt.number(s.count)),1),o("td",Qg,c(e.formatMs(s.avgMs)),1),o("td",Xg,c(e.firstByteBound(s)),1),o("td",Zg,c(e.latencyBound(s,"p95UpperMs")),1),o("td",xg,c(e.latencyBound(s,"p99UpperMs")),1),o("td",{class:A(["num",{"ov-metric-warn":s.aborted>0}])},c(e.fmt.number(s.aborted)),3),o("td",{class:A(["num",{"ov-metric-warn":s.errors>0}])},c(e.fmt.number(s.errors)),3),o("td",{class:A(["num",{"ov-metric-warn":s.slow>0}])},c(e.fmt.number(s.slow)),3)]))),128))])])])):(l(),d("p",ey,"No recorded requests in this time range yet."))],512),[[W,e.performanceTab==="routes"]]),N(o("div",ty,[t[61]||(t[61]=o("p",{class:"ov-performance-note"},"API and streamer processes \xB7 latest sample per instance",-1)),e.performance.instances?.length?(l(),d("div",sy,[o("table",ny,[t[59]||(t[59]=o("caption",{class:"sr-only"},"API and streamer process resource usage",-1)),t[60]||(t[60]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Process"),o("th",{scope:"col",class:"num"},"RSS / limit"),o("th",{scope:"col",class:"num"},"CPU"),o("th",{scope:"col",class:"num"},"Event loop p95"),o("th",{scope:"col",class:"num"},"Active requests"),o("th",{scope:"col",class:"num"},"Sockets / CLOSE_WAIT"),o("th",{scope:"col",class:"num"},"Workers / waiting"),o("th",{scope:"col",class:"num"},"Sample age"),o("th",{scope:"col",class:"num"},"Dropped batches / metrics")])],-1)),o("tbody",null,[(l(!0),d(X,null,re(e.performance.instances,s=>(l(),d("tr",{key:s.instance,class:A({"ov-metric-warning-row":e.performanceWarning(s)})},[o("th",ry,[o("span",null,c(s.instance),1),e.performanceWarning(s)?(l(),d("small",iy,[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" Needs attention",-1)])])):p("v-if",!0)]),o("td",ay,[b(c(e.humanBytes(s.memory.rss))+" / "+c(e.humanBytes(s.memoryLimitBytes)),1),o("small",null,"Peak "+c(e.humanBytes(e.peakRss(s))),1)]),o("td",ly,c(s.cpuPercent.toFixed(1))+"%",1),o("td",dy,c(s.eventLoop.p95Ms.toFixed(1))+" ms",1),o("td",uy,c(s.activeRequests),1),o("td",cy,c(s.sockets?.descriptors??"Unavailable")+" / "+c(s.sockets?.closeWait??"Unavailable"),1),o("td",py,c(s.workers?.running??0)+" / "+c(s.workers?.waiting??0),1),o("td",fy,c(e.sampleAge(s))+" s",1),o("td",my,c(s.droppedBatches)+" / "+c(s.droppedMetrics),1)],2))),128))])])])):(l(),d("div",oy,"No recent process samples. Monitoring coverage is incomplete."))],512),[[W,e.performanceTab==="processes"]]),N(o("div",hy,[e.performance.stages?.some(s=>s.metric!=="first_byte")?(l(),d("div",vy,[o("table",gy,[t[62]||(t[62]=o("caption",{class:"sr-only"},"Work stages and cache results",-1)),t[63]||(t[63]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Work stage"),o("th",{scope:"col",class:"num"},"Samples"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"p95")])],-1)),o("tbody",null,[(l(!0),d(X,null,re(e.performance.stages.filter(s=>s.metric!=="first_byte"),s=>(l(),d("tr",{key:s.service+s.metric},[o("th",yy,[o("span",null,c(s.metric),1),o("small",null,c(s.service),1)]),o("td",by,c(e.fmt.number(s.count)),1),o("td",wy,c(e.formatMs(s.avgMs)),1),o("td",ky,c(e.latencyBound(s,"p95UpperMs")),1)]))),128))])])])):(l(),d("p",Ey,"No recorded work stages or cache results in this time range yet."))],512),[[W,e.performanceTab==="stages"]]),t[64]||(t[64]=o("details",{class:"ov-performance-help"},[o("summary",null,"How to read these metrics"),o("p",null,"Latency includes upstream waits and response transfer. Percentiles show histogram bucket upper bounds, not exact timings. Process rows marked \u201CNeeds attention\u201D have stale samples, dropped monitoring data, CLOSE_WAIT sockets, high event loop delay, or high memory usage.")],-1))])):p("v-if",!0)])])}var Cy={class:"container paper-page admin-page"},_y={class:"q-header"},Sy={class:"q-header-actions"},Ny={class:"q-range-btns"},Dy={class:"q-cards"},Ry=["aria-pressed","onKeydown","onClick"],Ty={class:"q-card-head"},Ay=["textContent"],Oy=["textContent"],Iy={class:"q-card-sub"},Py={key:0,class:"q-card-bar"},Vy={key:0,class:"q-detail"},qy={class:"q-throughput"},My={class:"q-section-label"},$y={class:"q-section-right"},Ly={class:"q-stats-panel"},Uy={class:"q-section-label"},Fy={class:"q-stats-grid"},zy={class:"q-stat"},Hy=["textContent"],By={class:"q-stat"},jy=["textContent"],Gy={class:"q-stat"},Wy=["textContent"],Ky={class:"q-stat"},Yy=["textContent"],Jy={class:"q-stat"},Qy=["textContent"],Xy={class:"q-stat"},Zy=["textContent"],xy={class:"q-stats-actions"},eb=["disabled"],tb={class:"q-jobs"},ob={class:"q-jobs-header"},sb={class:"q-section-label"},rb={class:"q-state-filters"},ib={class:"q-state-toggle"},ab={type:"checkbox"},lb={class:"q-search-row"},db={type:"search",class:"form-control",placeholder:"Search by job/repo id\u2026",autocomplete:"off"},ub={class:"q-auto-refresh"},cb={type:"checkbox"},pb={key:0,class:"q-table"},fb=["onClick"],mb={class:"q-cell-state"},hb=["textContent"],vb=["textContent"],gb={class:"q-cell-id"},yb=["textContent","href"],bb={class:"q-cell-payload"},wb=["textContent"],kb={key:0,class:"q-payload-detail"},Eb=["textContent"],Cb=["textContent"],_b={class:"q-cell-progress"},Sb={key:0,class:"q-progress-wrap"},Nb=["textContent"],Db={class:"q-cell-actions"},Rb=["onClick"],Tb=["onClick"],Ab={key:0,class:"q-detail-row"},Ob={colspan:"7"},Ib={class:"q-job-detail"},Pb={class:"q-job-detail-grid"},Vb={class:"q-job-detail-item"},qb={class:"q-job-detail-value"},Mb=["textContent","href"],$b={class:"q-job-detail-item"},Lb={class:"q-job-detail-value"},Ub=["textContent"],Fb={key:0,class:"q-job-detail-item"},zb=["textContent"],Hb={key:1,class:"q-job-detail-item"},Bb=["textContent"],jb={key:2,class:"q-job-detail-item"},Gb={class:"q-job-detail-value"},Wb={key:3,class:"q-job-detail-item"},Kb=["textContent"],Yb={key:4,class:"q-job-detail-item"},Jb=["textContent"],Qb={key:5,class:"q-job-detail-item"},Xb=["textContent"],Zb={key:6,class:"q-job-detail-item"},xb=["textContent"],e1={key:7,class:"q-job-detail-item"},t1=["textContent"],o1={key:0,class:"q-job-detail-error"},s1=["textContent"],n1={key:1},r1=["textContent"],i1={class:"q-job-detail-actions"},a1=["onClick"],l1=["onClick"],d1=["href"],u1={key:1,class:"paper-table-empty",style:{border:"1px solid var(--border-color)","border-radius":"10px",background:"var(--paper-card)"}},c1={key:0},p1={key:1};function yl(e,t){let s=be("field");return l(),d("div",Cy,[t[48]||(t[48]=o("div",{class:"paper-crumbs"},[b("Admin \xA0/\xA0 "),o("span",{class:"here"},"Queues")],-1)),o("div",_y,[t[12]||(t[12]=o("h1",{class:"paper-page-title"},"Queues",-1)),o("div",Sy,[o("div",Ny,[o("button",{class:A(["btn btn-sm",{active:e.range=="1h"}]),onClick:t[0]||(t[0]=r=>e.setRange("1h"))},"1h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="6h"}]),onClick:t[1]||(t[1]=r=>e.setRange("6h"))},"6h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="24h"}]),onClick:t[2]||(t[2]=r=>e.setRange("24h"))},"24h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="7d"}]),onClick:t[3]||(t[3]=r=>e.setRange("7d"))},"7d",2)]),o("button",{class:"btn btn-sm",onClick:t[4]||(t[4]=r=>e.pauseAll())},"Pause all"),o("button",{class:"btn btn-sm btn-danger-soft",onClick:t[5]||(t[5]=r=>e.drainSelected())},"Drain "+c(e.selectedQueue),1)])]),t[49]||(t[49]=ce('',1)),p(" Queue overview cards "),o("div",Dy,[(l(!0),d(X,null,re(e.queueList,(r,n)=>(l(),d("div",{class:A(["q-card",{selected:e.selectedQueue==r?.key,paused:r?.paused}]),role:"button",tabindex:"0","aria-pressed":e.selectedQueue===r.key,onKeydown:[Ro(me(i=>e.selectQueue(r.key),["prevent"]),["enter"]),Ro(me(i=>e.selectQueue(r.key),["prevent"]),["space"])],onClick:i=>e.selectQueue(r.key)},[o("div",Ty,[o("span",{class:A(["q-dot",{"q-dot-red":r?.paused||r?.counts?.failed>0}])},null,2),o("span",{class:"q-card-name",textContent:c(r?.label)},null,8,Ay)]),o("div",{class:"q-card-count",textContent:c((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0))},null,8,Oy),o("div",Iy,[o("span",null,"waiting \xB7 "+c(r?.counts?.active||0)+" active",1),r?.counts?.active?(l(),d("div",Py,[o("div",{class:"q-card-bar-fill",style:qe({width:r?.counts?.active/((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0)||1)*100+"%"})},null,4)])):p("v-if",!0)])],42,Ry))),256))]),p(" Detail: throughput chart + stats panel "),e.selectedStats?(l(),d("div",Vy,[o("div",qy,[o("div",My,[b(c(e.selectedQueue)+" \xB7 throughput ",1),o("span",$y,[t[13]||(t[13]=o("span",{class:"q-legend-completed"},"\u25CF",-1)),t[14]||(t[14]=b(" completed ",-1)),t[15]||(t[15]=o("span",{class:"q-legend-failed"},"\u25CF",-1)),t[16]||(t[16]=b(" failed ",-1)),t[17]||(t[17]=o("span",{class:"q-legend-exec"},"- -",-1)),b(" avg time \xB7 "+c(e.range),1)])]),t[18]||(t[18]=o("div",{class:"q-chart-wrap"},[o("canvas",{id:"q-throughput-chart",height:"180"}),o("div",{id:"q-chart-tooltip",class:"q-chart-tooltip",style:{display:"none"}}),o("div",{id:"q-chart-crosshair",class:"q-chart-crosshair",style:{display:"none"}})],-1))]),o("div",Ly,[o("div",Uy,c(e.selectedQueue)+" \xB7 stats",1),o("div",Fy,[o("div",zy,[t[19]||(t[19]=o("div",{class:"q-stat-label"},"Waiting",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.waiting||0)},null,8,Hy)]),o("div",By,[t[20]||(t[20]=o("div",{class:"q-stat-label"},"Active",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.active||0)},null,8,jy)]),o("div",Gy,[t[21]||(t[21]=o("div",{class:"q-stat-label"},"Completed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.fmt?.number(e.selectedStats?.completed24h))},null,8,Wy)]),o("div",Ky,[t[22]||(t[22]=o("div",{class:"q-stat-label"},"Failed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.failed24h||0)},null,8,Yy)]),o("div",Jy,[t[23]||(t[23]=o("div",{class:"q-stat-label"},"Delayed",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.delayed||0)},null,8,Qy)]),o("div",Xy,[t[24]||(t[24]=o("div",{class:"q-stat-label"},"Workers",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.workers||0)},null,8,Zy)])]),o("div",xy,[o("button",{class:"btn btn-sm",onClick:t[6]||(t[6]=r=>e.togglePause())},c(e.selectedStats?.paused?"Resume":"Pause"),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=r=>e.retryFailed()),disabled:!e.selectedStats?.counts?.failed},"Retry failed",8,eb),o("button",{class:"btn btn-sm",onClick:t[8]||(t[8]=r=>e.emptyQueue())},"Empty")])])])):p("v-if",!0),e.actionError?(l(),d("div",{key:1,class:"q-toast-error",onClick:t[9]||(t[9]=r=>e.actionError=null)},[t[25]||(t[25]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),b(" "+c(e.actionError),1)])):p("v-if",!0),p(" Jobs table "),o("div",tb,[o("div",ob,[o("div",sb,"All jobs \xB7 "+c(e.selectedQueue),1),o("div",rb,[(l(!0),d(X,null,re(e.allStates,(r,n)=>(l(),d("label",ib,[N(o("input",ab,null,512),[[s,{state:e.viewState,set:i=>{e.stateFilter[r]=i},value:e.stateFilter[r],form:null,options:{}}]]),o("span",{class:A("q-state-chip q-state-"+r)},c(r),3)]))),256))])]),o("div",lb,[N(o("input",db,null,512),[[s,{state:e.viewState,set:r=>{e.query.search=r},value:e.query?.search,form:null,options:{}}]]),o("label",ub,[N(o("input",cb,null,512),[[s,{state:e.viewState,set:r=>{e.query.autoRefresh=r},value:e.query?.autoRefresh,form:null,options:{}}]]),t[26]||(t[26]=b(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[10]||(t[10]=r=>e.refreshNow()),"aria-label":"Refresh"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])]),e.filteredJobs().length>0?(l(),d("table",pb,[t[46]||(t[46]=o("thead",null,[o("tr",null,[o("th",null,"State"),o("th",null,"Job id"),o("th",null,"Payload"),o("th",null,"Attempts"),o("th",null,"Duration"),o("th",null,"Progress"),o("th")])],-1)),(l(!0),d(X,null,re(e.filteredJobs(),(r,n)=>(l(),d("tbody",null,[o("tr",{style:{cursor:"pointer"},class:A({"q-row-failed":r?._state=="failed","q-row-expanded":e.expanded[r?.id]}),onClick:i=>e.toggleJob(r)},[o("td",mb,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,hb),r?._state=="delayed"&&r?.delayUntil?(l(),d("span",{key:0,class:"q-delay-hint",textContent:c(e.delayCountdown(r?.delayUntil))},null,8,vb)):p("v-if",!0)]),o("td",gb,[(l(),d("svg",{class:A(["ui-icon q-chevron",{"q-chevron-open":e.expanded[r?.id]}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#ui-icon-chevron-right"},null,-1)])],2)),o("a",{target:"_blank",textContent:c("job:"+e.fmt.limitTo(r?.id,6)),onClick:t[11]||(t[11]=i=>i.stopPropagation()),href:e.safeUrl("/r/"+r?.id)},null,8,yb)]),o("td",bb,[o("span",{textContent:c(r?.name||"anonymize")},null,8,wb),r?.data?.repoId&&r?.data?.repoId!==r?.name?(l(),d("span",kb," \xB7 "+c(r?.data?.repoId),1)):p("v-if",!0)]),o("td",{class:"q-cell-num",textContent:c(r?.attemptsMade||1)},null,8,Eb),o("td",{class:"q-cell-num",textContent:c(e.jobDuration(r))},null,8,Cb),o("td",_b,[e.jobProgressPct(r)!==null?(l(),d("div",Sb,[o("div",{class:"q-progress-bar",style:qe({"--pct":e.jobProgressPct(r)+"%"})},null,4),o("span",{class:"q-progress-label",textContent:c(e.jobProgressPct(r)+"%")},null,8,Nb)])):p("v-if",!0)]),o("td",Db,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm btn-icon",title:"Retry",onClick:i=>{e.retryJob(r),i.stopPropagation()},"aria-label":"Retry job"},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])],8,Rb)):p("v-if",!0),o("button",{class:"btn btn-sm btn-icon",title:"Remove","aria-label":"Remove job",onClick:i=>{e.removeJob(r),i.stopPropagation()}},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,Tb)])],10,fb),e.expanded[r?.id]?(l(),d("tr",Ab,[o("td",Ob,[o("div",Ib,[o("div",Pb,[o("div",Vb,[t[31]||(t[31]=o("span",{class:"q-job-detail-label"},"Job id",-1)),o("span",qb,[o("a",{target:"_blank",textContent:c(r?.id),href:e.safeUrl("/r/"+r?.id)},null,8,Mb)])]),o("div",$b,[t[32]||(t[32]=o("span",{class:"q-job-detail-label"},"State",-1)),o("span",Lb,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,Ub)])]),r?.data?.repoId?(l(),d("div",Fb,[t[33]||(t[33]=o("span",{class:"q-job-detail-label"},"Repo ID",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.data?.repoId)},null,8,zb)])):p("v-if",!0),r?.timestamp?(l(),d("div",Hb,[t[34]||(t[34]=o("span",{class:"q-job-detail-label"},"Created",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.timestamp))},null,8,Bb)])):p("v-if",!0),r?._state=="delayed"&&r?.delayUntil?(l(),d("div",jb,[t[35]||(t[35]=o("span",{class:"q-job-detail-label"},"Retry at",-1)),o("span",Gb,c(e.humanTime(r?.delayUntil))+" ("+c(e.delayCountdown(r?.delayUntil))+")",1)])):p("v-if",!0),r?.processedOn?(l(),d("div",Wb,[t[36]||(t[36]=o("span",{class:"q-job-detail-label"},"Processed",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.processedOn))},null,8,Kb)])):p("v-if",!0),r?.finishedOn?(l(),d("div",Yb,[t[37]||(t[37]=o("span",{class:"q-job-detail-label"},"Finished",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.finishedOn))},null,8,Jb)])):p("v-if",!0),r?.attemptsMade?(l(),d("div",Qb,[t[38]||(t[38]=o("span",{class:"q-job-detail-label"},"Attempts",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.attemptsMade)},null,8,Xb)])):p("v-if",!0),r?.progress&&r?.progress?.status?(l(),d("div",Zb,[t[39]||(t[39]=o("span",{class:"q-job-detail-label"},"Status",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.progress?.status)},null,8,xb)])):p("v-if",!0),e.jobProgressPct(r)!==null?(l(),d("div",e1,[t[40]||(t[40]=o("span",{class:"q-job-detail-label"},"Progress",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.jobProgressPct(r)+"%")},null,8,t1)])):p("v-if",!0)]),r?.failedReason?(l(),d("div",o1,[t[41]||(t[41]=o("span",{class:"q-job-detail-label"},"Error",-1)),o("div",{class:"q-error-reason",textContent:c(r?.failedReason)},null,8,s1)])):p("v-if",!0),r?.stacktrace?.length?(l(),d("div",n1,[t[42]||(t[42]=o("span",{class:"q-job-detail-label"},"Stacktrace",-1)),(l(!0),d(X,null,re(r?.stacktrace,(i,a)=>(l(),d("pre",{class:"q-error-stack",key:a},[o("code",{textContent:c(i)},null,8,r1)]))),128))])):p("v-if",!0),o("div",i1,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm",onClick:i=>e.retryJob(r)},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Retry",-1)])],8,a1)):p("v-if",!0),o("button",{class:"btn btn-sm",onClick:i=>e.removeJob(r)},[...t[44]||(t[44]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,l1),o("a",{class:"btn btn-sm",target:"_blank",href:e.safeUrl("/r/"+r?.id)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1),b(" View repo",-1)])],8,d1)])])])])):p("v-if",!0)]))),256))])):p("v-if",!0),e.filteredJobs().length==0?(l(),d("div",u1,[t[47]||(t[47]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1)),e.query?.search?p("v-if",!0):(l(),d("span",c1,"No jobs in the "+c(e.selectedQueue)+" queue.",1)),e.query?.search?(l(),d("span",p1,"No jobs match the current filters.")):p("v-if",!0)])):p("v-if",!0)])])}var f1={class:"container paper-page admin-page"},m1={class:"admin-summary"},h1={class:"summary-total"},v1={class:"summary-meta"},g1=["aria-pressed"],y1={class:"count"},b1=["aria-pressed"],w1={class:"count"},k1=["aria-pressed"],E1={class:"count"},C1=["aria-pressed"],_1={class:"count"},S1=["aria-pressed"],N1={class:"count"},D1={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},R1={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},T1={class:"admin-filter-row"},A1={class:"search-wrap"},O1={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},I1={key:0,class:"admin-search-hint"},P1={class:"admin-filter-inline"},V1={type:"text",class:"form-control form-control-sm",placeholder:"username"},q1={class:"admin-filter-inline"},M1={type:"text",class:"form-control form-control-sm",placeholder:"ID"},$1={class:"admin-filter-inline","aria-label":"Pagination"},L1=["disabled"],U1={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},F1=["disabled"],z1={key:0,class:"admin-filter-row"},H1={class:"admin-active-chips"},B1={class:"key"},j1=["onClick"],G1={key:1,class:"bulk-bar"},W1={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},K1={class:"paper-table-head",role:"row"},Y1={role:"columnheader",style:{width:"28px"}},J1=["checked"],Q1={role:"columnheader"},X1={role:"columnheader"},Z1={role:"columnheader",class:"num"},x1={role:"columnheader"},ew={role:"cell",style:{width:"28px"}},tw={type:"checkbox","aria-label":"Select repository"},ow={class:"cell-anon",role:"cell"},sw={class:"anon-text"},nw=["textContent","href"],rw={class:"anon-sub"},iw=["textContent","href"],aw={key:0},lw=["textContent","href"],dw={key:1},uw=["textContent","href"],cw={key:2},pw={class:"cell-status",role:"cell"},fw={class:"status-line"},mw=["textContent"],hw=["textContent","title"],vw={class:"cell-views num",role:"cell"},gw=["textContent"],yw={class:"cell-expires",role:"cell"},bw=["textContent"],ww={class:"cell-actions",role:"cell"},kw={class:"dropdown"},Ew={class:"dropdown-menu dropdown-menu-right"},Cw=["href"],_w=["href"],Sw=["href"],Nw=["onClick"],Dw=["onClick"],Rw=["onClick"],Tw=["onClick"],Aw=["onClick"],Ow=["onClick"],Iw={key:0,class:"paper-table-empty"},Pw={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},Vw={style:{"font-size":"12px",color:"var(--ink-muted)"}},qw={key:0,class:"pagination-compact"},Mw=["disabled"],$w=["max"],Lw=["disabled"],Uw={class:"admin-filter-inline"},Fw={class:"form-control form-control-sm"};function bl(e,t){let s=be("field"),r=be("form");return l(),d("div",f1,[t[69]||(t[69]=ce('
Admin \xA0/\xA0 Repositories

Repositories

',3)),o("div",m1,[o("span",h1,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("span",v1,c(e.fmt?.humanFileSize(e.totalSize))+" on disk",1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=n=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[18]||(t[18]=b("Ready ",-1)),o("span",y1,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,g1),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=n=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[19]||(t[19]=b("Preparing ",-1)),o("span",w1,c(e.fmt?.number(e.statusCountFor("preparing")+e.statusCountFor("download"))),1)],10,b1),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=n=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[20]||(t[20]=b("Errored ",-1)),o("span",E1,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,k1),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=n=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[21]||(t[21]=b("Expired ",-1)),o("span",_1,c(e.fmt?.number(e.statusCountFor("expired")+e.statusCountFor("expiring"))),1)],10,C1),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=n=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[22]||(t[22]=b("Removed ",-1)),o("span",N1,c(e.fmt?.number(e.statusCountFor("removed")+e.statusCountFor("removing"))),1)],10,S1)]),e.fetchError?(l(),d("div",D1,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):p("v-if",!0),N((l(),d("form",R1,[p(" Row 1: search + scoped inputs + headline actions "),o("div",T1,[o("div",A1,[N(o("input",O1,null,512),[[s,{state:e.viewState,set:n=>{e.query.search=n},value:e.query?.search,form:null,options:{}}]]),e.query?.search?p("v-if",!0):(l(),d("span",I1,"/"))]),o("span",P1,[t[24]||(t[24]=o("label",null,"Owner",-1)),N(o("input",V1,null,512),[[s,{state:e.viewState,set:n=>{e.query.owner=n},value:e.query?.owner,form:null,options:{}}]])]),o("span",q1,[t[25]||(t[25]=o("label",null,"Conference",-1)),N(o("input",M1,null,512),[[s,{state:e.viewState,set:n=>{e.query.conference=n},value:e.query?.conference,form:null,options:{}}]])]),t[29]||(t[29]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[5]||(t[5]=n=>e.exportCsv())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",$1,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=n=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,L1),o("span",U1,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=n=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,F1)])]),p(" Row 2: appears only when there are active filter chips "),e.chips?.length?(l(),d("div",z1,[o("div",H1,[(l(!0),d(X,null,re(e.chips,(n,i)=>(l(),d("span",{class:"admin-active-chip",key:n?.key},[o("span",B1,c(n?.label),1),o("span",null,c(n?.value),1),o("button",{type:"button","aria-label":"Remove filter",onClick:a=>e.clearFilter(n.key)},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,j1)]))),128))])])):p("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",G1,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[31]||(t[31]=b(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[8]||(t[8]=n=>e.bulkRefresh())},[...t[32]||(t[32]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[9]||(t[9]=n=>e.bulkRemoveCache())},[...t[33]||(t[33]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[10]||(t[10]=n=>e.clearSelection())},"Clear")])):p("v-if",!0),o("div",W1,[o("div",K1,[o("div",Y1,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[11]||(t[11]=n=>e.selectAllOnPage()),checked:e.allSelected},null,8,J1)]),o("div",Q1,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[12]||(t[12]=n=>e.sortBy("source.repositoryName"))},[t[35]||(t[35]=b("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",X1,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[13]||(t[13]=n=>e.sortBy("status"))},[t[37]||(t[37]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[36]||(t[36]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",Z1,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[14]||(t[14]=n=>e.sortBy("pageView"))},[t[39]||(t[39]=b("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[38]||(t[38]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",x1,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[15]||(t[15]=n=>e.sortBy("anonymizeDate"))},[t[41]||(t[41]=b("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[40]||(t[40]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[42]||(t[42]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,re(e.filteredRepositories,(n,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":n?.status=="expired"||n?.status=="removed","repo-error":n?.status=="error","row-selected":e.selected[n?.repoId]}]),role:"row"},[o("div",ew,[N(o("input",tw,null,512),[[s,{state:e.viewState,set:a=>{e.selected[n.repoId]=a},value:e.selected[n?.repoId],form:null,options:{}}]])]),o("div",ow,[t[47]||(t[47]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",sw,[o("a",{class:"repo-name",target:"_blank",textContent:c(n?.repoId),href:e.safeUrl("/r/"+n?.repoId)},null,8,nw),o("div",rw,[o("a",{textContent:c(n?.source?.repositoryName),href:e.safeUrl("https://github.com/"+n?.source?.repositoryName+"/")},null,8,iw),n?.options?.update?(l(),d("span",aw,[t[43]||(t[43]=b("\xA0\xB7\xA0",-1)),o("a",{textContent:c(n?.source?.branch),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.branch)},null,8,lw)])):p("v-if",!0),n?.options?.update?p("v-if",!0):(l(),d("span",dw,[t[44]||(t[44]=b("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(n?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.commit)},null,8,uw)])),n?.conference?(l(),d("span",cw,[t[45]||(t[45]=b("\xA0\xB7\xA0",-1)),t[46]||(t[46]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(n?.conference),1)])):p("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(n?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(n?.options?.terms?.length))+" "+c(n?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",pw,[o("span",fw,[o("span",{class:A(["status-dot",{"status-removed":n?.status=="removed"||n?.status=="expired","status-ready":n?.status=="ready","status-error":n?.status=="error","status-preparing":n?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(n?.status))},null,8,mw)]),n?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(n?.statusMessage)),title:n?.statusMessage},null,8,hw)):p("v-if",!0)]),o("div",vw,[t[48]||(t[48]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[49]||(t[49]=b()),o("span",{textContent:c(e.fmt?.number(n?.pageView||0))},null,8,gw)]),o("div",yw,[t[50]||(t[50]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[51]||(t[51]=b()),o("span",{textContent:c(e.fmt?.humanTime(n?.anonymizeDate))},null,8,bw)]),o("div",ww,[o("div",kw,[t[63]||(t[63]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",Ew,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+n?.repoId)},[...t[52]||(t[52]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,Cw),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+n?.repoId+"/")},[...t[53]||(t[53]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View repo",-1)])],8,_w),n?.options?.page&&n?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+n?.repoId+"/")},[...t[54]||(t[54]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" View page",-1)])],8,Sw)):p("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.fetchGithubInfo(n),["prevent"])},[...t[55]||(t[55]=[o("i",{class:"fab fa-github"},null,-1),b(" Live GitHub info",-1)])],8,Nw),t[61]||(t[61]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.updateRepository(n),["prevent"])},[...t[56]||(t[56]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update",-1)])],8,Dw),[[W,n?.status=="ready"||n?.status=="error"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.updateRepository(n),["prevent"])},[...t[57]||(t[57]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable",-1)])],8,Rw),[[W,n?.status=="removed"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.showStatusMessage(n),["prevent"])},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" View status message",-1)])],8,Tw),[[W,n?.statusMessage]]),t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.removeCache(n),["prevent"])},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])],8,Aw),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:me(a=>e.removeRepository(n),["prevent"])},[...t[60]||(t[60]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,Ow),[[W,n?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",Iw,[...t[64]||(t[64]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):p("v-if",!0)]),o("div",Pw,[o("span",Vw,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",qw,[o("button",{class:"btn btn-sm",onClick:t[16]||(t[16]=n=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[65]||(t[65]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous ",-1)])],8,Mw),N(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},"aria-label":"Page",max:e.totalPage},null,8,$w),[[s,{state:e.viewState,set:n=>{e.query.page=n},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[17]||(t[17]=n=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[66]||(t[66]=[b(" Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,Lw)])):p("v-if",!0),o("span",Uw,[t[68]||(t[68]=o("label",null,"Per page",-1)),N((l(),d("select",Fw,[...t[67]||(t[67]=[ce('',5)])])),[[s,{state:e.viewState,set:n=>{e.query.limit=n},value:e.query?.limit,form:null,options:{}}]])])])])}var zw={class:"container paper-page admin-page"},Hw={class:"paper-crumbs"},Bw={class:"here"},jw={class:"paper-page-title"},Gw={key:0,class:"user-detail-card"},Ww={class:"user-header"},Kw=["src"],Yw={class:"status-dot-wrap"},Jw=["textContent"],Qw={key:0,class:"type-badge type-repo"},Xw={class:"user-actions",style:{"margin-top":"4px"}},Zw={class:"user-detail-grid"},xw={class:"detail-value"},ek={class:"detail-value"},tk={key:0,class:"detail-value",style:{"font-family":"var(--font-mono)","font-size":"0.85rem"}},ok={key:1,class:"detail-value text-muted"},sk={class:"detail-value"},nk=["href"],rk={class:"detail-value"},ik={class:"detail-value"},ak={key:0},lk={key:1,class:"text-muted"},dk={class:"detail-value"},uk={key:0,style:{"margin-top":"20px"}},ck={class:"paper-table w-100",style:{"margin-top":"10px"}},pk={class:"paper-table-row",style:{"grid-template-columns":"1fr 160px"}},fk={class:"cell-anon",role:"cell"},mk={class:"anon-text"},hk=["textContent"],vk={class:"cell-expires",role:"cell"},gk={key:1,class:"admin-section-header"},yk={class:"section-count"},bk={key:2,class:"user-detail-card"},wk={type:"text",class:"form-control",placeholder:"Token name (e.g. dev-laptop)",required:""},kk={key:0,class:"alert alert-warning",role:"alert"},Ek={style:{"white-space":"pre-wrap","word-break":"break-all",margin:"8px 0 0","font-family":"var(--font-mono)","font-size":"0.85rem"}},Ck={key:1,class:"paper-table w-100"},_k={class:"paper-table-row",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},Sk=["textContent"],Nk=["textContent"],Dk={role:"cell"},Rk={key:0},Tk={key:1,class:"text-muted"},Ak={role:"cell"},Ok=["onClick"],Ik={key:2,class:"paper-table-empty"},Pk={class:"admin-section-header"},Vk={class:"section-count"},qk={class:"admin-summary"},Mk={class:"summary-total"},$k=["aria-pressed"],Lk={class:"count"},Uk=["aria-pressed"],Fk={class:"count"},zk=["aria-pressed"],Hk={class:"count"},Bk=["aria-pressed"],jk={class:"count"},Gk=["aria-pressed"],Wk={class:"count"},Kk={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},Yk={class:"admin-filter-row"},Jk={class:"search-wrap"},Qk={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},Xk={key:3,class:"bulk-bar"},Zk={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},xk={class:"paper-table-head",role:"row"},e0={role:"columnheader",style:{width:"28px"}},t0=["checked"],o0={role:"columnheader"},s0={role:"columnheader"},n0={role:"columnheader",class:"num"},r0={role:"columnheader"},i0={role:"cell",style:{width:"28px"}},a0={type:"checkbox","aria-label":"Select repository"},l0={class:"cell-anon",role:"cell"},d0={class:"anon-text"},u0=["textContent","href"],c0={class:"anon-sub"},p0=["textContent","href"],f0={key:0},m0=["textContent","href"],h0={key:1},v0=["textContent","href"],g0={key:2},y0={class:"cell-status",role:"cell"},b0={class:"status-line"},w0=["textContent"],k0=["textContent","title"],E0=["textContent"],C0=["textContent"],_0={class:"cell-actions",role:"cell"},S0={class:"dropdown"},N0={class:"dropdown-menu dropdown-menu-right"},D0=["href"],R0=["href"],T0=["href"],A0=["onClick"],O0=["onClick"],I0=["onClick"],P0=["onClick"],V0=["onClick"],q0=["onClick"],M0={key:0,class:"paper-table-empty"};function wl(e,t){let s=be("field"),r=be("form");return l(),d("div",zw,[o("div",Hw,[t[22]||(t[22]=o("a",{href:"/admin/"},"Admin",-1)),t[23]||(t[23]=b(" \xA0/\xA0 ",-1)),t[24]||(t[24]=o("a",{href:"/admin/users"},"Users",-1)),t[25]||(t[25]=b(" \xA0/\xA0 ",-1)),o("span",Bw,c(e.userInfo?.username||"Profile"),1)]),o("h1",jw,c(e.userInfo?.username||"User"),1),t[87]||(t[87]=ce('',1)),e.userInfo?(l(),d("div",Gw,[o("div",Ww,[e.userInfo?.photo?(l(),d("img",{key:0,width:"56",height:"56",src:e.safeUrl(e.userInfo?.photo)},null,8,Kw)):p("v-if",!0),o("div",null,[o("h2",null,[b(c(e.userInfo?.username)+" ",1),o("span",Yw,[o("span",{class:A(["status-dot",{"status-ready":e.userInfo?.status=="active","status-removed":e.userInfo?.status!="active"}])},null,2),o("span",{textContent:c(e.fmt?.title(e.userInfo?.status))},null,8,Jw)]),e.userInfo?.isAdmin?(l(),d("span",Qw,"Admin")):p("v-if",!0)]),o("div",Xw,[e.userInfo?.status!=="banned"?(l(),d("button",{key:0,class:"btn btn-sm text-danger",onClick:t[0]||(t[0]=n=>e.banUser())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])])):p("v-if",!0),e.userInfo?.status==="banned"||e.userInfo?.status==="removed"?(l(),d("button",{key:1,class:"btn btn-sm",onClick:t[1]||(t[1]=n=>e.activateUser())},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Activate",-1)])])):p("v-if",!0),e.userInfo?.isAdmin?p("v-if",!0):(l(),d("button",{key:2,class:"btn btn-sm",onClick:t[2]||(t[2]=n=>e.promoteUser())},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-shield"})],-1),b(" Promote to admin",-1)])])),e.userInfo?.isAdmin?(l(),d("button",{key:3,class:"btn btn-sm text-danger",onClick:t[3]||(t[3]=n=>e.demoteUser())},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-minus"})],-1),b(" Remove admin",-1)])])):p("v-if",!0)])])]),o("div",Zw,[t[32]||(t[32]=o("div",{class:"detail-label"},"ID",-1)),o("div",xw,c(e.userInfo?._id),1),t[33]||(t[33]=o("div",{class:"detail-label"},"Email",-1)),o("div",ek,c(e.userInfo?.emails?.[0]?.email),1),t[34]||(t[34]=o("div",{class:"detail-label"},"Access token",-1)),e.userInfo?.accessTokens?.github?(l(),d("div",tk,c(e.userInfo?.accessTokens?.github),1)):p("v-if",!0),e.userInfo?.accessTokens?.github?p("v-if",!0):(l(),d("div",ok,"None stored")),t[35]||(t[35]=o("div",{class:"detail-label"},"GitHub",-1)),o("div",sk,[o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+e.userInfo?.username)},[t[30]||(t[30]=o("i",{class:"fab fa-github"},null,-1)),b(" "+c(e.userInfo?.username),1)],8,nk)]),t[36]||(t[36]=o("div",{class:"detail-label"},"Created",-1)),o("div",rk,c(e.fmt?.humanTime(e.userInfo?.dateOfEntry)),1),t[37]||(t[37]=o("div",{class:"detail-label"},"Last connection",-1)),o("div",ik,[e.userInfo?.accessTokenDates?.github?(l(),d("span",ak,c(e.fmt?.humanTime(e.userInfo?.accessTokenDates?.github)),1)):p("v-if",!0),e.userInfo?.accessTokenDates?.github?p("v-if",!0):(l(),d("span",lk,"never"))]),t[38]||(t[38]=o("div",{class:"detail-label"},"GitHub repos",-1)),o("div",dk,[b(c(e.userInfo?.repositories?.length)+" repositories ",1),o("button",{class:"btn btn-sm ml-2",onClick:t[4]||(t[4]=n=>e.showRepos=!e.showRepos)},c(e.showRepos?"Hide":"Show"),1),o("button",{class:"btn btn-sm ml-1",onClick:t[5]||(t[5]=n=>e.getGitHubRepositories())},[...t[31]||(t[31]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Refresh ",-1)])])])]),e.showRepos?(l(),d("div",uk,[t[41]||(t[41]=o("div",{class:"paper-section-eyebrow"},"GitHub repositories",-1)),o("div",ck,[(l(!0),d(X,null,re(e.userInfo?.repositories,(n,i)=>(l(),d("div",pk,[o("div",fk,[t[39]||(t[39]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",mk,[o("span",{class:"repo-name",textContent:c(n?.name)},null,8,hk)])]),o("div",vk,[t[40]||(t[40]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-database"})],-1)),b(" "+c(e.fmt?.humanFileSize(n?.size)),1)])]))),256))])])):p("v-if",!0)])):p("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",gk,[t[42]||(t[42]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),b(" API tokens")],-1)),o("span",yk,c(e.tokens?.length),1)])):p("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",bk,[t[48]||(t[48]=o("p",{class:"paper-page-lede"},[b("Personal API tokens for this admin account. Send as "),o("code",null,"Authorization: Bearer "),b(" to authenticate without GitHub OAuth (useful for development).")],-1)),N((l(),d("form",{class:"d-flex",style:{gap:"8px","margin-bottom":"12px"},onSubmit:t[6]||(t[6]=me(n=>e.submitForm(n,()=>{e.createToken()}),["prevent"]))},[N(o("input",wk,null,512),[[s,{state:e.viewState,set:n=>{e.tokenForm.name=n},value:e.tokenForm?.name,form:null,options:{}}]]),t[43]||(t[43]=o("button",{type:"submit",class:"btn btn-ink"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})]),b(" Generate")],-1))],32)),[[r,e.viewState]]),e.tokenForm?.plaintext?(l(),d("div",kk,[t[44]||(t[44]=o("strong",null,"Copy this token now \u2014 it will not be shown again:",-1)),o("pre",Ek,c(e.tokenForm?.plaintext),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=n=>e.tokenForm.plaintext=null)},"Dismiss")])):p("v-if",!0),e.tokens?.length?(l(),d("div",Ck,[t[46]||(t[46]=o("div",{class:"paper-table-head",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},[o("div",{role:"columnheader"},"Name"),o("div",{role:"columnheader"},"Created"),o("div",{role:"columnheader"},"Last used"),o("div",{role:"columnheader","aria-label":"Actions"})],-1)),(l(!0),d(X,null,re(e.tokens,(n,i)=>(l(),d("div",_k,[o("div",{role:"cell",textContent:c(n?.name)},null,8,Sk),o("div",{role:"cell",textContent:c(e.fmt?.humanTime(n?.createdAt))},null,8,Nk),o("div",Dk,[n?.lastUsedAt?(l(),d("span",Rk,c(e.fmt?.humanTime(n?.lastUsedAt)),1)):p("v-if",!0),n?.lastUsedAt?p("v-if",!0):(l(),d("span",Tk,"never"))]),o("div",Ak,[o("button",{class:"btn btn-sm text-danger btn-icon",title:"Revoke","aria-label":"Revoke token",onClick:a=>e.revokeToken(n)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,Ok)])]))),256))])):p("v-if",!0),e.tokens?.length?p("v-if",!0):(l(),d("div",Ik,[...t[47]||(t[47]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No tokens yet.",-1)])]))])):p("v-if",!0),o("div",Pk,[t[49]||(t[49]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})]),b(" Anonymized repositories")],-1)),o("span",Vk,c(e.repositories?.length),1)]),o("div",qk,[o("span",Mk,c(e.fmt?.number(e.repositories?.length)),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.filters?.status?.ready===!1}]),title:"Toggle ready filter",onClick:t[8]||(t[8]=n=>e.filters.status.ready=!e.filters.status.ready),"aria-pressed":e.filters?.status?.ready===!1},[t[50]||(t[50]=b("Ready ",-1)),o("span",Lk,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,$k),o("button",{type:"button",class:A(["summary-pill warn",{active:e.filters?.status?.preparing===!1}]),title:"Toggle preparing filter",onClick:t[9]||(t[9]=n=>e.filters.status.preparing=!e.filters.status.preparing),"aria-pressed":e.filters?.status?.preparing===!1},[t[51]||(t[51]=b("Preparing ",-1)),o("span",Fk,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,Uk),o("button",{type:"button",class:A(["summary-pill error",{active:e.filters?.status?.error===!1}]),title:"Toggle errored filter",onClick:t[10]||(t[10]=n=>e.filters.status.error=!e.filters.status.error),"aria-pressed":e.filters?.status?.error===!1},[t[52]||(t[52]=b("Errored ",-1)),o("span",Hk,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,zk),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.expired===!1}]),title:"Toggle expired filter",onClick:t[11]||(t[11]=n=>e.filters.status.expired=!e.filters.status.expired),"aria-pressed":e.filters?.status?.expired===!1},[t[53]||(t[53]=b("Expired ",-1)),o("span",jk,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,Bk),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.removed===!1}]),title:"Toggle removed filter",onClick:t[12]||(t[12]=n=>e.filters.status.removed=!e.filters.status.removed),"aria-pressed":e.filters?.status?.removed===!1},[t[54]||(t[54]=b("Removed ",-1)),o("span",Wk,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,Gk)]),N((l(),d("form",Kk,[o("div",Yk,[o("div",Jk,[N(o("input",Qk,null,512),[[s,{state:e.viewState,set:n=>{e.search=n},value:e.search,form:null,options:{}}]])]),t[56]||(t[56]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[13]||(t[13]=n=>e.exportCsv())},[...t[55]||(t[55]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])])])])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",Xk,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[57]||(t[57]=b(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[14]||(t[14]=n=>e.bulkRefresh())},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[15]||(t[15]=n=>e.bulkRemoveCache())},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[16]||(t[16]=n=>e.clearSelection())},"Clear")])):p("v-if",!0),o("div",Zk,[o("div",xk,[o("div",e0,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[17]||(t[17]=n=>e.selectAllOnPage()),checked:e.allSelected},null,8,t0)]),o("div",o0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[18]||(t[18]=n=>e.sortBy("source.repositoryName"))},[t[61]||(t[61]=b("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[60]||(t[60]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",s0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[19]||(t[19]=n=>e.sortBy("status"))},[t[63]||(t[63]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[62]||(t[62]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",n0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[20]||(t[20]=n=>e.sortBy("pageView"))},[t[65]||(t[65]=b("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[64]||(t[64]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",r0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[21]||(t[21]=n=>e.sortBy("anonymizeDate"))},[t[67]||(t[67]=b("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[66]||(t[66]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[68]||(t[68]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,re(e.filteredRepositories,(n,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":n?.status=="expired"||n?.status=="removed","repo-error":n?.status=="error","row-selected":e.selected[n?.repoId]}]),role:"row"},[o("div",i0,[N(o("input",a0,null,512),[[s,{state:e.viewState,set:a=>{e.selected[n.repoId]=a},value:e.selected[n?.repoId],form:null,options:{}}]])]),o("div",l0,[t[73]||(t[73]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",d0,[o("a",{class:"repo-name",target:"_blank",textContent:c(n?.repoId),href:e.safeUrl("/r/"+n?.repoId)},null,8,u0),o("div",c0,[o("a",{textContent:c(n?.source?.fullName),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/")},null,8,p0),n?.options?.update?(l(),d("span",f0,[t[69]||(t[69]=b("\xA0\xB7\xA0",-1)),o("a",{textContent:c(n?.source?.branch),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.branch)},null,8,m0)])):p("v-if",!0),n?.options?.update?p("v-if",!0):(l(),d("span",h0,[t[70]||(t[70]=b("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(n?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.commit)},null,8,v0)])),n?.conference?(l(),d("span",g0,[t[71]||(t[71]=b("\xA0\xB7\xA0",-1)),t[72]||(t[72]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(n?.conference),1)])):p("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(n?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(n?.options?.terms?.length))+" "+c(n?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",y0,[o("span",b0,[o("span",{class:A(["status-dot",{"status-removed":n?.status=="removed"||n?.status=="expired","status-ready":n?.status=="ready","status-error":n?.status=="error","status-preparing":n?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(n?.status))},null,8,w0)]),n?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(n?.statusMessage)),title:n?.statusMessage},null,8,k0)):p("v-if",!0)]),o("div",{class:"cell-views num",role:"cell",textContent:c(e.fmt?.number(n?.pageView||0))},null,8,E0),o("div",{class:"cell-expires",role:"cell",textContent:c(e.fmt?.humanTime(n?.anonymizeDate))},null,8,C0),o("div",_0,[o("div",S0,[t[85]||(t[85]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",N0,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+n?.repoId)},[...t[74]||(t[74]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,D0),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+n?.repoId+"/")},[...t[75]||(t[75]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View repo",-1)])],8,R0),n?.options?.page&&n?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+n?.repoId+"/")},[...t[76]||(t[76]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" View page",-1)])],8,T0)):p("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.fetchGithubInfo(n),["prevent"])},[...t[77]||(t[77]=[o("i",{class:"fab fa-github"},null,-1),b(" Live GitHub info",-1)])],8,A0),t[83]||(t[83]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.updateRepository(n),["prevent"])},[...t[78]||(t[78]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update",-1)])],8,O0),[[W,n?.status=="ready"||n?.status=="error"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.updateRepository(n),["prevent"])},[...t[79]||(t[79]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable",-1)])],8,I0),[[W,n?.status=="removed"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.showStatusMessage(n),["prevent"])},[...t[80]||(t[80]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" View status message",-1)])],8,P0),[[W,n?.statusMessage]]),t[84]||(t[84]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.removeCache(n),["prevent"])},[...t[81]||(t[81]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])],8,V0),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:me(a=>e.removeRepository(n),["prevent"])},[...t[82]||(t[82]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,q0),[[W,n?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",M0,[...t[86]||(t[86]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):p("v-if",!0)])])}var $0={class:"container paper-page admin-page"},L0={class:"admin-summary"},U0={class:"summary-total"},F0=["aria-pressed"],z0={class:"count"},H0=["aria-pressed"],B0={class:"count"},j0=["aria-pressed"],G0={class:"count"},W0={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},K0={class:"w-100 admin-filter-toolbar","aria-label":"Users","accept-charset":"UTF-8"},Y0={class:"admin-filter-row"},J0={class:"search-wrap"},Q0={type:"search",class:"form-control","aria-label":"Search users",placeholder:"Search username or email\u2026",autocomplete:"off"},X0={key:0,class:"admin-search-hint"},Z0={class:"admin-filter-inline"},x0={class:"form-control form-control-sm"},eE={class:"admin-filter-inline","aria-label":"Pagination"},tE=["disabled"],oE={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},sE=["disabled"],nE={key:0,class:"admin-filter-row"},rE={class:"admin-active-chips"},iE={class:"key"},aE=["onClick"],lE={key:1,class:"bulk-bar"},dE={class:"paper-table w-100",role:"table","aria-label":"Users",style:{"--cols":"28px minmax(280px, 2.4fr) 100px 140px 140px 52px"}},uE={class:"paper-table-head admin-users-row",role:"row"},cE={role:"columnheader",style:{width:"28px"}},pE=["checked"],fE={role:"columnheader"},mE={role:"columnheader"},hE={role:"cell",style:{width:"28px"}},vE={type:"checkbox","aria-label":"Select user"},gE={class:"cell-anon",role:"cell"},yE=["src"],bE={class:"anon-text"},wE=["textContent","href"],kE={class:"anon-sub"},EE={key:0},CE=["href"],_E={key:1},SE={class:"cell-views num",role:"cell"},NE=["textContent","href"],DE={class:"cell-status",role:"cell"},RE=["textContent"],TE={class:"cell-status",role:"cell"},AE={key:0,class:"type-badge type-repo"},OE={key:1,class:"empty-dash"},IE={class:"cell-actions",role:"cell"},PE={class:"dropdown"},VE={class:"dropdown-menu dropdown-menu-right"},qE=["href"],ME=["href"],$E=["onClick"],LE=["onClick"],UE={key:0,class:"paper-table-empty"},FE={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},zE={style:{"font-size":"12px",color:"var(--ink-muted)"}},HE={key:0,class:"pagination-compact"},BE=["disabled"],jE=["max"],GE=["disabled"],WE={class:"admin-filter-inline"},KE={class:"form-control form-control-sm"};function kl(e,t){let s=be("field"),r=be("form");return l(),d("div",$0,[t[46]||(t[46]=ce('
Admin \xA0/\xA0 Users

Users

',3)),o("div",L0,[o("span",U0,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.status=="active"}]),onClick:t[0]||(t[0]=n=>{e.query.status=e.query.status=="active"?"":"active",e.query.page=1}),"aria-pressed":e.query?.status=="active"},[t[13]||(t[13]=b("Active ",-1)),o("span",z0,c(e.fmt?.number(e.statusCountFor("active"))),1)],10,F0),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.status=="banned"}]),onClick:t[1]||(t[1]=n=>{e.query.status=e.query.status=="banned"?"":"banned",e.query.page=1}),"aria-pressed":e.query?.status=="banned"},[t[14]||(t[14]=b("Banned ",-1)),o("span",B0,c(e.fmt?.number(e.statusCountFor("banned"))),1)],10,H0),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.status=="removed"}]),onClick:t[2]||(t[2]=n=>{e.query.status=e.query.status=="removed"?"":"removed",e.query.page=1}),"aria-pressed":e.query?.status=="removed"},[t[15]||(t[15]=b("Removed ",-1)),o("span",G0,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,j0)]),e.fetchError?(l(),d("div",W0,[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):p("v-if",!0),N((l(),d("form",K0,[o("div",Y0,[o("div",J0,[N(o("input",Q0,null,512),[[s,{state:e.viewState,set:n=>{e.query.search=n},value:e.query?.search,form:null,options:{}}]]),e.query?.search?p("v-if",!0):(l(),d("span",X0,"/"))]),o("span",Z0,[t[18]||(t[18]=o("label",null,"Role",-1)),N((l(),d("select",x0,[...t[17]||(t[17]=[o("option",{value:""},"Any",-1),o("option",{value:"admin"},"Admin",-1)])])),[[s,{state:e.viewState,set:n=>{e.query.role=n},value:e.query?.role,form:null,options:{}}]])]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[3]||(t[3]=n=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",eE,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[4]||(t[4]=n=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,tE),o("span",oE,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[5]||(t[5]=n=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,sE)])]),e.chips?.length?(l(),d("div",nE,[o("div",rE,[(l(!0),d(X,null,re(e.chips,(n,i)=>(l(),d("span",{class:"admin-active-chip",key:n?.key},[o("span",iE,c(n?.label),1),o("span",null,c(n?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(n.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,aE)]))),128))])])):p("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",lE,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[24]||(t[24]=b(" selected",-1))]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[6]||(t[6]=n=>e.bulkBan())},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=n=>{e.selected={},e.allSelected=!1})},"Clear")])):p("v-if",!0),o("div",dE,[o("div",uE,[o("div",cE,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[8]||(t[8]=n=>e.selectAllOnPage()),checked:e.allSelected},null,8,pE)]),o("div",fE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="username"}]),onClick:t[9]||(t[9]=n=>e.sortBy("username"))},[t[27]||(t[27]=b("User ",-1)),e.sortIcon("username")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("username")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",mE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[10]||(t[10]=n=>e.sortBy("status"))},[t[29]||(t[29]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader"},"Role",-1)),t[32]||(t[32]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,re(e.filteredUsers,(n,i)=>(l(),d("div",{class:A(["paper-table-row admin-users-row",{"row-selected":e.selected[n?.username]}]),role:"row"},[o("div",hE,[N(o("input",vE,null,512),[[s,{state:e.viewState,set:a=>{e.selected[n.username]=a},value:e.selected[n?.username],form:null,options:{}}]])]),o("div",gE,[n?.photo?(l(),d("img",{key:0,width:"28",height:"28",class:"rounded-circle",style:{"flex-shrink":"0"},src:e.safeUrl(n?.photo)},null,8,yE)):p("v-if",!0),o("div",bE,[o("a",{class:"repo-name",textContent:c(n?.username),href:e.safeUrl("/admin/users/"+n?.username)},null,8,wE),o("div",kE,[n?.emails?.[0]?.email?(l(),d("span",EE,c(n?.emails?.[0]?.email)+" \xB7 ",1)):p("v-if",!0),o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+n?.username)},[t[33]||(t[33]=o("i",{class:"fab fa-github"},null,-1)),b(" "+c(n?.username),1)],8,CE),n?.dateOfEntry?(l(),d("span",_E,"\xA0\xB7\xA0Joined "+c(e.fmt?.humanTime(n?.dateOfEntry)),1)):p("v-if",!0)])])]),o("div",SE,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show this user's repositories",textContent:c(e.fmt?.number(n?.repoCount||0)),href:e.safeUrl("/admin/repositories?owner="+n?.username)},null,8,NE)]),o("div",DE,[o("span",{class:A(["status-dot",{"status-ready":n?.status=="active","status-removed":n?.status=="removed"||n?.status=="banned"}])},null,2),o("span",{textContent:c(e.fmt?.title(n?.status))},null,8,RE)]),o("div",TE,[n?.isAdmin?(l(),d("span",AE,"Admin")):p("v-if",!0),n?.isAdmin?p("v-if",!0):(l(),d("span",OE,"\u2014"))]),o("div",IE,[o("div",PE,[t[40]||(t[40]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",VE,[o("a",{class:"dropdown-item",href:e.safeUrl("/admin/users/"+n?.username)},[...t[35]||(t[35]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View details",-1)])],8,qE),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/repositories?owner="+n?.username)},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),b(" View repositories",-1)])],8,ME),t[39]||(t[39]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:me(a=>e.banUser(n),["prevent"])},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])],8,$E),[[W,n?.status=="active"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.activateUser(n),["prevent"])},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Activate",-1)])],8,LE),[[W,n?.status=="removed"||n?.status=="banned"]])])])])],2))),256)),e.filteredUsers?.length==0?(l(),d("div",UE,[...t[41]||(t[41]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No users match the current filters.",-1)])])):p("v-if",!0)]),o("div",FE,[o("span",zE,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",HE,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=n=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous",-1)])],8,BE),N(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,jE),[[s,{state:e.viewState,set:n=>{e.query.page=n},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=n=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[43]||(t[43]=[b("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,GE)])):p("v-if",!0),o("span",WE,[t[45]||(t[45]=o("label",null,"Per page",-1)),N((l(),d("select",KE,[...t[44]||(t[44]=[o("option",{value:"10"},"10",-1),o("option",{value:"25"},"25",-1),o("option",{value:"50"},"50",-1),o("option",{value:"100"},"100",-1)])])),[[s,{state:e.viewState,set:n=>{e.query.limit=n},value:e.query?.limit,form:null,options:{}}]])])])])}var YE={class:"anonymize-landing"},JE={class:"anonymize-landing-inner"},QE={class:"form-group mt-4 mb-2"},XE={class:"source-url-label-row"},ZE={key:0,class:"repo-access","aria-label":"GitHub access"},xE={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},eC=["aria-pressed","disabled"],tC=["aria-pressed","disabled"],oC={key:1,class:"connection-badge"},sC={id:"sourceUrl-landing",type:"text",class:"form-control form-control-lg",placeholder:"https://github.com/owner/repository"},nC={key:0,class:"draft-status",role:"status"},rC={key:1,class:"text-danger",role:"alert"},iC={key:2,class:"repo-access-details","aria-label":"GitHub access"},aC={class:"repo-access-main"},lC={class:"repo-access-controls"},dC={key:1,class:"connection-link",href:"/connections"},uC={class:"repo-access-note"},cC={key:0},pC={class:"anonymize-workspace"},fC={class:"anonymize-topbar"},mC={class:"anonymize-topbar-inner"},hC={class:"paper-crumbs"},vC={class:"here"},gC={class:"anonymize-topbar-head"},yC={class:"paper-page-title anonymize-topbar-title"},bC={key:0},wC={key:1},kC={key:0,class:"alert alert-info",role:"status"},EC={key:1,class:"alert alert-info",role:"status"},CC={key:1},_C={class:"anonymize-mobile-tabs",role:"tablist","aria-label":"Anonymization workspace"},SC=["aria-selected","tabindex"],NC=["aria-selected","tabindex"],DC={key:2,class:"anonymize-preview-empty",id:"workspace-preview",role:"status"},RC={class:"anonymize-split"},TC=["role","aria-labelledby"],AC={class:"form needs-validation paper-settings-main",name:"anonymize",novalidate:""},OC={class:"paper-settings-section"},IC={class:"form-group"},PC={class:"source-url-label-row"},VC={key:0,class:"repo-access","aria-label":"GitHub access"},qC={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},MC=["aria-pressed","disabled"],$C=["aria-pressed","disabled"],LC={key:1,class:"connection-badge"},UC=["disabled"],FC={class:"invalid-feedback"},zC={class:"invalid-feedback"},HC={class:"invalid-feedback"},BC={class:"invalid-feedback"},jC={key:0,class:"repo-access-details","aria-label":"GitHub access"},GC={class:"repo-access-main"},WC={class:"repo-access-controls"},KC={key:1,class:"connection-link",href:"/connections"},YC={class:"repo-access-note"},JC={key:0},QC={key:1,class:"repo-access-details"},XC={key:0,role:"status"},ZC={key:2,class:"form-grid-2"},xC={class:"form-group"},e_={class:"input-group"},t_={class:"form-control",id:"branch",name:"branch"},o_=["textContent","value"],s_={class:"input-group-append"},n_={class:"form-group"},r_=["disabled"],i_={class:"invalid-feedback"},a_={class:"invalid-feedback"},l_={class:"form-check"},d_={class:"form-check-input",type:"checkbox",id:"update",name:"update"},u_={class:"paper-settings-section"},c_={class:"form-group"},p_=["disabled"],f_={class:"form-text text-muted"},m_={class:"invalid-feedback"},h_={class:"form-group"},v_=["disabled"],g_={class:"form-text text-muted"},y_={class:"invalid-feedback"},b_={class:"form-group"},w_=["disabled"],k_={class:"form-text text-muted"},E_={class:"invalid-feedback"},C_={class:"form-group"},__={class:"form-text text-muted"},S_=["href"],N_={class:"invalid-feedback"},D_={class:"form-text text-muted"},R_={class:"paper-settings-section"},T_={class:"form-group"},A_={class:"form-text text-muted"},O_={class:"warning-feedback"},I_={class:"invalid-feedback"},P_={class:"paper-settings-section"},V_={class:"form-check"},q_={class:"form-check-input",type:"checkbox",id:"link",name:"link"},M_={class:"form-check"},$_={class:"form-check-input",type:"checkbox",id:"image",name:"image"},L_={class:"form-check"},U_={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},F_={class:"form-check"},z_={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},H_={class:"form-check"},B_=["disabled"],j_={key:0,class:"form-text text-muted"},G_={key:1,class:"form-text text-muted"},W_={class:"form-check"},K_={class:"form-check-input",type:"checkbox",id:"title-gist",name:"title-gist"},Y_={class:"form-check"},J_={class:"form-check-input",type:"checkbox",id:"content-gist",name:"content-gist"},Q_={class:"form-check"},X_={class:"form-check-input",type:"checkbox",id:"comments-gist",name:"comments-gist"},Z_={class:"form-check"},x_={class:"form-check-input",type:"checkbox",id:"username-gist",name:"username-gist"},e2={class:"form-check"},t2={class:"form-check-input",type:"checkbox",id:"date-gist",name:"date-gist"},o2={class:"form-check"},s2={class:"form-check-input",type:"checkbox",id:"origin-gist",name:"origin-gist"},n2={class:"form-check"},r2={class:"form-check-input",type:"checkbox",id:"title",name:"title"},i2={class:"form-check"},a2={class:"form-check-input",type:"checkbox",id:"body",name:"body"},l2={class:"form-check"},d2={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},u2={class:"form-check"},c2={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},p2={class:"form-check"},f2={class:"form-check-input",type:"checkbox",id:"username",name:"username"},m2={class:"form-check"},h2={class:"form-check-input",type:"checkbox",id:"date",name:"date"},v2={class:"form-check"},g2={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},y2={class:"paper-settings-section"},b2={class:"form-grid-2"},w2={class:"form-group"},k2={class:"form-control",id:"expiration",name:"expiration"},E2={class:"form-group"},C2=["min","max"],_2={class:"invalid-feedback"},S2={class:"invalid-feedback"},N2={class:"paper-settings-section"},D2={class:"form-group"},R2={style:{position:"relative"}},T2={type:"text",id:"coauthorSearch",class:"form-control",placeholder:"Search GitHub username\u2026",autocomplete:"off"},A2={class:"dropdown-menu show",style:{display:"block","max-height":"220px","overflow-y":"auto",width:"100%"}},O2=["onClick"],I2=["src"],P2=["textContent"],V2=["textContent"],q2={class:"coauthor-list"},M2={class:"coauthor-row d-flex align-items-center",style:{padding:"6px 0",gap:"8px"}},$2=["src"],L2=["textContent","href"],U2=["onClick"],F2={class:"form-text text-muted"},z2=["textContent"],H2={key:1,class:"draft-status",role:"status"},B2={key:2,class:"draft-status"},j2={key:3,class:"anonymize-review-note"},G2={class:"anonymize-submit-bar"},W2=["disabled"],K2=["disabled"],Y2=["disabled"],J2=["disabled"],Q2=["disabled"],X2=["disabled"],Z2=["role","aria-labelledby"],x2={class:"anonymize-preview-head"},eS={class:"anonymize-preview-sub"},tS={key:0,class:"anonymize-preview-status",role:"status"},oS={key:1,class:"anonymize-preview-status",role:"status"},sS={key:2,class:"anonymize-preview-status",role:"alert"},nS={key:3,class:"anonymize-preview-status"},rS=["innerHTML"],iS=["role","aria-labelledby"],aS={class:"anonymize-preview-head"},lS={class:"anonymize-preview-sub"},dS={key:0,class:"anonymize-preview-status",role:"status"},uS={key:1,class:"anonymize-preview-status",role:"status"},cS={key:2,class:"anonymize-preview-status",role:"alert"},pS={key:3,class:"anonymize-preview-body"},fS={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},mS={class:"pr-title mb-1"},hS={key:0},vS=["textContent"],gS={key:0},yS={key:1},bS={key:2},wS={class:"pr-comments mt-3"},kS={class:"pr-comment"},ES={class:"pr-comment-head"},CS=["textContent"],_S={key:0,class:"pr-comment-date"},SS={key:3},NS={class:"pr-comments"},DS={class:"pr-comment"},RS={class:"pr-comment-head"},TS={key:0,class:"pr-comment-author"},AS=["textContent"],OS=["textContent"],IS={key:0,class:"pr-comment-body"},PS=["role","aria-labelledby"],VS={class:"anonymize-preview-head"},qS={class:"anonymize-preview-sub"},MS={key:0,class:"anonymize-preview-status",role:"status"},$S={key:1,class:"anonymize-preview-status",role:"status"},LS={key:2,class:"anonymize-preview-status",role:"alert"},US={key:3,class:"anonymize-preview-body"},FS={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},zS={class:"pr-title mb-1"},HS={key:0},BS=["textContent"],jS={key:0},GS={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--paper-bg-alt)"}},WS={key:2,class:"paper-tabs",role:"tablist"},KS=["aria-selected","tabindex"],YS=["aria-selected","tabindex"],JS=["textContent"],QS={key:3,class:"anonymize-preview-status"},XS={class:"paper-tab-content"},ZS={key:0,role:"tabpanel",id:"preview-pr-diff-panel","aria-labelledby":"preview-pr-diff-tab"},xS=["innerHTML"],eN={key:1,role:"tabpanel",id:"preview-pr-comments-panel","aria-labelledby":"preview-pr-comments-tab"},tN={class:"pr-comments"},oN={class:"pr-comment"},sN={class:"pr-comment-head"},nN={key:0,class:"pr-comment-author"},rN=["textContent"],iN=["textContent"],aN={key:0,class:"pr-comment-body"};function El(e,t){let s=We("gist-file"),r=We("markdown"),n=be("field"),i=be("form");return l(),d("div",{class:A(["anonymize-page h-100",{"mobile-preview-active":e.mobilePane==="preview"}])},[p(" ===== STATE 1: No URL \u2014 centered input ===== "),N(o("div",YE,[o("div",JE,[t[36]||(t[36]=o("div",{class:"paper-crumbs"},[b("My work \xA0/\xA0 "),o("span",{class:"here"},"New anonymization")],-1)),t[37]||(t[37]=o("h1",{class:"paper-page-title"},[b("New "),o("em",null,"anonymization")],-1)),t[38]||(t[38]=o("p",{class:"paper-page-lede"}," Paste a GitHub repository, pull-request, or gist URL. We\u2019ll fetch it, redact the terms you choose in text files, and give you a share link. Images and PDFs are served unchanged when enabled. Review them before sharing. ",-1)),o("div",QE,[o("div",XE,[t[32]||(t[32]=o("label",{class:"paper-field-label",for:"sourceUrl-landing"},"Source URL",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",ZE,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",xE,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[0]||(t[0]=a=>e.chooseGitHubConnection("github-app"))},[...t[31]||(t[31]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(),o("span",{class:"sr-only"},"Read-only ",-1),b("GitHub App",-1)])],8,eC),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[1]||(t[1]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,tC)])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",oC,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):p("v-if",!0)])):p("v-if",!0)]),N(o("input",sC,null,512),[[n,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:null,options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]])]),e.draftRestored?(l(),d("div",nC,[t[33]||(t[33]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[2]||(t[2]=a=>e.discardDraft())},"Discard draft")])):p("v-if",!0),e.sourceUrlError?(l(),d("p",rC,c(e.sourceUrlError),1)):p("v-if",!0),t[39]||(t[39]=o("small",{class:"form-text",style:{color:"var(--ink-muted)"}}," Repository, pull request (\u2026/pull/42) and gist (gist.github.com/\u2026) URLs are all accepted. ",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",iC,[o("div",aC,[o("div",lC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[3]||(t[3]=a=>e.grantGitHubAccess())},[...t[34]||(t[34]=[b("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",dC,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):p("v-if",!0)])]),o("div",uC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",cC,"Select repositories on GitHub, then return here.")):p("v-if",!0),t[35]||(t[35]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Selected content will be published, including content from private repositories.")],-1))])])):p("v-if",!0)])],512),[[W,!e.workspaceOpen&&!e.isUpdate]]),p(" ===== STATE 2: URL provided \u2014 form (left) + preview (right) ===== "),N(o("div",pC,[o("header",fC,[o("div",mC,[o("div",hC,[t[40]||(t[40]=o("a",{href:"/dashboard"},"My work",-1)),t[41]||(t[41]=b(" \xA0/\xA0 ",-1)),o("span",vC,c(e.isUpdate?"Edit anonymization":"New anonymization"),1)]),o("div",gC,[o("h1",yC,[e.isUpdate?p("v-if",!0):(l(),d("span",bC,[...t[42]||(t[42]=[b("New ",-1),o("em",null,"anonymization",-1)])])),e.isUpdate?(l(),d("span",wC,[...t[43]||(t[43]=[b("Edit ",-1),o("em",null,"anonymization",-1)])])):p("v-if",!0)]),N(o("span",{class:A(["type-badge",{"type-repo":e.detectedType==="repo","type-pr":e.detectedType==="pr","type-gist":e.detectedType==="gist"}])},c(e.detectedType==="repo"?"Repo":e.detectedType==="pr"?"PR":"Gist"),3),[[W,e.detectedType]])])])]),e.detectedType==="gist"&&e.gistAppRequired?(l(),d("aside",kC,[t[44]||(t[44]=o("p",null,"Reconnect your GitHub account to read this gist. Your draft will be restored when you return.",-1)),o("button",{type:"button",class:"btn btn-ink",onClick:t[4]||(t[4]=a=>e.connectGistApp())},"Connect GitHub App to access gists")])):p("v-if",!0),e.detectedType==="gist"&&e.gistOAuthRequired?(l(),d("aside",EC,[t[45]||(t[45]=o("p",null,"Connect GitHub OAuth to access gists. Your account and existing anonymizations stay the same, and your draft will be restored when you return.",-1)),t[46]||(t[46]=o("p",null,"GitHub's legacy OAuth connection includes write access to private repositories.",-1)),e.githubConnections?.oauthEnabled?(l(),d("button",{key:0,type:"button",class:"btn btn-ink",onClick:t[5]||(t[5]=a=>e.connectGistOAuth())},"Connect GitHub OAuth to access gists")):(l(),d("p",CC,"GitHub OAuth is currently unavailable. Please try again later."))])):p("v-if",!0),o("nav",_C,[o("button",{id:"workspace-settings-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="settings","aria-controls":"workspace-settings",tabindex:e.mobilePane==="settings"?0:-1,onKeydown:t[6]||(t[6]=a=>e.previewTabKeydown(a)),onClick:t[7]||(t[7]=a=>e.selectMobilePane("settings"))},"Settings",40,SC),o("button",{id:"workspace-preview-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="preview","aria-controls":"workspace-preview",tabindex:e.mobilePane==="preview"?0:-1,onKeydown:t[8]||(t[8]=a=>e.previewTabKeydown(a)),onClick:t[9]||(t[9]=a=>e.selectMobilePane("preview"))},"Reviewer preview",40,NC)]),e.detectedType!=="repo"&&!e.details?(l(),d("div",DC,c(e.sourceLoading?"Loading source\u2026":"Choose an accessible source to see its preview."),1)):p("v-if",!0),o("div",RC,[p(" Form column (left) "),o("div",{id:"workspace-settings",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-settings-tab":null,class:"anonymize-form-col overflow-auto"},[N((l(),d("form",AC,[o("section",OC,[t[57]||(t[57]=o("div",{class:"paper-section-eyebrow"},"Source",-1)),o("div",IC,[o("div",PC,[t[48]||(t[48]=o("label",{class:"paper-field-label",for:"sourceUrl"},"GitHub URL",-1)),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",VC,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",qC,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[10]||(t[10]=a=>e.chooseGitHubConnection("github-app"))},[...t[47]||(t[47]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(),o("span",{class:"sr-only"},"Read-only ",-1),b("GitHub App",-1)])],8,MC),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[11]||(t[11]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,$C)])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",LC,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):p("v-if",!0)])):p("v-if",!0)]),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.sourceUrl?.invalid}]),name:"sourceUrl",id:"sourceUrl",disabled:e.isUpdate&&e.detectedType!=="repo",placeholder:"Paste a GitHub repo or pull request URL"},null,10,UC),[[n,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]]),N(o("div",FC," Please provide a valid GitHub URL. ",512),[[W,e.anonymize?.sourceUrl?.errors?.github]]),N(o("div",zC," Not accessible. The organization may restrict access. ",512),[[W,e.anonymize?.sourceUrl?.errors?.access]]),N(o("div",HC," Does not exist or is not accessible. ",512),[[W,e.anonymize?.sourceUrl?.errors?.missing]]),N(o("div",BC," Already anonymized. ",512),[[W,e.anonymize?.sourceUrl?.errors?.used]])]),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",jC,[o("div",GC,[o("div",WC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[12]||(t[12]=a=>e.grantGitHubAccess())},[...t[49]||(t[49]=[b("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",KC,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):p("v-if",!0)])]),o("div",YC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",JC,"Select repositories on GitHub, then return here.")):p("v-if",!0),t[50]||(t[50]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Selected content will be published, including content from private repositories.")],-1))])])):p("v-if",!0),e.isUpdate&&e.detectedType==="repo"&&e.role==="owner"&&e.sourceUrl==="https://github.com/"+e._originalFullName?(l(),d("aside",QC,[t[51]||(t[51]=o("p",null,"If you deleted and recreated this repository, reconnect it before choosing a branch.",-1)),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[13]||(t[13]=a=>e.reconnectSource())},"Reconnect source repository"),e.reconnectRepositoryId?(l(),d("p",XC,"Source reloaded. Review the branch, commit, and anonymization preview, then save to replace the published snapshot.")):p("v-if",!0)])):p("v-if",!0),e.detectedType==="repo"?(l(),d("div",ZC,[o("div",xC,[t[53]||(t[53]=o("label",{class:"paper-field-label",for:"branch"},"Branch",-1)),o("div",e_,[N((l(),d("select",t_,[(l(!0),d(X,null,re(e.branches,(a,u)=>(l(),d("option",{textContent:c(a?.name),value:a?.name},null,8,o_))),256))])),[[n,{state:e.viewState,set:a=>{e.source.branch=a},value:e.source?.branch,form:"anonymize",options:{}}]]),o("div",s_,[o("button",{class:"btn btn-icon",type:"button",title:"Refresh","data-toggle":"tooltip","data-placement":"bottom",onClick:t[14]||(t[14]=a=>e.getBranches(!0)),"aria-label":"Refresh"},[...t[52]||(t[52]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])])]),o("div",n_,[t[54]||(t[54]=o("label",{class:"paper-field-label",for:"commit"},"Commit",-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.commit?.invalid}]),id:"commit",disabled:e.options.update,name:"commit",pattern:"[a-fA-Z0-9]{6,}",required:""},null,10,r_),[[n,{state:e.viewState,set:a=>{e.source.commit=a},value:e.source?.commit,form:"anonymize",options:{}}]]),N(o("div",i_," The commit SHA is not valid. ",512),[[W,e.anonymize?.commit?.errors?.pattern||e.anonymize?.commit?.errors?.required]]),N(o("div",a_," This commit no longer exists in the repository. Click refresh to get the latest. ",512),[[W,e.anonymize?.commit?.errors?.exists]])])])):p("v-if",!0),N(o("div",l_,[N(o("input",d_,null,512),[[n,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"anonymize",options:{}}]]),t[55]||(t[55]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[56]||(t[56]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))],512),[[W,e.detectedType]])]),N(o("section",u_,[t[68]||(t[68]=o("div",{class:"paper-section-eyebrow"},"Identity",-1)),N(o("div",c_,[t[60]||(t[60]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.repoId?.invalid}]),name:"repoId",id:"repoId",disabled:e.isUpdate},null,10,p_),[[n,{state:e.viewState,set:a=>{e.repoId=a},value:e.repoId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",f_,[t[58]||(t[58]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/r/"+c(e.repoId),1),t[59]||(t[59]=b(".",-1))]),N(o("div",m_,"ID can only contain letters and numbers.",512),[[W,e.anonymize?.repoId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.repoId)+" is already used.",513),[[W,e.anonymize?.repoId?.errors?.used]])],512),[[W,e.detectedType==="repo"]]),N(o("div",h_,[t[63]||(t[63]=o("label",{class:"paper-field-label",for:"pullRequestId"},"Anonymized pull request ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId",disabled:e.isUpdate},null,10,v_),[[n,{state:e.viewState,set:a=>{e.pullRequestId=a},value:e.pullRequestId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",g_,[t[61]||(t[61]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/pr/"+c(e.pullRequestId),1),t[62]||(t[62]=b(".",-1))]),N(o("div",y_,"ID can only contain letters and numbers.",512),[[W,e.anonymize?.pullRequestId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used.",513),[[W,e.anonymize?.pullRequestId?.errors?.used]])],512),[[W,e.detectedType==="pr"]]),N(o("div",b_,[t[66]||(t[66]=o("label",{class:"paper-field-label",for:"gistId"},"Anonymized gist ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.gistId?.invalid}]),name:"gistId",id:"gistId",disabled:e.isUpdate},null,10,w_),[[n,{state:e.viewState,set:a=>{e.gistId=a},value:e.gistId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",k_,[t[64]||(t[64]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/gist/"+c(e.gistId),1),t[65]||(t[65]=b(".",-1))]),N(o("div",E_,"ID can only contain letters and numbers.",512),[[W,e.anonymize?.gistId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.gistId)+" is already used.",513),[[W,e.anonymize?.gistId?.errors?.used]])],512),[[W,e.detectedType==="gist"]]),o("div",C_,[t[67]||(t[67]=o("label",{class:"paper-field-label",for:"conference"},[b("Conference "),o("span",{class:"paper-optional"},"(optional)")],-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[n,{state:e.viewState,set:a=>{e.conference=a},value:e.conference,form:"anonymize",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),N(o("small",__,[o("a",{target:"_blank",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,S_),b(" expires "+c(e.fmt?.date(e.conference_data?.endDate))+". ",1)],512),[[W,e.conference_data]]),N(o("div",N_,"The conference is not activated.",512),[[W,e.anonymize?.conference?.errors?.activated]]),N(o("small",D_,"Link to a conference to apply its shared defaults.",512),[[W,!e.conference_data]])])],512),[[W,e.detectedType]]),N(o("section",R_,[t[76]||(t[76]=o("div",{class:"paper-section-eyebrow"},"Anonymization",-1)),o("div",T_,[t[75]||(t[75]=o("label",{class:"paper-field-label",for:"terms"},"Terms to redact",-1)),N(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"4"},null,2),[[n,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),o("small",A_,[t[69]||(t[69]=b("One term per line (regex allowed). Replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[70]||(t[70]=b(", or use ",-1)),t[71]||(t[71]=o("code",null,"term=>replacement",-1)),t[72]||(t[72]=b(" to pick your own (e.g. ",-1)),t[73]||(t[73]=o("code",null,"Anonymous=>ABC",-1)),t[74]||(t[74]=b(").",-1))]),N(o("div",O_,"Regex characters detected. Escape them if unintentional.",512),[[W,e.termsRegexWarning]]),N(o("div",I_,"Terms are in an invalid format.",512),[[W,e.anonymize?.terms?.errors?.format]])])],512),[[W,e.detectedType]]),N(o("section",P_,[t[97]||(t[97]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),N(o("div",null,[o("div",V_,[N(o("input",q_,null,512),[[n,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[77]||(t[77]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),o("div",M_,[N(o("input",$_,null,512),[[n,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[78]||(t[78]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[79]||(t[79]=o("small",{class:"form-text text-muted"},"Images are served unchanged and may contain names or affiliations.",-1))]),o("div",L_,[N(o("input",U_,null,512),[[n,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[80]||(t[80]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[81]||(t[81]=o("small",{class:"form-text text-muted"},[b("PDF contents and metadata are served unchanged. "),o("a",{href:"/faq#formats"},"About supported formats")],-1))]),o("div",F_,[N(o("input",z_,null,512),[[n,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[82]||(t[82]=o("label",{class:"form-check-label",for:"notebook"},"Display Notebooks",-1))]),o("div",H_,[N(o("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,B_),[[n,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[83]||(t[83]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?p("v-if",!0):(l(),d("small",j_,c(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",G_,c(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):p("v-if",!0)])],512),[[W,e.detectedType==="repo"]]),N(o("div",null,[o("div",W_,[N(o("input",K_,null,512),[[n,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[84]||(t[84]=o("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),o("div",Y_,[N(o("input",J_,null,512),[[n,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[85]||(t[85]=o("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),o("div",Q_,[N(o("input",X_,null,512),[[n,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[86]||(t[86]=o("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),o("div",Z_,[N(o("input",x_,null,512),[[n,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[87]||(t[87]=o("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),o("div",e2,[N(o("input",t2,null,512),[[n,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[88]||(t[88]=o("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),o("div",o2,[N(o("input",s2,null,512),[[n,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[89]||(t[89]=o("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[W,e.detectedType==="gist"]]),N(o("div",null,[o("div",n2,[N(o("input",r2,null,512),[[n,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[90]||(t[90]=o("label",{class:"form-check-label",for:"title"},"PR title",-1))]),o("div",i2,[N(o("input",a2,null,512),[[n,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[91]||(t[91]=o("label",{class:"form-check-label",for:"body"},"PR body",-1))]),o("div",l2,[N(o("input",d2,null,512),[[n,{state:e.viewState,set:a=>{e.options.diff=a},value:e.options?.diff,form:"anonymize",options:{}}]]),t[92]||(t[92]=o("label",{class:"form-check-label",for:"diff"},"Diff",-1))]),o("div",u2,[N(o("input",c2,null,512),[[n,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[93]||(t[93]=o("label",{class:"form-check-label",for:"comments"},"Comments",-1))]),o("div",p2,[N(o("input",f2,null,512),[[n,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[94]||(t[94]=o("label",{class:"form-check-label",for:"username"},"Usernames",-1))]),o("div",m2,[N(o("input",h2,null,512),[[n,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[95]||(t[95]=o("label",{class:"form-check-label",for:"date"},"Dates",-1))]),o("div",v2,[N(o("input",g2,null,512),[[n,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[96]||(t[96]=o("label",{class:"form-check-label",for:"origin"},"Project name",-1))])],512),[[W,e.detectedType==="pr"]])],512),[[W,e.detectedType]]),N(o("section",y2,[t[101]||(t[101]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",b2,[o("div",w2,[t[99]||(t[99]=o("label",{class:"paper-field-label",for:"expiration"},"Strategy",-1)),N((l(),d("select",k2,[...t[98]||(t[98]=[o("option",{value:"redirect"},"Redirect to GitHub when expired",-1),o("option",{value:"remove",selected:""},"Remove when expired",-1)])])),[[n,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"anonymize",options:{}}]])]),o("div",E2,[t[100]||(t[100]=o("label",{class:"paper-field-label",for:"expirationDate"},"Expiration date",-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.expirationDate?.invalid}]),type:"date",name:"expirationDate",id:"expirationDate",required:"",min:e.minExpirationDate,max:e.maxExpirationDate},null,10,C2),[[n,{state:e.viewState,set:a=>{e.options.expirationDate=a},value:e.options?.expirationDate,form:"anonymize",options:{}}]]),N(o("div",_2,"Pick a date in the future.",512),[[W,e.anonymize?.expirationDate?.errors?.min]]),N(o("div",{class:"invalid-feedback"},"Pick a date on or before "+c(e.fmt?.date(e.maxExpirationDate))+".",513),[[W,e.anonymize?.expirationDate?.errors?.max]]),N(o("div",S2,"Enter a valid expiration date.",512),[[W,e.anonymize?.expirationDate?.errors?.required||e.anonymize?.expirationDate?.errors?.date]])])]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the content will be removed.",513),[[W,e.options?.expirationMode=="remove"&&e.options?.expirationDate]]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", visitors will be redirected to GitHub.",513),[[W,e.options?.expirationMode=="redirect"&&e.options?.expirationDate]])],512),[[W,e.detectedType]]),N(o("section",N2,[t[105]||(t[105]=o("div",{class:"paper-section-eyebrow"},"Co-authors",-1)),t[106]||(t[106]=o("p",{class:"form-text text-muted",style:{"margin-bottom":"8px"}}," Co-authors can view and edit these settings. They cannot delete the anonymization or manage co-authors. ",-1)),N(o("div",D2,[t[102]||(t[102]=o("label",{class:"paper-field-label",for:"coauthorSearch"},"Add a GitHub user",-1)),o("div",R2,[N(o("input",T2,null,512),[[n,{state:e.viewState,set:a=>{e.coauthorSearch=a},value:e.coauthorSearch,form:"anonymize",options:{debounce:300},change:()=>{e.searchCoauthors()}}]]),N(o("div",A2,[(l(!0),d(X,null,re(e.coauthorResults,(a,u)=>(l(),d("a",{href:"#",class:"dropdown-item d-flex align-items-center",onClick:me(f=>e.addCoauthor(a,f),["prevent"])},[o("img",{alt:"",style:{width:"22px",height:"22px","border-radius":"50%","margin-right":"8px"},src:e.safeUrl(a?.photo)},null,8,I2),o("span",{textContent:c(a?.username)},null,8,P2)],8,O2))),256))],512),[[W,e.coauthorResults?.length>0]])]),N(o("small",{class:"form-text text-muted",textContent:c(e.coauthorError)},null,8,V2),[[W,e.coauthorError]])],512),[[W,e.role==="owner"||e.role==="admin"]]),o("div",q2,[(l(!0),d(X,null,re(e.coauthors,(a,u)=>(l(),d("div",M2,[a?.photo?(l(),d("img",{key:0,alt:"",style:{width:"24px",height:"24px","border-radius":"50%"},src:e.safeUrl(a?.photo)},null,8,$2)):p("v-if",!0),o("a",{target:"_blank",textContent:c(a?.username),href:e.safeUrl("https://github.com/"+a?.username)},null,8,L2),t[104]||(t[104]=o("span",{class:"type-badge type-coauthor"},"Co-author",-1)),N(o("button",{type:"button",class:"btn btn-sm btn-icon",style:{"margin-left":"auto"},title:"Remove co-author",onClick:f=>e.removeCoauthor(a),"aria-label":"Remove co-author"},[...t[103]||(t[103]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,U2),[[W,e.role==="owner"||e.role==="admin"]])]))),256)),N(o("div",F2," No co-authors yet. ",512),[[W,!e.coauthors||e.coauthors?.length===0]])])],512),[[W,e.isUpdate&&e.detectedType==="repo"]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,z2)):p("v-if",!0),e.draftRestored?(l(),d("div",H2,[t[107]||(t[107]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[15]||(t[15]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",B2,[b(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[16]||(t[16]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):p("v-if",!0),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",j2,"Review enabled images and PDFs before sharing. Their contents are not anonymized.")):p("v-if",!0),o("button",{type:"button",class:"btn btn-outline-ink mobile-preview-jump",onClick:t[17]||(t[17]=a=>e.selectMobilePane("preview"))},[...t[108]||(t[108]=[b("Review preview ",-1),o("span",{"aria-hidden":"true"},"\u2192",-1)])]),N(o("div",G2,[e.detectedType==="repo"&&!e.isUpdate?(l(),d("button",{key:0,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[18]||(t[18]=me(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[109]||(t[109]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Repository ",-1)])],8,W2)):p("v-if",!0),e.detectedType==="repo"&&e.isUpdate?(l(),d("button",{key:1,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[19]||(t[19]=me(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[110]||(t[110]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Repository ",-1)])],8,K2)):p("v-if",!0),e.detectedType==="pr"&&!e.isUpdate?(l(),d("button",{key:2,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[20]||(t[20]=me(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[111]||(t[111]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Pull Request ",-1)])],8,Y2)):p("v-if",!0),e.detectedType==="pr"&&e.isUpdate?(l(),d("button",{key:3,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[21]||(t[21]=me(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[112]||(t[112]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Pull Request ",-1)])],8,J2)):p("v-if",!0),e.detectedType==="gist"&&!e.isUpdate?(l(),d("button",{key:4,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[22]||(t[22]=me(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[113]||(t[113]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Gist ",-1)])],8,Q2)):p("v-if",!0),e.detectedType==="gist"&&e.isUpdate?(l(),d("button",{key:5,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[23]||(t[23]=me(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[114]||(t[114]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Gist ",-1)])],8,X2)):p("v-if",!0)],512),[[W,e.detectedType]])])),[[i,e.viewState]])],8,TC),p(" Preview column (right) "),e.detectedType==="repo"?(l(),d("div",{key:0,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",x2,[t[115]||(t[115]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",eS,c(e.previewStatus==="ready"?"README with redactions applied":"README preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",tS,"Loading source\u2026")):p("v-if",!0),e.previewStatus==="loading"?(l(),d("div",oS,"Updating the anonymized preview\u2026")):p("v-if",!0),e.previewStatus==="error"?(l(),d("div",sS,[t[116]||(t[116]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[24]||(t[24]=a=>e.retryPreview())},"Retry preview")])):p("v-if",!0),!e.sourceLoading&&!e.readme&&e.previewStatus==="idle"?(l(),d("div",nS,"No README is available to preview. Review the published files before sharing.")):p("v-if",!0),e.previewStatus==="ready"?(l(),d("div",{key:4,class:"anonymize-preview-body markdown-body body",innerHTML:e.sanitize(e.html_readme)},null,8,rS)):p("v-if",!0)],8,Z2)):p("v-if",!0),e.detectedType==="gist"&&e.details?(l(),d("div",{key:1,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",aS,[t[117]||(t[117]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",lS,c(e.previewStatus==="ready"?"Gist with redactions applied":"Gist preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",dS,"Loading source\u2026")):p("v-if",!0),e.previewStatus==="loading"?(l(),d("div",uS,"Updating the anonymized preview\u2026")):p("v-if",!0),e.previewStatus==="error"?(l(),d("div",cS,[t[118]||(t[118]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[25]||(t[25]=a=>e.retryPreview())},"Retry preview")])):p("v-if",!0),e.previewStatus==="ready"?(l(),d("div",pS,[o("div",fS,[o("h2",mS,[e.options?.title?(l(),d("span",hS,c(e.anonymizeGistContent(e.details?.gist?.description)||"Untitled gist"),1)):p("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.gist?.isPublic,"badge-secondary":!e.details?.gist?.isPublic}])},c(e.details?.gist?.isPublic?"public":"secret"),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.gist?.updatedDate))},null,8,vS)):p("v-if",!0)]),e.options?.origin?(l(),d("small",gS,"Gist ID: "+c(e.details?.source?.gistId),1)):p("v-if",!0),e.options?.username&&e.details?.gist?.ownerLogin?(l(),d("small",yS,"By @"+c(e.anonymizeGistContent(e.details?.gist?.ownerLogin)),1)):p("v-if",!0),e.options?.content&&e.previewGistFiles?.length?(l(),d("div",bS,[o("ul",wS,[(l(!0),d(X,null,re(e.previewGistFiles,(a,u)=>(l(),d("li",kS,[o("div",ES,[o("strong",{textContent:c(a?.filename)},null,8,CS),a?.language?(l(),d("span",_S,c(a?.language),1)):p("v-if",!0)]),Ce(s,{file:a,terms:e.terms,options:e.options},null,8,["file","terms","options"])]))),256))])])):p("v-if",!0),e.options?.comments&&e.details?.gist?.comments&&e.details?.gist?.comments?.length?(l(),d("div",SS,[t[121]||(t[121]=o("h3",{class:"paper-section-eyebrow mt-3"},"Comments",-1)),o("ul",NS,[(l(!0),d(X,null,re(e.details?.gist?.comments,(a,u)=>(l(),d("li",DS,[o("div",RS,[e.options?.username?(l(),d("span",TS,[t[119]||(t[119]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[120]||(t[120]=b(" @",-1)),o("span",{textContent:c(e.anonymizeGistContent(a?.author))},null,8,AS)])):p("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,OS)):p("v-if",!0)]),e.options?.body?(l(),d("div",IS,[Ce(r,{content:e.anonymizeGistContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0)]))),256))])])):p("v-if",!0)])):p("v-if",!0)],8,iS)):p("v-if",!0),e.detectedType==="pr"&&e.details?(l(),d("div",{key:2,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",VS,[t[122]||(t[122]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",qS,c(e.previewStatus==="ready"?"Pull request with redactions applied":"Pull request preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",MS,"Loading source\u2026")):p("v-if",!0),e.previewStatus==="loading"?(l(),d("div",$S,"Updating the anonymized preview\u2026")):p("v-if",!0),e.previewStatus==="error"?(l(),d("div",LS,[t[123]||(t[123]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[26]||(t[26]=a=>e.retryPreview())},"Retry preview")])):p("v-if",!0),e.previewStatus==="ready"?(l(),d("div",US,[o("div",FS,[o("h2",zS,[e.options?.title?(l(),d("span",HS,c(e.anonymizePrContent(e.details?.pullRequest?.title)),1)):p("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,BS)):p("v-if",!0)]),e.options?.origin?(l(),d("small",jS,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):p("v-if",!0),e.options?.body?(l(),d("div",GS,[Ce(r,{content:e.anonymizePrContent(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0),e.options?.diff||e.options?.comments?(l(),d("nav",WS,[e.options?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.prTabState?.active=="diff"}]),type:"button",role:"tab",id:"preview-pr-diff-tab","aria-selected":e.prTabState?.active==="diff","aria-controls":"preview-pr-diff-panel",tabindex:e.prTabState?.active==="diff"?0:-1,onKeydown:t[27]||(t[27]=a=>e.previewTabKeydown(a)),onClick:t[28]||(t[28]=a=>e.prTabState.active="diff")},[...t[124]||(t[124]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Diff ",-1)])],42,KS)):p("v-if",!0),e.options?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.prTabState?.active=="comments"}]),type:"button",role:"tab",id:"preview-pr-comments-tab","aria-selected":e.prTabState?.active==="comments","aria-controls":"preview-pr-comments-panel",tabindex:e.prTabState?.active==="comments"?0:-1,onKeydown:t[29]||(t[29]=a=>e.previewTabKeydown(a)),onClick:t[30]||(t[30]=a=>e.prTabState.active="comments")},[t[125]||(t[125]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,JS)],42,YS)):p("v-if",!0)])):p("v-if",!0),!e.options?.diff&&!e.options?.comments?(l(),d("div",QS,"Diff and comments are hidden by your display settings.")):p("v-if",!0),o("div",XS,[e.options?.diff&&e.prTabState?.active=="diff"?(l(),d("div",ZS,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.anonymizePrContent(e.details?.pullRequest?.diff)))},null,8,xS)])):p("v-if",!0),e.options?.comments&&e.prTabState?.active=="comments"?(l(),d("div",eN,[o("ul",tN,[(l(!0),d(X,null,re(e.details?.pullRequest?.comments,(a,u)=>(l(),d("li",oN,[o("div",sN,[e.options?.username?(l(),d("span",nN,[t[126]||(t[126]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[127]||(t[127]=b(" @",-1)),o("span",{textContent:c(e.anonymizePrContent(a?.author))},null,8,rN)])):p("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,iN)):p("v-if",!0)]),e.options?.body?(l(),d("div",aN,[Ce(r,{content:e.anonymizePrContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0)]))),256))])])):p("v-if",!0)])])):p("v-if",!0)],8,PS)):p("v-if",!0)])],512),[[W,e.workspaceOpen||e.isUpdate]])],2)}var lN={class:"container-fluid h-100 anonymize-page"},dN={class:"row h-100 flex-column flex-md-row"},uN={class:"col-md sidePanel shadow overflow-auto anonymize-form-col"},cN={class:"form-group"},pN={class:"form-group"},fN={class:"form-check"},mN={class:"form-check-input",type:"checkbox",id:"update",name:"update"},hN={class:"form-group"},vN={class:"form-text text-muted"},gN=["href"],yN={class:"invalid-feedback"},bN={class:"form-text text-muted"},wN={class:"form-group"},kN={id:"idHelp",class:"form-text text-muted"},EN={class:"invalid-feedback"},CN={class:"form-group"},_N={class:"invalid-feedback"},SN={class:"form-group"},NN={class:"form-control",id:"expiration",name:"expiration"},DN={class:"form-group",id:"expiration-date-form"},RN={class:"form-control",type:"date",name:"expirationDate",id:"expirationDate"},TN={class:"accordion mb-3",id:"options"},AN={class:"card"},ON={id:"collapseOne",class:"collapse show","aria-labelledby":"headingOne","data-parent":"#options"},IN={class:"card-body"},PN={class:"form-group mb-0"},VN={class:"form-check"},qN={class:"form-check-input",type:"checkbox",id:"link",name:"link"},MN={class:"form-check"},$N={class:"form-check-input",type:"checkbox",id:"image",name:"image"},LN={class:"form-check"},UN={class:"form-check-input",type:"checkbox",id:"date",name:"date"},FN={class:"form-check"},zN={class:"form-check-input",type:"checkbox",id:"username",name:"username"},HN={class:"form-check"},BN={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},jN={class:"form-check"},GN={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},WN={class:"form-check"},KN={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},YN={class:"form-check"},JN={class:"form-check-input",type:"checkbox",id:"title",name:"title"},QN={class:"form-check"},XN={class:"form-check-input",type:"checkbox",id:"body",name:"body"},ZN=["textContent"],xN={class:"anonymize-submit-bar"},eD={key:0,class:"col-md-8 p-2 overflow-auto anonymize-preview-col"},tD={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},oD={class:"pr-title mb-1"},sD={key:0},nD=["textContent"],rD={key:0},iD={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},aD={class:"nav nav-tabs",id:"myTab",role:"tablist"},lD={key:0,class:"nav-item",role:"presentation"},dD={key:1,class:"nav-item",role:"presentation"},uD=["textContent"],cD={class:"tab-content",id:"pills-tabContent"},pD={class:"tab-pane show active",id:"pills-diff",role:"tabpanel","aria-labelledby":"pills-diff-tab"},fD={key:0,class:"pr-diff shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},mD={style:{"overflow-x":"auto"}},hD=["innerHTML"],vD={key:0,class:"pr-comments list-group"},gD={class:"pr-comment list-group-item"},yD={class:"d-flex w-100 justify-content-between flex-wrap"},bD={key:0,class:"mb-1"},wD=["textContent"],kD={class:"mb-1"};function Cl(e,t){let s=We("markdown"),r=be("field"),n=be("form");return l(),d("div",lN,[o("div",dN,[o("div",uN,[o("div",{class:A(["p-0 py-2 m-auto",{card:!e.pullRequestUrl,container:e.pullRequestUrl}])},[N((l(),d("form",{class:A(["form needs-validation",{"card-body":!e.pullRequestUrl}]),name:"anonymizeForm",novalidate:""},[t[30]||(t[30]=ce('
Anonymize \xA0/\xA0 Pull request

Anonymize a pull request

Fill in the details \u2014 it only takes a minute.

Source
',4)),p(" pullRequestUrl "),o("div",cN,[t[2]||(t[2]=o("label",{for:"pullRequestUrl"},"URL of your pull request",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestUrl?.invalid}]),name:"pullRequestUrl",id:"pullRequestUrl",placeholder:"https://github.com/owner/repo/pull/123"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestUrl=i},value:e.pullRequestUrl,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.pullRequestSelected()}}]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is not accessible. Some organizations are restricting the access to the repositories. ",513),[[W,e.anonymize?.pullRequestUrl?.errors?.access]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" does not exist or is not accessible ",513),[[W,e.anonymize?.pullRequestUrl?.errors?.missing]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is already anonymized ",513),[[W,e.anonymize?.pullRequestUrl?.errors?.used]])]),N(o("div",null,[o("div",pN,[o("div",fN,[N(o("input",mN,null,512),[[r,{state:e.viewState,set:i=>{e.options.update=i},value:e.options?.update,form:"anonymizeForm",options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"update"},"Auto update",-1)),t[4]||(t[4]=o("small",{id:"updateHelp",class:"form-text text-muted"},"Automatically update the anonymized pull request with the latest updates. The pull request is updated once per day maximum.",-1))])]),t[26]||(t[26]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})]),b(" Conference ID ")],-1)),p(" Conference "),o("div",hN,[t[5]||(t[5]=o("label",{for:"conference"},[b("Conference ID "),o("span",{class:"text-muted"},"(Optional)")],-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[r,{state:e.viewState,set:i=>{e.conference=i},value:e.conference,form:"anonymizeForm",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),N(o("small",vN,[o("a",{target:"_target",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,gN),b(" will expire on "+c(e.fmt?.date(e.conference_data?.endDate))+".",1)],512),[[W,e.conference_data]]),N(o("div",yN," The conference is not activated. ",512),[[W,e.anonymize?.conference?.errors?.activated]]),N(o("small",bN," Use the Conference ID that your conference provided you. This will update automatically the anonymization options based on the conference preferences. ",512),[[W,!e.conference_data]])]),t[27]||(t[27]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),b(" Anonymization Options ")],-1)),p(" Pull Request ID "),o("div",wN,[t[6]||(t[6]=o("label",{for:"pullRequestId"},"Anonymized pull request id",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestId=i},value:e.pullRequestId,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",kN,"Id used in the url: https://anonymous.4open.science/r/"+c(e.pullRequestId),1),N(o("div",EN," Repository id can only contain letters and numbers ",512),[[W,e.anonymize?.pullRequestId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used ",513),[[W,e.anonymize?.pullRequestId?.errors?.used]])]),p(" Terms "),o("div",CN,[t[7]||(t[7]=o("label",{for:"terms"},"Terms to anonymize",-1)),N(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"3"},null,2),[[r,{state:e.viewState,set:i=>{e.terms=i},value:e.terms,form:"anonymizeForm",options:{debounce:250}}]]),t[8]||(t[8]=o("small",{id:"termsHelp",class:"form-text text-muted"},"One term per line. Each term will be replaced by XXX.",-1)),N(o("div",_N," Terms are in an invalid format ",512),[[W,e.anonymize?.terms?.errors?.format]])]),o("div",SN,[t[10]||(t[10]=o("label",{for:"expiration"},"Expiration strategy",-1)),N((l(),d("select",NN,[...t[9]||(t[9]=[o("option",{value:"never",selected:""},"Never expire",-1),o("option",{value:"redirect"}," Redirect to GitHub when expired ",-1),o("option",{value:"remove"},"Remove when expired",-1)])])),[[r,{state:e.viewState,set:i=>{e.options.expirationMode=i},value:e.options?.expirationMode,form:"anonymizeForm",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},"Define the expiration strategy for the anonymized repository.",-1))]),N(o("div",DN,[t[12]||(t[12]=o("label",{for:"expirationDate"},"Expiration date of the anonymized repository",-1)),N(o("input",RN,null,512),[[r,{state:e.viewState,set:i=>{e.options.expirationDate=i},value:e.options?.expirationDate,form:"anonymizeForm",options:{}}]]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the repository will be removed and the visitor will not be able to see the content of the repository.",513),[[W,e.options?.expirationMode=="remove"]]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the visitors of the anonymized repository will be redirected to "+c(e.pullRequestUrl)+".",513),[[W,e.options?.expirationMode=="redirect"]])],512),[[W,e.options?.expirationMode!="never"]]),o("div",TN,[o("div",AN,[t[25]||(t[25]=ce('

',1)),o("div",ON,[o("div",IN,[o("div",PN,[o("div",VN,[N(o("input",qN,null,512),[[r,{state:e.viewState,set:i=>{e.options.link=i},value:e.options?.link,form:"anonymizeForm",options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Keep or remove all the links.",-1))]),o("div",MN,[N(o("input",$N,null,512),[[r,{state:e.viewState,set:i=>{e.options.image=i},value:e.options?.image,form:"anonymizeForm",options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"Images are not anonymized",-1))]),o("div",LN,[N(o("input",UN,null,512),[[r,{state:e.viewState,set:i=>{e.options.date=i},value:e.options?.date,form:"anonymizeForm",options:{}}]]),t[17]||(t[17]=o("label",{class:"form-check-label",for:"date"},"Display dates",-1)),t[18]||(t[18]=o("small",{class:"form-text text-muted"},"Display the date of the Pull Request and the date of the comments.",-1))]),o("div",FN,[N(o("input",zN,null,512),[[r,{state:e.viewState,set:i=>{e.options.username=i},value:e.options?.username,form:"anonymizeForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"username"},"Display username",-1))]),o("div",HN,[N(o("input",BN,null,512),[[r,{state:e.viewState,set:i=>{e.options.comments=i},value:e.options?.comments,form:"anonymizeForm",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"comments"},"Display comments",-1))]),o("div",jN,[N(o("input",GN,null,512),[[r,{state:e.viewState,set:i=>{e.options.diff=i},value:e.options?.diff,form:"anonymizeForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"diff"},"Display diff",-1))]),o("div",WN,[N(o("input",KN,null,512),[[r,{state:e.viewState,set:i=>{e.options.origin=i},value:e.options?.origin,form:"anonymizeForm",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"origin"},"Display the project name",-1))]),o("div",YN,[N(o("input",JN,null,512),[[r,{state:e.viewState,set:i=>{e.options.title=i},value:e.options?.title,form:"anonymizeForm",options:{}}]]),t[23]||(t[23]=o("label",{class:"form-check-label",for:"title"},"Display the PR title",-1))]),o("div",QN,[N(o("input",XN,null,512),[[r,{state:e.viewState,set:i=>{e.options.body=i},value:e.options?.body,form:"anonymizeForm",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"body"},"Display the PR body and comment bodies",-1))])])])])])])],512),[[W,e.pullRequestUrl]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,ZN)):p("v-if",!0),N(o("div",xN,[e.isUpdate?p("v-if",!0):(l(),d("button",{key:0,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[0]||(t[0]=me(i=>e.submitForm(i,()=>{e.anonymizePullRequest(i)}),["prevent"]))},[...t[28]||(t[28]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize ",-1)])])),e.isUpdate?(l(),d("button",{key:1,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[1]||(t[1]=me(i=>e.submitForm(i,()=>{e.updatePullRequest(i)}),["prevent"]))},[...t[29]||(t[29]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update ",-1)])])):p("v-if",!0)],512),[[W,e.pullRequestUrl]])],2)),[[n,e.viewState]])],2)]),e.details?(l(),d("div",eD,[o("div",tD,[o("h2",oD,[e.options?.title?(l(),d("span",sD,c(e.anonymize(e.details?.pullRequest?.title)),1)):p("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,nD)):p("v-if",!0)]),e.options?.origin?(l(),d("small",rD,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):p("v-if",!0),e.options?.body?(l(),d("div",iD,[Ce(s,{content:e.anonymize(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0),o("ul",aD,[e.options?.diff?(l(),d("li",lD,[...t[31]||(t[31]=[o("button",{class:"nav-link active",id:"pills-diff-tab","data-toggle":"pill","data-target":"#pills-diff",type:"button",role:"tab","aria-controls":"pills-diff","aria-selected":"true"}," Diff ",-1)])])):p("v-if",!0),e.options?.comments?(l(),d("li",dD,[o("button",{class:A(["nav-link",{active:!e.options?.diff}]),id:"pills-comments-tab","data-toggle":"pill","data-target":"#pills-comments",type:"button",role:"tab","aria-controls":"pills-comments","aria-selected":"false"},[o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comment",one:"One Comment",other:"{} Comments"}))},null,8,uD)],2)])):p("v-if",!0)]),o("div",cD,[o("div",pD,[e.options?.diff?(l(),d("div",fD,[o("pre",mD,[o("code",{innerHTML:e.sanitize(e.fmt?.diff(e.anonymize(e.details?.pullRequest?.diff)))},null,8,hD)])])):p("v-if",!0)]),o("div",{class:A(["tab-pane",{"show active":!e.options?.diff}]),id:"pills-comments",role:"tabpanel","aria-labelledby":"pills-comments-tab"},[e.options?.comments?(l(),d("ul",vD,[(l(!0),d(X,null,re(e.details?.pullRequest?.comments,(i,a)=>(l(),d("li",gD,[o("div",yD,[e.options?.username?(l(),d("h5",bD," @"+c(e.anonymize(i?.author)),1)):p("v-if",!0),e.options?.date?(l(),d("small",{key:1,textContent:c(e.fmt?.date(i?.updatedDate))},null,8,wD)):p("v-if",!0)]),o("p",kD,[e.options?.body?(l(),Mt(s,{key:0,class:"pr-comment-body",content:e.anonymize(i?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])):p("v-if",!0)])]))),256))])):p("v-if",!0)],2)])])):p("v-if",!0)])])}var ED={class:"container paper-page claim-page"},CD={class:"paper-settings-main claim-form"},_D={class:"form-group"},SD={class:"invalid-feedback"},ND={class:"form-group"};function _l(e,t){let s=be("field"),r=be("form");return l(),d("div",ED,[t[6]||(t[6]=ce('
My work \xA0/\xA0 Claim

Claim an anonymization

Take ownership of an existing anonymized repository so it appears on your dashboard.

',3)),o("div",CD,[t[5]||(t[5]=o("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),N((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=me(n=>e.submitForm(n,()=>{e.claim()}),["prevent"]))},[o("div",_D,[t[1]||(t[1]=o("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",placeholder:"https://github.com/owner/repository",required:""},null,2),[[s,{state:e.viewState,set:n=>{e.repoUrl=n},value:e.repoUrl,form:"claimForm",options:{}}]]),N(o("div",SD," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[W,e.claimForm?.repoUrl?.errors?.not_found]])]),o("div",ND,[t[2]||(t[2]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",placeholder:"e.g. my-paper-7F2A","aria-describedby":"idHelp",required:""},null,2),[[s,{state:e.viewState,set:n=>{e.repoId=n},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=o("small",{id:"idHelp",class:"form-text text-muted"},[b("The ID is the last part of the anonymized URL: "),o("code",null,"anonymous.4open.science/r/"),b(".")],-1))]),t[4]||(t[4]=o("button",{id:"submit",type:"submit",class:"btn btn-ink"}," Claim anonymization ",-1))],32)),[[r,e.viewState]])])])}var DD={class:"container page paper-page conference-page"},RD={class:"paper-crumbs"},TD={class:"here"},AD={class:"d-flex align-items-end flex-wrap",style:{gap:"12px","justify-content":"space-between"}},OD=["textContent"],ID={key:0,class:"paper-page-lede"},PD=["textContent","href"],VD={class:"d-flex align-items-center flex-wrap",style:{gap:"10px"}},qD=["textContent"],MD=["href"],$D={class:"paper-meta-rule"},LD=["textContent"],UD=["textContent"],FD={key:0},zD={class:"search-wrap"},HD={type:"search",id:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search by ID or source repository\u2026",autocomplete:"off"},BD={class:"dashboard-filter-controls"},jD={class:"dropdown"},GD={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},WD={class:"filter-btn-value"},KD={class:"dropdown-menu","aria-labelledby":"dropdownSort"},YD={class:"form-check dropdown-item"},JD={class:"form-check-input",type:"radio",name:"sort",id:"anonymizeDate",value:"-anonymizeDate"},QD={class:"form-check dropdown-item"},XD={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"repoId"},ZD={class:"form-check dropdown-item"},xD={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},eR={class:"form-check dropdown-item"},tR={class:"form-check-input",type:"radio",name:"sort",id:"sortViews",value:"-pageView"},oR={class:"dropdown"},sR={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},nR={key:0,class:"filter-btn-value"},rR={key:1,class:"filter-btn-value"},iR={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},aR={class:"form-check dropdown-item"},lR=["id"],dR=["for"],uR={class:"dashboard-meta"},cR={class:"dashboard-count"},pR={key:0},fR={key:0},mR={key:1},hR={key:1},vR={key:0,class:"filter-chip"},gR=["onClick","aria-label"],yR={class:"paper-table paper-table-repos w-100",role:"table","aria-label":"Repositories"},bR={class:"cell-anon",role:"cell"},wR={class:"anon-text"},kR=["textContent","href"],ER={class:"anon-sub"},CR={class:"anon-source"},_R=["textContent","href"],SR={key:0},NR=["textContent","href"],DR={key:1},RR=["href"],TR={class:"cell-status",role:"cell"},AR={class:"status-line"},OR=["textContent"],IR={key:0,class:"status-sub"},PR={class:"cell-views num",role:"cell"},VR=["textContent"],qR={class:"cell-expires",role:"cell"},MR={key:0,class:"expires-never"},$R=["textContent"],LR={key:2,class:"expires-past"},UR={key:0},FR={key:3,class:"empty-dash","aria-label":"Not applicable"},zR={class:"cell-actions",role:"cell"},HR={class:"dropdown"},BR=["aria-label"],jR={class:"dropdown-menu dropdown-menu-right"},GR=["href"],WR=["href"],KR={key:0,class:"paper-table-empty"},YR={key:0},JR={key:1},QR={key:2,class:"paper-table-empty-actions"};function Sl(e,t){let s=be("field"),r=be("form");return l(),d("div",DD,[o("div",null,[o("div",RD,[t[2]||(t[2]=o("a",{href:"/dashboard"},"My work",-1)),t[3]||(t[3]=b(" \xA0/\xA0 ",-1)),t[4]||(t[4]=o("a",{href:"/conferences"},"Conferences",-1)),t[5]||(t[5]=b(" \xA0/\xA0 ",-1)),o("span",TD,c(e.conference?.conferenceID),1)]),o("div",AD,[o("div",null,[o("h1",{class:"paper-page-title",textContent:c(e.conference?.name)},null,8,OD),e.conference?.url?(l(),d("p",ID,[o("a",{target:"_blank",rel:"noopener",textContent:c(e.conference?.url),href:e.safeUrl(e.conference?.url)},null,8,PD)])):p("v-if",!0)]),o("div",VD,[o("span",{class:A(["status-pill",{"status-pill-ready":e.conference?.status=="ready","status-pill-removed":e.conference?.status=="removed"||e.conference?.status=="expired"}])},[o("span",{class:A(["status-dot","status-"+e.conference?.status]),"aria-hidden":"true"},null,2),o("span",{textContent:c(e.fmt?.statusLabel(e.conference?.status))},null,8,qD)],2),o("a",{class:"btn btn-outline-ink",href:e.safeUrl("/conference/"+e.conference?.conferenceID+"/edit")},[...t[6]||(t[6]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit conference",-1)])],8,MD)])]),o("div",$D,[o("span",null,[t[7]||(t[7]=b("ID ",-1)),o("b",{class:"commit-hash",textContent:c(e.conference?.conferenceID)},null,8,LD)]),o("span",null,[t[8]||(t[8]=b("Review window ",-1)),o("b",null,c(e.fmt?.date(e.conference?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(e.conference?.endDate,"mediumDate")),1)]),o("span",null,[t[9]||(t[9]=b("Repositories ",-1)),o("b",null,c(e.fmt?.number(e.conference?.repositories?.length)),1)]),o("span",null,[t[10]||(t[10]=b("Plan ",-1)),o("b",{textContent:c(e.conference?.plan?.name||e.conference?.plan?.planID||"Free")},null,8,UD)]),e.conference?.price?(l(),d("span",FD,[t[11]||(t[11]=b("Cost so far ",-1)),o("b",null,c(e.fmt?.number(e.conference?.price,2))+" \u20AC",1)])):p("v-if",!0)]),t[32]||(t[32]=o("div",{class:"paper-section-eyebrow"},"Repositories",-1)),N((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter repositories","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=me(n=>e.submitForm(n,()=>{n.preventDefault()}),["prevent"]))},[o("div",zD,[N(o("input",HD,null,512),[[s,{state:e.viewState,set:n=>{e.search=n},value:e.search,form:null,options:{}}]])]),o("div",BD,[o("div",jD,[o("button",GD,[t[12]||(t[12]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",WD,c({"-anonymizeDate":"Anonymize date",repoId:"ID","-status":"Status","-pageView":"Views"}[e.orderBy]||"Custom"),1)]),o("div",KD,[t[17]||(t[17]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",YD,[N(o("input",JD,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"anonymizeDate"},"Anonymize date",-1))]),o("div",QD,[N(o("input",XD,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[14]||(t[14]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",ZD,[N(o("input",xD,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",eR,[N(o("input",tR,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[16]||(t[16]=o("label",{class:"form-check-label",for:"sortViews"},"Views",-1))])])]),o("div",oR,[o("button",sR,[t[18]||(t[18]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",nR,"All")):p("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?p("v-if",!0):(l(),d("span",rR,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",iR,[t[19]||(t[19]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(X,null,re(e.statusLabels,(n,i,a)=>(l(),d("div",aR,[N(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,lR),[[s,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(n),9,dR)]))),256))])])])],32)),[[r,e.viewState]]),o("div",uR,[o("span",cR,[e.filteredRepositories?.length===e.conference?.repositories?.length?(l(),d("span",pR,[b(c(e.fmt?.number(e.conference?.repositories?.length))+" repositor",1),e.conference?.repositories?.length===1?(l(),d("span",fR,"y")):p("v-if",!0),e.conference?.repositories?.length!==1?(l(),d("span",mR,"ies")):p("v-if",!0)])):p("v-if",!0),e.filteredRepositories?.length!==e.conference?.repositories?.length?(l(),d("span",hR,c(e.fmt?.number(e.filteredRepositories?.length))+" of "+c(e.fmt?.number(e.conference?.repositories?.length))+" shown",1)):p("v-if",!0)]),(l(!0),d(X,null,re(e.filters?.status,(n,i,a)=>(l(),d(X,null,[n===!1?(l(),d("span",vR,[b(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,gR)])):p("v-if",!0)],64))),256))]),o("div",yR,[t[31]||(t[31]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Repository"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Views"),o("div",{role:"columnheader"},"Expires"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(X,null,re(e.filteredRepositories,(n,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":n?.status=="expired"||n?.status=="removed","repo-error":n?.status=="error"}]),role:"row",key:n?.repoId},[o("div",bR,[t[22]||(t[22]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",wR,[o("a",{class:"repo-name",textContent:c(n?.repoId),href:e.safeUrl("/r/"+n?.repoId+"/")},null,8,kR),o("div",ER,[o("span",CR,[o("a",{target:"_blank",rel:"noopener",textContent:c(n?.source?.fullName),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/")},null,8,_R),n?.options?.update&&n?.source?.branch?(l(),d("span",SR,[t[20]||(t[20]=b(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(n?.source?.branch),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.branch)},null,8,NR)])):p("v-if",!0),n?.source?.commit?(l(),d("span",DR,[t[21]||(t[21]=b(" \xB7 ",-1)),o("a",{class:"commit-hash",target:"_blank",rel:"noopener",href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.commit)},"@"+c(n?.source?.commit?.substring(0,8)),9,RR)])):p("v-if",!0)])])])]),o("div",TR,[o("div",AR,[o("span",{class:A(["status-dot","status-"+(n?.status=="error"?"error":n?.status=="ready"?"ready":n?.status=="expired"||n?.status=="removed"?n?.status:"progress")]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(n?.status))},null,8,OR)]),n?.anonymizeDate?(l(),d("div",IR,"anonymized "+c(e.fmt?.humanTime(n?.anonymizeDate)),1)):p("v-if",!0)]),o("div",PR,[t[23]||(t[23]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[24]||(t[24]=b()),o("span",{textContent:c(e.fmt?.number(n?.pageView))},null,8,VR)]),o("div",qR,[t[26]||(t[26]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),n?.status=="ready"&&(n?.options?.expirationMode==="never"||!n?.options?.expirationDate)?(l(),d("span",MR,"Never")):p("v-if",!0),n?.status=="ready"&&n?.options?.expirationMode!=="never"&&n?.options?.expirationDate?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(n?.options?.expirationDate))},null,8,$R)):p("v-if",!0),n?.status=="expired"?(l(),d("span",LR,[t[25]||(t[25]=b("Expired",-1)),n?.options?.expirationDate?(l(),d("span",UR,c(e.fmt?.humanTime(n?.options?.expirationDate)),1)):p("v-if",!0)])):p("v-if",!0),n?.status!="ready"&&n?.status!="expired"?(l(),d("span",FR,"\u2014")):p("v-if",!0)]),o("div",zR,[o("div",HR,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions for "+n?.repoId},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,BR),o("div",jR,[o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+n?.repoId+"/")},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View ",-1)])],8,GR),o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+n?.repoId)},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,WR)])])])],2))),128)),e.filteredRepositories?.length==0?(l(),d("div",KR,[t[30]||(t[30]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conference?.repositories?.length?p("v-if",!0):(l(),d("span",YR,"No repository has been submitted to this conference yet.")),e.conference?.repositories?.length?(l(),d("span",JR,"Nothing matches the current filters.")):p("v-if",!0),e.conference?.repositories?.length?(l(),d("div",QR,[o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=n=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")])):p("v-if",!0)])):p("v-if",!0)])])])}var XR={class:"container page paper-page conferences-page"},ZR={class:"row"},xR={class:"w-100"},eT={class:"search-wrap"},tT={type:"search",id:"search",class:"form-control","aria-label":"Search conferences",placeholder:"Search by name or ID\u2026",autocomplete:"off"},oT={class:"dashboard-filter-controls"},sT={class:"dropdown"},nT={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},rT={class:"filter-btn-value"},iT={class:"dropdown-menu","aria-labelledby":"dropdownSort"},aT={class:"form-check dropdown-item"},lT={class:"form-check-input",type:"radio",name:"sort",id:"sortName",value:"name"},dT={class:"form-check dropdown-item"},uT={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"conferenceID"},cT={class:"form-check dropdown-item"},pT={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},fT={class:"dropdown"},mT={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},hT={key:0,class:"filter-btn-value"},vT={key:1,class:"filter-btn-value"},gT={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},yT={class:"form-check dropdown-item"},bT=["id"],wT=["for"],kT={class:"dashboard-meta"},ET={class:"dashboard-count"},CT={key:0},_T={key:0},ST={key:1},NT={key:0,class:"filter-chip"},DT=["onClick","aria-label"],RT={key:0,class:"conference-feedback",role:"alert"},TT={key:1,class:"conference-feedback",role:"status"},AT={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},OT={class:"cell-anon",role:"cell"},IT={class:"anon-text"},PT=["textContent","href"],VT={class:"anon-sub"},qT={class:"anon-source"},MT=["textContent"],$T={key:0},LT=["textContent","href"],UT={class:"cell-status",role:"cell"},FT={class:"status-line"},zT=["textContent"],HT={class:"cell-views num",role:"cell"},BT=["textContent"],jT={class:"cell-expires",role:"cell"},GT={key:0},WT={key:1,class:"empty-dash","aria-label":"No review window"},KT={class:"cell-actions",role:"cell"},YT={class:"dropdown"},JT=["disabled","aria-label"],QT={class:"dropdown-menu dropdown-menu-right"},XT=["href"],ZT=["href"],xT={key:0},eA=["onClick"],tA={key:0,class:"paper-table-empty"},oA={key:0},sA={key:1},nA={class:"paper-table-empty-actions"},rA={key:1,href:"/conference/new",class:"btn btn-ink"};function Nl(e,t){let s=be("field"),r=be("form");return l(),d("div",XR,[o("div",ZR,[o("div",xR,[t[10]||(t[10]=ce('
My work \xA0/\xA0 Conferences

Your conferences

Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.

New conference
',2)),N((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter conferences","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=me(n=>e.submitForm(n,()=>{n.preventDefault()}),["prevent"]))},[o("div",eT,[N(o("input",tT,null,512),[[s,{state:e.viewState,set:n=>{e.search=n},value:e.search,form:null,options:{}}]])]),o("div",oT,[o("div",sT,[o("button",nT,[t[3]||(t[3]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",rT,c({name:"Name",conferenceID:"ID","-status":"Status"}[e.orderBy]||"Custom"),1)]),o("div",iT,[t[7]||(t[7]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",aT,[N(o("input",lT,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortName"},"Name",-1))]),o("div",dT,[N(o("input",uT,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[5]||(t[5]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",cT,[N(o("input",pT,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[6]||(t[6]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))])])]),o("div",fT,[o("button",mT,[t[8]||(t[8]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",hT,"All")):p("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?p("v-if",!0):(l(),d("span",vT,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",gT,[t[9]||(t[9]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(X,null,re(e.statusLabels,(n,i,a)=>(l(),d("div",yT,[N(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,bT),[[s,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(n),9,wT)]))),256))])])])],32)),[[r,e.viewState]]),o("div",kT,[o("span",ET,[e.filteredConferences?.length===e.conferences?.length?(l(),d("span",CT,[b(c(e.fmt?.number(e.conferences?.length))+" conference",1),e.conferences?.length!==1?(l(),d("span",_T,"s")):p("v-if",!0)])):p("v-if",!0),e.filteredConferences?.length!==e.conferences?.length?(l(),d("span",ST,c(e.fmt?.number(e.filteredConferences?.length))+" of "+c(e.fmt?.number(e.conferences?.length))+" shown",1)):p("v-if",!0)]),(l(!0),d(X,null,re(e.filters?.status,(n,i,a)=>(l(),d(X,null,[n===!1?(l(),d("span",NT,[b(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,DT)])):p("v-if",!0)],64))),256))])]),e.error?(l(),d("div",RT,[o("span",null,c(e.error),1),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=n=>e.loadConferences())},"Retry")])):p("v-if",!0),e.loading?(l(),d("div",TT,"Loading conferences\u2026")):p("v-if",!0),o("div",AT,[t[24]||(t[24]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Conference"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Repos"),o("div",{role:"columnheader"},"Review window"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(X,null,re(e.filteredConferences,(n,i)=>(l(),d("div",{class:A(["paper-table-row row-clickable",{"repo-inactive":n?.status=="expired"||n?.status=="removed"}]),role:"row",key:n?.conferenceID},[o("div",OT,[t[13]||(t[13]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",IT,[o("a",{class:"repo-name",textContent:c(n?.name),href:e.safeUrl("/conference/"+n?.conferenceID)},null,8,PT),o("div",VT,[o("span",qT,[t[12]||(t[12]=b("ID ",-1)),o("span",{class:"commit-hash",textContent:c(n?.conferenceID)},null,8,MT),n?.url?(l(),d("span",$T,[t[11]||(t[11]=b(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(e.fmt?.limitTo(n?.url,60)),href:e.safeUrl(n?.url)},null,8,LT)])):p("v-if",!0)])])])]),o("div",UT,[o("div",FT,[o("span",{class:A(["status-dot","status-"+n?.status]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(n?.status))},null,8,zT)])]),o("div",HT,[t[14]||(t[14]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),t[15]||(t[15]=b()),o("span",{textContent:c(e.fmt?.number(n?.nbRepositories||0))},null,8,BT)]),o("div",jT,[t[16]||(t[16]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),n?.startDate?(l(),d("span",GT,c(e.fmt?.date(n?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(n?.endDate,"mediumDate")),1)):p("v-if",!0),n?.startDate?p("v-if",!0):(l(),d("span",WT,"\u2014"))]),o("div",KT,[o("div",YT,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:n?.removing,"aria-label":"Actions for "+n?.name},[...t[17]||(t[17]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,JT),o("div",QT,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+n?.conferenceID+"/")},[...t[18]||(t[18]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View ",-1)])],8,XT),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+n?.conferenceID+"/edit")},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,ZT),n?.status!="removed"?(l(),d("div",xT,[t[21]||(t[21]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:a=>e.removeConference(n)},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove ",-1)])],8,eA)])):p("v-if",!0)])])])],2))),128)),!e.loading&&!e.error&&e.filteredConferences?.length==0?(l(),d("div",tA,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conferences?.length==0?(l(),d("span",oA,"You have not created a conference yet.")):p("v-if",!0),e.conferences?.length>0?(l(),d("span",sA,"Nothing matches the current filters.")):p("v-if",!0),o("div",nA,[e.conferences?.length>0?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[2]||(t[2]=n=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")):p("v-if",!0),e.conferences?.length==0?(l(),d("a",rA,[...t[22]||(t[22]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),b(" New conference",-1)])])):p("v-if",!0)])])):p("v-if",!0)])])])}var iA={class:"container page dashboard-page paper-page"},aA={class:"row"},lA={class:"w-100"},dA={class:"dashboard-heading"},uA=["open"],cA=["aria-expanded"],pA=["stroke-dasharray"],fA={key:1,d:"M7 12c0-4 4-4 5 0s5 4 5 0-4-4-5 0-5 4-5 0",class:"quota-ring-unlimited"},mA={key:0,class:"quota-summary-value"},hA={key:0},vA={class:"quota-panel",id:"dashboard-usage"},gA={class:"quota-panel-heading"},yA={key:1,class:"quota-loading",role:"status"},bA={class:"search-wrap"},wA={type:"search",id:"search",class:"form-control","aria-label":"Search anonymizations",placeholder:"Search projects, IDs, or conferences\u2026",autocomplete:"off"},kA=["aria-expanded"],EA={class:"btn-group",role:"group","aria-label":"Type"},CA=["aria-pressed"],_A=["aria-pressed"],SA=["aria-pressed"],NA=["aria-pressed"],DA={class:"dropdown"},RA={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},TA={class:"filter-btn-value"},AA={class:"sr-only"},OA={class:"dropdown-menu","aria-labelledby":"dropdownSort"},IA={class:"form-check dropdown-item"},PA=["onClick","checked","id"],VA=["for"],qA={class:"dropdown"},MA={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},$A={key:0,class:"filter-btn-value"},LA={key:1,class:"filter-btn-value"},UA={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},FA={class:"form-check dropdown-item"},zA=["id"],HA=["for"],BA={key:0,class:"dashboard-meta"},jA={class:"dashboard-view-tabs",role:"group","aria-label":"Project view"},GA=["aria-pressed"],WA=["aria-pressed","aria-label"],KA={class:"dashboard-count"},YA={key:0},JA={key:0},QA={key:1},XA={class:"dashboard-active-filters"},ZA=["onClick","aria-label","title"],xA=["aria-busy"],eO={class:"paper-table-head",role:"row"},tO=["aria-sort"],oO=["aria-sort"],sO=["aria-sort"],nO=["aria-sort"],rO={key:0,class:"paper-table-row paper-table-skeleton",role:"row","aria-hidden":"true"},iO=["onClick"],aO={class:"cell-anon",role:"cell"},lO=["aria-label","title"],dO={class:"project-type-svg","aria-hidden":"true"},uO=["href"],cO={class:"anon-text"},pO={class:"anon-title"},fO=["title","textContent","href"],mO=["textContent"],hO={key:2,class:"type-badge type-coauthor",title:"You are a co-author on this anonymization"},vO={class:"anon-sub"},gO=["title"],yO=["title"],bO=["title"],wO=["textContent"],kO={class:"dashboard-row-meta",role:"presentation"},EO={class:"cell-status",role:"cell"},CO={class:"status-line"},_O=["textContent"],SO=["textContent","title"],NO=["title"],DO=["href"],RO=["onClick"],TO={key:4,class:"status-sub status-sub-date"},AO=["aria-label"],OO={class:"cell-expires",role:"cell"},IO={key:0,class:"expires-never"},PO=["textContent"],VO={key:2,class:"expires-past"},qO={key:3,class:"expires-past"},MO={key:4,class:"empty-dash","aria-label":"Not applicable"},$O={class:"cell-actions",role:"cell"},LO=["onClick","disabled","title","aria-label"],UO=["onClick","data-project-actions","aria-controls","aria-expanded"],FO={key:2,class:"dropdown"},zO=["data-project-actions","aria-label"],HO={class:"dropdown-menu dropdown-menu-right"},BO=["onClick","aria-controls","aria-expanded"],jO=["href"],GO=["href"],WO=["onClick","disabled"],KO=["href"],YO=["onClick"],JO=["onClick"],QO=["onClick"],XO={key:5},ZO=["onClick"],xO={key:1,class:"project-details-row",role:"row"},e4=["id","onKeydown"],t4={class:"project-details-heading"},o4=["onClick"],s4={class:"project-details-list"},n4={key:0},r4={key:1},i4={key:0},a4={key:2},l4={key:0,class:"project-progress-help"},d4=["href"],u4=["onSubmit"],c4=["for"],p4=["id"],f4={class:"project-name-controls"},m4=["id","aria-describedby","disabled"],h4=["disabled"],v4={key:0,class:"project-name-error",role:"alert"},g4={key:1,role:"status"},y4={key:0,class:"paper-table-empty"},b4={key:0},w4={key:1},k4={class:"paper-table-empty-actions"},E4={key:1,href:"/anonymize",class:"btn btn-ink"},C4={key:0,class:"dashboard-pagination"},_4={key:0,role:"alert"},S4=["disabled"];function Dl(e,t){let s=We("quota-usage"),r=be("field"),n=be("form");return l(),d("div",iA,[o("div",aA,[o("div",lA,[o("div",dA,[o("div",null,[t[27]||(t[27]=o("h1",{class:"paper-page-title"},"Projects",-1)),t[28]||(t[28]=o("p",{class:"paper-page-lede"},"Manage your anonymous links.",-1)),o("details",{class:"dashboard-quota",open:e.quotaExpanded,onToggle:t[1]||(t[1]=i=>e.quotaExpanded=i.target.open),onKeydown:t[2]||(t[2]=Ro(me(i=>e.closeQuota(),["prevent","stop"]),["esc"]))},[o("summary",{"aria-controls":"dashboard-usage","aria-expanded":e.quotaExpanded},[(l(),d("svg",{class:A(["quota-summary-ring",e.quota?"quota-"+e.quota.repository.level:""]),viewBox:"0 0 24 24","aria-hidden":"true"},[t[21]||(t[21]=o("circle",{class:"quota-ring-track",cx:"12",cy:"12",r:"9"},null,-1)),e.quota&&!e.quota.repository.unlimited?(l(),d("circle",{key:0,class:"quota-ring-fill",cx:"12",cy:"12",r:"9",pathLength:"100","stroke-dasharray":e.quota.repository.percent+" 100"},null,8,pA)):p("v-if",!0),e.quota?.repository.unlimited?(l(),d("path",fA)):p("v-if",!0)],2)),t[23]||(t[23]=o("span",{class:"quota-summary-label"},"Usage",-1)),e.quota?(l(),d("span",mA,[b(c(e.fmt.number(e.quota.repository.used)),1),e.quota.repository.unlimited?p("v-if",!0):(l(),d("span",hA," / "+c(e.fmt.number(e.quota.repository.total)),1)),t[22]||(t[22]=b(" repos",-1))])):p("v-if",!0),t[24]||(t[24]=o("svg",{class:"project-type-svg quota-summary-chevron","aria-hidden":"true"},[o("use",{href:"#project-icon-chevron"})],-1))],8,cA),o("div",vA,[o("div",gA,[t[26]||(t[26]=o("h2",null,"Account usage",-1)),o("button",{type:"button",class:"project-close","aria-label":"Close usage",onClick:t[0]||(t[0]=i=>e.closeQuota())},[...t[25]||(t[25]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),e.quota?(l(),Mt(s,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):(l(),d("p",yA,"Loading usage\u2026"))])],40,uA)]),t[29]||(t[29]=ce('',1))]),p(" Search + filters "),N((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter anonymizations","accept-charset":"UTF-8",onSubmit:t[9]||(t[9]=me(i=>e.submitForm(i,()=>{i.preventDefault()}),["prevent"]))},[o("div",bA,[N(o("input",wA,null,512),[[r,{state:e.viewState,set:i=>{e.search=i},value:e.search,form:null,options:{}}]])]),o("button",{class:"btn dashboard-filters-toggle",type:"button","aria-expanded":e.filtersExpanded,"aria-controls":"dashboard-filter-controls",onClick:t[3]||(t[3]=i=>e.filtersExpanded=!e.filtersExpanded)},[...t[30]||(t[30]=[b("Filters",-1),o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1)])],8,kA),o("div",{id:"dashboard-filter-controls",class:A(["dashboard-filter-controls",{expanded:e.filtersExpanded}])},[o("div",EA,[o("button",{type:"button",class:A(["btn",{"btn-primary":e.typeFilter==="all"}]),onClick:t[4]||(t[4]=i=>e.typeFilter="all"),"aria-pressed":e.typeFilter==="all"},"All",10,CA),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="repo"}]),title:"Repositories",onClick:t[5]||(t[5]=i=>e.typeFilter="repo"),"aria-pressed":e.typeFilter==="repo"},[...t[31]||(t[31]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("span",{class:"type-filter-label"},"Repos",-1)])],10,_A),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="pr"}]),title:"Pull requests",onClick:t[6]||(t[6]=i=>e.typeFilter="pr"),"aria-pressed":e.typeFilter==="pr"},[...t[32]||(t[32]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-pr"})],-1),o("span",{class:"type-filter-label"},"PRs",-1)])],10,SA),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="gist"}]),title:"Gists",onClick:t[7]||(t[7]=i=>e.typeFilter="gist"),"aria-pressed":e.typeFilter==="gist"},[...t[33]||(t[33]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1),o("span",{class:"type-filter-label"},"Gists",-1)])],10,NA)]),o("div",{id:"dashboard-extra-filters",class:A(["dashboard-extra-filters",{expanded:e.filtersExpanded}])},[o("div",DA,[o("button",RA,[t[35]||(t[35]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",TA,c(e.sortLabel()),1),(l(),d("svg",{class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)),o("span",AA,c(e.sortDesc()?"descending":"ascending"),1)]),o("div",OA,[t[36]||(t[36]=o("h6",{class:"dropdown-header"},"Order by",-1)),(l(!0),d(X,null,re(e.sortFields,(i,a,u)=>(l(),d("div",IA,[o("input",{class:"form-check-input",type:"radio",name:"sort",onClick:f=>e.setSort(a,i.defaultDesc),checked:e.isSortedBy(a),id:"sort-"+u},null,8,PA),o("label",{class:"form-check-label",for:"sort-"+u},c(i?.label),9,VA)]))),256)),t[37]||(t[37]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item",onClick:t[8]||(t[8]=i=>e.toggleSortDirection())},c(e.sortDesc()?"Switch to ascending":"Switch to descending"),1)])]),o("div",qA,[o("button",MA,[t[38]||(t[38]=o("span",{class:"filter-btn-label"},"Status",-1)),e.hasHiddenStatus()?p("v-if",!0):(l(),d("span",$A,"All")),e.hasHiddenStatus()?(l(),d("span",LA,c(e.hiddenStatusCount())+" hidden",1)):p("v-if",!0)]),o("div",UA,[t[39]||(t[39]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(X,null,re(e.statusKeyLabels,(i,a,u)=>(l(),d("div",FA,[N(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+a},null,8,zA),[[r,{state:e.viewState,set:f=>{e.filters.status[a]=f},value:e.filters?.status[a],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+a},c(i),9,HA)]))),256))])])],2)],2)],32)),[[n,e.viewState]]),p(" Result count + active filter chips "),e.loading?p("v-if",!0):(l(),d("div",BA,[o("div",jA,[o("button",{type:"button","aria-pressed":e.projectView==="all",onClick:t[10]||(t[10]=i=>e.setProjectView("all")),"aria-label":"All projects"},[...t[40]||(t[40]=[o("span",{class:"dashboard-view-long"},"All projects",-1),o("span",{class:"dashboard-view-short","aria-hidden":"true"},"All",-1)])],8,GA),o("button",{type:"button","aria-pressed":e.projectView==="attention",onClick:t[11]||(t[11]=i=>e.setProjectView("attention")),"aria-label":"Needs attention "+e.attentionCount()},[t[41]||(t[41]=o("span",{class:"dashboard-attention-prefix"},"Needs ",-1)),t[42]||(t[42]=o("span",null,"attention",-1)),t[43]||(t[43]=b()),o("span",{class:A(["attention-count",{"has-attention":e.attentionCount()>0}])},c(e.attentionCount()),3)],8,WA)]),o("span",KA,[(e.dashboardTotals?.filtered??e.filteredItems?.length)===(e.dashboardTotals?.total??e.items?.length)?(l(),d("span",YA,[b(c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" project",1),(e.dashboardTotals?.total??e.items?.length)!==1?(l(),d("span",JA,"s")):p("v-if",!0)])):(l(),d("span",QA,c(e.fmt?.number(e.dashboardTotals?.filtered??e.filteredItems?.length))+" of "+c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" shown",1))]),o("div",XA,[(l(!0),d(X,null,re(e.filters?.status,(i,a,u)=>(l(),d(X,null,[i===!1?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:f=>e.filters.status[a]=!0,"aria-label":"Show "+e.statusKeyLabels[a]+" again",title:"Show "+e.statusKeyLabels[a]+" again"},[b(c(e.statusKeyLabels[a])+" hidden",1),t[44]||(t[44]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))],8,ZA)):p("v-if",!0)],64))),256)),e.typeFilter!=="all"?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:t[12]||(t[12]=i=>e.typeFilter="all"),"aria-label":"Show all project types"},[b(c(e.typeFilter==="repo"?"Repositories":e.typeFilter==="pr"?"Pull requests":"Gists"),1),t[45]||(t[45]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))])):p("v-if",!0),e.showClearFilters()?(l(),d("button",{key:1,type:"button",class:"btn-link-inline",onClick:t[13]||(t[13]=i=>e.clearFilters())},"Clear filters")):p("v-if",!0)])]))]),p(" Table "),o("div",{class:"paper-table paper-table-dashboard",role:"table","aria-label":"Anonymizations","aria-busy":e.loading},[o("div",eO,[o("div",{role:"columnheader","aria-sort":e.isSortedBy("_label")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("_label")}]),onClick:t[14]||(t[14]=i=>e.setSort("_label"))},[t[47]||(t[47]=b(" Project ",-1)),e.isSortedBy("_label")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[46]||(t[46]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,tO),o("div",{role:"columnheader","aria-sort":e.isSortedBy("status")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("status")}]),onClick:t[15]||(t[15]=i=>e.setSort("status"))},[t[49]||(t[49]=b(" Status ",-1)),e.isSortedBy("status")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[48]||(t[48]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,oO),o("div",{role:"columnheader",class:"num","aria-sort":e.isSortedBy("pageView")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("pageView")}]),onClick:t[16]||(t[16]=i=>e.setSort("pageView"))},[t[51]||(t[51]=b(" Views ",-1)),e.isSortedBy("pageView")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[50]||(t[50]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,sO),o("div",{role:"columnheader","aria-sort":e.isSortedBy("options.expirationDate")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("options.expirationDate")}]),onClick:t[17]||(t[17]=i=>e.setSort("options.expirationDate"))},[t[53]||(t[53]=b(" Expires ",-1)),e.isSortedBy("options.expirationDate")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[52]||(t[52]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,nO),t[54]||(t[54]=o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")],-1))]),p(" Loading skeleton: keeps the layout stable while the three lists load "),(l(),d(X,null,re([1,2,3,4],(i,a)=>(l(),d(X,null,[e.loading?(l(),d("div",rO,[...t[55]||(t[55]=[o("div",{class:"cell-anon",role:"cell"},[o("span",{class:"skeleton skeleton-badge"}),o("div",{class:"anon-text"},[o("span",{class:"skeleton skeleton-line",style:{width:"38%"}}),o("span",{class:"skeleton skeleton-line skeleton-line-sm",style:{width:"56%"}})])],-1),o("div",{class:"cell-status",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"60%"}})],-1),o("div",{class:"cell-views num",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}})],-1),o("div",{class:"cell-expires",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"55%"}})],-1),o("div",{class:"cell-actions",role:"cell"},null,-1)])])):p("v-if",!0)],64))),64)),(l(!0),d(X,null,re(e.filteredItems,(i,a)=>(l(),d(X,{key:i?._type+":"+(i?._id||a)},[e.loading?p("v-if",!0):(l(),d("div",{key:0,class:A(["paper-table-row",{"repo-inactive":i?._statusKey=="expired"||i?._statusKey=="removed","repo-error":i?.status=="error","row-clickable":!!i?._viewUrl}]),role:"row",onClick:u=>e.openItem(i,u)},[o("div",aO,[o("span",{class:"project-type-icon",role:"img","aria-label":i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist",title:i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist"},[(l(),d("svg",dO,[o("use",{href:"#project-type-"+i._type},null,8,uO)]))],8,lO),o("div",cO,[o("div",pO,[i?._viewUrl?(l(),d("a",{key:0,class:"repo-name",title:i._label,textContent:c(i?._label),href:e.safeUrl(i?._viewUrl)},null,8,fO)):p("v-if",!0),i?._viewUrl?p("v-if",!0):(l(),d("span",{key:1,class:"repo-name repo-name-static",textContent:c(i?._label)},null,8,mO)),i?.role==="coauthor"?(l(),d("span",hO,"Co-author")):p("v-if",!0)]),o("div",vO,[i?._id?(l(),d("code",{key:0,class:"anonymous-id",title:i._id},c(i._id),9,gO)):p("v-if",!0),i?._type==="repo"&&i?.source?.commit?(l(),d("span",{key:1,class:"commit-hash",title:i.source.commit},c(i.source.commit.substring(0,8)),9,yO)):p("v-if",!0),i?.conference?(l(),d("span",{key:2,class:"cell-conf conf-tag",title:i?.conference},[t[56]||(t[56]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),t[57]||(t[57]=b()),o("span",{textContent:c(i?.conference)},null,8,wO)],8,bO)):p("v-if",!0)])])]),o("div",kO,[o("div",EO,[o("div",CO,[o("span",{class:A(["status-dot","status-"+i?._statusKey]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(i?.status))},null,8,_O)]),i?.status=="error"&&i?.statusMessage?(l(),d("div",{key:0,class:"status-sub status-sub-error",textContent:c(e.fmt?.statusMsg(i?.statusMessage)),title:i?.statusMessage},null,8,SO)):p("v-if",!0),i?._stale?(l(),d("div",{key:1,class:"status-sub status-sub-warn",title:"Last activity "+e.fmt?.humanTime(i?.anonymizeDate||i?.lastView)}," Last activity "+c(e.fmt?.humanTime(i?.anonymizeDate||i?.lastView))+" \xB7 may be stuck ",9,NO)):p("v-if",!0),i.status==="error"&&i._editUrl?(l(),d("a",{key:2,class:"project-attention-action",href:e.safeUrl(i._editUrl)},"Fix source",8,DO)):p("v-if",!0),i._stale||i._broken?(l(),d("button",{key:3,type:"button",class:"project-attention-action",onClick:me(u=>e.showProjectDetails(i),["stop"])},c(i._broken?"Review details":"Check progress"),9,RO)):p("v-if",!0),i?.status!="error"&&!i?._stale&&i?.anonymizeDate?(l(),d("div",TO," anonymized "+c(e.fmt?.humanTime(i?.anonymizeDate)),1)):p("v-if",!0)]),o("div",{class:"cell-views num",role:"cell","aria-label":e.fmt.number(i.pageView)+" views"},[t[58]||(t[58]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),o("span",null,c(e.fmt.number(i.pageView)),1)],8,AO),o("div",OO,[t[59]||(t[59]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),i?._expiry?.kind==="never"?(l(),d("span",IO,"Never")):p("v-if",!0),i?._expiry?.kind==="date"?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(i?._expiry?.date))},null,8,PO)):p("v-if",!0),i?._expiry?.kind==="expired"&&i?._expiry?.date?(l(),d("span",VO,"Expired "+c(e.fmt?.humanTime(i?._expiry?.date)),1)):p("v-if",!0),i?._expiry?.kind==="expired"&&!i?._expiry?.date?(l(),d("span",qO,"Expired")):p("v-if",!0),i?._expiry?.kind==="none"?(l(),d("span",MO,"\u2014")):p("v-if",!0)])]),o("div",$O,[i._viewUrl?(l(),d("button",{key:0,type:"button",class:"copy-link-inline",onClick:me(u=>e.copyLink(i),["stop"]),disabled:!!e.copyingId,title:"Copy anonymous link for "+i._label,"aria-label":"Copy anonymous link for "+i._label},[...t[60]||(t[60]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-copy"})],-1)])],8,LO)):p("v-if",!0),i._broken?(l(),d("button",{key:1,type:"button",class:"project-details-button",onClick:me(u=>e.showProjectDetails(i),["stop"]),"data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Details",8,UO)):p("v-if",!0),i?._broken?p("v-if",!0):(l(),d("div",FO,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-label":"Actions for "+i?._name},[...t[61]||(t[61]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,zO),o("div",HO,[o("button",{type:"button",class:"dropdown-item",onClick:u=>e.showProjectDetails(i),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Project details & name",8,BO),o("a",{class:"dropdown-item",href:e.safeUrl(i?._viewUrl)}," View ",8,jO),i?._type==="repo"&&i?.options?.page&&i?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+i?.repoId+"/")}," View page ",8,GO)):p("v-if",!0),i?._viewUrl?(l(),d("button",{key:1,type:"button",class:"dropdown-item",onClick:u=>e.copyLink(i),disabled:!!e.copyingId}," Copy anonymous link ",8,WO)):p("v-if",!0),o("a",{class:"dropdown-item",href:e.safeUrl(i?._editUrl)}," Edit ",8,KO),i?.status=="ready"||i?.status=="error"?(l(),d("button",{key:2,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Force update ",8,YO)):p("v-if",!0),i?.status=="removed"?(l(),d("button",{key:3,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Enable ",8,JO)):p("v-if",!0),i?.status=="expired"?(l(),d("button",{key:4,type:"button",class:"dropdown-item",onClick:u=>e.extendItem(i)}," Extend 6 months ",8,QO)):p("v-if",!0),(i?.status=="ready"||i?.status=="expired"||i?.status=="error")&&i?.role!=="coauthor"?(l(),d("div",XO,[t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:u=>e.removeItem(i)}," Remove ",8,ZO)])):p("v-if",!0)])]))])],10,iO)),!e.loading&&e.selectedProject===i?(l(),d("div",xO,[o("div",{class:"project-details",role:"cell","aria-colspan":"5",id:e.projectDetailsId(i),tabindex:"-1",onKeydown:Ro(me(u=>e.closeProjectDetails(i),["stop"]),["esc"])},[o("div",t4,[t[64]||(t[64]=o("h2",null,"Project details",-1)),o("button",{type:"button",class:"project-close",onClick:u=>e.closeProjectDetails(i),"aria-label":"Close project details"},[...t[63]||(t[63]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,o4)]),o("dl",s4,[o("div",null,[t[65]||(t[65]=o("dt",null,"Source",-1)),o("dd",null,c(i._source||"Not available"),1)]),o("div",null,[t[66]||(t[66]=o("dt",null,"Anonymous ID",-1)),o("dd",null,[o("code",null,c(i._id||"Missing identifier"),1)])]),i.source?.commit?(l(),d("div",n4,[t[67]||(t[67]=o("dt",null,"Commit",-1)),o("dd",null,[o("code",null,c(i.source.commit),1)])])):p("v-if",!0),i.conference?(l(),d("div",r4,[t[68]||(t[68]=o("dt",null,"Conference",-1)),o("dd",null,c(i.conference),1)])):p("v-if",!0),o("div",null,[t[69]||(t[69]=o("dt",null,"Status",-1)),o("dd",null,[b(c(e.fmt.statusLabel(i.status)),1),i.statusMessage?(l(),d("span",i4," \xB7 "+c(e.fmt.statusMsg(i.statusMessage)),1)):p("v-if",!0)])]),i.anonymizeDate?(l(),d("div",a4,[t[70]||(t[70]=o("dt",null,"Last anonymized",-1)),o("dd",null,c(e.fmt.humanTime(i.anonymizeDate)),1)])):p("v-if",!0)]),i._stale?(l(),d("p",l4,"This download has not progressed recently. Check the source access and selected branch before retrying.")):p("v-if",!0),i._editUrl?(l(),d("a",{key:1,class:"project-attention-action",href:e.safeUrl(i._editUrl)},c(e.needsAttention(i)?"Check source settings":"Edit anonymization settings"),9,d4)):p("v-if",!0),i._id?(l(),d("form",{key:2,class:"project-name-form",onSubmit:me(u=>e.saveProjectName(i),["prevent"])},[o("label",{for:"project-name-"+i._type+"-"+i._id},"Project name",8,c4),o("p",{id:"project-name-help-"+i._type+"-"+i._id},"Only you see this name. Leave it blank to use the default.",8,p4),o("div",f4,[N(o("input",{class:"form-control",type:"text",id:"project-name-"+i._type+"-"+i._id,"aria-describedby":"project-name-help-"+i._type+"-"+i._id,maxlength:"100","onUpdate:modelValue":t[18]||(t[18]=u=>e.projectName=u),disabled:e.nameSaving},null,8,m4),[[ea,e.projectName]]),o("button",{class:"btn btn-ink",type:"submit",disabled:e.nameSaving},c(e.nameSaving?"Saving\u2026":"Save name"),9,h4)]),e.nameError?(l(),d("p",v4,c(e.nameError),1)):p("v-if",!0),e.nameMessage?(l(),d("p",g4,c(e.nameMessage),1)):p("v-if",!0)],40,u4)):p("v-if",!0)],40,e4)])):p("v-if",!0)],64))),128)),!e.loading&&e.filteredItems?.length==0?(l(),d("div",y4,[t[72]||(t[72]=o("svg",{class:"project-type-svg project-empty-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.hasProjects()?p("v-if",!0):(l(),d("span",b4,"You have no anonymizations yet.")),e.hasProjects()?(l(),d("span",w4,"Nothing matches the current filters.")):p("v-if",!0),o("div",k4,[e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[19]||(t[19]=i=>e.clearFilters())},"Clear filters")):p("v-if",!0),e.hasProjects()?p("v-if",!0):(l(),d("a",E4,[...t[71]||(t[71]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),b(" New anonymization",-1)])]))])])):p("v-if",!0)],8,xA)]),e.dashboardCursor||e.dashboardError?(l(),d("div",C4,[e.dashboardError?(l(),d("p",_4,c(e.dashboardError),1)):p("v-if",!0),e.dashboardCursor?(l(),d("button",{key:1,type:"button",class:"btn",onClick:t[20]||(t[20]=i=>e.loadMoreProjects()),disabled:e.loadingMore},c(e.loadingMore?"Loading\u2026":"Load more projects"),9,S4)):p("v-if",!0)])):p("v-if",!0)])}var N4={class:"explorer-page"},D4=["aria-label"],R4={class:"ui-icon","aria-hidden":"true"},T4=["href"],A4=["textContent"],O4={class:"leftCol-head"},I4={class:"leftCol-search"},P4={class:"tree-search-box"},V4=["href"],q4={type:"text",class:"tree-search-input",placeholder:"Search files","aria-label":"Search files"},M4={class:"leftCol-project-header"},$4=["textContent","title"],L4={class:"project-file-count"},U4=["title"],F4={class:"leftCol-body"},z4={key:0,class:"paper-inline-warning",role:"alert"},H4={key:1,class:"paper-inline-warning",role:"alert"},B4={class:"leftCol-foot"},j4=["title"],G4=["title"],W4=["title"],K4={key:2,class:"last-update",title:"Older repositories have no recorded publication date. The source commit date does not establish when files became available here."},Y4={class:"explorer-main"},J4={class:"status-bar"},Q4={class:"breadcrumb paths","aria-label":"Path"},X4=["textContent"],Z4={class:"status-bar-actions"},x4=["href"],eI={class:"d-none d-md-inline"},tI={class:"ui-icon","aria-hidden":"true"},oI=["href"],sI={class:"d-none d-md-inline"},nI=["href"],rI=["href"],iI=["href"],aI=["href"],lI={class:"explorer-content"};function Rl(e,t){let s=We("tree"),r=We("partial-view"),n=be("field");return l(),d("div",N4,[N(o("button",{class:"sidebar-toggle",onClick:t[0]||(t[0]=i=>e.sidebarCollapsed=!e.sidebarCollapsed),"aria-label":e.sidebarCollapsed?"Show files":"Hide files"},[(l(),d("svg",R4,[o("use",{href:e.sidebarCollapsed?"#ui-icon-folder":"#project-icon-close"},null,8,T4)])),o("span",{textContent:c(e.sidebarCollapsed?"Files":"Close")},null,8,A4)],8,D4),[[W,e.files?.length]]),N(o("div",{class:A(["leftCol",{collapsed:e.sidebarCollapsed}])},[o("div",O4,[t[7]||(t[7]=o("span",{class:"leftCol-eyebrow"},"Files",-1)),o("button",{class:"leftCol-close","aria-label":"Close files",onClick:t[1]||(t[1]=i=>e.sidebarCollapsed=!0)},[...t[6]||(t[6]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),o("div",I4,[o("div",P4,[(l(),d("svg",{class:A(["ui-icon tree-search-icon",{"fa-spin":e.fileSearchLoading}]),"aria-hidden":"true"},[o("use",{href:e.fileSearchLoading?"#ui-icon-spinner":"#ui-icon-search"},null,8,V4)],2)),N(o("input",q4,null,512),[[n,{state:e.viewState,set:i=>{e.fileSearchQuery=i},value:e.fileSearchQuery,form:null,options:{debounce:300},change:()=>{e.onFileSearchChange()}}]]),N(o("kbd",{class:"tree-search-kbd"},c(e.isMac?"\u2318":"Ctrl+")+"K",513),[[W,!e.fileSearchQuery]]),N(o("button",{class:"tree-search-clear","aria-label":"Clear search",onClick:t[2]||(t[2]=i=>{e.fileSearchQuery="",e.onFileSearchChange()})},"\xD7",512),[[W,e.fileSearchQuery]])])]),o("div",M4,[o("span",{class:"project-name",textContent:c(e.repoId),title:e.repoId},null,8,$4),o("span",L4,c(e.fileCounts?.[""]||e.files?.length)+" files",1),e.options?.expirationDate?(l(),d("span",{key:0,class:"project-expiry",title:e.options.expirationDate},[t[8]||(t[8]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" Available until "+c(e.fmt?.date(e.options.expirationDate)),1)],8,U4)):p("v-if",!0)]),o("div",F4,[e.options?.truncatedFolders?.length>0?(l(),d("div",z4,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fmt?.translate("WARNINGS.repo_truncated")),1)])):p("v-if",!0),e.options?.hasSubmodules?(l(),d("div",H4,[t[10]||(t[10]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fmt?.translate("WARNINGS.submodules_not_included")),1)])):p("v-if",!0),Ce(s,{class:"files",file:e.files,"search-query":e.fileSearchQuery,"search-results":e.fileSearchResults,page:e.viewState},null,8,["file","search-query","search-results","page"])]),o("div",B4,[o("span",{class:"last-update",title:e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate},c(e.options?.sourceCommitDate?"Source commit":e.options?.anonymizedAt?"Anonymized":"Updated")+" "+c(e.fmt?.date(e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate)),9,j4),e.options?.settingsSavedAt?(l(),d("span",{key:0,class:"last-update",title:e.options.settingsSavedAt}," Settings saved "+c(e.fmt?.date(e.options.settingsSavedAt)),9,G4)):p("v-if",!0),e.options?.publishedAt?(l(),d("span",{key:1,class:"last-update",title:e.options.publishedAt}," Snapshot ready "+c(e.fmt?.date(e.options.publishedAt)),9,W4)):p("v-if",!0),e.options?.anonymizedAt&&!e.options?.publishedAt?(l(),d("span",K4," Snapshot ready date not recorded ")):p("v-if",!0)])],2),[[W,e.files?.length]]),N(o("div",{class:"leftCol-backdrop",onClick:t[3]||(t[3]=i=>e.sidebarCollapsed=!0)},null,512),[[W,e.files?.length&&!e.sidebarCollapsed]]),o("div",Y4,[N(o("div",J4,[o("ol",Q4,[(l(!0),d(X,null,re(e.paths,(i,a)=>(l(),d("li",{class:"breadcrumb-item",textContent:c(i)},null,8,X4))),256))]),o("div",Z4,[e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[11]||(t[11]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,x4)):p("v-if",!0),e.type=="html-doc"&&!e.showSource?(l(),d("button",{key:1,class:A(["btn btn-sm",{"btn-active":e.allowScripts}]),"aria-label":"Allow this document to run JavaScript",title:"Scripts in this file are blocked by default. Enable them only if you trust the repository \u2014 the document stays isolated from your session either way.",onClick:t[4]||(t[4]=i=>e.toggleAllowScripts())},[t[12]||(t[12]=o("i",{class:"fab fa-js"},null,-1)),o("span",eI,c(e.allowScripts?"JS on":"JS off"),1)],2)):p("v-if",!0),e.type=="html-doc"?(l(),d("button",{key:2,class:"btn btn-sm","aria-label":"Toggle between the rendered document and its source",title:"Toggle between the rendered document and its source",onClick:t[5]||(t[5]=i=>e.toggleSource())},[(l(),d("svg",tI,[o("use",{href:e.showSource?"#project-icon-eye":"#ui-icon-code"},null,8,oI)])),o("span",sI,c(e.showSource?"Rendered":"Source"),1)])):p("v-if",!0),N(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"View raw current file",title:"View raw file",href:e.safeUrl(e.url)},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1)])],8,nI),[[W,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),N(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"Download current file",title:"Download this file",href:e.safeUrl(e.url+"&download=true")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-download"})],-1)])],8,rI),[[W,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),e.options?.download?(l(),d("a",{key:3,target:"_self",class:"btn btn-sm btn-ink","aria-label":"Download repository as ZIP",title:"Download the whole repository as a ZIP archive",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[15]||(t[15]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-archive"})],-1),o("span",{class:"d-none d-md-inline"}," Download repository",-1)])],8,iI)):p("v-if",!0),e.options?.hasWebsite?(l(),d("a",{key:4,target:"_self",class:"btn btn-sm","aria-label":"Website",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),o("span",{class:"d-none d-md-inline"}," Website",-1)])],8,aI)):p("v-if",!0)])],512),[[W,e.type!="error"||e.files?.length]]),o("div",lI,[Ce(r,{name:"partials/pageView.htm",state:e.viewState},null,8,["state"])])])])}var dI={class:"paper-faq"};function Tl(e,t){return l(),d("div",dI,[...t[0]||(t[0]=[ce('
Help

Answers to the questions that come up most.

If something's missing, write to us \u2014 report a bug on GitHub.

',1),o("div",{class:"paper-faq-body"},[o("aside",{class:"paper-faq-toc"},[o("div",{class:"paper-faq-toc-head"},"Contents"),o("nav",null,[o("a",{href:"#faq-general"},"General"),o("a",{href:"#faq-features"},"Features"),o("a",{href:"#faq-limitations"},"Limitations"),o("a",{href:"#faq-privacy"},"Privacy & Security"),o("a",{href:"#faq-hosting"},"Self-Hosting")])]),o("section",{class:"faq-section","aria-label":"FAQs"},[o("div",null,[p(" General "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b("General ")]),o("div",{class:"panel-group",id:"faq-general",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingWhatIs"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#whatIs","aria-expanded":"false","aria-controls":"whatIs"}," What is Anonymous GitHub? ")])]),o("div",{id:"whatIs",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingWhatIs"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub is a free, open-source tool that anonymizes GitHub repositories and pull requests for double-anonymous (double-blind) peer review. It replaces identifying information \u2014 such as the repository owner, organization name, and custom terms \u2014 so that reviewers cannot determine the identity of the authors through the code repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingHowWork"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#howWork","aria-expanded":"false","aria-controls":"howWork"}," How does Anonymous GitHub work? ")])]),o("div",{id:"howWork",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingHowWork"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies requests to GitHub on the fly. In both cases, the original and anonymized versions of files are cached on the server. The system automatically detects and replaces the repository owner, organization name, and repository name. You can also specify additional custom terms to anonymize using one-per-line regex patterns. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingScope"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#scope","aria-expanded":"false","aria-controls":"scope"}," What is the scope of anonymization? ")])]),o("div",{id:"scope",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingScope"},[o("div",{class:"panel-body p-3"},[o("p",null," In double-anonymous peer review, the boundary of anonymization is the paper plus its online appendix \u2014 not the entire internet. Searching for any part of the paper or the online appendix can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the repository owner, organization, repository name, file and directory names, and file contents across all text-based file types. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCost"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#cost","aria-expanded":"false","aria-controls":"cost"}," How much does it cost? ")])]),o("div",{id:"cost",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCost"},[o("div",{class:"panel-body p-3"},[o("p",null,[b(" Anonymous GitHub is completely free to use. However, the server costs hundreds of dollars per year to maintain. If you find the service useful, a small donation would be greatly appreciated. You can support the project by "),o("a",{href:"https://github.com/sponsors/tdurieux/",target:"_blank"},"sponsoring on GitHub"),b(", donating through "),o("a",{href:"https://ko-fi.com/tdurieux",target:"_blank"},"Ko-fi"),b(', or by clicking the "Support me" button on the site. ')])])])])]),p(" Features "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})]),b("Features ")]),o("div",{class:"panel-group",id:"faq-features",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingFormats"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#formats","aria-expanded":"false","aria-controls":"formats"}," Which file formats are supported? ")])]),o("div",{id:"formats",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingFormats"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub can display and render a wide variety of file types: "),o("ul",null,[o("li",null,[o("strong",null,"Text and source code"),b(" \u2014 displayed with syntax highlighting")]),o("li",null,[o("strong",null,"Markdown"),b(" \u2014 rendered as formatted HTML")]),o("li",null,[o("strong",null,"Images"),b(" (PNG, JPG, SVG, etc.) \u2014 displayed inline")]),o("li",null,[o("strong",null,"PDFs"),b(" \u2014 rendered directly in the browser")]),o("li",null,[o("strong",null,"Jupyter Notebooks"),b(" \u2014 rendered with code cells and outputs")])]),o("p",null," Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to determine whether it is textual or binary. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPR"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#pullRequests","aria-expanded":"false","aria-controls":"pullRequests"}," Can I anonymize pull requests? ")])]),o("div",{id:"pullRequests",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPR"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository, and the system will automatically detect that it is a pull request and anonymize it accordingly. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingConference"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#conference","aria-expanded":"false","aria-controls":"conference"}," What is the Conference ID feature? ")])]),o("div",{id:"conference",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingConference"},[o("div",{class:"panel-body p-3"},[o("p",null," When creating an anonymized repository, you can associate it with a Conference ID. This allows conferences to define default anonymization settings (such as expiration dates) that are automatically applied to repositories submitted under that conference. If your conference provides a Conference ID, enter it during the anonymization setup. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingExpiration"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#expiration","aria-expanded":"false","aria-controls":"expiration"}," What happens when an anonymized repository expires? ")])]),o("div",{id:"expiration",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingExpiration"},[o("div",{class:"panel-body p-3"},[o("p",null," You can configure one of three expiration strategies when creating your anonymized repository: "),o("ul",null,[o("li",null,[o("strong",null,"Never expire"),b(" \u2014 the anonymized repository remains accessible indefinitely.")]),o("li",null,[o("strong",null,"Redirect to GitHub"),b(" \u2014 after expiration, visitors are redirected to the original GitHub repository.")]),o("li",null,[o("strong",null,"Remove content"),b(" \u2014 after expiration, the anonymized content is deleted from the server.")])])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDownload"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#download","aria-expanded":"false","aria-controls":"download"}," Can I download an anonymized repository? ")])]),o("div",{id:"download",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDownload"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers want to build or test the code locally. The downloaded archive contains the fully anonymized version of the repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingUpdates"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#updates","aria-expanded":"false","aria-controls":"updates"}," Are updates to the original repository reflected in the anonymized version? ")])]),o("div",{id:"updates",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingUpdates"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. The anonymized repository tracks the source on GitHub: when you push new commits to the original repository, the anonymized view picks up those changes (cached files are refreshed against GitHub). This means you can keep iterating on the code while reviewers have the link, and you do not need to recreate the anonymized repository every time you update the source. "),o("p",null," A few practical implications worth keeping in mind: "),o("ul",null,[o("li",null," You can safely create the anonymized repository early in the writing process \u2014 later commits will be visible to reviewers without any additional action. "),o("li",null," If you rename files, add new identifiers, or introduce new contributor names after creation, revisit the anonymization options (custom terms, file filters) to make sure the new content is still properly anonymized. "),o("li",null," If the original repository is made private or deleted, the anonymized repository will no longer be able to fetch updated content. ")])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCLI"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#cli","aria-expanded":"false","aria-controls":"cli"}," Is there a command-line tool? ")])]),o("div",{id:"cli",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCLI"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally, generating an anonymized ZIP file on your machine. Install it via npm: "),o("pre",{style:{"background-color":"var(--hover-bg-color)",padding:"12px","border-radius":"4px","margin-top":"8px",color:"var(--color)"}},[o("code",null,`npm install -g @tdurieux/anonymous_github -anonymous_github`)])])])])]),p(" Limitations "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})]),b("Limitations ")]),o("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),o("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[o("div",{class:"panel-body p-3"},[o("ul",null,[o("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),o("li",null," Files larger than 8 MB are not supported. "),o("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),o("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),p(" Privacy & Security "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),b("Privacy & Security ")]),o("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),o("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[o("div",{class:"panel-body p-3"},[o("p",null," Data stored on Anonymous GitHub is never shared or used for any purpose beyond providing the anonymization service. When a repository is removed or expires, only its configuration is retained \u2014 this makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),o("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[o("div",{class:"panel-body p-3"},[o("p",null,[b("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),o("a",{href:"/connections"},"GitHub connections"),b(" page.")]),o("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),o("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),o("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[o("div",{class:"panel-body p-3"},[o("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),p(" Self-Hosting "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-storage"})]),b("Self-Hosting ")]),o("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),o("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[o("div",{class:"panel-body p-3"},[o("p",null,[b(" Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment. You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup instructions are available on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/",target:"_blank"},"GitHub repository"),b(". ")]),o("p",null," The basic steps are: "),o("ol",null,[o("li",null,"Clone the repository and install dependencies"),o("li",null,[b("Create a "),o("code",null,".env"),b(" file with your GitHub token, OAuth client ID, and client secret")]),o("li",null,[b("Run "),o("code",null,"docker-compose up -d")])])])])])]),o("div",{class:"text-center mt-5 mb-5 p-4",style:{"background-color":"var(--hover-bg-color)","border-radius":"8px"}},[o("p",{class:"mb-2",style:{"font-size":"1.1rem"}}," Still have questions? "),o("p",{class:"text-muted mb-0"},[b(" Open an issue on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/issues",target:"_blank"},"GitHub repository"),b(" and we'll be happy to help. ")])])])])],-1)])])}var uI={class:"pr-page"},cI={class:"container paper-page pr-page-inner"},pI={class:"pr-header"},fI={class:"pr-title-row"},mI={class:"paper-page-title pr-title"},hI=["textContent"],vI={key:1,class:"text-muted"},gI=["href"],yI={class:"pr-header-meta"},bI={key:0,class:"pr-meta-item"},wI=["textContent"],kI={key:1,class:"pr-meta-item"},EI=["textContent"],CI={key:2,class:"pr-meta-item"},_I=["textContent"],SI={key:0,class:"paper-tabs",role:"tablist"},NI=["aria-selected","tabindex"],DI=["textContent"],RI=["aria-selected","tabindex"],TI=["textContent"],AI={class:"paper-tab-content"},OI={key:0,role:"tabpanel",id:"gist-files-panel","aria-labelledby":"gist-files-tab"},II={class:"pr-comments"},PI={class:"pr-comment"},VI={class:"pr-comment-head"},qI=["textContent"],MI={key:0,class:"pr-comment-date"},$I={key:0,class:"paper-table-empty"},LI={key:1,role:"tabpanel",id:"gist-comments-panel","aria-labelledby":"gist-comments-tab"},UI={class:"pr-comments"},FI={class:"pr-comment"},zI={class:"pr-comment-head"},HI={key:0,class:"pr-comment-author"},BI=["textContent"],jI=["textContent"],GI={key:0,class:"pr-comment-body"},WI={key:0,class:"paper-table-empty"};function Al(e,t){let s=We("gist-file"),r=We("markdown");return l(),d("div",uI,[o("div",cI,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),b(" \xA0/\xA0 "),o("span",{class:"here"},"Gist")],-1)),o("header",pI,[o("div",fI,[o("h1",mI,[e.details?.description?(l(),d("span",{key:0,textContent:c(e.details?.description)},null,8,hI)):p("v-if",!0),e.details?.description?p("v-if",!0):(l(),d("span",vI,"Untitled gist"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/gist-anonymize/"+e.gistId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,gI)):p("v-if",!0)]),o("div",yI,[o("span",{class:A(["paper-pill",{good:e.details?.isPublic,warn:!e.details?.isPublic}])},c(e.details?.isPublic?"Public":"Secret"),3),e.details?.ownerLogin?(l(),d("span",bI,[t[5]||(t[5]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[6]||(t[6]=b(" @",-1)),o("span",{textContent:c(e.details?.ownerLogin)},null,8,wI)])):p("v-if",!0),e.details?.updatedDate?(l(),d("span",kI,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=b()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,EI)])):p("v-if",!0),e.details?.anonymizeDate?(l(),d("span",CI,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=b(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,_I)])):p("v-if",!0)])]),e.details?.files&&e.details?.files?.length||e.details?.comments&&e.details?.comments?.length?(l(),d("nav",SI,[e.details?.files?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="files"}]),type:"button",role:"tab",id:"gist-files-tab","aria-selected":e.tabState?.active==="files","aria-controls":"gist-files-panel",tabindex:e.tabState?.active==="files"?0:-1,onKeydown:t[0]||(t[0]=n=>e.previewTabKeydown(n)),onClick:t[1]||(t[1]=n=>e.tabState.active="files")},[t[11]||(t[11]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.files?.length,{0:"No files",one:"1 file",other:"{} files"}))},null,8,DI)],42,NI)):p("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"gist-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"gist-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=n=>e.previewTabKeydown(n)),onClick:t[3]||(t[3]=n=>e.tabState.active="comments")},[t[12]||(t[12]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,TI)],42,RI)):p("v-if",!0)])):p("v-if",!0),o("div",AI,[e.details?.files&&e.tabState?.active=="files"?(l(),d("div",OI,[o("ul",II,[(l(!0),d(X,null,re(e.details?.files,(n,i)=>(l(),d("li",PI,[o("div",VI,[o("strong",{textContent:c(n?.filename)},null,8,qI),n?.language?(l(),d("span",MI,c(n?.language),1)):p("v-if",!0)]),Ce(s,{file:n},null,8,["file"])]))),256)),e.details?.files?.length?p("v-if",!0):(l(),d("li",$I,[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1),o("span",null,"No files in this gist.",-1)])]))])])):p("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",LI,[o("ul",UI,[(l(!0),d(X,null,re(e.details?.comments,(n,i)=>(l(),d("li",FI,[o("div",zI,[n?.author?(l(),d("span",HI,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=b(" @",-1)),o("span",{textContent:c(n?.author)},null,8,BI)])):p("v-if",!0),n?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(n?.updatedDate))},null,8,jI)):p("v-if",!0)]),n?.body?(l(),d("div",GI,[Ce(r,{content:n?.body},null,8,["content"])])):p("v-if",!0)]))),256)),e.details?.comments?.length?p("v-if",!0):(l(),d("li",WI,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this gist.",-1)])]))])])):p("v-if",!0)])])])}var KI={class:"collapse navbar-collapse",id:"navbarSupportedContent"},YI={class:"navbar-nav mr-auto smooth-scroll"},JI={key:0,class:"nav-item"},QI={key:1,class:"nav-item"},XI={key:2,class:"nav-item"},ZI={key:3,class:"nav-item"},xI={class:"nav-item"},e3={key:4,class:"nav-item"},t3={class:"navbar-nav"},o3={key:0,class:"nav-item"},s3={key:1,class:"nav-item"},n3={key:2,class:"nav-item"},r3={key:3,class:"nav-item"},i3={key:4,class:"nav-item dropdown user-chip-wrap"},a3={class:"nav-link user-chip dropdown-toggle",href:"#",id:"navbarDropdownMenuLink",role:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},l3=["src"],d3={class:"user-chip-name"},u3={class:"dropdown-menu dropdown-menu-right user-menu","aria-labelledby":"navbarDropdownMenuLink"},c3={class:"dropdown-header"},p3=["innerHTML"];function Ol(e,t){return l(),d(X,null,[o("nav",{class:A(["navbar navbar-expand-lg",{"navbar-dark":e.isDarkMode}])},[t[13]||(t[13]=ce('Anonymous GitHubSupport',3)),o("div",KI,[o("ul",YI,[e.user?p("v-if",!0):(l(),d("li",JI,[o("a",{class:A(["nav-link",{active:e.path=="/"}]),href:"/"}," Home ",2)])),e.user?(l(),d("li",QI,[o("a",{class:A(["nav-link",{active:e.path=="/dashboard"}]),href:"/dashboard"},[...t[2]||(t[2]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-grid"})],-1),b(" My work ",-1)])],2)])):p("v-if",!0),e.user?(l(),d("li",XI,[o("a",{class:A(["nav-link",{active:e.path=="/anonymize"||e.path=="/pull-request-anonymize"}]),href:"/anonymize"},[...t[3]||(t[3]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize ",-1)])],2)])):p("v-if",!0),e.user?(l(),d("li",ZI,[o("a",{class:A(["nav-link",{active:e.path=="/conferences"}]),href:"/conferences"},[...t[4]||(t[4]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1),b(" Conferences ",-1)])],2)])):p("v-if",!0),o("li",xI,[o("a",{class:A(["nav-link",{active:e.path=="/faq"}]),href:"/faq"},[...t[5]||(t[5]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-help"})],-1),b("FAQ",-1)])],2)]),e.user&&e.user?.isAdmin?(l(),d("li",e3,[o("a",{class:A(["nav-link",{active:e.path?.indexOf("/admin")===0}]),href:"/admin/"},[...t[6]||(t[6]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1),b(" Admin ",-1)])],2)])):p("v-if",!0)]),o("ul",t3,[e.user||!e.isReviewerRoute?(l(),d("li",o3,[...t[7]||(t[7]=[o("a",{class:"nav-link nav-icon",target:"_blank",href:"https://github.com/tdurieux/anonymous_github/",title:"Anonymous GitHub source code","aria-label":"Anonymous GitHub source code on GitHub",rel:"noopener","data-offset":"30"},[o("i",{class:"fab fa-github","aria-hidden":"true"})],-1)])])):p("v-if",!0),p(` "Report a bug" is about this service. Reviewers who land on an +`+JSON.stringify(t):""}`},[je.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${Yc(t)}" via a navigation guard.`},[je.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[je.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[je.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function fo(e,t){return Ae(new Error,{type:e,[Sa]:!0},t)}function Ft(e,t){return e instanceof Error&&Sa in e&&(t==null||!!(e.type&t))}var Kc=["params","query","hash"];function Yc(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let n of Kc)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Na(e){let t={};if(e===""||e==="?")return t;let n=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;rs&&Ys(s)):[r&&Ys(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Da(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=kt(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}var Ra=Symbol(""),nr=Symbol(""),ts=Symbol(""),os=Symbol(""),ns=Symbol("");function Po(){let e=[];function t(r){return e.push(r),()=>{let s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Jt(e,t,n,r,s,i=a=>a()){let a=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((u,f)=>{let k=m=>{m===!1?f(fo(je.NAVIGATION_ABORTED,{from:n,to:t})):m instanceof Error?f(m):Wc(m)?f(fo(je.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(a&&r.enterCallbacks[s]===a&&typeof m=="function"&&a.push(m),u())},h=i(()=>e.call(r&&r.instances[s],t,n,k)),w=Promise.resolve(h);e.length<3&&(w=w.then(k)),w.catch(m=>f(m))})}function ss(e,t,n,r,s=i=>i()){let i=[];for(let a of e)for(let u in a.components){let f=a.components[u];if(!(t!=="beforeRouteEnter"&&!a.instances[u]))if(ua(f)){let k=(f.__vccOpts||f)[t];k&&i.push(Jt(k,n,r,a,u,s))}else{let k=f();i.push(()=>k.then(h=>{if(!h)throw new Error(`Couldn't resolve component "${u}" at "${a.path}"`);let w=Rc(h)?h.default:h;a.mods[u]=h,a.components[u]=w;let m=(w.__vccOpts||w)[t];return m&&Jt(m,n,r,a,u,s)()}))}}return i}function Ta(e,t){let n=[],r=[],s=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;apo(k,u))?r.push(u):n.push(u));let f=e.matched[a];f&&(t.matched.find(k=>po(k,f))||s.push(f))}return[n,r,s]}var Jc=()=>location.protocol+"//"+location.host;function Fa(e,t){let{pathname:n,search:r,hash:s}=t,i=e.indexOf("#");if(i>-1){let a=s.includes(e.slice(i))?e.slice(i).length:1,u=s.slice(a);return u[0]!=="/"&&(u="/"+u),Zs(u,"")}return Zs(n,e)+r+s}function Qc(e,t,n,r){let s=[],i=[],a=null,u=({state:m})=>{let E=Fa(e,location),y=n.value,g=t.value,_=0;if(m){if(n.value=E,t.value=m,a&&a===y){a=null;return}_=g?m.position-g.position:0}else r(E);s.forEach(R=>{R(n.value,y,{delta:_,type:xn.pop,direction:_?_>0?es.forward:es.back:es.unknown})})};function f(){a=n.value}function k(m){s.push(m);let E=()=>{let y=s.indexOf(m);y>-1&&s.splice(y,1)};return i.push(E),E}function h(){if(document.visibilityState==="hidden"){let{history:m}=window;if(!m.state)return;m.replaceState(Ae({},m.state,{scroll:mn()}),"")}}function w(){for(let m of i)m();i=[],window.removeEventListener("popstate",u),window.removeEventListener("pagehide",h),document.removeEventListener("visibilitychange",h)}return window.addEventListener("popstate",u),window.addEventListener("pagehide",h),document.addEventListener("visibilitychange",h),{pauseListeners:f,listen:k,destroy:w}}function Aa(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?mn():null}}function Xc(e){let{history:t,location:n}=window,r={value:Fa(e,n)},s={value:t.state};s.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(f,k,h){let w=e.indexOf("#"),m=w>-1?(n.host&&document.querySelector("base")?e:e.slice(w))+f:Jc()+e+f;try{t[h?"replaceState":"pushState"](k,"",m),s.value=k}catch(E){console.error(E),n[h?"replace":"assign"](m)}}function a(f,k){i(f,Ae({},t.state,Aa(s.value.back,f,s.value.forward,!0),k,{position:s.value.position}),!0),r.value=f}function u(f,k){let h=Ae({},s.value,t.state,{forward:f,scroll:mn()});i(h.current,h,!0),i(f,Ae({},Aa(r.value,f,null),{position:h.position+1},k),!1),r.value=f}return{location:r,state:s,push:u,replace:a}}function za(e){e=wa(e);let t=Xc(e),n=Qc(e,t.state,t.location,t.replace);function r(i,a=!0){a||n.pauseListeners(),history.go(i)}let s=Ae({location:"",base:e,go:r,createHref:ka.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}var ho=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({}),Xe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Xe||{}),Zc={type:ho.Static,value:""},xc=/[a-zA-Z0-9_]/;function ep(e){if(!e)return[[]];if(e==="/")return[[Zc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(E){throw new Error(`ERR (${n})/"${k}": ${E}`)}let n=Xe.Static,r=n,s=[],i;function a(){i&&s.push(i),i=[]}let u=0,f,k="",h="";function w(){k&&(n===Xe.Static?i.push({type:ho.Static,value:k}):n===Xe.Param||n===Xe.ParamRegExp||n===Xe.ParamRegExpEnd?(i.length>1&&(f==="*"||f==="+")&&t(`A repeatable param (${k}) must be alone in its segment. eg: '/:ids+.`),i.push({type:ho.Param,value:k,regexp:h,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):t("Invalid state to consume buffer"),k="")}function m(){k+=f}for(;ut.length?t.length===1&&t[0]===it.Static+it.Segment?1:-1:0}function Ha(e,t){let n=0,r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}var rp={strict:!1,end:!0,sensitive:!1};function ip(e,t,n){let r=np(ep(e.path),n),s=Ae(r,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function ap(e,t){let n=[],r=new Map;t=Qs(rp,t);function s(w){return r.get(w)}function i(w,m,E){let y=!E,g=Va(w);g.aliasOf=E&&E.record;let _=Qs(t,w),R=[g];if("alias"in w){let F=typeof w.alias=="string"?[w.alias]:w.alias;for(let P of F)R.push(Va(Ae({},g,{components:E?E.record.components:g.components,path:P,aliasOf:E?E.record:g})))}let T,I;for(let F of R){let{path:P}=F;if(m&&P[0]!=="/"){let M=m.record.path,se=M[M.length-1]==="/"?"":"/";F.path=m.record.path+(P&&se+P)}if(T=ip(F,m,_),E?E.alias.push(T):(I=I||T,I!==T&&I.alias.push(T),y&&w.name&&!qa(T)&&a(w.name)),Ba(T)&&f(T),g.children){let M=g.children;for(let se=0;se{a(I)}:Io}function a(w){if(tr(w)){let m=r.get(w);m&&(r.delete(w),n.splice(n.indexOf(m),1),m.children.forEach(a),m.alias.forEach(a))}else{let m=n.indexOf(w);m>-1&&(n.splice(m,1),w.record.name&&r.delete(w.record.name),w.children.forEach(a),w.alias.forEach(a))}}function u(){return n}function f(w){let m=up(w,n);n.splice(m,0,w),w.record.name&&!qa(w)&&r.set(w.record.name,w)}function k(w,m){let E,y={},g,_;if("name"in w&&w.name){if(E=r.get(w.name),!E)throw fo(je.MATCHER_NOT_FOUND,{location:w});_=E.record.name,y=Ae(Pa(m.params,E.keys.filter(I=>!I.optional).concat(E.parent?E.parent.keys.filter(I=>I.optional):[]).map(I=>I.name)),w.params&&Pa(w.params,E.keys.map(I=>I.name))),g=E.stringify(y)}else if(w.path!=null)g=w.path,E=n.find(I=>I.re.test(g)),E&&(y=E.parse(g),_=E.record.name);else{if(E=m.name?r.get(m.name):n.find(I=>I.re.test(m.path)),!E)throw fo(je.MATCHER_NOT_FOUND,{location:w,currentLocation:m});_=E.record.name,y=Ae({},m.params,w.params),g=E.stringify(y)}let R=[],T=E;for(;T;)R.unshift(T.record),T=T.parent;return{name:_,path:g,params:y,matched:R,meta:dp(R)}}e.forEach(w=>i(w));function h(){n.length=0,r.clear()}return{addRoute:i,resolve:k,removeRoute:a,clearRoutes:h,getRoutes:u,getRecordMatcher:s}}function Pa(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Va(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:lp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function lp(e){let t={},n=e.props||!1;if("component"in e)t.default=n;else for(let r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function qa(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function dp(e){return e.reduce((t,n)=>Ae(t,n.meta),{})}function up(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;Ha(e,t[i])<0?r=i:n=i+1}let s=cp(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function cp(e){let t=e;for(;t=t.parent;)if(Ba(t)&&Ha(e,t)===0)return t}function Ba({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ma(e){let t=ut(ts),n=ut(os),r=!1,s=null,i=ot(()=>{let h=jt(e.to);return t.resolve(h)}),a=ot(()=>{let{matched:h}=i.value,{length:w}=h,m=h[w-1],E=n.matched;if(!m||!E.length)return-1;let y=E.findIndex(po.bind(null,m));if(y>-1)return y;let g=$a(h[w-2]);return w>1&&$a(m)===g&&E[E.length-1].path!==g?E.findIndex(po.bind(null,h[w-2])):y}),u=ot(()=>a.value>-1&&vp(n.params,i.value.params)),f=ot(()=>a.value>-1&&a.value===n.matched.length-1&&xs(n.params,i.value.params));function k(h={}){if(hp(h)){let w=t[jt(e.replace)?"replace":"push"](jt(e.to)).catch(Io);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>w),w}return Promise.resolve()}return{route:i,href:ot(()=>i.value.href),isActive:u,isExactActive:f,navigate:k}}function pp(e){return e.length===1?e[0]:e}var fp=ln({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Ma,setup(e,{slots:t}){let n=ze(Ma(e)),{options:r}=ut(ts),s=ot(()=>({[La(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[La(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{let i=t.default&&pp(t.default(n));return e.custom?i:ke("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},i)}}}),mp=fp;function hp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vp(e,t){for(let n in t){let r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!kt(s)||s.length!==r.length||r.some((i,a)=>i.valueOf()!==s[a].valueOf()))return!1}return!0}function $a(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}var La=(e,t,n)=>e??t??n,yp=ln({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=ut(ns),s=ot(()=>e.route||r.value),i=ut(nr,0),a=ot(()=>{let k=jt(i),{matched:h}=s.value,w;for(;(w=h[k])&&!w.components;)k++;return k}),u=ot(()=>s.value.matched[a.value]);uo(nr,ot(()=>a.value+1)),uo(Ra,u),uo(ns,s);let f=et();return Be(()=>[f.value,u.value,e.name],([k,h,w],[m,E,y])=>{h&&(h.instances[w]=k,E&&E!==h&&k&&k===m&&(h.leaveGuards.size||(h.leaveGuards=E.leaveGuards),h.updateGuards.size||(h.updateGuards=E.updateGuards))),k&&h&&(!E||!po(h,E)||!m)&&(h.enterCallbacks[w]||[]).forEach(g=>g(k))},{flush:"post"}),()=>{let k=s.value,h=e.name,w=u.value,m=w&&w.components[h];if(!m)return Ua(n.default,{Component:m,route:k});let E=w.props[h],y=E?E===!0?k.params:typeof E=="function"?E(k):E:null,_=ke(m,Ae({},y,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(w.instances[h]=null)},ref:f}));return Ua(n.default,{Component:_,route:k})||_}}});function Ua(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var sr=yp;function ja(e){let t=ap(e.routes,e),n=e.parseQuery||Na,r=e.stringifyQuery||or,s=e.history,i=Po(),a=Po(),u=Po(),f=Tn(Qt),k=Qt;mo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");let h=Xn.bind(null,z=>""+z),w=Xn.bind(null,ya),m=Xn.bind(null,Oo);function E(z,ne){let Q,C;return tr(z)?(Q=t.getRecordMatcher(z),C=ne):C=z,t.addRoute(C,Q)}function y(z){let ne=t.getRecordMatcher(z);ne&&t.removeRoute(ne)}function g(){return t.getRoutes().map(z=>z.record)}function _(z){return!!t.getRecordMatcher(z)}function R(z,ne){if(ne=Ae({},ne||f.value),typeof z=="string"){let v=Zn(n,z,ne.path),N=t.resolve({path:v.path},ne),q=s.createHref(v.fullPath);return Ae(v,N,{params:m(N.params),hash:Oo(v.hash),redirectedFrom:void 0,href:q})}let Q;if(z.path!=null)Q=Ae({},z,{path:Zn(n,z.path,ne.path).path});else{let v=Ae({},z.params);for(let N in v)v[N]==null&&delete v[N];Q=Ae({},z,{params:w(v)}),ne.params=w(ne.params)}let C=t.resolve(Q,ne),V=z.hash||"";C.params=h(m(C.params));let B=ga(r,Ae({},z,{hash:va(V),path:C.path})),L=s.createHref(B);return Ae({fullPath:B,hash:V,query:r===or?Da(z.query):z.query||{}},C,{redirectedFrom:void 0,href:L})}function T(z){return typeof z=="string"?Zn(n,z,f.value.path):Ae({},z)}function I(z,ne){if(k!==z)return fo(je.NAVIGATION_CANCELLED,{from:ne,to:z})}function F(z){return se(z)}function P(z){return F(Ae(T(z),{replace:!0}))}function M(z,ne){let Q=z.matched[z.matched.length-1];if(Q&&Q.redirect){let{redirect:C}=Q,V=typeof C=="function"?C(z,ne):C;return typeof V=="string"&&(V=V.includes("?")||V.includes("#")?V=T(V):{path:V},V.params={}),Ae({query:z.query,hash:z.hash,params:V.path!=null?{}:z.params},V)}}function se(z,ne){let Q=k=R(z),C=f.value,V=z.state,B=z.force,L=z.replace===!0,v=M(Q,C);if(v)return se(Ae(T(v),{state:typeof v=="object"?Ae({},V,v.state):V,force:B,replace:L}),ne||Q);let N=Q;N.redirectedFrom=ne;let q;return!B&&ba(r,C,Q)&&(q=fo(je.NAVIGATION_DUPLICATED,{to:N,from:C}),Ue(C,C,!0,!1)),(q?Promise.resolve(q):O(N,C)).catch(H=>Ft(H)?Ft(H,je.NAVIGATION_GUARD_REDIRECT)?H:_e(H):le(H,N,C)).then(H=>{if(H){if(Ft(H,je.NAVIGATION_GUARD_REDIRECT))return se(Ae({replace:L},T(H.to),{state:typeof H.to=="object"?Ae({},V,H.to.state):V,force:B}),ne||N)}else H=Z(N,C,!0,L,V);return Y(N,C,H),H})}function oe(z,ne){let Q=I(z,ne);return Q?Promise.reject(Q):Promise.resolve()}function S(z){let ne=Pe.values().next().value;return ne&&typeof ne.runWithContext=="function"?ne.runWithContext(z):z()}function O(z,ne){let Q,[C,V,B]=Ta(z,ne);Q=ss(C.reverse(),"beforeRouteLeave",z,ne);for(let v of C)v.leaveGuards.forEach(N=>{Q.push(Jt(N,z,ne))});let L=oe.bind(null,z,ne);return Q.push(L),Ee(Q).then(()=>{Q=[];for(let v of i.list())Q.push(Jt(v,z,ne));return Q.push(L),Ee(Q)}).then(()=>{Q=ss(V,"beforeRouteUpdate",z,ne);for(let v of V)v.updateGuards.forEach(N=>{Q.push(Jt(N,z,ne))});return Q.push(L),Ee(Q)}).then(()=>{Q=[];for(let v of B)if(v.beforeEnter)if(kt(v.beforeEnter))for(let N of v.beforeEnter)Q.push(Jt(N,z,ne));else Q.push(Jt(v.beforeEnter,z,ne));return Q.push(L),Ee(Q)}).then(()=>(z.matched.forEach(v=>v.enterCallbacks={}),Q=ss(B,"beforeRouteEnter",z,ne,S),Q.push(L),Ee(Q))).then(()=>{Q=[];for(let v of a.list())Q.push(Jt(v,z,ne));return Q.push(L),Ee(Q)}).catch(v=>Ft(v,je.NAVIGATION_CANCELLED)?v:Promise.reject(v))}function Y(z,ne,Q){u.list().forEach(C=>S(()=>C(z,ne,Q)))}function Z(z,ne,Q,C,V){let B=I(z,ne);if(B)return B;let L=ne===Qt,v=mo?history.state:{};Q&&(C||L?s.replace(z.fullPath,Ae({scroll:L&&v&&v.scroll},V)):s.push(z.fullPath,V)),f.value=z,Ue(z,ne,Q,L),_e()}let te;function J(){te||(te=s.listen((z,ne,Q)=>{if(!He.listening)return;let C=R(z),V=M(C,He.currentRoute.value);if(V){se(Ae(V,{replace:!0,force:!0}),C).catch(Io);return}k=C;let B=f.value;mo&&Ca(er(B.fullPath,Q.delta),mn()),O(C,B).catch(L=>Ft(L,je.NAVIGATION_ABORTED|je.NAVIGATION_CANCELLED)?L:Ft(L,je.NAVIGATION_GUARD_REDIRECT)?(se(Ae(T(L.to),{force:!0}),C).then(v=>{Ft(v,je.NAVIGATION_ABORTED|je.NAVIGATION_DUPLICATED)&&!Q.delta&&Q.type===xn.pop&&s.go(-1,!1)}).catch(Io),Promise.reject()):(Q.delta&&s.go(-Q.delta,!1),le(L,C,B))).then(L=>{L=L||Z(C,B,!1),L&&(Q.delta&&!Ft(L,je.NAVIGATION_CANCELLED)?s.go(-Q.delta,!1):Q.type===xn.pop&&Ft(L,je.NAVIGATION_ABORTED|je.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),Y(C,B,L)}).catch(Io)}))}let re=Po(),ce=Po(),fe;function le(z,ne,Q){_e(z);let C=ce.list();return C.length?C.forEach(V=>V(z,ne,Q)):console.error(z),Promise.reject(z)}function Oe(){return fe&&f.value!==Qt?Promise.resolve():new Promise((z,ne)=>{re.add([z,ne])})}function _e(z){return fe||(fe=!z,J(),re.list().forEach(([ne,Q])=>z?Q(z):ne()),re.reset()),z}function Ue(z,ne,Q,C){let{scrollBehavior:V}=e;if(!mo||!V)return Promise.resolve();let B=!Q&&_a(er(z.fullPath,0))||(C||!Q)&&history.state&&history.state.scroll||null;return nt().then(()=>V(z,ne,B)).then(L=>L&&Ea(L)).catch(L=>le(L,z,ne))}let Re=z=>s.go(z),Me,Pe=new Set,He={currentRoute:f,listening:!0,addRoute:E,removeRoute:y,clearRoutes:t.clearRoutes,hasRoute:_,getRoutes:g,resolve:R,options:e,push:F,replace:P,go:Re,back:()=>Re(-1),forward:()=>Re(1),beforeEach:i.add,beforeResolve:a.add,afterEach:u.add,onError:ce.add,isReady:Oe,install(z){z.component("RouterLink",mp),z.component("RouterView",sr),z.config.globalProperties.$router=He,Object.defineProperty(z.config.globalProperties,"$route",{enumerable:!0,get:()=>jt(f)}),mo&&!Me&&f.value===Qt&&(Me=!0,F(s.location).catch(C=>{}));let ne={};for(let C in Qt)Object.defineProperty(ne,C,{get:()=>f.value[C],enumerable:!0});z.provide(ts,He),z.provide(os,Yo(ne)),z.provide(ns,f);let Q=z.unmount;Pe.add(z),z.unmount=function(){Pe.delete(z),Pe.size<1&&(k=Qt,te&&te(),te=null,f.value=Qt,Me=!1,fe=!1),Q()}}};function Ee(z){return z.reduce((ne,Q)=>ne.then(()=>S(Q)),Promise.resolve())}return He}function Ga(e){return ut(os)}function Wa(e,t){return t?.split(".").reduce((n,r)=>n?.[r],e)}function rr(e=null,t=new Map){let n=ze({}),r=[],s=!1,i=new Proxy(n,{get(a,u){return typeof u=="string"&&u.startsWith("__v_")||Reflect.has(a,u)?Reflect.get(a,u):e?.[u]}});return Object.defineProperty(n,"parent",{value:e,configurable:!0}),Object.defineProperty(n,"viewState",{get:()=>i}),i.watch=(a,u,f=!1,k=!0)=>{let h=typeof a=="function"?()=>a(i):()=>Wa(i,a),w=Be(h,u,{deep:f,flush:"post"});return r.push(w),k&&nt(()=>{s||u(h(),h())}),w},i.watchGroup=(a,u,f=!0)=>i.watch(()=>a.map(k=>Wa(i,k)),u,!0,f),i.on=(a,u)=>{if(a==="dispose")return r.push(u),()=>{};t.has(a)||t.set(a,new Set),t.get(a).add(u);let f=()=>t.get(a)?.delete(u);return r.push(f),f},i.emit=(a,...u)=>{for(let f of[...t.get(a)||[]])f({},...u)},i.dispose=()=>{s=!0,r.splice(0).reverse().forEach(a=>a())},Wo(i.dispose),i}function ct(){let e=new Set,t=new Set,n=!1,r=(i,a=0)=>{if(n)return;let u=setTimeout(()=>{e.delete(u),i()},a);return e.add(u),u};r.cancel=i=>{clearTimeout(i),e.delete(i)};let s=(i,a)=>{if(n)return;let u=setInterval(i,a);return t.add(u),u};return s.cancel=i=>{clearInterval(i),t.delete(i)},Wo(()=>{n=!0,e.forEach(clearTimeout),t.forEach(clearInterval)}),{timeout:r,interval:s}}function Xt(){let e=new Set;return Wo(()=>{e.forEach(t=>t()),e.clear()}),(t,n,r,s)=>{t.addEventListener(n,r,s);let i=()=>{t.removeEventListener(n,r,s),e.delete(i)};return e.add(i),i}}function ir(e,t,n){let r,s=!1,i="form-draft:"+n,a=()=>Object.fromEntries(t.map(m=>[m,e[m]])),u=()=>JSON.stringify(a()),f=m=>{for(let E of t)Object.prototype.hasOwnProperty.call(m,E)&&(e[E]=m[E]);e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate))},k=()=>{try{window.sessionStorage.removeItem(i)}catch{}},h=(m=!1)=>{if(r!==void 0){if(m&&document.querySelectorAll("input, select, textarea").forEach(E=>{E._field?.binding.state===e&&E._field.timer&&E._field.commit()}),e.unsavedChanges=u()!==r,e.draftSaved=!1,!e.unsavedChanges){k();return}try{window.sessionStorage.setItem(i,JSON.stringify({account:e.user?.username||null,savedAt:Date.now(),values:a()})),e.draftSaved=!0}catch{}}},w=()=>h(!0);return e.on("routeLeave",w),window.addEventListener("beforeunload",w),e.on("dispose",()=>window.removeEventListener("beforeunload",w)),{restore(){r=u();let m;try{m=JSON.parse(window.sessionStorage.getItem(i)||"null")}catch{}let E=m&&m.account===(e.user?.username||null)&&Date.now()-m.savedAt<30*6e4&&m.values;return E&&(f(m.values),e.draftRestored=!0),s||(s=!0,e.watch(()=>a(),()=>h(),!0)),e.unsavedChanges=u()!==r,!!E},checkpoint(){return JSON.parse(u())},accept(m){r=JSON.stringify(m),e.draftRestored=!1,h()},discard(){document.querySelectorAll("input, select, textarea").forEach(m=>{m._field?.binding.state!==e||!m._field.timer||(clearTimeout(m._field.timer),m._field.timer=null,m.value=m._field.binding.value??"")}),r!==void 0&&f(JSON.parse(r)),e.draftRestored=!1,h()},clear(){r=u(),e.unsavedChanges=!1,e.draftRestored=!1,e.draftSaved=!1,k()}}}var rs="XXXX",gp=e=>{rs=e||"XXXX"},Ka=(e=rs)=>{if(!e)return null;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(t+"(?:-\\d+)?","g")},Ya=(e,t=rs)=>{let n=Ka(t);if(!n||!e||!e.textContent.includes(t))return;let r=e.ownerDocument,s=r.createTreeWalker(e,NodeFilter.SHOW_TEXT),i=[];for(;s.nextNode();)i.push(s.currentNode);for(let a of i){let u=a.nodeValue,f=a.parentElement;if(!u.includes(t)||!f||f.closest("script, style, mark.redaction, .mermaid"))continue;let k=f.closest('code[class*="language-"]');if(k&&!k.contains(e))continue;let h=r.createDocumentFragment(),w=0;for(let m of u.matchAll(n)){h.append(u.slice(w,m.index));let E=r.createElement("mark");E.className="redaction",E.title="Redacted by Anonymous GitHub",E.textContent=m[0],h.append(E),w=m.index+m[0].length}h.append(u.slice(w)),a.replaceWith(h)}},Ja=(e,t=rs)=>{if(!e||!t||!e.includes(t))return e;let n=new DOMParser().parseFromString(""+e+"","text/html");return Ya(n.body,t),n.body.innerHTML};async function Qa(e){if(window.navigator.clipboard?.writeText){await window.navigator.clipboard.writeText(e);return}let t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0";let n=document.activeElement;document.body.appendChild(t);try{if(t.select(),!document.execCommand?.("copy"))throw Error("Copy unavailable")}finally{t.remove(),n?.focus()}}function bp(e){if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;let t=[...e.currentTarget.closest('[role="tablist"]').querySelectorAll('[role="tab"]')],n=t.indexOf(e.currentTarget),r=e.key==="Home"?0:e.key==="End"?t.length-1:(n+(e.key==="ArrowRight"?1:-1)+t.length)%t.length;e.preventDefault(),t[r]?.focus(),t[r]?.click()}var Xa=function(e,t,n,r){e.previewTabKeydown=bp,e.title="Main",e.user={status:"connection"},e.site_options,e.toasts=[],e.removeToast=function(h){let w=e.toasts.indexOf(h);w!==-1&&e.toasts.splice(w,1)},e.addToast=function(h){return e.toasts.push(h),r(function(){e.removeToast(h)},8e3),h};let s=/^\/(r|repository|pr|gist)\//;e.path=n.url(),e.paths=n.path().substring(1).split("/"),e.isReviewerRoute=s.test(n.path()),e.darkMode=function(h){localStorage.setItem("darkMode",h),e.isDarkMode=h;let w="/css/prism-okaidia.css",m="/css/prism.css";if(h){$("body").addClass("dark-mode");let y=document.createElement("link");y.href=w,y.rel="stylesheet",document.head.append(y),$(`link[href='${m}']`).remove()}else{$("body").removeClass("dark-mode");let y=document.createElement("link");y.href=m,y.rel="stylesheet",document.head.append(y),$(`link[href='${w}']`).remove()}let E=document.querySelector("[class*='floatingchat-container-wrap'] [class*='floating-chat-kofi-text-container-wrap']");E&&(E.style.backgroundColor=h?"#34312C":"#1A1815",E.style.color="#FAF9F6"),e.emit("dark-mode",h)},e.darkMode(localStorage.getItem("darkMode")=="true"),e.emailPromptOpen=!1,e.emailPromptAddress="",e.emailPromptBusy=!1,e.emailPromptError="";let i;e.respondToEmailPrompt=async h=>{if(!e.emailPromptBusy){e.emailPromptBusy=!0,e.emailPromptError="";try{let w=await t.post("/github/connections/email",{action:h,email:e.emailPromptAddress},{headers:{"X-CSRF-Token":e.user.emailPromptCSRF}});h==="save"&&(e.user.notificationEmail=w.data.notificationEmail),e.emailPromptOpen=!1,e.user.showEmailPrompt=!1,i?.focus()}catch(w){e.emailPromptError=w.data?.error||"Unable to save your preference. Please try again."}finally{e.emailPromptBusy=!1}}};function a(){t.get("/api/user").then(h=>{h&&(e.user=h.data),e.user?.emailNotificationsEnabled&&e.user.showEmailPrompt&&!e.user.notificationEmail&&(i=document.activeElement,e.emailPromptOpen=!0,r(()=>{let w=document.getElementById("email-prompt");w?.showModal?w.showModal():w?.setAttribute("open",""),document.getElementById("email-prompt-address")?.focus()},0))},()=>{e.user=null})}a();function u(){t.get("/api/options").then(h=>{h&&(e.site_options=h.data),gp(h?.data?.ANONYMIZATION_MASK),e.emit("site-options")},()=>{e.site_options=null})}u();function f(){t.get("/api/message").then(h=>{h&&(e.generalMessage=h.data)},()=>{e.generalMessage=null})}f();function k(h,w){w&&(e.title=w.title),e.path=n.url(),e.paths=n.path().substring(1).split("/"),e.isReviewerRoute=s.test(n.path())}e.on("routeChange",k),e.on("routeUpdate",k)},Za=function(e,t){let n=Xt(),r=ct(),s=()=>{let i=window.location.hash.slice(1),a=document.getElementById(i);if(!a?.classList.contains("panel-collapse"))return;$(a).collapse("show");let u=document.getElementById(a.getAttribute("aria-labelledby"));u?.setAttribute("tabindex","-1"),u?.focus({preventScroll:!0}),u?.scrollIntoView?.({block:"start"})};e.on("routeUpdate",()=>r.timeout(s,0)),n(window,"hashchange",s),r.timeout(s,0)},xa=function(e,t,n,r,s){e.terms="",e.options={expirationMode:"remove",update:!1,image:!0,pdf:!0,notebook:!0,loc:!0,link:!0},e.saving=!1,e.message=null,e.error=null,s.load().then(f=>{e.quota=f},console.error);let i=ir(e,["terms","options"],"profile");e.discardDraft=()=>i.discard();function a(){t.get("/api/user/default").then(f=>{let k=f.data||{};k.terms&&(e.terms=k.terms.join(` +`)),e.options=Object.assign({},e.options,k.options),i.restore()})}a();let u=null;e.saveDefault=f=>{if(f&&f.preventDefault&&f.preventDefault(),e.saving)return;let k=i.checkpoint(),h={terms:e.terms.split(` +`).map(w=>w.trim()).filter(w=>w.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",h).then(()=>{i.accept(k),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",u&&r.cancel(u),u=r(()=>{e.message=null},2500)},w=>{e.saving=!1;let m=w&&w.data&&w.data.error,E="Unable to save your defaults. Please try again.";Promise.all([n("ERRORS."+m),n("ERRORS.unknown_error")]).then(([y,g])=>{e.error=m&&y!==g?y:E},()=>{e.error=E})})},e.deleteAccount=()=>{confirm("Delete your account? All your anonymized repositories, gists, and pull requests will be removed, and your personal data will be erased. This cannot be undone.")&&(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},el=function(e,t,n){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(r=>{n.url("/dashboard")},r=>{e.error=r.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},tl=function(e,t,n,r,s){e.user&&!e.user.status&&n.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&n.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(u){e.feature=u},e.featureHref=function(u){return u.needsUser&&!e.user?"/signin":u.href},e.featureTarget=function(u){return u.needsUser&&!e.user?"_self":u.target||void 0},e.featureKeydown=function(u,f){let k={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[u.key];if(k===void 0)return;u.preventDefault();let h=e.features.length,w=k==="first"?0:k==="last"?h-1:(f+k+h)%h;e.feature=e.features[w].key,s(()=>{let m=r.document.getElementById("feature-tab-"+e.feature);m&&m.focus()})},e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}];function i(){t.get("/api/stat/").then(u=>{e.stat=u.data,e.cards[0].total=u.data.nbRepositories,e.cards[1].total=u.data.nbUsers,e.cards[2].total=u.data.nbPageViews,e.cards[3].total=u.data.nbPullRequests})}i();function a(u){let f={series:u,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!u||u.length<2)return f;let k=new Array(u.length-1);for(let g=1;g=2){let g=k[h-2];g&&(f.pctChange=(f.deltaToday-g)/g*100)}return f.pctAbs=Math.round(Math.abs(f.pctChange)),f.isUp=f.pctChange>=0,f}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(u=>{let f=u.data||[];e.history={repositories:a(f.map(k=>k.nbRepositories||0)),users:a(f.map(k=>k.nbUsers||0)),pageViews:a(f.map(k=>k.nbPageViews||0)),pullRequests:a(f.map(k=>k.nbPullRequests||0))}})},ol=function(e,t,n,r,s,i){let a=ct();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,nt(()=>document.querySelector(".dashboard-quota > summary")?.focus())},Xt()(document,"click",S=>{e.quotaExpanded&&!S.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=S=>S.status==="error"||S._broken||f(S.status)==="progress"&&S._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=S=>{e.projectView=S,S==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.projectDetailsId=S=>"project-details-"+encodeURIComponent(S._type+":"+(S._id||S._source||"unknown")),e.showProjectDetails=async S=>{e.selectedProject=S,e.projectName=S.projectName||"",e.nameError="",e.nameMessage="",await nt();let O=document.getElementById(e.projectDetailsId(S));O?.focus(),O?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=S=>{e.selectedProject=null,nt(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(S._type+":"+S._id)}"]`)?.focus())},e.saveProjectName=async S=>{if(e.nameSaving||!S._id)return;let O=e.projectName.trim();if(O.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let Y=await t.post("/api/user/project-name",{type:S._type,id:S._id,name:O});S.projectName=Y.data.name,S._label=S.projectName||S._fallbackLabel,e.selectedProject===S&&(e.nameMessage=O?"Project name saved.":"Default project name restored."),T||(e.dashboardCursor=null,await F(),e.selectedProject===S&&(e.selectedProject=e.items.find(Z=>Z._type===S._type&&Z._id===S._id)||null))}catch{e.selectedProject===S&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async S=>{if(!S._viewUrl||e.copyingId)return;let O=new URL(S._viewUrl,s.location.origin).href;e.copyingId=S._type+":"+S._id;try{await Qa(O),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:O})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"In progress",error:"Error",expired:"Expired",removed:"Removed"};let u=["queue","download","downloaded","preparing","anonymizing"];function f(S){return S==="ready"||S==="error"?S:S==="expired"||S==="expiring"?"expired":S==="removed"||S==="removing"?"removed":(u.indexOf(S)>-1,"progress")}let k=7200*1e3,h="dashboard.filterPrefs",w={typeFilter:"all",filters:{status:{ready:!0,progress:!0,error:!0,expired:!0,removed:!1}},orderBy:"-anonymizeDate"},m=loadFilterPrefs(h)||{};e.typeFilter=m.typeFilter||w.typeFilter,e.filters={status:Object.assign({},w.filters.status,m.filters&&m.filters.status||{})},e.orderBy=m.orderBy||w.orderBy;let E={_name:{label:"Anonymous ID",defaultDesc:!1},_label:{label:"Project",defaultDesc:!1},anonymizeDate:{label:"Anonymize date",defaultDesc:!0},status:{label:"Status",defaultDesc:!1},lastView:{label:"Last view",defaultDesc:!0},pageView:{label:"Views",defaultDesc:!0},"options.expirationDate":{label:"Expiration",defaultDesc:!1}};e.sortFields=E,e.sortField=()=>e.orderBy.replace(/^-/,""),e.sortDesc=()=>e.orderBy.charAt(0)==="-",e.sortLabel=()=>{let S=E[e.sortField()];return S?S.label:"Custom"},e.isSortedBy=S=>e.sortField()===S,e.setSort=(S,O)=>{typeof O!="boolean"&&(O=e.isSortedBy(S)?!e.sortDesc():!!(E[S]&&E[S].defaultDesc)),e.orderBy=(O?"-":"")+S},e.toggleSortDirection=()=>{e.setSort(e.sortField(),!e.sortDesc())},e.watchGroup(["typeFilter","orderBy"],()=>{saveFilterPrefs(h,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(h,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})},!0),i.load().then(S=>{e.quota=S},console.error);function y(S,O,Y,Z,te,J){S.pageView||(S.pageView=0),S.lastView||(S.lastView=""),S.options=S.options||{},S.options.terms=(S.options.terms||[]).filter(ce=>ce),S._id=O||"",S._source=Z,S._broken=!O,S._name=O||Z||"(unnamed)",S._fallbackLabel=S._type==="gist"?"Gist "+(O||Z||"without an ID"):Z||Y||S._name,S._label=S.projectName||S._fallbackLabel,S._editUrl=O?te:null,S._viewUrl=O?J:null,S._broken&&(S.status="error",S.statusMessage="incomplete_record"),S._statusKey=f(S.status);let re=S.anonymizeDate||S.lastView;return S._stale=S._statusKey==="progress"&&!!re&&Date.now()-new Date(re).getTime()>k,S.status==="expired"||S.status==="expiring"?S._expiry={kind:"expired",date:S.options.expirationDate}:S.status!=="ready"?S._expiry={kind:"none"}:S.options.expirationMode==="never"||!S.options.expirationDate?S._expiry={kind:"never"}:S._expiry={kind:"date",date:S.options.expirationDate},S}function g(S){return t.get(S).then(O=>O.data||[],O=>(console.error(O),[]))}function _(){return e.loading=!0,r.all([g("/api/user/anonymized_repositories"),g("/api/user/anonymized_pull_requests"),g("/api/user/anonymized_gists")]).then(S=>{let O=S[0],Y=S[1],Z=S[2],te=[];O.forEach(J=>{J._type="repo";let re=J.source||{};te.push(y(J,J.repoId,J.repoId,re.fullName,"/anonymize/"+J.repoId,"/r/"+J.repoId+"/"))}),Y.forEach(J=>{J._type="pr";let re=J.source||{};te.push(y(J,J.pullRequestId,J.pullRequestId,re.repositoryFullName?re.repositoryFullName+"#"+re.pullRequestId:void 0,"/pull-request-anonymize/"+J.pullRequestId,"/pr/"+J.pullRequestId+"/"))}),Z.forEach(J=>{J._type="gist";let re=J.source||{};te.push(y(J,J.gistId,J.gistId,re.gistId,"/gist-anonymize/"+J.gistId,"/gist/"+J.gistId+"/"))}),e.items=te,e.loading=!1})}let R=0,T=!1;e.dashboardCursor=null,e.dashboardError="";function I(S){let O=S.source||{};return S._type==="repo"?y(S,S.repoId,S.repoId,O.fullName,"/anonymize/"+S.repoId,"/r/"+S.repoId+"/"):S._type==="pr"?y(S,S.pullRequestId,S.pullRequestId,O.repositoryFullName?O.repositoryFullName+"#"+O.pullRequestId:void 0,"/pull-request-anonymize/"+S.pullRequestId,"/pr/"+S.pullRequestId+"/"):y(S,S.gistId,S.gistId,O.gistId,"/gist-anonymize/"+S.gistId,"/gist/"+S.gistId+"/")}function F(S=!1){if(T)return _();let O=++R;return e.loading=!S,e.loadingMore=S,e.dashboardError="",t.get("/api/user/dashboard",{params:{q:e.search,type:e.typeFilter,sort:e.orderBy,statuses:Object.keys(e.filters.status).filter(Y=>e.filters.status[Y]!==!1).join(",")||"none",attention:String(e.projectView==="attention"),cursor:S?e.dashboardCursor:void 0}}).then(Y=>{if(O===R){if(!Array.isArray(Y.data?.items))return T=!0,_();e.items=(S?e.items:[]).concat(Y.data.items.map(I)),e.dashboardCursor=Y.data.cursor,e.dashboardTotals=Y.data}},Y=>{if(O===R){if(Y.status===404)return T=!0,_();e.dashboardError="Projects could not be loaded. Please try again."}}).finally(()=>{O===R&&(e.loading=!1,e.loadingMore=!1)})}e.loadMoreProjects=()=>F(!0);let P;e.watchGroup(["search","typeFilter","orderBy","projectView"],()=>{T||(P&&a.timeout.cancel(P),P=a.timeout(()=>F(),150))},!1),e.watch("filters",()=>{T||F()},!0,!1),e.on("dispose",()=>{R++}),F(),e.openItem=(S,O)=>{if(!S._viewUrl)return;let Y=O&&O.target;Y&&Y.closest&&Y.closest("a, button, .dropdown, input")||(s.location.href=S._viewUrl)},e.hiddenStatusCount=()=>Object.keys(e.filters.status).filter(S=>e.filters.status[S]===!1).length,e.hasHiddenStatus=()=>e.hiddenStatusCount()>0,e.hasActiveFilters=()=>e.projectView!=="all"||e.typeFilter!=="all"||e.search.trim().length>0||Object.keys(e.filters.status).some(S=>e.filters.status[S]===!1),e.showClearFilters=()=>e.search.trim().length>0||e.typeFilter!=="all"||e.hiddenStatusCount()>1,e.clearFilters=()=>{e.projectView="all",e.typeFilter="all",e.search="",Object.keys(e.filters.status).forEach(S=>{e.filters.status[S]=!0})};function M(S,O,Y,Z){t.get("/api/repo/"+S).then(async te=>{let J=Z!==void 0&&Z!==te.data.status;for(let re of e.items)if(re._type==="repo"&&re.repoId==S){J=J||re.status!==te.data.status;let ce=e.needsAttention(re);re.status=te.data.status,re.statusMessage=te.data.statusMessage,re._statusKey=f(re.status),re._statusKey!=="progress"&&(re._stale=!1);let fe=e.needsAttention(re);e.dashboardTotals&&ce!==fe&&(e.dashboardTotals.attention=Math.max(0,e.dashboardTotals.attention+(fe?1:-1)));break}if(J&&!T){e.dashboardCursor=null;let re=e.selectedProject;await F(),re&&e.selectedProject===re&&(e.selectedProject=e.items.find(ce=>ce._type===re._type&&ce._id===re._id)||null)}if(te.data.status=="ready"||te.data.status=="error"||te.data.status=="removed"||te.data.status=="expired"){O(te.data);return}a.timeout(()=>M(S,O,Y,te.data.status),2500)},Y)}let se=S=>S==="repo"?"repository":S==="gist"?"gist":"pull request",oe=S=>S==="repo"?"/api/repo":S==="gist"?"/api/gist":"/api/pr";e.removeItem=S=>{let O=se(S._type);if(confirm(`Are you sure that you want to remove the ${O} ${S._id}?`)){let Y=ze({title:`Removing ${S._id}...`,date:new Date,body:`The ${O} ${S._id} is going to be removed.`});e.addToast(Y);let Z=`${oe(S._type)}/${S._id}`;t.delete(Z).then(()=>{S._type==="repo"?M(S._id,()=>{Y.title=`${S._id} is removed.`,Y.body=`The ${O} ${S._id} is removed.`},void 0,S.status):(Y.title=`${S._id} is removed.`,Y.body=`The ${O} ${S._id} is removed.`,F())},te=>{Y.title=`Error during the removal of ${S._id}.`,Y.body=te.body,F()})}},e.refreshItem=S=>{let O=se(S._type),Y=ze({title:`Refreshing ${S._id}...`,date:new Date,body:`The ${O} ${S._id} is going to be refreshed.`});e.addToast(Y);let Z=J=>{Y.title=`Error during the refresh of ${S._id}.`,Y.body=J.data?.error||J.body||"The refresh could not be completed. Please try again.",F()},te=`${oe(S._type)}/${S._id}/refresh`;t.post(te).then(()=>{S._type==="repo"?M(S._id,J=>{if(J.status!=="ready"){Z({body:J.statusMessage||`The repository is ${J.status}.`});return}Y.title=`${S._id} is refreshed.`,Y.body=`The ${O} ${S._id} is refreshed.`},Z,S.status):(Y.title=`${S._id} is refreshed.`,Y.body=`The ${O} ${S._id} is refreshed.`,F())},Z)},e.extendItem=S=>{let O=se(S._type),Y=ze({title:`Extending ${S._id}...`,date:new Date,body:`The expiration of ${O} ${S._id} is going to be extended by 6 months.`});e.addToast(Y);let Z=`${oe(S._type)}/${S._id}/extend`;t.post(Z).then(()=>{S._type==="repo"?M(S._id,()=>{Y.title=`${S._id} is extended.`,Y.body=`The expiration of ${O} ${S._id} is extended by 6 months.`},void 0,S.status):(Y.title=`${S._id} is extended.`,Y.body=`The expiration of ${O} ${S._id} is extended by 6 months.`,F())},te=>{Y.title=`Error during the extension of ${S._id}.`,Y.body=te.data&&te.data.error||te.body,F()})},e.itemFilter=S=>{if(e.projectView==="attention"&&!e.needsAttention(S)||e.typeFilter!=="all"&&S._type!==e.typeFilter||e.filters.status[S._statusKey]===!1)return!1;let O=e.search.trim().toLowerCase();return!!(O.length==0||S._label&&String(S._label).toLowerCase().indexOf(O)>-1||S._source&&String(S._source).toLowerCase().indexOf(O)>-1||S._id&&String(S._id).toLowerCase().indexOf(O)>-1||S.conference&&String(S.conference).toLowerCase().indexOf(O)>-1)}};var nl=function(e,t,n){let r=ct();e.repoId=n.repoId,e.repo=null,e.progress=0,e.rateLimitResetAt=0,e.rateLimitCountdown="",e.shareUrl=(window.location?.origin||"")+"/r/"+encodeURIComponent(e.repoId)+"/",e.copied=!1;let s=null;e.copyShareUrl=async()=>{try{await Qa(e.shareUrl),e.copied=!0,s&&r.timeout.cancel(s),s=r.timeout(()=>{e.copied=!1},2e3)}catch{e.addToast?.({title:"Copy this anonymous link",body:e.shareUrl})}};var i=null;let a=null,u=!1;function f(h){e.rateLimitResetAt=h,i&&r.interval.cancel(i);function w(){var m=Math.max(0,Math.ceil((h-Date.now())/1e3));if(m<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,r.interval.cancel(i),i=null;else{var E=Math.floor(m/60),y=m%60;e.rateLimitCountdown=E>0?E+"m "+y+"s":y+"s"}}w(),i=r.interval(w,1e3)}e.on("dispose",function(){u=!0,i&&r.interval.cancel(i),a&&r.timeout.cancel(a)});function k(h){if(!h)return h;var w=h.match(/^rate_limited:(\d+)$/);return w?(f(parseInt(w[1],10)),null):(e.rateLimitResetAt=0,h)}e.getStatus=()=>{u||t.get("/api/repo/"+e.repoId,{repoId:e.repoId,repoUrl:e.repoUrl}).then(h=>{if(!u){e.repo=h.data,h.data.rateLimitResetAt?f(h.data.rateLimitResetAt):e.repo.statusMessage=k(e.repo.statusMessage),e.repo.status=="ready"?e.progress=100:e.repo.status=="queue"?e.progress=10:e.repo.status=="downloaded"?e.progress=50:e.repo.status=="download"||e.repo.status=="preparing"?e.progress=25:e.repo.status=="anonymizing"&&(e.progress=75);var w=!["ready","removed","expired"].includes(e.repo.status);e.repo.status=="error"&&!e.rateLimitResetAt&&(w=!1),w&&(a=r.timeout(e.getStatus,2e3))}},h=>{e.error=h.data.error})},e.getStatus()},is=function(e,t,n,r,s,i,a){e.sourceUrl="",e.workspaceOpen=!1,e.sourceUrlError="",e.previewStatus="idle",e.sourceLoading=!1,e.mobilePane="settings";let u=window.matchMedia?.("(max-width: 767px)");e.mobileWorkspace=!!u?.matches,u?.addEventListener&&Xt()(u,"change",C=>{e.mobileWorkspace=C.matches}),e.selectMobilePane=C=>{e.mobilePane=C};let f=0,k=!1,h=new Set,w=(C,V=!1)=>!k&&C.generation===f&&C.url===e.sourceUrl.trim()&&C.connection===e.githubConnection&&(!V||C.branch===e.source.branch),m=()=>{let C={generation:f,url:e.sourceUrl.trim(),connection:e.githubConnection,branch:e.source.branch};return h.add(C),e.sourceLoading=!0,C},E=C=>{h.delete(C),k||(e.sourceLoading=[...h].some(V=>w(V)))};e.on("dispose",()=>{k=!0,f++});let y=null,g=C=>C.gistId&&!C.repo?"gist:"+C.gistId.toLowerCase():(C.owner+"/"+C.repo).toLowerCase()+(C.pullRequestId?"/pull/"+C.pullRequestId:""),_=ir(e,["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"],"anonymize:"+(s.path?.()||""));e.discardDraft=async()=>{_.discard(),e.workspaceOpen=!!e.sourceUrl,e.error=null,e.sourceUrl?await e.urlSelected(!0):(f++,e.sourceLoading=!1,e.detectedType=null,e.details=null,e.sourceUrlError="",re.cancel(),_e.cancel(),Pe.cancel(),e.previewStatus="idle")},e.githubConnection=void 0,e.githubConnections=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1;let R=()=>{let C={};for(let V of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])C[V]=e[V];sessionStorage.setItem("github-access-draft",JSON.stringify({path:s.path(),savedAt:Date.now(),draft:C}))};e.connectGistApp=()=>{R(),window.location.href="/github/app/login?returnTo="+encodeURIComponent(s.path())},e.connectGistOAuth=()=>{R(),window.location.href="/github/login?returnTo="+encodeURIComponent(s.path())},e.grantGitHubAccess=()=>{R();let C=s.path(),V=se(e.sourceUrl)||"",B=e.githubConnections?.appConnected?"/github/app/install":"/github/app/login";window.location.href=B+"?returnTo="+encodeURIComponent(C)+"&repository="+encodeURIComponent(V)+"&install=1"},e.chooseGitHubConnection=async C=>{e.githubConnection=C,e.readme="",e.sourceUrl&&await S()},e.detectedType=null,e.repoId="",e.pullRequestId="",e.gistId="",e.terms="",e.defaultTerms="",e.branches=[],e.source={branch:"",commit:""},e.options={expirationMode:"remove",expirationDate:new Date,update:!1,image:!0,pdf:!0,notebook:!0,link:!0,body:!0,title:!0,origin:!1,diff:!0,content:!0,comments:!0,username:!0,date:!0};function T(){let C=new Date;return C.setMonth(C.getMonth()+6),C}e.options.expirationDate=T();function I(C){let V=C.getFullYear(),B=String(C.getMonth()+1).padStart(2,"0"),L=String(C.getDate()).padStart(2,"0");return`${V}-${B}-${L}`}e.minExpirationDate=I(new Date);let F=new Date;F.setFullYear(F.getFullYear()+1),e.maxExpirationDate=I(F),e.anonymize_readme="",e.readme="",e.html_readme="",e.isUpdate=!1;function P(C){t.get("/api/user/default").then(V=>{let B=V.data;B.terms&&(e.defaultTerms=B.terms.join(` +`)),e.options=Object.assign({},e.options,B.options),e.options.expirationDate=B.options&&B.options.expirationDate?new Date(B.options.expirationDate):T(),!r.repoId&&!r.pullRequestId&&!r.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),C&&C()})}function M(C,V,B){e.anonymize&&e.anonymize[C]&&e.anonymize[C].setValidity(V,B)}function se(C){try{let V=parseGithubUrl(C);if(V&&V.owner&&V.repo)return V.owner+"/"+V.repo}catch{}return null}e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await Y()}catch{}}};function oe(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:se(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function S(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function O(){let C;try{C=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!C||C.path!==s.path()||Date.now()-C.savedAt>=30*6e4)return _.restore()?(e.sourceUrl&&await S(),!0):!1;_.restore();for(let V of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(C.draft,V)&&(e[V]=C.draft[V]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await S(),sessionStorage.removeItem("github-access-draft"),!0}P(()=>{!r.repoId&&!r.pullRequestId&&!r.gistId&&a(O,0),r.repoId&&r.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=r.repoId,t.get("/api/repo/"+e.repoId).then(async C=>{e.githubConnection=C.data.connection||"oauth",e.sourceUrl="https://github.com/"+C.data.source.fullName,e._originalFullName=C.data.source.fullName,e.terms=C.data.options.terms.filter(V=>V).join(` +`),e.source=C.data.source,e.role=C.data.role||"owner",e.coauthors=C.data.coauthors||[],e._originalBranch=C.data.source.branch,e.options=Object.assign({},e.options,C.data.options),e.conference=C.data.conference,e._originalConference=C.data.conference,e.repositoryID=C.data.source.repositoryID,e._originalRepositoryID=C.data.source.repositoryID,C.data.options.expirationDate&&(e.options.expirationDate=new Date(C.data.options.expirationDate)),y=g(parseGithubUrl(e.sourceUrl)),!await O()&&(await Promise.all([Y(),Z()]),ce())},()=>{s.url("/404")})),r.pullRequestId&&r.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=r.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async C=>{if(e.githubConnection=C.data.connection||"oauth",e.sourceUrl="https://github.com/"+C.data.source.repositoryFullName+"/pull/"+C.data.source.pullRequestId,e.terms=C.data.options.terms.filter(V=>V).join(` +`),e.source=C.data.source,e.options=Object.assign({},e.options,C.data.options),e.conference=C.data.conference,e._originalConference=C.data.conference,C.data.options.expirationDate&&(e.options.expirationDate=new Date(C.data.options.expirationDate)),y=g(parseGithubUrl(e.sourceUrl)),!await O())try{await fe()}catch{}},()=>{s.url("/404")})),r.gistId&&r.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=r.gistId,t.get("/api/gist/"+e.gistId).then(async C=>{e.sourceUrl="https://gist.github.com/"+C.data.source.gistId,e.terms=C.data.options.terms.filter(V=>V).join(` +`),e.source=C.data.source,e.options=Object.assign({},e.options,C.data.options),e.conference=C.data.conference,e._originalConference=C.data.conference,C.data.options.expirationDate&&(e.options.expirationDate=new Date(C.data.options.expirationDate)),y=g(parseGithubUrl(e.sourceUrl)),!await O()&&await Ue()},()=>{s.url("/404")}))}),t.get("/github/connections").then(C=>{e.githubConnections=C.data,!r.repoId&&!r.pullRequestId&&!r.gistId&&e.githubConnection===void 0&&C.data.appEnabled&&C.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&S())}).catch(()=>{}),e.urlSelected=async(C=!1)=>{let V=++f,B;try{B=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,re.cancel(),_e.cancel(),Pe.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",M("sourceUrl","github",!1);return}let L=g(B),v=C||y===L;y=L,e.sourceUrlError="",M("sourceUrl","github",!0);let N=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,N&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!v&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],v||(e.source={type:"GitHubStream",branch:"",commit:""}),re.cancel(),_e.cancel(),Pe.cancel(),le.clear(),Re.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=v;try{B.gistId&&!B.repo?(e.detectedType="gist",e.source={gistId:B.gistId},await Ue()):B.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:B.owner+"/"+B.repo,pullRequestId:B.pullRequestId},await fe()):(e.detectedType="repo",await Promise.all([Y(),Z()]),ce())}catch{}finally{V===f&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let C=e.branches.filter(B=>B.name==e.source.branch)[0];if(!C)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=C.commit),e.readme=C.readme,await Z(),ce()}),e.getBranches=async C=>{let V=parseGithubUrl(e.sourceUrl),B=m();try{let L=await t.get(`/api/repo/${V.owner}/${V.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&se(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:C===!0||e.reconnectingSource?"1":"0",repositoryID:oe()}});if(!w(B))return;e.branches=L.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let v=e.branches.filter(N=>N.name==e.source.branch);v.length>0&&(!(!e.reconnectingSource&&!C&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=v[0].commit),e.readme=v[0].readme,await Z(C))}catch(L){if(!w(B))return;e.branches=[],e.sourceUnreachable=L&&(L.status===404||L.data&&L.data.error==="repo_not_found");let v=L&&L.data&&L.data.error||(L&&L.status===404?"repo_not_found":"unknown_error");i("ERRORS."+v).then(N=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:N}),e.error=N},console.error),typeof M=="function"&&M("sourceUrl","missing",!1)}finally{E(B)}};async function Y(){let C=parseGithubUrl(e.sourceUrl),V=m();try{z();let B=await t.get(`/api/repo/${C.owner}/${C.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&se(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,repositoryID:oe(),force:"1"}});if(!w(V))return;e.details=B.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(B){if(!w(V))return;throw B.data&&(i("ERRORS."+B.data.error).then(L=>{e.addToast({title:"Error",date:new Date,body:L}),e.error=L},console.error),Q(B.data.error)),M("sourceUrl","missing",!1),B}finally{E(V)}}async function Z(C){if(e.readme&&!C)return e.readme;let V=parseGithubUrl(e.sourceUrl),B=m();try{let L=await t.get(`/api/repo/${V.owner}/${V.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&se(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:C===!0?"1":"0",branch:e.source.branch,repositoryID:oe()}});w(B,!0)&&(e.readme=L.data)}catch{w(B,!0)&&(e.readme="")}finally{E(B)}}function te(){let C={terms:e.terms?e.terms.split(` +`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(C.branchName=e.source.branch);try{let V=parseGithubUrl(e.sourceUrl);C.repoName=`${V.owner}/${V.repo}`}catch{}return C}function J(C,V,B){let L=null,v=0,N=()=>{if(e.detectedType!==C)return;L&&a.cancel(L);let q=++v;e.previewStatus="loading",L=a(()=>{L=null;let H=V();if(!H){e.previewStatus="idle";return}t.post("/api/anonymize-preview",H).then(j=>{q===v&&(B(j.data,H),e.previewStatus="ready")}).catch(()=>{q===v&&(e.previewStatus="error")})},200)};return N.cancel=()=>{v++,L&&a.cancel(L),L=null},e.on("dispose",N.cancel),N}e.retryPreview=()=>{e.detectedType==="repo"&&re(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()};let re=J("repo",()=>e.readme?{content:e.readme,options:te()}:null,C=>{if(typeof C?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=C.content;let V="";try{let L=parseGithubUrl(e.sourceUrl),v=e.source.branch||e.details&&e.details.defaultBranch||"main";V=`https://github.com/${L.owner}/${L.repo}/raw/${v}/`}catch{}let B=renderMD(e.anonymize_readme,V);e.html_readme=B,a(Prism.highlightAll,150)});function ce(){!e.anonymize||!e.anonymize.terms||(e.termsRegexWarning=!!e.terms&&!!e.terms.match(/[-[\]{}()*+?.,\\^$|#]/g),re())}async function fe(){let C=parseGithubUrl(e.sourceUrl),V=m();try{z();let B=await t.get(`/api/pr/${C.owner}/${C.repo}/${C.pullRequestId}`,{params:{connection:e.githubConnection}});if(!w(V))return;e.details=B.data,e.pullRequestId||(e.pullRequestId=C.repo+"-PR"+C.pullRequestId+"-"+generateRandomId(4))}catch(B){if(!w(V))return;throw B.data&&(i("ERRORS."+B.data.error).then(L=>{e.addToast({title:"Error",date:new Date,body:L}),e.error=L},console.error),Q(B.data.error)),M("sourceUrl","missing",!1),B}finally{E(V)}}let le=ze(new Map);function Oe(){let C=new Set,V=e.details&&e.details.pullRequest;if(!V)return C;typeof V.title=="string"&&C.add(V.title),typeof V.body=="string"&&C.add(V.body),typeof V.diff=="string"&&C.add(V.diff);let B=V.comments||[];for(let L of B)typeof L.author=="string"&&C.add(L.author),typeof L.body=="string"&&C.add(L.body);return C}let _e=J("pr",()=>{let C=Oe(),V=Array.from(C);return V.length===0?null:{contents:V,options:te()}},(C,V)=>{if(!Array.isArray(C?.contents)||C.contents.length!==V.contents.length||C.contents.some(v=>typeof v!="string"))throw Error("Invalid preview response");let B=V.contents,L=new Map;for(let v=0;vle.set(N,v))});e.anonymizePrContent=function(C){return C&&(le.has(C)?le.get(C):"")};async function Ue(){let C=parseGithubUrl(e.sourceUrl),V=m();try{z(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let B=await t.get(`/api/gist/source/${C.gistId}`);if(!w(V))return;e.details=B.data,e.gistId||(e.gistId="gist-"+C.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(B){if(!w(V))return;if(B.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,M("sourceUrl","missing",!1);return}if(B.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,M("sourceUrl","missing",!1);return}throw B.data&&(i("ERRORS."+B.data.error).then(L=>{e.addToast({title:"Error",date:new Date,body:L}),e.error=L},console.error),Q(B.data.error)),M("sourceUrl","missing",!1),B}finally{E(V)}}let Re=ze(new Map);function Me(){let C=new Set,V=e.details&&e.details.gist;if(!V)return C;typeof V.description=="string"&&C.add(V.description),typeof V.ownerLogin=="string"&&C.add(V.ownerLogin);let B=V.files||[];for(let v of B)typeof v.filename=="string"&&C.add(v.filename),typeof v.content=="string"&&C.add(v.content);let L=V.comments||[];for(let v of L)typeof v.author=="string"&&C.add(v.author),typeof v.body=="string"&&C.add(v.body);return C}let Pe=J("gist",()=>{let C=Me(),V=Array.from(C);return V.length===0?null:{contents:V,options:te()}},(C,V)=>{if(!Array.isArray(C?.contents)||C.contents.length!==V.contents.length||C.contents.some(v=>typeof v!="string"))throw Error("Invalid preview response");let B=V.contents,L=new Map;for(let v=0;vRe.set(N,v)),He()});e.anonymizeGistContent=function(C){return C&&(Re.has(C)?Re.get(C):"")},e.previewGistFiles=[];function He(){let C=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=C.map(V=>({filename:e.anonymizeGistContent(V.filename),content:e.anonymizeGistContent(V.content),language:V.language}))}e.watch("details.gist.files",He,!0),e.watch("terms",He);function Ee(){let C=e.conference;if(e.conference_data=null,!C)return;let V=e.isUpdate&&C===e._originalConference;t.get("/api/conferences/"+C).then(B=>{e.conference===C&&(e.conference_data=B.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!V&&(e.options.expirationDate=new Date(e.conference_data.endDate),e.options.expirationMode="remove",e.options.update=e.conference_data.options.update,e.options.image=e.conference_data.options.image,e.options.pdf=e.conference_data.options.pdf,e.options.notebook=e.conference_data.options.notebook,e.options.link=e.conference_data.options.link))},()=>{e.conference===C&&(e.conference_data=null)})}function z(){M("repoId","used",!0),M("repoId","format",!0),M("pullRequestId","used",!0),M("pullRequestId","format",!0),M("gistId","used",!0),M("gistId","format",!0),M("sourceUrl","used",!0),M("sourceUrl","missing",!0),M("sourceUrl","access",!0),M("sourceUrl","github",!0),M("commit","exists",!0),M("conference","activated",!0),M("terms","format",!0),e.termsRegexWarning=!1}function ne(){let C=e.anonymize&&e.anonymize.expirationDate;return!e.options.expirationDate||C&&C.invalid?(C&&C.setDirty&&C.setDirty(),e.error="Please choose a valid expiration date.",!0):!1}function Q(C){let V=e.detectedType==="pr"?"pullRequestId":e.detectedType==="gist"?"gistId":"repoId";switch(C){case"repoId_already_used":M(V,"used",!1);break;case"invalid_repoId":M(V,"format",!1);break;case"options_not_provided":M(V,"format",!1);break;case"repo_already_anonymized":M("sourceUrl","used",!1);break;case"invalid_terms_format":M("terms","format",!1);break;case"repo_not_found":M("sourceUrl","missing",!1);break;case"repo_not_accessible":M("sourceUrl","access",!1);break;case"commit_not_found":M("commit","exists",!1);break;case"conf_not_activated":M("conference","activated",!1);break}}e.coauthors=e.coauthors||[],e.coauthorResults=[],e.coauthorError="",e.searchCoauthors=()=>{let C=(e.coauthorSearch||"").trim();if(e.coauthorError="",C.length<2){e.coauthorResults=[];return}t.get("/api/user/search/github-users",{params:{q:C}}).then(V=>{let B=new Set((e.coauthors||[]).map(L=>(L.username||"").toLowerCase()));e.coauthorResults=(V.data||[]).filter(L=>!B.has((L.username||"").toLowerCase()))},()=>{e.coauthorResults=[]})},e.addCoauthor=(C,V)=>{V&&V.preventDefault(),!(!C||!C.username)&&t.post("/api/repo/"+e.repoId+"/coauthors",{username:C.username}).then(B=>{e.coauthors=B.data||[],e.coauthorResults=[],e.coauthorSearch="",e.coauthorError=""},B=>{let L=B&&B.data&&B.data.error||"unknown_error";e.coauthorError=L})},e.removeCoauthor=C=>{!C||!C.username||confirm("Remove co-author "+C.username+"?")&&t.delete("/api/repo/"+e.repoId+"/coauthors/"+encodeURIComponent(C.username)).then(V=>{e.coauthors=V.data||[]},V=>{let B=V&&V.data&&V.data.error||"unknown_error";e.coauthorError=B})},e.anonymizeRepo=C=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(e.reconnectingSource&&!e.reconnectRepositoryId||ne())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let V=C.currentTarget||C.target.closest?.("button")||C.target;V.disabled=!0;let B=parseGithubUrl(e.sourceUrl),L={repoId:e.repoId,terms:e.terms.trim().split(` +`).filter(N=>N),connection:e.githubConnection,fullName:`${B.owner}/${B.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(L.options.pageSource=e.details.pageSource),z();let v=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(v,L,{headers:{"Content-Type":"application/json"}}).then(()=>{_.clear(),window.location.href="/status/"+e.repoId},N=>{N.data&&(i("ERRORS."+N.data.error).then(q=>{e.error=q},console.error),Q(N.data.error))}).finally(()=>{V.disabled=!1})},e.anonymizeGist=C=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ne())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let V=C.currentTarget||C.target.closest?.("button")||C.target;V.disabled=!0;let B=parseGithubUrl(e.sourceUrl),L={gistId:e.gistId,terms:e.terms.trim().split(` +`).filter(N=>N),source:{gistId:B.gistId},options:e.options,conference:e.conference};z();let v=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(v,L,{headers:{"Content-Type":"application/json"}}).then(()=>{_.clear(),window.location.href="/gist/"+e.gistId},N=>{N.data&&(i("ERRORS."+N.data.error).then(q=>{e.error=q},console.error),Q(N.data.error))}).finally(()=>{V.disabled=!1})},e.anonymizePullRequest=C=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ne())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let V=C.currentTarget||C.target.closest?.("button")||C.target;V.disabled=!0;let B=parseGithubUrl(e.sourceUrl),L={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(` +`).filter(N=>N),source:{repositoryFullName:`${B.owner}/${B.repo}`,pullRequestId:B.pullRequestId},options:e.options,conference:e.conference};z();let v=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(v,L,{headers:{"Content-Type":"application/json"}}).then(()=>{_.clear(),window.location.href="/pr/"+e.pullRequestId},N=>{N.data&&(i("ERRORS."+N.data.error).then(q=>{e.error=q},console.error),Q(N.data.error))}).finally(()=>{V.disabled=!1})},e.watch("conference",()=>{Ee()}),e.watch("terms",()=>{e.detectedType==="repo"&&ce(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()}),e.watch("options.image",()=>{e.detectedType==="repo"&&ce(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()}),e.watch("options.link",()=>{e.detectedType==="repo"&&ce(),e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()}),e.watch("details",()=>{e.detectedType==="pr"&&_e(),e.detectedType==="gist"&&Pe()},!0)},ar=function(e,t,n,r,s,i){let a=ct();window.Prism?.hooks&&!window.Prism.redactionHook&&(window.Prism.hooks.add("complete",O=>Ya(O.element)),window.Prism.redactionHook=!0);let u=Xt();e.on("dark-mode",(O,Y)=>{e.aceOption&&(Y?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let f=0,k=!1;e.on("dispose",()=>{k=!0,f++,h&&h.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"keydown",function(O){if((O.metaKey||O.ctrlKey)&&O.key==="k"){O.preventDefault();var Y=document.querySelector(".tree-search-input");Y&&(Y.focus(),Y.select())}});var h=null;e.onFileSearchChange=function(){h&&(h.resolve(),h=null);let O=e.fileSearchQuery;if(!O||O.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let Y=i.defer();h=Y,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(O)}`,{timeout:Y.promise}).then(function(Z){if(!(k||h!==Y)){h=null,e.fileSearchLoading=!1;var te={};e.files.forEach(function(z){te[(z.path||"")+"/"+z.name]=!0});for(var J=[],re={},ce=0;ce0&&e.files.push.apply(e.files,J);for(var Me=[],Pe=0;Pe0&&e.files.push.apply(e.files,Me),e.fileSearchResults=Z.data}},function(){!k&&h===Y&&(h=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let w={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},m=["license","txt"],E=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],y=["wav","mp3","ogg","wma","flac","aac","m4a"],g=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(O,Y){if(e.repoId!=r.repoId)return S();if((r.path||"")!=e.filePath){e.filePath=r.path||"",e.paths=e.filePath.split("/").filter(Z=>Z&&Z.trim().length>0),oe();for(let Z=0;Z0?e.paths.slice(0,Z).join("/"):"";e.files.some(re=>re.path===te)||e.getFiles(te)}}});function _(){if(e.paths[0]!="")return;let O=["readme.md","readme.txt","readme.org","readme.1st","readme"],Y={};for(let te of e.files)te.name.toLowerCase().indexOf("readme")>-1&&(Y[te.name.toLowerCase()]=te.name);let Z=null;for(let te of O)if(Y[te]){Z=te;break}if(!Z&&Object.keys(Y).length>0&&(Z=Object.keys(Y)[0]),Z){let te=n.url();te[te.length-1]!="/"&&(te+="/"),n.url(te+encodePathForUrl(Y[Z]))}}e.fileCounts=null,e.getFiles=function(O){let Y=e.repoId;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(O)}&v=${e.options.lastUpdateDate}`).then(function(Z){if(k||Y!==e.repoId)return[];let te=O||"";return e.files=e.files.filter(J=>J.path!==te),e.files.push(...Z.data),Z.data},function(Z){if(k||Y!==e.repoId)return[];e.type="error",e.content=Z&&Z.data&&Z.data.error||"unknown_error",e.files=[]})};function R(){let O=e.repoId;t.get(`/api/repo/${e.repoId}/files/counts`).then(function(Y){k||O!==e.repoId||(e.fileCounts=Y.data)},function(){e.fileCounts={}})}function T(){return e.files.filter(O=>O.name==e.paths[e.paths.length-1]&&O.path==e.paths.slice(0,e.paths.length-1).join("/"))[0]}var I=null;e.on("dispose",function(){I&&a.interval.cancel(I)});function F(O){if(k)return;let Y=e.repoId;t.get(`/api/repo/${e.repoId}/options`).then(Z=>{if(!(k||Y!==e.repoId)){if(e.options=Z.data,e.options.url){window.location=e.options.url;return}O&&O(Z.data)}},Z=>{if(!(k||Y!==e.repoId)){var te=Z.data||{};if(te.error==="rate_limited"&&te.resetAt){let re=function(){var ce=Math.max(0,Math.ceil((e.rateLimitResetAt-Date.now())/1e3));if(ce<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,I&&(a.interval.cancel(I),I=null),F(O);else{var fe=Math.floor(ce/60),le=ce%60;e.rateLimitCountdown=fe>0?fe+"m "+le+"s":le+"s"}};var J=re;e.type="rate_limited",e.rateLimitResetAt=te.resetAt,I&&a.interval.cancel(I),re(),I=a.interval(re,1e3)}else te.error==="repository_not_ready"?(e.type="loading",a.timeout(function(){F(O)},3e3)):(e.type="error",e.content=te.error)}})}e.toggleSource=function(){e.showSource=!e.showSource},e.toggleAllowScripts=function(){e.allowScripts=!e.allowScripts};function P(O){return w[O]?w[O]:O}function M(O){return O=="pdf"?"pdf":O=="html"||O=="htm"?"html-doc":O=="md"?"md":O=="org"?"org":O=="ipynb"?"IPython":m.indexOf(O)>-1?"text":E.indexOf(O)>-1?"image":g.indexOf(O)>-1?"media":y.indexOf(O)>-1?"audio":"code"}function se(O,Y){let Z=f;if(!O){e.type="error",e.content="no_file_selected";return}let te=e.type;e.type="loading",e.content="loading";let J=Y&&Y.sha||"0";t.get(`/api/repo/${e.repoId}/file/${encodePathForUrl(O)}?v=`+J,{transformResponse:re=>re}).then(re=>{if(!(k||Z!==f)){if(e.type=te,e.content=re.data,e.content==""&&(e.content=null),e.type=="md"&&(e.content=renderMD(re.data,n.url()+"/../"),e.type="html"),e.type=="org"){let fe=contentAbs2Relative(re.data);var ce=new Org.Parser().parse(fe).convert(Org.ConverterHTML,{headerOffset:1,exportFromLineNumber:!1,suppressSubScriptHandling:!0,suppressAutoLink:!1});e.content=DOMPurify.sanitize(ce.toString()),e.type="html"}e.type=="code"&&re.headers("content-type")=="application/octet-stream"&&(e.type="binary",e.content="binary"),a.timeout(()=>{Prism.highlightAll()},50)}},re=>{if(!(k||Z!==f)){e.type="error",e.content="unknown_error";try{re.data=JSON.parse(re.data),re.data.error?e.content=re.data.error:e.content=re.data}catch{console.log(re),re.status==-1?e.content="request_error":re.status==502&&(e.content="unreachable")}}})}function oe(){f++,e.content="",e.file=T();let O="0";e.file&&e.file.sha&&(O=e.file.sha),e.url=`/api/repo/${e.repoId}/file/${encodePathForUrl(e.filePath)}?v=${O}`;let Y=e.filePath.substring(0,e.filePath.lastIndexOf("/")+1);e.fileBaseUrl=`/api/repo/${e.repoId}/file/${Y?encodePathForUrl(Y):""}`,e.showSource=!1,e.allowScripts=!1;let Z=e.filePath.toLowerCase(),te=Z.lastIndexOf(".");if(te>-1&&(Z=Z.substring(te+1)),e.aceOption={readOnly:!0,useWrapMode:!0,showGutter:!0,theme:"chrome",useSoftTab:!0,tabSize:2,fontSize:13,keyBinding:"vscode",fullLineSelection:!0,highlightActiveLine:!1,highlightGutterLine:!1,cursor:"hide",showInvisibles:!1,showIndentGuides:!0,showPrintMargin:!1,highlightSelectedWord:!1,enableBehaviours:!0,fadeFoldWidgets:!1,mode:P(Z),onLoad:function(J){let re=ace.require("ace/range").Range,ce=null;function fe(Ee,z){ce!==null&&(J.session.removeMarker(ce),ce=null),Ee!=null&&(ce=J.session.addMarker(new re(Ee,0,z,1),"highlighted-line","fullLine"))}function le(Ee){let z=window.location.hash.match(/^#L(\d+)(?:-L(\d+))?/);if(!z){fe(null);return}let ne=parseInt(z[1])-1,Q=z[2]?parseInt(z[2])-1:ne;fe(ne,Q),Ee&&a.timeout(()=>{J.scrollToLine(ne,!0,!0,function(){})},100)}le(!0);let Oe=null;J.on("guttermousedown",function(Ee){let z=Ee.getDocumentPosition().row,ne=Ee.domEvent&&Ee.domEvent.shiftKey,Q=z,C=z;ne&&Oe!==null?(Q=Math.min(Oe,z),C=Math.max(Oe,z)):Oe=z;let V=Q===C?`#L${Q+1}`:`#L${Q+1}-L${C+1}`,B=window.location.pathname+window.location.search+V;window.history.replaceState(null,"",B),fe(Q,C),Ee.stop()});let _e=u(window,"hashchange",()=>le(!1));J.setFontSize(e.aceOption.fontSize),J.setReadOnly(e.aceOption.readOnly),J.setKeyboardHandler(e.aceOption.keyBinding),J.setSelectionStyle(e.aceOption.fullLineSelection?"line":"text"),J.setOption("displayIndentGuides",!0),J.setHighlightActiveLine(e.aceOption.highlightActiveLine),e.aceOption.cursor=="hide"&&(J.renderer.$cursorLayer.element.style.display="none"),J.setHighlightGutterLine(e.aceOption.highlightGutterLine),J.setShowInvisibles(e.aceOption.showInvisibles),J.setDisplayIndentGuides(e.aceOption.showIndentGuides),J.renderer.setShowPrintMargin(e.aceOption.showPrintMargin),J.setHighlightSelectedWord(e.aceOption.highlightSelectedWord),J.session.setUseSoftTabs(e.aceOption.useSoftTab),J.session.setTabSize(e.aceOption.tabSize);let Ue=window.matchMedia("(max-width: 991px)"),Re=()=>J.session.setUseWrapMode(e.aceOption.useWrapMode&&Ue.matches);Re(),Ue.addEventListener?.("change",Re),J.setBehavioursEnabled(e.aceOption.enableBehaviours),J.setFadeFoldWidgets(e.aceOption.fadeFoldWidgets);let Me=[],Pe=()=>{Me.forEach(ne=>J.session.removeMarker(ne)),Me=[];let Ee=Ka();if(!Ee)return;J.session.getDocument().getAllLines().forEach((ne,Q)=>{for(let C of ne.matchAll(Ee))Me.push(J.session.addMarker(new re(Q,C.index,Q,C.index+C[0].length),"ace_redaction","text"))})};Pe(),J.session.on("change",()=>a.timeout(Pe,0));let He=e.on("site-options",Pe);return()=>{_e(),He(),Ue.removeEventListener?.("change",Re)}}},e.isDarkMode&&(e.aceOption.theme="nord_dark"),e.type=M(Z),e.type=="pdf"){e.content="pdf";return}se(e.filePath,e.file)}function S(){f++,e.files=[],e.content=null,e.fileCounts=null,e.fileSearchQuery="",e.onFileSearchChange(),e.repoId=r.repoId,e.type="loading",e.filePath=r.path||"",e.paths=e.filePath.split("/");let O=e.repoId;F(function(Y){R();var Z=i.resolve();for(let te=0;te0?e.paths.slice(0,te).join("/"):"";Z=Z.then(function(){return e.getFiles(J)}).then(function(){if(e.type==="error")return i.reject("error")})}Z.then(function(){k||O!==e.repoId||(e.files.length==1&&e.files[0].name==""?(e.files=[],e.type="empty"):(_(),oe()))})})}S()},sl=function(e,t,n,r,s){async function i(f){t.get(`/api/pr/${e.pullRequestId}/options`).then(k=>{if(e.options=k.data,e.options.url){window.location=e.options.url;return}f&&f(k.data)},k=>{e.type="error",e.content=k.data.error})}async function a(f){t.get(`/api/pr/${e.pullRequestId}/content`).then(k=>{e.details=k.data,e.tabState={active:k.data.diff?"diff":"comments"},f&&f(k.data)},k=>{e.type="error",e.content=k.data.error})}function u(){e.pullRequestId=r.pullRequestId,e.type="loading",i(f=>{a()})}u()},rl=function(e,t,n,r,s){async function i(f){t.get(`/api/gist/${e.gistId}/options`).then(k=>{if(e.options=k.data,e.options.url){window.location=e.options.url;return}f&&f(k.data)},k=>{e.type="error",e.content=k.data.error})}async function a(f){t.get(`/api/gist/${e.gistId}/content`).then(k=>{e.details=k.data;let h=k.data&&k.data.files&&k.data.files.length;e.tabState={active:h?"files":"comments"},f&&f(k.data)},k=>{e.type="error",e.content=k.data.error})}function u(){e.gistId=r.gistId,e.type="loading",i(()=>{a()})}u()},il=function(e,t,n){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.loading=!0,e.error="",e.search="";let r="conferences.filterPrefs",s={filters:{status:{ready:!0,expired:!1,removed:!1}},orderBy:"name"},i=loadFilterPrefs(r)||{};e.filters={status:Object.assign({},s.filters.status,i.filters&&i.filters.status||{})},e.orderBy=i.orderBy||s.orderBy,e.watch("orderBy",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})},!0),e.removeConference=function(a){if(!a.removing&&confirm(`Are you sure that you want to remove the conference ${a.name}? All the repositories linked to this conference will expire.`)){a.removing=!0;let u=ze({title:`Removing ${a.name}...`,date:new Date,body:`The conference ${a.name} is going to be removed.`});e.addToast(u),t.delete(`/api/conferences/${a.conferenceID}`).then(()=>{u.title=`${a.name} is removed.`,u.body=`The conference ${a.name} is removed.`,e.loadConferences()}).catch(()=>{u.title="Unable to remove conference",u.body="Please try again. The conference has not been removed."}).finally(()=>{a.removing=!1})}},e.loadConferences=()=>(e.loading=!0,e.error="",t.get("/api/conferences/").then(a=>{e.conferences=a.data||[]},a=>{e.error="Unable to load your conferences. Please try again."}).finally(()=>{e.loading=!1})),e.loadConferences(),e.conferenceFilter=a=>{if(e.filters.status[a.status]==!1)return!1;let u=e.search.trim().toLowerCase();return!!(!u||(a.name||"").toLowerCase().includes(u)||(a.conferenceID||"").toLowerCase().includes(u))}},lr=function(e,t,n,r){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.plans=[],e.editionMode=!1,e.saving=!1,e.error="";function s(){t.get("/api/conferences/"+r.conferenceId).then(h=>{e.options={...e.options,...h.data,billing:h.data.billing||{}},e.options.startDate=new Date(e.options.startDate),e.options.endDate=new Date(e.options.endDate)})}r.conferenceId&&(e.editionMode=!0,s());function i(){t.get("/api/conferences/plans").then(h=>{e.plans=h.data,e.plan=e.plans.filter(w=>w.id==e.options.plan.planID)[0]})}i();let a=new Date;a.setDate(1),a.setMonth(a.getMonth()+1);let u=new Date(a);u.setMonth(a.getMonth()+7,0),e.options={billing:{},startDate:a,endDate:u,plan:{planID:"free_conference"},options:{link:!0,image:!0,pdf:!0,notebook:!0,update:!0,page:!0}},e.plan=null,e.watch("options.plan.planID",()=>{e.plan=e.plans.filter(h=>h.id==e.options.plan.planID)[0]});function f(){e.conference.name.setValidity("required",!0),e.conference.conferenceID.setValidity("pattern",!0),e.conference.conferenceID.setValidity("required",!0),e.conference.conferenceID.setValidity("used",!0),e.conference.startDate.setValidity("required",!0),e.conference.startDate.setValidity("invalid",!0),e.conference.endDate.setValidity("required",!0),e.conference.endDate.setValidity("invalid",!0),e.conference.setValidity("error",!0)}function k(h){switch(h){case"conf_name_missing":e.conference.name.setValidity("required",!1);break;case"conf_id_missing":e.conference.conferenceID.setValidity("required",!1);break;case"conf_id_format":e.conference.conferenceID.setValidity("pattern",!1);break;case"conf_id_used":e.conference.conferenceID.setValidity("used",!1);break;case"conf_start_date_missing":e.conference.startDate.setValidity("required",!1);break;case"conf_end_date_missing":e.conference.endDate.setValidity("required",!1);break;case"conf_start_date_invalid":e.conference.startDate.setValidity("invalid",!1);break;case"conf_end_date_invalid":e.conference.endDate.setValidity("invalid",!1);break;default:e.conference.setValidity("error",!1);break}}e.submit=function(){if(e.saving)return;e.saving=!0,e.error="";let h=JSON.parse(JSON.stringify(e.options)),w=ze({title:`Creating ${h.name}...`,date:new Date,body:`The conference ${h.conferenceID} is in creation.`});e.editionMode&&(w.title=`Updating ${h.name}...`,w.body=`The conference '${h.conferenceID}' is updating.`),e.addToast(w),f(),t.post("/api/conferences/"+(e.editionMode?h.conferenceID:""),h).then(()=>{e.editionMode?(w.title=`${h.name} updated`,w.body=`The conference '${h.conferenceID}' is updated.`):(w.title=`${h.name} created`,w.body=`The conference '${h.conferenceID}' is created.`),n.url("/conference/"+h.conferenceID)},m=>{k(m.data?.error),e.error="Unable to save the conference. Please correct any highlighted fields and try again.",e.removeToast(w)}).finally(()=>{e.saving=!1})}},al=function(e,t,n,r){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conference=null,e.search="",e.filters={status:{ready:!0,expired:!1,removed:!1}},e.orderBy="-anonymizeDate",e.repoFiler=i=>{if(e.filters.status[i.status]==!1)return!1;let a=e.search.trim().toLowerCase();return!!(!a||(i.source?.fullName||"").toLowerCase().includes(a)||(i.repoId||"").toLowerCase().includes(a))};function s(){t.get("/api/conferences/"+r.conferenceId).then(i=>{e.conference=i.data})}s()},ll=function(e,t){e.notificationEmail="",e.emailSaved=!1,e.saveNotificationEmail=async()=>{e.busy=!0,e.emailSaved=!1,e.connectionError="";try{let n=await t.post("/github/connections/email",{email:e.notificationEmail},{headers:{"X-CSRF-Token":e.connections.csrf}});e.notificationEmail=n.data.notificationEmail,e.user&&(e.user.notificationEmail=n.data.notificationEmail),e.emailSaved=!0}catch(n){e.connectionError=n.data?.error||"Unable to save email address."}finally{e.busy=!1}},e.connections=null,e.connectionError="",e.busy=!1,e.loadConnections=()=>t.get("/github/connections").then(n=>{e.connections=n.data,e.notificationEmail=n.data.notificationEmail||""}).catch(n=>{e.connectionError=n.data?.error||"Unable to load connections."}),e.changeConnection=async(n,r,s)=>{e.busy=!0,e.connectionError="";try{let i=await t.post("/github/connections/migrate",{type:n.type,id:n.id,connection:r,preview:s},{headers:{"X-CSRF-Token":e.connections.csrf}});s?n.eligible=i.data.eligible:await e.loadConnections()}catch(i){e.connectionError=i.data?.error||"Unable to change connection."}finally{e.busy=!1}},e.disconnectOAuth=async()=>{e.busy=!0;try{await t.post("/github/connections/disconnect-oauth",{},{headers:{"X-CSRF-Token":e.connections.csrf}}),await e.loadConnections()}catch(n){e.connectionError=n.data?.error||"Unable to disconnect OAuth."}finally{e.busy=!1}},e.loadConnections()},dl=function(e,t){e.accountRecovery=!1,t.get("/github/account-recovery").then(n=>{e.accountRecovery=n.data.required}).catch(()=>{})};var ul=function(e,t,n){let r=ct(),s=Xt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.repositories=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.totalSize=0,e.selected={},e.allSelected=!1;let i=y=>{if(y.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){y.preventDefault();let g=document.querySelector('.admin-filter-toolbar input[type="search"]');g&&g.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=y=>{y==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[y]="",e.query.page=1},e.chips=[];let a=()=>{let y=[];e.query.owner&&y.push({key:"owner",label:"Owner",value:e.query.owner}),e.query.conference&&y.push({key:"conference",label:"Conference",value:e.query.conference}),e.chips=y};e.showStatusMessage=y=>{let g=y.statusMessage||"(no message)";window.prompt(`Status message for ${y.repoId} (${y.status}):`,g)},e.fetchGithubInfo=y=>{let g=window.open("","_blank");g&&g.document.write("
Loading GitHub info for "+y.repoId+"...
"),t.get("/api/admin/repos/"+y.repoId+"/github").then(_=>{g&&(g.document.open(),g.document.write('
'+JSON.stringify(_.data,null,2).replace(/[<>]/g,R=>R==="<"?"<":">")+"
"),g.document.close())},_=>{let R=_&&_.data?JSON.stringify(_.data,null,2):String(_);g&&(g.document.body.innerHTML='
'+R+"
")})},e.statusCountFor=y=>{let g=(e.statusCounts||[]).find(_=>_._id===y);return g?g.count:0},e.statusStorageFor=y=>{let g=(e.statusCounts||[]).find(_=>_._id===y);return g?g.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=y=>{e.query.sort===y?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=y,e.query.direction="desc"),e.query.page=1},e.sortIcon=y=>e.query.sort===y?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",f={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},k=loadFilterPrefs(u)||{};e.query=Object.assign({},f,k,{page:1,search:""});let h=n.search();h.owner&&(e.query.owner=h.owner),h.conference&&(e.query.conference=h.conference),h.search&&(e.query.search=h.search);let w="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(w)||"[]"),e.savePreset=()=>{let y=window.prompt("Preset name:");if(!y)return;let g=Object.assign({},e.query);delete g.page,e.presets=(e.presets||[]).filter(_=>_.name!==y),e.presets.push({name:y,query:g}),localStorage.setItem(w,JSON.stringify(e.presets))},e.applyPreset=y=>{Object.assign(e.query,y.query,{page:1})},e.deletePreset=y=>{e.presets=(e.presets||[]).filter(g=>g.name!==y.name),localStorage.setItem(w,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(y=>{e.selected[y.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(y=>e.selected[y.repoId]),e.bulkRefresh=()=>{let y=e.selectedRepos();y.length&&confirm(`Force refresh ${y.length} repositories?`)&&y.forEach(g=>e.updateRepository(g))},e.bulkRemoveCache=()=>{let y=e.selectedRepos();y.length&&confirm(`Purge cache for ${y.length} repositories?`)&&y.forEach(g=>e.removeCache(g))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let y=new URLSearchParams(Object.entries(e.query).filter(([,g])=>g!==""&&g!==!1&&g!=null));y.set("format","csv"),y.set("limit","10000"),window.open("/api/admin/repos?"+y.toString(),"_blank")},e.removeCache=y=>{confirm("Remove cached files for "+y.repoId+"?")&&t.delete("/api/admin/repos/"+y.repoId).then(()=>m(),g=>console.error(g))},e.removeRepository=y=>{confirm("Remove repository "+y.repoId+"?")&&t.delete("/api/repo/"+y.repoId+"/").then(()=>m(),g=>console.error(g))},e.updateRepository=y=>{let g=ze({title:`Refreshing ${y.repoId}...`,date:new Date,body:`The repository ${y.repoId} is going to be refreshed.`});e.toasts.push(g),t.post(`/api/repo/${y.repoId}/refresh`).then(_=>{_.data.status=="ready"?g.title=`${y.repoId} is refreshed.`:g.title=`Refreshing of ${y.repoId}.`},_=>{g.title=`Error during the refresh of ${y.repoId}.`,g.body=_.body})},e.fetchError=null;function m(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(y=>{e.total=y.data.total,e.totalPage=Math.ceil(y.data.total/e.query.limit),e.repositories=y.data.results,e.statusCounts=y.data.statusCounts||[],e.totalSize=y.data.totalSize||0,e.allSelected=!1},y=>{e.fetchError=y&&y.data&&y.data.error||"Failed to load repositories",console.error(y)})}m();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(m,500);let{page:y,search:g,..._}=e.query;saveFilterPrefs(u,_),a()},!0),a()},cl=function(e,t,n){let r=ct(),s=Xt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=m=>{if(m.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){m.preventDefault();let E=document.querySelector('.admin-filter-toolbar input[type="search"]');E&&E.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=m=>{m==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[m]="",e.query.page=1},e.chips=[];let a=()=>{let m=[];e.query.role&&m.push({key:"role",label:"Role",value:e.query.role}),e.chips=m};e.statusCountFor=m=>{let E=(e.statusCounts||[]).find(y=>y._id===m);return E?E.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=m=>{e.query.sort===m?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=m,e.query.direction="desc"),e.query.page=1},e.sortIcon=m=>e.query.sort===m?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",f={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},k=loadFilterPrefs(u)||{};e.query=Object.assign({},f,k,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(m=>{e.selected[m.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(m=>e.selected[m.username]),e.banUser=m=>{confirm(`Ban user ${m.username}?`)&&t.post(`/api/admin/users/${m.username}/ban`).then(h,E=>console.error(E))},e.activateUser=m=>{t.post(`/api/admin/users/${m.username}/activate`).then(h,E=>console.error(E))},e.bulkBan=()=>{let m=e.selectedUsers();m.length&&confirm(`Ban ${m.length} users?`)&&m.forEach(E=>e.banUser(E))},e.exportCsv=()=>{let m=new URLSearchParams(Object.entries(e.query).filter(([,E])=>E!==""&&E!==!1&&E!=null));m.set("format","csv"),m.set("limit","10000"),window.open("/api/admin/users?"+m.toString(),"_blank")},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(m=>{e.total=m.data.total,e.totalPage=Math.ceil(m.data.total/e.query.limit),e.users=m.data.results,e.statusCounts=m.data.statusCounts||[],e.allSelected=!1},m=>{e.fetchError=m&&m.data&&m.data.error||"Failed to load users",console.error(m)})}h();let w=null;e.watch("query",()=>{r.timeout.cancel(w),w=r.timeout(h,500);let{page:m,search:E,...y}=e.query;saveFilterPrefs(u,y),a()},!0),a()},pl=function(e,t,n,r){let s=ct();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=m=>{e.query.sort===m?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=m,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=m=>e.query.sort===m?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=m=>(e.repositories||[]).filter(E=>E.status===m).length,e.repoFiler=m=>e.filters.status[m.status]==!1?!1:!!(e.search.trim().length==0||m.source.fullName.indexOf(e.search)>-1||m.repoId.indexOf(e.search)>-1||m.statusMessage&&m.statusMessage.indexOf(e.search)>-1||m.conference&&m.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(m=>{e.selected[m.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(m=>e.selected[m.repoId]),e.bulkRefresh=()=>{let m=e.selectedRepos();m.length&&confirm(`Force refresh ${m.length} repositories?`)&&m.forEach(E=>e.updateRepository(E))},e.bulkRemoveCache=()=>{let m=e.selectedRepos();m.length&&confirm(`Purge cache for ${m.length} repositories?`)&&m.forEach(E=>e.removeCache(E))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let m=e.filteredRepositories||e.repositories,y=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),g=m.map(T=>[T.repoId,T.status,T.statusMessage||"",T.pageView||0,T.anonymizeDate||"",T.source&&T.source.fullName||"",T.conference||"",T.size&&T.size.storage||0].map(I=>{let F=String(I??"");return/[",\n\r]/.test(F)?'"'+F.replace(/"/g,'""')+'"':F}).join(",")),_=new Blob([y+` +`+g.join(` +`)],{type:"text/csv"}),R=document.createElement("a");R.href=URL.createObjectURL(_),R.download=r.username+"-repositories.csv",R.click()},e.showStatusMessage=m=>{let E=m.statusMessage||"(no message)";window.prompt(`Status message for ${m.repoId} (${m.status}):`,E)},e.fetchGithubInfo=m=>{let E=window.open("","_blank");E&&E.document.write("
Loading GitHub info for "+m.repoId+"...
"),t.get("/api/admin/repos/"+m.repoId+"/github").then(y=>{E&&(E.document.open(),E.document.write('
'+JSON.stringify(y.data,null,2).replace(/[<>]/g,g=>g==="<"?"<":">")+"
"),E.document.close())},y=>{let g=y&&y.data?JSON.stringify(y.data,null,2):String(y);E&&(E.document.body.innerHTML='
'+g+"
")})};function f(m){t.get("/api/admin/users/"+m+"/repos",{}).then(E=>{e.repositories=E.data},E=>{console.error(E)})}function k(m){t.get("/api/admin/users/"+m,{}).then(E=>{e.userInfo=E.data},E=>{console.error(E)})}k(r.username),f(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>k(r.username),m=>console.error(m))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>k(r.username),m=>console.error(m))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>k(r.username),m=>console.error(m))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>k(r.username),m=>console.error(m))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function h(){t.get("/api/admin/tokens").then(m=>{e.tokens=m.data||[]},m=>{m.status!==401&&m.status!==403&&console.error(m)})}h(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(m=>{e.tokenForm.plaintext=m.data.token,e.tokenForm.name="",h()},m=>console.error(m))},e.revokeToken=m=>{confirm(`Revoke token "${m.name}"?`)&&t.delete("/api/admin/tokens/"+m.id).then(()=>h(),E=>console.error(E))},e.removeCache=m=>{confirm("Remove cached files for "+m.repoId+"?")&&t.delete("/api/admin/repos/"+m.repoId).then(()=>f(r.username),E=>console.error(E))},e.removeRepository=m=>{confirm("Remove repository "+m.repoId+"?")&&t.delete("/api/repo/"+m.repoId+"/").then(()=>f(r.username),E=>console.error(E))},e.updateRepository=m=>{let E=ze({title:`Refreshing ${m.repoId}...`,date:new Date,body:`The repository ${m.repoId} is going to be refreshed.`});e.toasts.push(E),t.post(`/api/repo/${m.repoId}/refresh`).then(y=>{y.data.status=="ready"?E.title=`${m.repoId} is refreshed.`:E.title=`Refreshing of ${m.repoId}.`},y=>{E.title=`Error during the refresh of ${m.repoId}.`,E.body=y.body})},e.getGitHubRepositories=m=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(E=>{e.userInfo.repositories=E.data})};let w=null;e.watch("query",()=>{s.timeout.cancel(w),w=s.timeout(()=>{f(r.username)},500)},!0)},fl=function(e,t,n){let r=ct(),s=Xt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=y=>{if(y.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){y.preventDefault();let g=document.querySelector('.admin-filter-toolbar input[type="search"]');g&&g.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=y=>{y==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[y]="",e.query.page=1},e.chips=[];let a=()=>{let y=[];(e.query.dateFrom||e.query.dateTo)&&y.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=y};e.statusCountFor=y=>{let g=(e.statusCounts||[]).find(_=>_._id===y);return g?g.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=y=>{e.query.sort===y?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=y,e.query.direction="desc"),e.query.page=1},e.sortIcon=y=>e.query.sort===y?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",f={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},k=loadFilterPrefs(u)||{};e.query=Object.assign({},f,k,{page:1,search:""});let h=n.search();h.search&&(e.query.search=h.search);let w="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(w)||"[]"),e.savePreset=()=>{let y=window.prompt("Preset name:");if(!y)return;let g=Object.assign({},e.query);delete g.page,e.presets=(e.presets||[]).filter(_=>_.name!==y),e.presets.push({name:y,query:g}),localStorage.setItem(w,JSON.stringify(e.presets))},e.applyPreset=y=>{Object.assign(e.query,y.query,{page:1})},e.deletePreset=y=>{e.presets=(e.presets||[]).filter(g=>g.name!==y.name),localStorage.setItem(w,JSON.stringify(e.presets))},e.removeConference=y=>{confirm("Remove conference "+y.conferenceID+"?")&&t.delete("/api/admin/conferences/"+y.conferenceID).then(()=>m(),g=>console.error(g))},e.exportCsv=()=>{let y=new URLSearchParams(Object.entries(e.query).filter(([,g])=>g!==""&&g!==!1&&g!=null));y.set("format","csv"),y.set("limit","10000"),window.open("/api/admin/conferences?"+y.toString(),"_blank")},e.fetchError=null;function m(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(y=>{e.total=y.data.total,e.totalPage=Math.ceil(y.data.total/e.query.limit),e.conferences=y.data.results,e.statusCounts=y.data.statusCounts||[]},y=>{e.fetchError=y&&y.data&&y.data.error||"Failed to load conferences",console.error(y)})}m();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(m,500);let{page:y,search:g,..._}=e.query;saveFilterPrefs(u,_),a()},!0),a()},ml=function(e,t,n,r,s){let i=ct();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(g=>e.stateFilter[g._state]),e.jobProgressPct=g=>g&&g.progress&&typeof g.progress=="object"&&typeof g.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(g.progress.percent))):typeof g.progress=="number"?Math.max(0,Math.min(100,Math.round(g.progress))):null,e.jobDuration=g=>{if(!g.processedOn)return"-";let R=(g.finishedOn||Date.now())-g.processedOn;return R<1e3?R+"ms":(R/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=g=>{e.selectedQueue=g,a(),u()},e.setRange=g=>{e.range=g,u()};function a(){let g={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:g}).then(_=>{e.queueList=_.data.queues||[],e.jobs=_.data.jobs||[],e.selectedStats=e.queueList.find(R=>R.key===e.selectedQueue)||e.queueList[0]||null},_=>console.error(_))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(g=>{e.metricsPoints=g.data.points||[],s(m,0)},g=>console.error(g))}a(),u();let f=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(f)),e.refreshNow=function(){a(),u()};function k(g){let _=g&&g.data&&(g.data.message||g.data.error)||"Request failed";e.actionError=_,s(()=>{e.actionError=null},5e3),console.error(g)}e.actionError=null,e.removeJob=g=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${g.id}`).then(a,k)},e.retryJob=g=>{t.post(`/api/admin/queue/${e.selectedQueue}/${g.id}`).then(a,k)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,g=>console.error(g))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,g=>console.error(g))},e.togglePause=()=>{let g=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${g}`).then(a,_=>console.error(_))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,g=>console.error(g))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,g=>console.error(g))};let h=null;e.watch("query.search",()=>{i.timeout.cancel(h),h=i.timeout(a,350)}),e.expanded={},e.toggleJob=g=>{e.expanded[g.id]=!e.expanded[g.id]},e.humanTime=g=>{if(!g)return"";let _=new Date(g);return _.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+_.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=g=>{if(!g)return"";var _=Math.max(0,Math.ceil((g-Date.now())/1e3));if(_<=0)return"resuming soon";var R=Math.floor(_/60),T=_%60;return"in "+(R>0?R+"m "+T+"s":T+"s")};function w(g){if(g<=0)return{ticks:[0],niceMax:1};let _=Math.pow(10,Math.floor(Math.log10(g))),R=_;g/R<2?R=_/2:g/R>5&&(R=_*2);let T=Math.ceil(g/R)*R,I=[];for(let F=0;F<=T;F+=R)I.push(F);return{ticks:I,niceMax:T}}function m(){var g=document.getElementById("q-throughput-chart");if(!g)return;var _=g.getContext("2d"),R=window.devicePixelRatio||1,T=g.parentElement.getBoundingClientRect(),I=44,F=50,P=20,M=T.width-40,se=180,oe=M-I-F,S=se-P;g.width=M*R,g.height=se*R,g.style.width=M+"px",g.style.height=se+"px",_.setTransform(R,0,0,R,0,0);var O=document.body.classList.contains("dark-mode"),Y="#8A857C",Z=O?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",te=O?"#A7B2FF":"#3B4AD6",J=O?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",re=O?"#F08A82":"#B42318",ce=O?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",fe=O?"#F5C842":"#B8860B",le=e.metricsPoints||[];if(le.length===0){_.fillStyle=Y,_.font="12px monospace",_.textAlign="center",_.fillText("No metrics data yet",M/2,se/2),E=null;return}var Oe=le.map(function(U){return U.completed}),_e=le.map(function(U){return U.failed}),Ue=le.map(function(U){return U.avgMs}),Re=le.length,Me=oe/(Re-1||1),Pe=Math.max(1,Math.max.apply(null,Oe),Math.max.apply(null,_e)),He=w(Pe),Ee=Math.max.apply(null,Ue),z=Ee>0?w(Ee):{ticks:[0],niceMax:1},ne=function(U){return S-U/He.niceMax*(S-10)},Q=function(U){return S-U/z.niceMax*(S-10)},C=function(U){return I+U*Me};_.textAlign="right",_.textBaseline="middle",_.font="10px monospace",He.ticks.forEach(function(U){var G=ne(U);_.strokeStyle=Z,_.lineWidth=1,_.beginPath(),_.moveTo(I,G),_.lineTo(M-F,G),_.stroke(),_.fillStyle=Y,_.fillText(U>=1e3?(U/1e3).toFixed(1)+"k":String(U),I-6,G)}),Ee>0&&(_.textAlign="left",z.ticks.forEach(function(U){var G=Q(U);_.fillStyle=fe,_.fillText(U>=1e3?(U/1e3).toFixed(1)+"s":U+"ms",M-F+6,G)}));var V=Date.now(),B=Math.min(6,Re);_.textAlign="center",_.textBaseline="top";for(var L=0;L0&&(_.beginPath(),Ue.forEach(function(U,G){var ee=C(G),x=Q(U);if(G===0)_.moveTo(ee,x);else{var W=(C(G-1)+ee)/2;_.bezierCurveTo(W,Q(Ue[G-1]),W,x,ee,x)}}),_.strokeStyle=fe,_.lineWidth=1,_.setLineDash([4,3]),_.stroke(),_.setLineDash([])),E={pts:le,maxLen:Re,marginLeft:I,step:Me,totalW:M,toX:C}}var E=null;function y(){var g=document.getElementById("q-throughput-chart");if(!(!g||g._tipBound)){g._tipBound=!0;var _=document.getElementById("q-chart-tooltip"),R=document.getElementById("q-chart-crosshair");g.addEventListener("mousemove",function(T){if(!(!E||!_||!R)){var I=E,F=g.getBoundingClientRect(),P=T.clientX-F.left,M=Math.round((P-I.marginLeft)/I.step);if(M<0||M>=I.maxLen){_.style.display="none",R.style.display="none";return}var se=I.pts[M],oe=Date.now(),S=Math.round((oe-se.ts)/6e4),O;if(S<=0)O="now";else if(S<60)O=S+"m ago";else if(S<1440){var Y=Math.floor(S/60),Z=S%60;O=Y+"h"+(Z?" "+Z+"m":"")+" ago"}else O=Math.round(S/1440)+"d ago";var te='
'+O+'
● completed: '+se.completed+'/min
● failed: '+se.failed+"/min
";if(se.avgMs>0){var J=se.avgMs>=1e3?(se.avgMs/1e3).toFixed(1)+"s":se.avgMs+"ms";te+='
● avg time: '+J+"
"}_.innerHTML=te;var re=I.toX(M),ce=_.offsetWidth,fe=re+10;fe+ce>I.totalW&&(fe=re-ce-10),_.style.display="block",_.style.left=fe+"px",_.style.top="8px",R.style.display="block",R.style.left=re+"px"}}),g.addEventListener("mouseleave",function(){_&&(_.style.display="none"),R&&(R.style.display="none")})}}e.watch("metricsPoints",function(){s(y,50)})},hl=function(e,t,n,r){let s=ct();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.entries=[],e.visible=[],e.available=!0,e.cap=1e3,e.total=0,e.pageSize=250,e.expanded={},e.detailTab={},e.copyHint="",e.parsedFilterCount=0,e.stats={last24h:0,prev24h:0,delta:0,severity:{error:0,warn:0,info:0},unique:{error:0,warn:0,info:0},buckets:[],dropped:0},e.query={search:"",bucket:"",sort:"recent",group:"code",autoRefresh:!0},e.relTime=R=>{if(!R)return"";let T=new Date(R).getTime();if(isNaN(T))return R;let I=Math.max(0,Date.now()-T),F=Math.floor(I/1e3);if(F<5)return"just now";if(F<60)return`${F}s ago`;let P=Math.floor(F/60);if(P<60)return`${P}m ago`;let M=Math.floor(P/60);if(M<24)return`${M}h ago`;let se=Math.floor(M/24);return se<7?`${se}d ago`:new Date(R).toLocaleDateString()},e.absTime=R=>{if(!R)return"";let T=new Date(R);return isNaN(T.getTime())?R:T.toLocaleString()},e.absTimeShort=R=>{if(!R)return"";let T=new Date(R);return isNaN(T.getTime())?R:T.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})};let i=/^[a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)+$/;function a(R,T){let I=R&&(R.httpStatus||R.status)||null;if(typeof I=="number"){if(I>=500)return"error";if(I===401||I===403||I===404)return"info";if(I>=400)return"warn"}return T==="error"?"error":T==="warn"?"warn":"info"}function u(R){let T=(R.raw||[]).find(M=>M&&typeof M=="object"&&!Array.isArray(M));if(T){T.message&&i.test(T.message)?(R.displayMessage=T.message,R.displayContext=R.message):T.code&&i.test(String(T.code))?(R.displayMessage=String(T.code),R.displayContext=R.message):T.name&&T.name!=="AnonymousError"&&T.name!=="Error"?(R.displayMessage=T.name,R.displayContext=T.message||R.message):R.displayMessage=R.message,R._status=T.httpStatus||T.status||null,R._url=T.url||null,R._method=T.method||null,R._repoId=T.repoId||T.detail||null,R._detail=T.detail&&T.detail!==R._repoId?T.detail:null;let M=typeof T.stack=="string"?T.stack:null;for(var I=[T.cause,T.err].filter(Boolean),F=0;!M&&F{S==null||S===""||I.push([oe,S])};F("name",T&&T.name),F("code",R.displayMessage||T&&T.message),R._bucket&&F("kind",R._bucket),F("httpStatus",T&&T.httpStatus),T&&T.status&&!T.httpStatus&&F("status",T.status),F("module",R.module);let P=T&&T.detail;if(typeof P=="string"){let oe=P.trim();if(oe[0]==="{"||oe[0]==="[")try{P=JSON.parse(P)}catch{}}if(F("detail",P),F("repoId",T&&T.repoId),F("filePath",T&&T.filePath),F("upstreamStatus",T&&T.upstreamStatus),F("upstreamBody",T&&T.upstreamBody),F("url",R._url),F("err",T&&T.err),F("cause",T&&!T.err&&T.cause),F("ts",R.ts),!I.length)return JSON.stringify(R,null,2);let M=I.reduce((oe,S)=>Math.max(oe,S[0].length),0),se=["{"];return I.forEach(([oe,S],O)=>{let Z=` ${`"${oe}":`.padEnd(M+3," ")} `,te=Ofe===0?ce:re+ce).join(` +`)}else typeof S=="number"||typeof S=="boolean"?J=String(S):J=JSON.stringify(S);se.push(`${Z}${J}${te}`)}),se.push("}"),se.join(` +`)}function k(R){let T=[],I="",F=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,P=0,M;for(;M=F.exec(R);)I+=R.slice(P,M.index),P=F.lastIndex,T.push({key:M[1],op:M[2]||"=",val:M[3]});return I+=R.slice(P),{filters:T,free:I.trim().toLowerCase()}}function h(R,T){for(let I of T.filters){let F=(M,se,oe)=>{let S=parseFloat(M),O=parseFloat(se);return oe==="="?String(M)===String(se):oe==="!="?String(M)!==String(se):oe===">="?S>=O:oe==="<="?S<=O:oe===">"?S>O:oe==="<"?ST&&P._bucket!==T?!1:h(P,R)),F=e.query.group;if(F){let P=oe=>F==="module"?oe.module:oe.displayMessage||oe.message||"_",M=new Map;for(let oe of I){let S=P(oe);if(M.has(S)){let O=M.get(S);O.count++,O._related.push(oe),new Date(oe.ts)>new Date(O.ts)&&(O.ts=oe.ts,O._url=oe._url,O._status=oe._status),new Date(oe.ts)new Date(S.ts).getTime()>=se).length;I=Array.from(M.values())}else I=I.map((P,M)=>(P._key="row:"+M+":"+P.ts,P._related=[P],P._firstSeen=P.ts,P._lastHourCount=0,P.count=1,P));e.query.sort==="count"?I.sort((P,M)=>M.count-P.count||new Date(M.ts)-new Date(P.ts)):I.sort((P,M)=>new Date(M.ts)-new Date(P.ts)),e.visible=I}function m(R){let T=R?e.entries.length:0,I=R?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:T,limit:I}}).then(F=>{let P=(F.data.entries||[]).map(u);e.entries=R?e.entries.concat(P):P,e.available=!!F.data.available,e.cap=F.data.max||e.cap,e.total=F.data.total||e.entries.length,w()},F=>console.error(F))}e.loadMore=()=>m(!0),e.canLoadMore=()=>e.entries.length{let T=R.data||{},I=T.prev24h?Math.round((T.last24h-T.prev24h)/T.prev24h*100):0;e.stats={last24h:T.last24h||0,prev24h:T.prev24h||0,delta:I,severity:T.severity||{error:0,warn:0,info:0},unique:T.unique||{error:0,warn:0,info:0},buckets:T.buckets||[],dropped:T.dropped||0}},R=>console.error(R))}function y(){m(),E()}e.barPx=(R,T)=>{let I=e.stats.buckets||[],F=0;for(let oe of I)F=Math.max(F,(oe.error||0)+(oe.warn||0)+(oe.info||0));if(!F)return 0;let P=(R.error||0)+(R.warn||0)+(R.info||0);if(!P)return 0;let M=Math.round(P/F*60),se=R[T]||0;return Math.round(se/P*M)},e.bucketTitle=R=>`${new Date(R.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${R.error||0} err \xB7 ${R.warn||0} warn \xB7 ${R.info||0} info`,e.toggle=R=>{e.expanded[R._key]=!e.expanded[R._key]},e.setBucket=R=>{e.query.bucket=R},e.refreshNow=y,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(y,R=>console.error(R))},e.exportCsv=()=>{let R=["ts","level","module","displayMessage","_status","_url","_repoId"],T=[R.join(",")];for(let M of e.visible)T.push(R.map(se=>{let oe=M[se]==null?"":String(M[se]);return/[",\n]/.test(oe)?`"${oe.replace(/"/g,'""')}"`:oe}).join(","));let I=new Blob([T.join(` +`)],{type:"text/csv;charset=utf-8"}),F=URL.createObjectURL(I),P=document.createElement("a");P.href=F,P.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(P),P.click(),document.body.removeChild(P),URL.revokeObjectURL(F)};function g(R){e.copyHint=`${R} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=R=>{navigator.clipboard.writeText(R._detailJson).then(()=>g("JSON"))},e.copyCurl=R=>{if(!R._url)return;let I=`curl -X ${R._method||"GET"} '${window.location.origin}${R._url}'`;navigator.clipboard.writeText(I).then(()=>g("curl"))},y();let _=r(()=>{e.query.autoRefresh&&y()},15e3);e.on("dispose",()=>r.cancel(_)),e.watch("query.search",w),e.watch("query.bucket",w),e.watch("query.sort",w),e.watch("query.group",w)},vl=function(e,t,n,r){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null){n.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.performanceError=null,e.formatMs=function(y){return y==null?"":y<1e3?y+" ms":+(y/1e3).toFixed(1)+" s"},e.latencyBound=function(y,g){return y.count?y[g]==null?"> 60 s":"\u2264 "+e.formatMs(y[g]):"No samples"},e.firstByteBound=function(y){return e.latencyBound({count:y.firstByteCount,p95UpperMs:y.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(y){return Math.max(0,Math.round((Date.now()-y.sampledAt)/1e3))},e.peakRss=function(y){return(e.performance.runtimeSeries||[]).filter(function(g){return g.instance===y.instance}).reduce(function(g,_){return Math.max(g,_.rss)},y.memory.rss)},e.performanceWarning=function(y){return e.sampleAge(y)>45||y.droppedBatches||y.droppedMetrics||y.sockets?.closeWait>0||y.eventLoop.p95Ms>100||y.memoryLimitBytes&&y.memory.rss>y.memoryLimitBytes*.8};var s=!1;e.loadPerformance=function(){var y=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==y&&(e.performance=null),!s&&(s=!0,t.get("/api/admin/performance",{params:{minutes:y}}).then(function(g){y===e.performanceMinutes&&(e.performance=g.data,e.performanceError=g.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){y===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){s=!1,y!==e.performanceMinutes&&e.loadPerformance()}))};function i(y){if(y==null)return"\u2014";for(var g=["B","KB","MB","GB","TB"],_=0,R=y;R>=1024&&_0?1:0)+" "+g[_]}e.humanBytes=i;function a(y){if(!y)return"\u2014";var g=Math.floor(y/86400),_=Math.floor(y%86400/3600),R=Math.floor(y%3600/60);return g>0?g+"d "+(_<10?"0":"")+_+"h":_>0?_+"h "+(R<10?"0":"")+R+"m":R+"m"}e.humanDuration=a;function u(y){return y==null?"\u2014":y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":String(y)}e.humanNum=u,e.queueTotal=function(y){return y?(y.waiting||0)+(y.active||0)+(y.delayed||0)+(y.failed||0):0},e.statusCount=function(y){if(!e.data||!e.data.repos)return 0;for(var g=e.data.repos.statusBreakdown||[],_=0;_h[_])&&(h[_]=g[_]),(w[_]==null||g[_]vr(e,t)},{path:"/connections",template:"partials/connections.htm",title:"GitHub connections \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ll(e,t.http)},{path:"/signin",template:"partials/signin.htm",title:"Sign in \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>dl(e,t.http)},{path:"/",template:"partials/home.htm",title:"Anonymous GitHub \u2013 Share the code, not the author",preserveExplorer:!1,setup:(e,t)=>tl(e,t.http,t.location,t.window,t.timeout)},{path:"/dashboard",template:"partials/dashboard.htm",title:"Your anonymizations \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ol(e,t.http,t.location,t.promises,t.window,t.quotaService)},{path:"/pr-dashboard",redirect:"/dashboard"},{path:"/anonymize/:repoId?",template:"partials/anonymize.htm",title:"New anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>is(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/pull-request-anonymize/:pullRequestId?",template:"partials/anonymize.htm",title:"Anonymize a pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>is(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/gist-anonymize/:gistId?",template:"partials/anonymize.htm",title:"Anonymize a gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>is(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/status/:repoId",template:"partials/status.htm",title:"Repository status \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>nl(e,t.http,t.params)},{path:"/conferences",template:"partials/conferences.htm",title:"Your conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>il(e,t.http,t.location)},{path:"/conference/new",template:"partials/newConference.htm",title:"New conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>lr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId/edit",template:"partials/newConference.htm",title:"Edit conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>lr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId",template:"partials/conference.htm",title:"Conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>al(e,t.http,t.location,t.params)},{path:"/faq",template:"partials/faq.htm",title:"FAQ \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>Za(e,t.http)},{path:"/profile",template:"partials/profile.htm",title:"Your settings \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>xa(e,t.http,t.translate,t.timeout,t.quotaService)},{path:"/claim",template:"partials/claim.htm",title:"Claim an anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>el(e,t.http,t.location)},{path:"/pr/:pullRequestId/:path(.*)*",template:"partials/pullRequest.htm",title:"Anonymous pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sl(e,t.http,t.location,t.params,t.html)},{path:"/gist/:gistId/:path(.*)*",template:"partials/gist.htm",title:"Anonymous gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>rl(e,t.http,t.location,t.params,t.html)},{path:"/r/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>ar(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/repository/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>ar(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/admin/",template:"partials/admin/overview.htm",title:"Admin \xB7 Overview \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>vl(e,t.http,t.location,t.interval)},{path:"/admin/repositories",template:"partials/admin/repositories.htm",title:"Admin \xB7 Repositories \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ul(e,t.http,t.location)},{path:"/admin/users",template:"partials/admin/users.htm",title:"Admin \xB7 Users \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>cl(e,t.http,t.location)},{path:"/admin/users/:username",template:"partials/admin/user.htm",title:"Admin \xB7 User details \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>pl(e,t.http,t.location,t.params)},{path:"/admin/conferences",template:"partials/admin/conferences.htm",title:"Admin \xB7 Conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fl(e,t.http,t.location)},{path:"/admin/queues",template:"partials/admin/queues.htm",title:"Admin \xB7 Queues \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ml(e,t.http,t.location,t.interval,t.timeout)},{path:"/admin/errors",template:"partials/admin/errors.htm",title:"Admin \xB7 Errors \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>hl(e,t.http,t.location,t.interval)},{path:"/404",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",preserveExplorer:!1,setup:()=>{}},{path:"/:pathMatch(.*)*",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",setup:()=>{}}];var Ep={class:"container py-4",style:{"max-width":"48rem","overflow-wrap":"anywhere"}},Cp={key:0},_p={key:1,role:"alert"},Sp={key:2,role:"status"},Np={key:0},Dp={key:1},Rp=["disabled"],Tp=["disabled"],Ap=["disabled"],Op={key:5,class:"mt-4","aria-labelledby":"review-policy-title"},Ip={id:"review-policy-title"},Pp={key:0,role:"alert"},Vp=["disabled"],qp=["disabled"],Mp=["disabled"],$p={key:6,role:"status"};function gl(e,t){return l(),d("section",Ep,[t[12]||(t[12]=o("a",{href:"/"},"Anonymous GitHub",-1)),t[13]||(t[13]=o("h1",{class:"mt-3"},"Approve artifact access",-1)),t[14]||(t[14]=o("p",null,"This records your approval as the repository owner or an authorized coauthor.",-1)),e.user?.username?p("v-if",!0):(l(),d("p",Cp,[...t[6]||(t[6]=[b("Sign in first, then reopen the artifact link from your submission. ",-1),o("a",{href:"/signin"},"Sign in",-1)])])),e.error?(l(),d("p",_p,c(e.error),1)):p("v-if",!0),e.saved?(l(),d("p",Sp,[t[7]||(t[7]=b("Consent recorded. ",-1)),e.handoffEnabled?(l(),d("span",Np,"Continue to review to finish linking.")):(l(),d("span",Dp,"Artifact linking is not complete. Return to your submission to check its status."))])):p("v-if",!0),e.saved&&e.handoffEnabled?(l(),d("button",{key:3,class:"btn btn-primary",type:"button",onClick:t[0]||(t[0]=(...n)=>e.continueReview&&e.continueReview(...n)),disabled:e.busy},"Continue to review",8,Rp)):p("v-if",!0),e.user?.username&&!e.saved?(l(),d("form",{key:4,onSubmit:t[2]||(t[2]=de((...n)=>e.loadPreview&&e.loadPreview(...n),["prevent"]))},[t[8]||(t[8]=o("label",{for:"review-repository"},"Anonymous repository ID",-1)),D(o("input",{id:"review-repository",class:"form-control","onUpdate:modelValue":t[1]||(t[1]=n=>e.repositoryId=n),maxlength:"128",autocomplete:"off",disabled:e.busy||e.uncertain,"aria-describedby":"review-repository-help"},null,8,Tp),[[to,e.repositoryId]]),t[9]||(t[9]=o("p",{id:"review-repository-help"},"Use the ID after /r/ in the anonymous repository URL.",-1)),o("button",{type:"submit",class:"btn btn-primary",disabled:e.busy||e.uncertain},"Preview access and retention",8,Ap)],32)):p("v-if",!0),e.preview&&!e.saved?(l(),d("section",Op,[o("h2",Ip,c(e.preview.repositoryName),1),o("p",null,"Access: "+c(e.preview.policy.access==="anonymous-link"?"Anyone with the anonymous link":"Restricted review access")+".",1),o("p",null,"Retain until "+c(e.preview.policy.retainUntil)+". Policy version "+c(e.preview.policy.version)+".",1),e.expired?(l(),d("p",Pp,"This preview expired. Open a new artifact link from your submission.")):p("v-if",!0),o("div",null,[o("label",null,[D(o("input",{type:"checkbox","onUpdate:modelValue":t[3]||(t[3]=n=>e.acceptAccess=n),disabled:e.busy||e.uncertain||e.expired},null,8,Vp),[[Ks,e.acceptAccess]]),t[10]||(t[10]=b(" I approve the access policy above.",-1))])]),o("div",null,[o("label",null,[D(o("input",{type:"checkbox","onUpdate:modelValue":t[4]||(t[4]=n=>e.acceptRetention=n),disabled:e.busy||e.uncertain||e.expired},null,8,qp),[[Ks,e.acceptRetention]]),t[11]||(t[11]=b(" I approve retention until the date above.",-1))])]),o("button",{class:"btn btn-primary",type:"button",onClick:t[5]||(t[5]=(...n)=>e.confirmConsent&&e.confirmConsent(...n)),disabled:e.busy||e.expired||!e.acceptAccess||!e.acceptRetention},c(e.uncertain?"Retry confirmation":"Confirm consent"),9,Mp)])):p("v-if",!0),e.busy?(l(),d("p",$p,"Waiting for the server\u2026")):p("v-if",!0)])}var Lp={class:"container paper-page connections-page"},Up={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Fp={key:1,role:"status"},zp=["disabled"],Hp={key:3},Bp={key:0,class:"connection-resources"},jp=["disabled"],Gp=["disabled"],Wp={key:0,role:"status"},Kp={class:"connections-grid"},Yp={key:0},Jp={class:"connection-title"},Qp={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Xp={class:"connection-actions"},Zp={key:0,class:"btn btn-ink",target:"_self",href:"/github/app/install"},xp={key:1,class:"connection-installations"},ef={key:0},tf=["href"],of={class:"sr-only"},nf=["disabled"],sf={class:"connection-title"},rf={key:0,target:"_self",href:"/github/login",class:"btn btn-outline-ink"},af={key:1,class:"connection-revoke"},lf={key:0},df=["disabled"],uf={class:"connection-resources"},cf={class:"connection-title"},pf={class:"connection-count"},ff={key:0,class:"connection-empty"},mf={class:"connection-resource-name"},hf={key:0,class:"connection-resource-actions"},vf=["disabled","onClick"],yf=["disabled","onClick"],gf={key:1,class:"connection-help",role:"status"},bf=["disabled","onClick"];function bl(e,t){return l(),d("div",Lp,[t[25]||(t[25]=pe('
My work / GitHub connections

GitHub connections

Manage how GitHub shares your code. Your anonymizations and URLs stay the same.

',2)),e.connectionError?(l(),d("p",Up,c(e.connectionError),1)):p("v-if",!0),!e.connections&&!e.connectionError?(l(),d("p",Fp,"Loading your connections\u2026")):p("v-if",!0),!e.connections&&e.connectionError?(l(),d("button",{key:2,class:"btn btn-outline-ink",disabled:e.busy,onClick:t[0]||(t[0]=n=>e.loadConnections())},"Try again",8,zp)):p("v-if",!0),e.connections?(l(),d("div",Hp,[e.connections.emailNotificationsEnabled?(l(),d("section",Bp,[t[6]||(t[6]=o("h2",null,"Email alerts",-1)),t[7]||(t[7]=o("p",null,"We will email you if your GitHub connection stops working or a repository becomes inaccessible. Your address is never shown on anonymous pages.",-1)),o("form",{onSubmit:t[2]||(t[2]=de(n=>e.saveNotificationEmail(),["prevent"]))},[t[5]||(t[5]=o("label",{for:"notification-email"},"Email address",-1)),D(o("input",{id:"notification-email",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[1]||(t[1]=n=>e.notificationEmail=n),disabled:e.busy},null,8,jp),[[to,e.notificationEmail]]),o("button",{class:"btn btn-ink mt-2",type:"submit",disabled:e.busy},"Save email address",8,Gp),e.emailSaved?(l(),d("p",Wp,"Email address saved.")):p("v-if",!0)],32)])):p("v-if",!0),o("div",Kp,[e.connections.appEnabled?(l(),d("section",Yp,[t[13]||(t[13]=o("div",{class:"connection-top"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",{class:"connection-badge"},"Recommended")],-1)),o("div",Jp,[t[8]||(t[8]=o("h2",null,"GitHub App",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.appConnected&&!e.connections.appError}])},c(e.connections.appError?"Needs attention":e.connections.appConnected?"Connected":"Not connected"),3)]),t[14]||(t[14]=o("p",null,"Read-only access to gists and the repositories you choose.",-1)),e.connections.appError?(l(),d("p",Qp,c(e.connections.appError)+". Reconnect to restore access.",1)):p("v-if",!0),o("div",Xp,[e.connections.appConnected&&!e.connections.appError?(l(),d("a",Zp,[...t[9]||(t[9]=[b("Manage repository access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):p("v-if",!0),o("a",{class:A(e.connections.appConnected&&!e.connections.appError?"connection-link":"btn btn-ink"),target:"_self",href:"/github/app/login"},c(e.connections.appConnected?"Reconnect account":"Connect GitHub account"),3)]),t[15]||(t[15]=o("p",{class:"connection-help"},"Choose repositories on GitHub. Organization access may need an administrator's approval.",-1)),e.connections.installations?.length?(l(),d("ul",xp,[(l(!0),d(X,null,ae(e.connections.installations,n=>(l(),d("li",{key:n.id},[o("div",null,[o("strong",null,c(n.account),1),n.suspended?(l(),d("span",ef," \xB7 Suspended")):p("v-if",!0)]),o("a",{target:"_self",href:"/github/app/install?installationId="+n.id},[t[10]||(t[10]=b("Manage access ",-1)),o("span",of,"for "+c(n.account),1),t[11]||(t[11]=b(" \u2192",-1))],8,tf)]))),128))])):p("v-if",!0),o("button",{class:"connection-link",disabled:e.busy,onClick:t[3]||(t[3]=n=>e.loadConnections())},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Refresh access",-1)])],8,nf)])):p("v-if",!0),o("section",null,[t[18]||(t[18]=o("div",{class:"connection-top"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),o("span",{class:"connection-badge connection-badge-muted"},"Legacy")],-1)),o("div",sf,[t[16]||(t[16]=o("h2",null,"GitHub OAuth",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.oauthConnected}])},c(e.connections.oauthConnected?"Connected":"Not connected"),3)]),t[19]||(t[19]=o("p",null,"For existing OAuth anonymizations.",-1)),t[20]||(t[20]=o("p",{class:"connection-help"},"This connection uses GitHub's broader repository permissions. Existing work keeps using it until you switch below.",-1)),e.connections.oauthEnabled?(l(),d("a",rf,c(e.connections.oauthConnected?"Reconnect OAuth":"Connect legacy OAuth"),1)):p("v-if",!0),e.connections.oauthConnected?(l(),d("div",af,[e.connections.gistCount?(l(),d("p",lf,c(e.connections.gistCount)+" gist(s) use your GitHub App connection when available.",1)):p("v-if",!0),t[17]||(t[17]=o("p",null,"Switch all dependent repositories before revoking access. Gists can use your GitHub App connection.",-1)),e.connections.appConnected?(l(),d("button",{key:1,class:"connection-link connection-danger",disabled:e.busy||e.connections.resources.some(n=>n.connection==="oauth"),onClick:t[4]||(t[4]=n=>e.disconnectOAuth())},"Revoke OAuth access",8,df)):p("v-if",!0)])):p("v-if",!0)])]),o("section",uf,[o("div",cf,[t[21]||(t[21]=o("h2",null,"Repository connections",-1)),o("span",pf,c(e.connections.resources?.length||0)+" resources",1)]),t[23]||(t[23]=o("p",null,"Check access, then switch each resource to the GitHub App. After reinstalling the App, reconnect existing resources here to keep their anonymous URLs and published snapshots.",-1)),e.connections.resources?.length?p("v-if",!0):(l(),d("div",ff,[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("div",null,[o("h3",null,"No repository connections yet"),o("p",null,"Your repositories and pull requests will appear here once you anonymize them.")],-1),o("a",{class:"connection-link",href:"/anonymize"},"New anonymization \u2192",-1)])])),(l(!0),d(X,null,ae(e.connections.resources,n=>(l(),d("div",{class:"connection-resource",key:n.type+n.id},[o("div",mf,[o("strong",null,c(n.name||n.id),1),o("small",null,c(n.type)+" \xB7 "+c(n.id),1)]),o("span",{class:A(["connection-badge",{"connection-badge-muted":n.connection==="oauth"}])},c(n.connection==="github-app"?"Read-only App":"Legacy OAuth"),3),!["archived","removed","preparing","queue","removing","expiring"].includes(n.status)&&(n.status!=="download"||n.type==="pull-request"&&(!n.statusDate||new Date(n.statusDate).getTime()<=Date.now()-3e5))&&e.connections.appEnabled&&e.connections.appConnected?(l(),d("div",hf,[o("button",{class:"btn btn-outline-ink",disabled:e.busy,onClick:r=>e.changeConnection(n,"github-app",!0)},"Check read-only access",8,vf),n.eligible?(l(),d("button",{key:0,class:"btn btn-ink",disabled:e.busy,onClick:r=>e.changeConnection(n,"github-app",!1)},c(n.connection==="github-app"?"Reconnect read-only access":"Switch to read-only access"),9,yf)):p("v-if",!0),n.eligible===!1?(l(),d("span",gf,"Access unavailable. Allow this repository on GitHub, then check again.")):p("v-if",!0)])):p("v-if",!0),!["archived","removed","preparing","queue","removing","expiring"].includes(n.status)&&(n.status!=="download"||n.type==="pull-request"&&(!n.statusDate||new Date(n.statusDate).getTime()<=Date.now()-3e5))&&n.connection==="github-app"&&e.connections.oauthConnected?(l(),d("button",{key:1,class:"connection-link",disabled:e.busy,onClick:r=>e.changeConnection(n,"oauth",!1)},"Use OAuth",8,bf)):p("v-if",!0)]))),128)),t[24]||(t[24]=o("p",{class:"connection-footnote"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Removing access stops new fetches from GitHub. Published content keeps its current expiration and removal settings.")],-1))])])):p("v-if",!0)])}var wf={class:"container paper-page auth-page"},kf={class:"auth-layout"},Ef={class:"auth-options"},Cf={key:0},_f={key:0,class:"btn btn-ink auth-continue",target:"_self",href:"/github/login?recover=1"},Sf={key:1},Nf={key:1},Df={key:2,class:"auth-legacy"},Rf={key:3,role:"status"};function wl(e,t){return l(),d("div",wf,[t[5]||(t[5]=o("a",{class:"auth-back",href:"/"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-left"})]),b(" Anonymous GitHub")],-1)),o("div",kf,[t[4]||(t[4]=pe('
Your research, ready for review

Your code.
Your identity,
protected.
Sign in to GitHub

Sign in to create and manage your anonymizations.

',1)),o("div",Ef,[e.accountRecovery?(l(),d("section",Cf,[t[0]||(t[0]=o("h2",null,"Verify your existing account",-1)),t[1]||(t[1]=o("p",null,"We found an existing account. Verify it with your previous GitHub connection to keep your anonymizations. Future sign-ins will use the GitHub App.",-1)),e.site_options?.GITHUB_OAUTH_ENABLED?(l(),d("a",_f,"Verify with previous GitHub connection")):(l(),d("p",Sf,"Account verification is currently unavailable. Please try again later."))])):p("v-if",!0),e.site_options?.GITHUB_APP_ENABLED&&!e.accountRecovery?(l(),d("section",Nf,[...t[2]||(t[2]=[pe('
Read-only access

Continue with GitHub

Connect through the GitHub App with read-only repository access.

  • You choose which repositories to share
  • No permission to write to your code
Sign in with GitHub Your existing anonymizations and connections stay with your account.',6)])])):p("v-if",!0),!e.site_options?.GITHUB_APP_ENABLED&&e.site_options?.GITHUB_OAUTH_ENABLED&&!e.accountRecovery?(l(),d("section",Df,[...t[3]||(t[3]=[o("div",{class:"connection-title"},[o("h2",null,"Continue with GitHub")],-1),o("p",null,"Sign in to access your account. GitHub OAuth includes write access to private repositories.",-1),o("a",{class:"connection-link",target:"_self",href:"/github/login"},[b("Sign in with GitHub "),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-right"})])],-1)])])):p("v-if",!0),e.site_options&&!e.site_options.GITHUB_APP_ENABLED&&!e.site_options.GITHUB_OAUTH_ENABLED?(l(),d("p",Rf,"GitHub sign-in is currently unavailable. Please try again later.")):p("v-if",!0)])])])}var Tf={class:"paper-empty"};function kl(e,t){return l(),d("div",Tf,[...t[0]||(t[0]=[pe('
Error \xB7 404

This link
isn\u2019t here.

The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.

',1)])])}var Af={class:"container paper-page admin-page"},Of={class:"admin-summary"},If={class:"summary-total"},Pf=["aria-pressed"],Vf={class:"count"},qf=["aria-pressed"],Mf={class:"count"},$f=["aria-pressed"],Lf={class:"count"},Uf=["aria-pressed"],Ff={class:"count"},zf=["aria-pressed"],Hf={class:"count"},Bf={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},jf={class:"w-100 admin-filter-toolbar","aria-label":"Conferences","accept-charset":"UTF-8"},Gf={class:"admin-filter-row"},Wf={class:"search-wrap"},Kf={type:"search",class:"form-control",placeholder:"Search conferences\u2026",autocomplete:"off"},Yf={key:0,class:"admin-search-hint"},Jf={class:"admin-filter-inline","aria-label":"Pagination"},Qf=["disabled"],Xf={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},Zf=["disabled"],xf={key:0,class:"admin-filter-row"},em={class:"admin-active-chips"},tm={class:"key"},om=["onClick"],nm={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},sm={class:"paper-table-head",role:"row"},rm={role:"columnheader"},im={role:"columnheader"},am={role:"columnheader"},lm={class:"paper-table-row",role:"row"},dm={class:"cell-anon",role:"cell"},um={class:"anon-text"},cm=["textContent","href"],pm={class:"anon-sub"},fm={class:"cell-status",role:"cell"},mm=["textContent"],hm={class:"cell-views num",role:"cell"},vm=["textContent","href"],ym={class:"cell-expires",role:"cell"},gm={class:"cell-actions",role:"cell"},bm={class:"dropdown"},wm={class:"dropdown-menu dropdown-menu-right"},km=["href"],Em=["href"],Cm=["href"],_m=["onClick"],Sm={key:0,class:"paper-table-empty"},Nm={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},Dm={style:{"font-size":"12px",color:"var(--ink-muted)"}},Rm={key:0,class:"pagination-compact"},Tm=["disabled"],Am=["max"],Om=["disabled"],Im={class:"admin-filter-inline"},Pm={class:"form-control form-control-sm"};function El(e,t){let n=be("field"),r=be("form");return l(),d("div",Af,[t[47]||(t[47]=pe('
Admin \xA0/\xA0 Conferences

Conferences

',3)),o("div",Of,[o("span",If,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=s=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[13]||(t[13]=b("Ready ",-1)),o("span",Vf,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,Pf),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=s=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[14]||(t[14]=b("Preparing ",-1)),o("span",Mf,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,qf),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=s=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[15]||(t[15]=b("Errored ",-1)),o("span",Lf,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,$f),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=s=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[16]||(t[16]=b("Expired ",-1)),o("span",Ff,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,Uf),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=s=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[17]||(t[17]=b("Removed ",-1)),o("span",Hf,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,zf)]),e.fetchError?(l(),d("div",Bf,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):p("v-if",!0),D((l(),d("form",jf,[o("div",Gf,[o("div",Wf,[D(o("input",Kf,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?p("v-if",!0):(l(),d("span",Yf,"/"))]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[5]||(t[5]=s=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",Jf,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,Qf),o("span",Xf,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,Zf)])]),e.chips?.length?(l(),d("div",xf,[o("div",em,[(l(!0),d(X,null,ae(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",tm,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(s.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,om)]))),128))])])):p("v-if",!0)])),[[r,e.viewState]]),o("div",nm,[o("div",sm,[o("div",rm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="name"}]),onClick:t[8]||(t[8]=s=>e.sortBy("name"))},[t[25]||(t[25]=b("Conference ",-1)),e.sortIcon("name")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("name")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[24]||(t[24]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",im,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[9]||(t[9]=s=>e.sortBy("status"))},[t[27]||(t[27]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",am,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="startDate"}]),onClick:t[10]||(t[10]=s=>e.sortBy("startDate"))},[t[29]||(t[29]=b("Window ",-1)),e.sortIcon("startDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("startDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,ae(e.filteredConferences,(s,i)=>(l(),d("div",lm,[o("div",dm,[t[33]||(t[33]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",um,[o("a",{class:"repo-name",textContent:c(s?.name),href:e.safeUrl("/conference/"+s?.conferenceID)},null,8,cm),o("div",pm,[o("span",null,c(s?.conferenceID),1),t[32]||(t[32]=b("\xA0\xB7\xA0",-1)),o("span",null,c(e.fmt?.number(s?.price||0))+" \u20AC",1)])])]),o("div",fm,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,mm)]),o("div",hm,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show repositories in this conference",textContent:c(e.fmt?.number(s?.repositories?.length||0)),href:e.safeUrl("/admin/?conference="+s?.conferenceID)},null,8,vm)]),o("div",ym,[t[35]||(t[35]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" "+c(e.fmt?.date(s?.startDate))+" \u2013 "+c(e.fmt?.date(s?.endDate)),1)]),o("div",gm,[o("div",bm,[t[41]||(t[41]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",wm,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/edit")},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,km),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/")},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View",-1)])],8,Em),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/?conference="+s?.conferenceID)},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),b(" View repositories",-1)])],8,Cm),t[40]||(t[40]=o("div",{class:"dropdown-divider"},null,-1)),D(o("a",{class:"dropdown-item text-danger",href:"#",onClick:de(a=>e.removeConference(s),["prevent"])},[...t[39]||(t[39]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,_m),[[K,s?.status!="removed"]])])])])]))),256)),e.filteredConferences?.length==0?(l(),d("div",Sm,[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No conferences match the current filters.",-1)])])):p("v-if",!0)]),o("div",Nm,[o("span",Dm,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",Rm,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous",-1)])],8,Tm),D(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,Am),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[44]||(t[44]=[b("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,Om)])):p("v-if",!0),o("span",Im,[t[46]||(t[46]=o("label",null,"Per page",-1)),D((l(),d("select",Pm,[...t[45]||(t[45]=[pe('',5)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var Vm={class:"container paper-page admin-page errors-page"},qm={class:"errors-header"},Mm={class:"errors-actions"},$m={class:"kpi-grid"},Lm={class:"kpi-card"},Um={class:"kpi-value"},Fm={key:0},zm={key:1},Hm={class:"kpi-card kpi-error"},Bm={class:"kpi-value"},jm={class:"kpi-sub"},Gm={class:"kpi-card kpi-warn"},Wm={class:"kpi-value"},Km={class:"kpi-sub"},Ym={class:"kpi-card kpi-info"},Jm={class:"kpi-value"},Qm={class:"kpi-sub"},Xm={class:"kpi-value"},Zm={class:"kpi-sub"},xm={key:0,class:"dropped-warn"},eh={class:"volume-chart"},th={class:"volume-bars"},oh=["title"],nh={class:"errors-toolbar","aria-label":"Error filters"},sh={class:"seg-tabs"},rh={class:"search-wrap"},ih={type:"search",class:"form-control",placeholder:"code:repo_not_found module:route status:>=400",autocomplete:"off"},ah={key:0,class:"filter-count"},lh={class:"select-wrap"},dh={class:"form-control form-control-sm"},uh={class:"select-wrap"},ch={class:"form-control form-control-sm"},ph={class:"autoref"},fh={type:"checkbox"},mh={key:0,class:"admin-empty"},hh={key:1,class:"errors-pager"},vh={key:2,class:"errors-list"},yh=["onClick"],gh={class:"col-when"},bh={class:"when-rel"},wh={class:"when-abs"},kh={class:"col-sev"},Eh={class:"sev-label"},Ch={class:"col-mod"},_h={class:"pill pill-module"},Sh={class:"col-msg"},Nh={class:"msg-code"},Dh={key:0,class:"msg-context"},Rh={key:1,class:"msg-detail"},Th={key:2,class:"msg-url"},Ah={class:"col-count"},Oh={key:0,class:"count-pill"},Ih={key:1,class:"count-pill count-pill-muted"},Ph={class:"col-status"},Vh={key:0,class:"errors-row-detail"},qh={class:"detail-tabs"},Mh=["onClick"],$h=["onClick"],Lh=["onClick"],Uh={class:"detail-body"},Fh={class:"detail-main"},zh={key:0},Hh={key:1,class:"stack-pre"},Bh={key:2,class:"related-list"},jh={class:"when-abs"},Gh={class:"msg-url"},Wh={class:"detail-actions"},Kh=["onClick"],Yh=["onClick"],Jh={key:0,class:"copy-hint"},Qh={class:"detail-aside"},Xh={class:"aside-block"},Zh=["title"],xh={class:"aside-block"},ev=["title"],tv={class:"aside-block"},ov={class:"aside-value"},nv={key:0,class:"aside-sub"},sv={key:0,class:"aside-block"},rv=["href"],iv={key:1,class:"aside-block"},av={class:"aside-value mono"};function Cl(e,t){let n=be("field"),r=be("form");return l(),d("div",Vm,[t[32]||(t[32]=o("div",{class:"paper-crumbs"},[b("Admin \xA0/\xA0 "),o("span",{class:"here"},"Errors")],-1)),o("header",qm,[t[10]||(t[10]=o("h1",{class:"paper-page-title"},"Errors",-1)),o("div",Mm,[o("button",{class:"btn btn-sm",type:"button",onClick:t[0]||(t[0]=s=>e.exportCsv())},[...t[8]||(t[8]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export CSV",-1)])]),o("button",{class:"btn btn-sm btn-danger-soft",type:"button",onClick:t[1]||(t[1]=s=>e.clearAll())},[...t[9]||(t[9]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Clear all",-1)])])])]),t[33]||(t[33]=pe('',1)),o("section",$m,[o("div",Lm,[t[11]||(t[11]=o("div",{class:"kpi-label"},"Last 24h",-1)),o("div",Um,c(e.stats?.last24h),1),o("div",{class:A(["kpi-sub",{up:e.stats?.delta>0,down:e.stats?.delta<0}])},[e.stats?.prev24h?(l(),d("span",Fm,c(e.stats?.delta>0?"+":"")+c(e.stats?.delta)+"% vs yesterday",1)):p("v-if",!0),e.stats?.prev24h?p("v-if",!0):(l(),d("span",zm,"no prior baseline"))],2)]),o("div",Hm,[t[12]||(t[12]=o("div",{class:"kpi-label"},"Errors (5xx)",-1)),o("div",Bm,c(e.stats?.severity?.error),1),o("div",jm,c(e.stats?.unique?.error)+" unique",1)]),o("div",Gm,[t[13]||(t[13]=o("div",{class:"kpi-label"},"Warnings (4xx)",-1)),o("div",Wm,c(e.stats?.severity?.warn),1),o("div",Km,c(e.stats?.unique?.warn)+" unique",1)]),o("div",Ym,[t[14]||(t[14]=o("div",{class:"kpi-label"},"Info (auth, 404)",-1)),o("div",Jm,c(e.stats?.severity?.info),1),o("div",Qm,c(e.stats?.unique?.info)+" unique",1)]),o("div",{class:A(["kpi-card",{"kpi-error":e.stats?.dropped>0}])},[t[15]||(t[15]=o("div",{class:"kpi-label"},"Captured",-1)),o("div",Xm,c(e.total),1),o("div",Zm,[b(" cap "+c(e.cap)+" \xB7 "+c(e.available?"live":"redis off")+" ",1),e.stats?.dropped>0?(l(),d("span",xm," \xB7 "+c(e.stats?.dropped)+" dropped",1)):p("v-if",!0)])],2)]),o("section",eh,[t[16]||(t[16]=pe('
Volume \xB7 24h \xB7 1h bucketserror warn info
',1)),o("div",th,[(l(!0),d(X,null,ae(e.stats?.buckets,(s,i)=>(l(),d("div",{class:"volume-bar",key:i,title:e.bucketTitle(s)},[o("span",{class:"seg seg-error",style:qe({height:e.barPx(s,"error")+"px"})},null,4),o("span",{class:"seg seg-warn",style:qe({height:e.barPx(s,"warn")+"px"})},null,4),o("span",{class:"seg seg-info",style:qe({height:e.barPx(s,"info")+"px"})},null,4)],8,oh))),128))])]),D((l(),d("form",nh,[o("div",sh,[o("button",{type:"button",class:A({active:e.query?.bucket===""}),onClick:t[2]||(t[2]=s=>e.setBucket(""))},"All",2),o("button",{type:"button",class:A({active:e.query?.bucket==="error"}),onClick:t[3]||(t[3]=s=>e.setBucket("error"))},"5xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="warn"}),onClick:t[4]||(t[4]=s=>e.setBucket("warn"))},"4xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="info"}),onClick:t[5]||(t[5]=s=>e.setBucket("info"))},"Info",2)]),o("div",rh,[t[17]||(t[17]=o("svg",{class:"ui-icon search-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-search"})],-1)),D(o("input",ih,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.parsedFilterCount?(l(),d("span",ah,c(e.parsedFilterCount)+" filter"+c(e.parsedFilterCount>1?"s":""),1)):p("v-if",!0)]),o("div",lh,[t[19]||(t[19]=o("label",null,"Sort",-1)),D((l(),d("select",dh,[...t[18]||(t[18]=[o("option",{value:"recent"},"Most recent",-1),o("option",{value:"count"},"Most frequent",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.sort=s},value:e.query?.sort,form:null,options:{}}]])]),o("div",uh,[t[21]||(t[21]=o("label",null,"Group",-1)),D((l(),d("select",ch,[...t[20]||(t[20]=[o("option",{value:""},"Off",-1),o("option",{value:"code"},"By code",-1),o("option",{value:"module"},"By module",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.group=s},value:e.query?.group,form:null,options:{}}]])]),o("label",ph,[D(o("input",fh,null,512),[[n,{state:e.viewState,set:s=>{e.query.autoRefresh=s},value:e.query?.autoRefresh,form:null,options:{}}]]),t[22]||(t[22]=b(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[6]||(t[6]=s=>e.refreshNow()),"aria-label":"Refresh"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])),[[r,e.viewState]]),e.visible?.length?p("v-if",!0):(l(),d("div",mh,"No errors captured.")),e.canLoadMore()&&e.visible?.length?(l(),d("div",hh,[o("span",null,"Showing "+c(e.entries?.length)+" of "+c(e.total)+" captured",1),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=s=>e.loadMore())},"Load older")])):p("v-if",!0),e.visible?.length?(l(),d("div",vh,[t[31]||(t[31]=pe('
WhenSeverityModuleMessageCountStatus
',1)),(l(!0),d(X,null,ae(e.visible,(s,i)=>(l(),d("div",{class:A(["errors-row",{open:e.expanded[s?._key]}]),key:s?._key},[o("div",{class:"errors-row-main",onClick:a=>e.toggle(s)},[o("div",gh,[o("div",bh,c(e.relTime(s?.ts)),1),o("div",wh,c(e.absTimeShort(s?.ts)),1)]),o("div",kh,[o("span",{class:A(["sev-dot","sev-"+s?._bucket])},null,2),o("span",Eh,c(e.fmt?.title(s?._bucket)),1)]),o("div",Ch,[o("span",_h,c(s?.module),1)]),o("div",Sh,[o("strong",Nh,c(s?.displayMessage),1),s?.displayContext&&s?.displayContext!==s?.displayMessage?(l(),d("span",Dh,c(s?.displayContext),1)):p("v-if",!0),s?._detail?(l(),d("span",Rh,c(s?._detail),1)):p("v-if",!0),s?._url?(l(),d("div",Th,c(s?._url),1)):p("v-if",!0)]),o("div",Ah,[s?.count>1?(l(),d("span",Oh,"\xD7"+c(s?.count),1)):p("v-if",!0),s?.count===1?(l(),d("span",Ih,"\xD71")):p("v-if",!0)]),o("div",Ph,[s?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+s?._bucket])},c(s?._status),3)):p("v-if",!0)])],8,yh),e.expanded[s?._key]?(l(),d("div",Vh,[o("div",qh,[o("button",{type:"button",class:A({active:e.detailTab[s?._key]==="raw"||!e.detailTab[s?._key]}),onClick:a=>e.detailTab[s._key]="raw"},"Raw",10,Mh),s?._stack?(l(),d("button",{key:0,type:"button",class:A({active:e.detailTab[s?._key]==="stack"}),onClick:a=>e.detailTab[s._key]="stack"},"Stack",10,$h)):p("v-if",!0),s?.count>1?(l(),d("button",{key:1,type:"button",class:A({active:e.detailTab[s?._key]==="related"}),onClick:a=>e.detailTab[s._key]="related"},"Related ("+c(s?.count)+")",11,Lh)):p("v-if",!0)]),o("div",Uh,[o("div",Fh,[(e.detailTab[s?._key]||"raw")==="raw"?(l(),d("pre",zh,c(s?._detailJson),1)):p("v-if",!0),e.detailTab[s?._key]==="stack"?(l(),d("pre",Hh,c(s?._stack),1)):p("v-if",!0),e.detailTab[s?._key]==="related"?(l(),d("div",Bh,[(l(!0),d(X,null,ae(s?._related,(a,u)=>(l(),d("div",{class:"related-row",key:u},[o("span",jh,c(e.absTimeShort(a?.ts)),1),o("span",Gh,c(a?._url),1),a?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+a?._bucket])},c(a?._status),3)):p("v-if",!0)]))),128))])):p("v-if",!0),o("div",Wh,[o("button",{class:"btn btn-sm",type:"button",title:"Copy a curl that reproduces the request",onClick:a=>e.copyCurl(s)},[...t[24]||(t[24]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Copy curl",-1)])],8,Kh),o("button",{class:"btn btn-sm",type:"button",onClick:a=>e.copyJson(s)},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-clipboard"})],-1),b(" Copy JSON",-1)])],8,Yh),e.copyHint?(l(),d("span",Jh,c(e.copyHint),1)):p("v-if",!0)])]),o("aside",Qh,[o("div",Xh,[t[26]||(t[26]=o("div",{class:"aside-label"},"First seen",-1)),o("div",{class:"aside-value",title:e.absTime(s?._firstSeen)},c(e.relTime(s?._firstSeen)),9,Zh)]),o("div",xh,[t[27]||(t[27]=o("div",{class:"aside-label"},"Last seen",-1)),o("div",{class:"aside-value",title:e.absTime(s?.ts)},c(e.relTime(s?.ts)),9,ev)]),o("div",tv,[t[28]||(t[28]=o("div",{class:"aside-label"},"Occurrences",-1)),o("div",ov,[b(c(s?.count),1),s?._lastHourCount?(l(),d("span",nv," \xB7 "+c(s?._lastHourCount)+" this hour",1)):p("v-if",!0)])]),s?._repoId?(l(),d("div",sv,[t[29]||(t[29]=o("div",{class:"aside-label"},"Repository",-1)),o("a",{class:"aside-value",href:e.safeUrl("/r/"+s?._repoId)},c(s?._repoId),9,rv)])):p("v-if",!0),s?._url?(l(),d("div",iv,[t[30]||(t[30]=o("div",{class:"aside-label"},"URL",-1)),o("div",av,c(s?._url),1)])):p("v-if",!0)])])])):p("v-if",!0)],2))),128))])):p("v-if",!0)])}var lv={class:"container paper-page admin-page overview-page"},dv={key:0,class:"admin-empty"},uv={key:1,class:"alert alert-danger",style:{margin:"12px 0"}},cv={key:2},pv={class:"ov-kpi-row"},fv={class:"ov-kpi-card"},mv={class:"ov-kpi-value"},hv={class:"ov-kpi-sub"},vv={class:"ov-kpi-card"},yv={class:"ov-kpi-sub"},gv={class:"ov-kpi-card"},bv={class:"ov-kpi-sub"},wv={class:"ov-kpi-card"},kv={class:"ov-kpi-sub"},Ev={class:"ov-kpi-card"},Cv={class:"ov-kpi-value"},_v={class:"ov-kpi-sub"},Sv={class:"ov-daily-row"},Nv={class:"ov-daily-card"},Dv={class:"ov-daily-value"},Rv={class:"ov-daily-card"},Tv={class:"ov-daily-value"},Av={class:"ov-daily-sub"},Ov={class:"ov-daily-card"},Iv={class:"ov-daily-value"},Pv={class:"ov-chart-row"},Vv={class:"ov-chart-card"},qv={key:0,class:"ov-spark-bars"},Mv=["data-tip","aria-label"],$v={key:1,class:"ov-spark-x"},Lv={class:"ov-chart-card"},Uv={key:0,class:"ov-spark-bars"},Fv=["data-tip","aria-label"],zv={key:1,class:"ov-spark-x"},Hv={class:"ov-chart-card"},Bv={class:"ov-chart-head"},jv={class:"ov-chart-legend"},Gv={key:0,class:"ov-spark-bars"},Wv=["data-tip","aria-label"],Kv={key:1,class:"ov-spark-x"},Yv={class:"ov-chart-card"},Jv={key:0,class:"ov-spark-bars"},Qv=["data-tip","aria-label"],Xv={key:1,class:"ov-spark-x"},Zv={class:"ov-triple-row"},xv={class:"ov-panel-card"},ey={class:"ov-panel-head"},ty={class:"ov-panel-meta"},oy={class:"ov-stacked-bar"},ny={class:"ov-bar-legend"},sy={href:"/admin/repositories",class:"ov-legend-item"},ry={class:"ov-legend-n"},iy={href:"/admin/repositories",class:"ov-legend-item"},ay={class:"ov-legend-n"},ly={href:"/admin/repositories",class:"ov-legend-item"},dy={class:"ov-legend-n"},uy={href:"/admin/repositories",class:"ov-legend-item"},cy={class:"ov-legend-n"},py={href:"/admin/repositories",class:"ov-legend-item"},fy={class:"ov-legend-n"},my={class:"ov-panel-card"},hy={class:"ov-panel-head"},vy={class:"ov-panel-meta"},yy={class:"ov-error-bars"},gy={class:"ov-ebar-row"},by={class:"ov-ebar-track"},wy={class:"ov-ebar-n"},ky={class:"ov-ebar-row"},Ey={class:"ov-ebar-track"},Cy={class:"ov-ebar-n"},_y={class:"ov-ebar-row"},Sy={class:"ov-ebar-track"},Ny={class:"ov-ebar-n"},Dy={key:0,class:"ov-panel-foot"},Ry={href:"/admin/errors"},Ty={class:"ov-panel-card"},Ay={class:"ov-routes-table"},Oy={class:"ov-route-row",href:"/admin/queues"},Iy={class:"ov-route-n"},Py={class:"ov-route-n"},Vy={class:"ov-route-row",href:"/admin/queues"},qy={class:"ov-route-n"},My={class:"ov-route-n"},$y={class:"ov-route-row",href:"/admin/queues"},Ly={class:"ov-route-n"},Uy={class:"ov-route-n"},Fy={class:"ov-services-card"},zy={class:"ov-services-head"},Hy={class:"ov-panel-meta"},By={class:"ov-services-grid"},jy={class:"ov-svc"},Gy={class:"ov-svc-info"},Wy={class:"ov-svc-meta"},Ky={class:"ov-svc-detail"},Yy={class:"ov-svc"},Jy={class:"ov-svc-info"},Qy={key:0,class:"ov-svc-meta"},Xy={key:1,class:"ov-svc-meta"},Zy={class:"ov-svc"},xy={class:"ov-svc-info"},eg={key:0,class:"ov-svc-meta"},tg={key:1,class:"ov-svc-meta"},og={class:"ov-svc"},ng={class:"ov-svc-info"},sg={key:0,class:"ov-svc-meta"},rg={key:1,class:"ov-svc-meta"},ig={class:"ov-svc"},ag={class:"ov-svc-info"},lg={class:"ov-svc-meta"},dg={class:"ov-panel-card ov-performance","aria-labelledby":"performance-heading"},ug={class:"ov-panel-head ov-performance-head"},cg={class:"ov-performance-window"},pg={key:0,class:"ov-performance-message ov-performance-warning",role:"alert"},fg={key:1,class:"ov-performance-empty",role:"status"},mg={key:2},hg={class:"paper-tabs ov-performance-tabs",role:"tablist","aria-label":"Performance metrics"},vg=["aria-selected","tabindex"],yg=["aria-selected","tabindex"],gg=["aria-selected","tabindex"],bg={id:"performance-routes",role:"tabpanel","aria-labelledby":"performance-routes-tab"},wg={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Route latency metrics, scroll for more columns"},kg={class:"ov-metrics-table"},Eg={scope:"row",class:"ov-metric-name"},Cg={class:"num"},_g={class:"num"},Sg={class:"num"},Ng={class:"num"},Dg={class:"num"},Rg={key:1,class:"ov-performance-empty"},Tg={id:"performance-processes",role:"tabpanel","aria-labelledby":"performance-processes-tab"},Ag={key:0,class:"ov-performance-message ov-performance-warning",role:"status"},Og={key:1,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Process resource metrics, scroll for more columns"},Ig={class:"ov-metrics-table"},Pg={scope:"row",class:"ov-metric-name"},Vg={key:0,class:"ov-metric-warn"},qg={class:"num"},Mg={class:"num"},$g={class:"num"},Lg={class:"num"},Ug={class:"num"},Fg={class:"num"},zg={class:"num"},Hg={class:"num"},Bg={id:"performance-stages",role:"tabpanel","aria-labelledby":"performance-stages-tab"},jg={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Work stage metrics, scroll for more columns"},Gg={class:"ov-metrics-table"},Wg={scope:"row",class:"ov-metric-name"},Kg={class:"num"},Yg={class:"num"},Jg={class:"num"},Qg={key:1,class:"ov-performance-empty"};function _l(e,t){return l(),d("div",lv,[t[65]||(t[65]=pe('
Admin \xA0/\xA0 Overview

Overview

',3)),e.loading?(l(),d("div",dv,"Loading overview\u2026")):p("v-if",!0),e.error?(l(),d("div",uv,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.error),1)])):p("v-if",!0),e.data?(l(),d("div",cv,[p(" \u2500\u2500 Top KPI row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",pv,[o("div",fv,[t[10]||(t[10]=o("div",{class:"ov-kpi-label"},[b("Repositories "),o("span",{class:"ov-dot ov-dot-ok"})],-1)),o("div",mv,c(e.humanNum(e.data?.repos?.total)),1),o("div",hv,"+"+c(e.data?.repos?.newRepos24h)+" \xB7 last 24h",1)]),o("div",vv,[t[11]||(t[11]=o("div",{class:"ov-kpi-label"},"CPU",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.cpuPercent>80}])},c(e.data?.system?.cpuPercent)+"%",3),o("div",yv,c(e.data?.system?.cpuCount)+" cores \xB7 load "+c(e.data?.system?.loadAvg?.[0]?.toFixed(1)),1)]),o("div",gv,[t[12]||(t[12]=o("div",{class:"ov-kpi-label"},"Memory",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.memPercent>85}])},c(e.data?.system?.memPercent)+"%",3),o("div",bv,c(e.humanBytes(e.data?.system?.memUsed))+" / "+c(e.humanBytes(e.data?.system?.memTotal)),1)]),o("div",wv,[t[13]||(t[13]=o("div",{class:"ov-kpi-label"},"Disk",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.diskPercent>85}])},c(e.data?.system?.diskPercent)+"%",3),o("div",kv,c(e.humanBytes(e.data?.system?.diskUsed))+" / "+c(e.humanBytes(e.data?.system?.diskTotal))+" \xB7 "+c(e.data?.system?.diskMount),1)]),o("div",Ev,[t[14]||(t[14]=o("div",{class:"ov-kpi-label"},"Uptime",-1)),o("div",Cv,c(e.humanDuration(e.data?.system?.uptime)),1),o("div",_v,c(e.data?.system?.nodeVersion)+" \xB7 "+c(e.data?.system?.platform),1)])]),p(" \u2500\u2500 Daily activity highlights \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Sv,[o("div",Nv,[t[15]||(t[15]=o("div",{class:"ov-daily-label"},"New repos today",-1)),o("div",Dv,"+"+c(e.fmt?.number(e.data?.daily?.today?.repositories)),1),t[16]||(t[16]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))]),o("div",Rv,[t[17]||(t[17]=o("div",{class:"ov-daily-label"},"New users today",-1)),o("div",Tv,"+"+c(e.fmt?.number(e.data?.daily?.today?.users)),1),o("div",Av,c(e.fmt?.number(e.data?.users?.total))+" total users",1)]),o("div",Ov,[t[18]||(t[18]=o("div",{class:"ov-daily-label"},"Page views today",-1)),o("div",Iv,"+"+c(e.fmt?.number(e.data?.daily?.today?.pageViews)),1),t[19]||(t[19]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))])]),p(" \u2500\u2500 Daily charts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Pv,[o("div",Vv,[t[20]||(t[20]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"Daily page views \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-accent"}),b("views/day")])],-1)),e.data?.history?.length?(l(),d("div",qv,[(l(!0),d(X,null,ae(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyPageViews)+" views","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyPageViews)+" views"},[o("span",{class:"ov-spark-fill",style:qe({height:e.historyBarH(n,"dailyPageViews")+"px"})},null,4)],8,Mv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",$v,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)]),o("div",Lv,[t[21]||(t[21]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New repos \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-ok-fill"}),b("repos/day")])],-1)),e.data?.history?.length?(l(),d("div",Uv,[(l(!0),d(X,null,ae(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyRepositories)+" repos","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyRepositories)+" repos"},[o("span",{class:"ov-spark-fill ov-spark-fill-alt",style:qe({height:e.historyBarH(n,"dailyRepositories")+"px"})},null,4)],8,Fv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",zv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)]),o("div",Hv,[o("div",Bv,[t[23]||(t[23]=o("span",{class:"ov-chart-title"},"Users \xB7 30d",-1)),o("span",jv,[t[22]||(t[22]=o("span",{class:"ov-dot-legend ov-dot-user-fill"},null,-1)),b("total users \xB7 "+c(e.fmt?.number(e.historyRange("nbUsers").min))+"\u2013"+c(e.fmt?.number(e.historyRange("nbUsers").max)),1)])]),e.data?.history?.length?(l(),d("div",Gv,[(l(!0),d(X,null,ae(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": "+e.fmt?.number(n?.nbUsers)+" users","aria-label":e.historyLabel(n)+": "+e.fmt?.number(n?.nbUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-user",style:qe({height:e.historyRangeH(n,"nbUsers")+"px"})},null,4)],8,Wv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",Kv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)]),o("div",Yv,[t[24]||(t[24]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New users \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-new-user-fill"}),b("users/day")])],-1)),e.data?.history?.length?(l(),d("div",Jv,[(l(!0),d(X,null,ae(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyUsers)+" users","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-new-user",style:qe({height:e.historyBarH(n,"dailyUsers")+"px"})},null,4)],8,Qv))),128))])):p("v-if",!0),e.data?.history?.length?(l(),d("div",Xv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):p("v-if",!0)])]),p(" \u2500\u2500 Three-panel row: Status / Errors / Queues \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Zv,[p(" Repo status breakdown "),o("div",xv,[o("div",ey,[t[25]||(t[25]=o("span",{class:"ov-panel-title"},"Repo status",-1)),o("span",ty,c(e.fmt?.number(e.data?.repos?.total))+" total",1)]),o("div",oy,[o("span",{class:"ov-bar-seg ov-bar-ready",title:"Ready",style:qe({width:e.barPct("ready")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-preparing",title:"Preparing",style:qe({width:e.barPct("preparing")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-error",title:"Error",style:qe({width:e.barPct("error")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-expired",title:"Expired",style:qe({width:e.barPct("expired")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-removed",title:"Removed",style:qe({width:e.barPct("removed")+"%"})},null,4)]),o("div",ny,[o("a",sy,[t[26]||(t[26]=o("span",{class:"ov-swatch ov-bar-ready"},null,-1)),t[27]||(t[27]=b(" ready ",-1)),o("span",ry,c(e.fmt?.number(e.statusCount("ready"))),1)]),o("a",iy,[t[28]||(t[28]=o("span",{class:"ov-swatch ov-bar-preparing"},null,-1)),t[29]||(t[29]=b(" preparing ",-1)),o("span",ay,c(e.fmt?.number(e.statusCount("preparing")+e.statusCount("download"))),1)]),o("a",ly,[t[30]||(t[30]=o("span",{class:"ov-swatch ov-bar-error"},null,-1)),t[31]||(t[31]=b(" error ",-1)),o("span",dy,c(e.fmt?.number(e.statusCount("error"))),1)]),o("a",uy,[t[32]||(t[32]=o("span",{class:"ov-swatch ov-bar-expired"},null,-1)),t[33]||(t[33]=b(" expired ",-1)),o("span",cy,c(e.fmt?.number(e.statusCount("expired")+e.statusCount("expiring"))),1)]),o("a",py,[t[34]||(t[34]=o("span",{class:"ov-swatch ov-bar-removed"},null,-1)),t[35]||(t[35]=b(" removed ",-1)),o("span",fy,c(e.fmt?.number(e.statusCount("removed")+e.statusCount("removing"))),1)])])]),p(" Error breakdown "),o("div",my,[o("div",hy,[t[36]||(t[36]=o("span",{class:"ov-panel-title"},"Errors \xB7 24h",-1)),o("span",vy,c(e.data?.errors?.last24h)+" total",1)]),o("div",yy,[o("div",gy,[t[37]||(t[37]=o("span",{class:"ov-ebar-label"},"5xx",-1)),o("span",by,[o("span",{class:"ov-ebar-fill ov-ebar-error",style:qe({width:e.errPct("error")+"%"})},null,4)]),o("span",wy,c(e.data?.errors?.severity?.error),1)]),o("div",ky,[t[38]||(t[38]=o("span",{class:"ov-ebar-label"},"4xx",-1)),o("span",Ey,[o("span",{class:"ov-ebar-fill ov-ebar-warn",style:qe({width:e.errPct("warn")+"%"})},null,4)]),o("span",Cy,c(e.data?.errors?.severity?.warn),1)]),o("div",_y,[t[39]||(t[39]=o("span",{class:"ov-ebar-label"},"Info",-1)),o("span",Sy,[o("span",{class:"ov-ebar-fill ov-ebar-info",style:qe({width:e.errPct("info")+"%"})},null,4)]),o("span",Ny,c(e.data?.errors?.severity?.info),1)])]),e.data?.repos?.recentErrors24h?(l(),d("div",Dy,[o("a",Ry,c(e.data?.repos?.recentErrors24h)+" repos in error state \u2192",1)])):p("v-if",!0)]),p(" Top routes / queues "),o("div",Ty,[t[44]||(t[44]=o("div",{class:"ov-panel-head"},[o("span",{class:"ov-panel-title"},"Queues"),o("span",{class:"ov-panel-meta"},"by state")],-1)),o("div",Ay,[t[43]||(t[43]=pe('
QueueActiveWaitFailed
',1)),o("a",Oy,[t[40]||(t[40]=o("span",{class:"ov-route-name"},"download",-1)),o("span",Iy,c(e.data?.queues?.download?.active),1),o("span",Py,c(e.data?.queues?.download?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.download?.failed>0}])},c(e.data?.queues?.download?.failed),3)]),o("a",Vy,[t[41]||(t[41]=o("span",{class:"ov-route-name"},"remove",-1)),o("span",qy,c(e.data?.queues?.remove?.active),1),o("span",My,c(e.data?.queues?.remove?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.remove?.failed>0}])},c(e.data?.queues?.remove?.failed),3)]),o("a",$y,[t[42]||(t[42]=o("span",{class:"ov-route-name"},"cache",-1)),o("span",Ly,c(e.data?.queues?.cache?.active),1),o("span",Uy,c(e.data?.queues?.cache?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.cache?.failed>0}])},c(e.data?.queues?.cache?.failed),3)])])])]),p(" \u2500\u2500 Services bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Fy,[o("div",zy,[t[45]||(t[45]=o("span",{class:"ov-panel-title"},"Services",-1)),o("span",Hy,c(e.fmt?.number(e.data?.users?.total))+" users \xB7 "+c(e.data?.conferences?.total)+" conferences",1)]),o("div",By,[o("div",jy,[t[47]||(t[47]=o("span",{class:"ov-svc-dot ov-dot-ok"},null,-1)),o("div",Gy,[t[46]||(t[46]=o("span",{class:"ov-svc-name"},"web",-1)),o("span",Wy,c(e.data?.system?.nodeVersion),1)]),o("span",Ky,"uptime "+c(e.humanDuration(e.data?.system?.uptime)),1)]),o("div",Yy,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.download)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",Jy,[t[48]||(t[48]=o("span",{class:"ov-svc-name"},"download",-1)),e.queueTotal(e.data?.queues?.download)?(l(),d("span",Qy,c(e.queueTotal(e.data?.queues?.download))+" jobs",1)):p("v-if",!0),e.queueTotal(e.data?.queues?.download)?p("v-if",!0):(l(),d("span",Xy,"idle"))])]),o("div",Zy,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.cache)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",xy,[t[49]||(t[49]=o("span",{class:"ov-svc-name"},"cache",-1)),e.queueTotal(e.data?.queues?.cache)?(l(),d("span",eg,c(e.queueTotal(e.data?.queues?.cache))+" jobs",1)):p("v-if",!0),e.queueTotal(e.data?.queues?.cache)?p("v-if",!0):(l(),d("span",tg,"idle"))])]),o("div",og,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.remove)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",ng,[t[50]||(t[50]=o("span",{class:"ov-svc-name"},"remove",-1)),e.queueTotal(e.data?.queues?.remove)?(l(),d("span",sg,c(e.queueTotal(e.data?.queues?.remove))+" jobs",1)):p("v-if",!0),e.queueTotal(e.data?.queues?.remove)?p("v-if",!0):(l(),d("span",rg,"idle"))])]),o("div",ig,[o("span",{class:A(["ov-svc-dot",e.data?.repos?.recentErrors24h>10?"ov-dot-warn":"ov-dot-ok"])},null,2),o("div",ag,[t[51]||(t[51]=o("span",{class:"ov-svc-name"},"errors",-1)),o("span",lg,c(e.data?.errors?.last24h)+" / 24h",1)])])])])])):p("v-if",!0),o("section",dg,[o("div",ug,[t[54]||(t[54]=o("div",null,[o("h2",{class:"ov-panel-title",id:"performance-heading"},"Request performance"),o("p",{class:"ov-performance-note"},"Request latency and process health \xB7 refreshes every 30 seconds")],-1)),o("div",cg,[t[53]||(t[53]=o("label",{for:"performance-window"},"Time range",-1)),D(o("select",{id:"performance-window",class:"form-control form-control-sm","onUpdate:modelValue":t[0]||(t[0]=n=>e.performanceMinutes=n),onChange:t[1]||(t[1]=n=>e.loadPerformance()),"aria-label":"Performance time range"},[...t[52]||(t[52]=[o("option",{value:15},"Last 15 minutes",-1),o("option",{value:60},"Last hour",-1)])],544),[[ia,e.performanceMinutes,void 0,{number:!0}]])])]),e.performanceError?(l(),d("div",pg,[t[55]||(t[55]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),o("span",null,c(e.performanceError),1),o("button",{type:"button",class:"btn btn-sm",onClick:t[2]||(t[2]=n=>e.loadPerformance())},"Retry")])):p("v-if",!0),!e.performance&&!e.performanceError?(l(),d("p",fg,"Loading performance monitoring\u2026")):p("v-if",!0),e.performance?.available?(l(),d("div",mg,[o("div",hg,[o("button",{id:"performance-routes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="routes"}]),role:"tab","aria-selected":e.performanceTab==="routes",tabindex:e.performanceTab==="routes"?0:-1,"aria-controls":"performance-routes",onClick:t[3]||(t[3]=n=>e.performanceTab="routes"),onKeydown:t[4]||(t[4]=n=>e.previewTabKeydown(n))},"Routes",42,vg),o("button",{id:"performance-processes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="processes"}]),role:"tab","aria-selected":e.performanceTab==="processes",tabindex:e.performanceTab==="processes"?0:-1,"aria-controls":"performance-processes",onClick:t[5]||(t[5]=n=>e.performanceTab="processes"),onKeydown:t[6]||(t[6]=n=>e.previewTabKeydown(n))},"Processes",42,yg),o("button",{id:"performance-stages-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="stages"}]),role:"tab","aria-selected":e.performanceTab==="stages",tabindex:e.performanceTab==="stages"?0:-1,"aria-controls":"performance-stages",onClick:t[7]||(t[7]=n=>e.performanceTab="stages"),onKeydown:t[8]||(t[8]=n=>e.previewTabKeydown(n))},"Work stages",42,gg)]),D(o("div",bg,[e.performance.routes?.length?(l(),d("div",wg,[o("table",kg,[t[56]||(t[56]=o("caption",{class:"sr-only"},"Route latency for the selected time range",-1)),t[57]||(t[57]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Route"),o("th",{scope:"col",class:"num"},"Requests"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"First byte p95"),o("th",{scope:"col",class:"num"},"p95"),o("th",{scope:"col",class:"num"},"p99"),o("th",{scope:"col",class:"num"},"Interrupted"),o("th",{scope:"col",class:"num"},"5xx"),o("th",{scope:"col",class:"num"},"Slow")])],-1)),o("tbody",null,[(l(!0),d(X,null,ae(e.performance.routes,n=>(l(),d("tr",{key:n.service+n.method+n.route},[o("th",Eg,[o("span",null,c(n.route),1),o("small",null,c(n.service)+" \xB7 "+c(n.method),1)]),o("td",Cg,c(e.fmt.number(n.count)),1),o("td",_g,c(e.formatMs(n.avgMs)),1),o("td",Sg,c(e.firstByteBound(n)),1),o("td",Ng,c(e.latencyBound(n,"p95UpperMs")),1),o("td",Dg,c(e.latencyBound(n,"p99UpperMs")),1),o("td",{class:A(["num",{"ov-metric-warn":n.aborted>0}])},c(e.fmt.number(n.aborted)),3),o("td",{class:A(["num",{"ov-metric-warn":n.errors>0}])},c(e.fmt.number(n.errors)),3),o("td",{class:A(["num",{"ov-metric-warn":n.slow>0}])},c(e.fmt.number(n.slow)),3)]))),128))])])])):(l(),d("p",Rg,"No recorded requests in this time range yet."))],512),[[K,e.performanceTab==="routes"]]),D(o("div",Tg,[t[61]||(t[61]=o("p",{class:"ov-performance-note"},"API and streamer processes \xB7 latest sample per instance",-1)),e.performance.instances?.length?(l(),d("div",Og,[o("table",Ig,[t[59]||(t[59]=o("caption",{class:"sr-only"},"API and streamer process resource usage",-1)),t[60]||(t[60]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Process"),o("th",{scope:"col",class:"num"},"RSS / limit"),o("th",{scope:"col",class:"num"},"CPU"),o("th",{scope:"col",class:"num"},"Event loop p95"),o("th",{scope:"col",class:"num"},"Active requests"),o("th",{scope:"col",class:"num"},"Sockets / CLOSE_WAIT"),o("th",{scope:"col",class:"num"},"Workers / waiting"),o("th",{scope:"col",class:"num"},"Sample age"),o("th",{scope:"col",class:"num"},"Dropped batches / metrics")])],-1)),o("tbody",null,[(l(!0),d(X,null,ae(e.performance.instances,n=>(l(),d("tr",{key:n.instance,class:A({"ov-metric-warning-row":e.performanceWarning(n)})},[o("th",Pg,[o("span",null,c(n.instance),1),e.performanceWarning(n)?(l(),d("small",Vg,[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" Needs attention",-1)])])):p("v-if",!0)]),o("td",qg,[b(c(e.humanBytes(n.memory.rss))+" / "+c(e.humanBytes(n.memoryLimitBytes)),1),o("small",null,"Peak "+c(e.humanBytes(e.peakRss(n))),1)]),o("td",Mg,c(n.cpuPercent.toFixed(1))+"%",1),o("td",$g,c(n.eventLoop.p95Ms.toFixed(1))+" ms",1),o("td",Lg,c(n.activeRequests),1),o("td",Ug,c(n.sockets?.descriptors??"Unavailable")+" / "+c(n.sockets?.closeWait??"Unavailable"),1),o("td",Fg,c(n.workers?.running??0)+" / "+c(n.workers?.waiting??0),1),o("td",zg,c(e.sampleAge(n))+" s",1),o("td",Hg,c(n.droppedBatches)+" / "+c(n.droppedMetrics),1)],2))),128))])])])):(l(),d("div",Ag,"No recent process samples. Monitoring coverage is incomplete."))],512),[[K,e.performanceTab==="processes"]]),D(o("div",Bg,[e.performance.stages?.some(n=>n.metric!=="first_byte")?(l(),d("div",jg,[o("table",Gg,[t[62]||(t[62]=o("caption",{class:"sr-only"},"Work stages and cache results",-1)),t[63]||(t[63]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Work stage"),o("th",{scope:"col",class:"num"},"Samples"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"p95")])],-1)),o("tbody",null,[(l(!0),d(X,null,ae(e.performance.stages.filter(n=>n.metric!=="first_byte"),n=>(l(),d("tr",{key:n.service+n.metric},[o("th",Wg,[o("span",null,c(n.metric),1),o("small",null,c(n.service),1)]),o("td",Kg,c(e.fmt.number(n.count)),1),o("td",Yg,c(e.formatMs(n.avgMs)),1),o("td",Jg,c(e.latencyBound(n,"p95UpperMs")),1)]))),128))])])])):(l(),d("p",Qg,"No recorded work stages or cache results in this time range yet."))],512),[[K,e.performanceTab==="stages"]]),t[64]||(t[64]=o("details",{class:"ov-performance-help"},[o("summary",null,"How to read these metrics"),o("p",null,"Latency includes upstream waits and response transfer. Percentiles show histogram bucket upper bounds, not exact timings. Process rows marked \u201CNeeds attention\u201D have stale samples, dropped monitoring data, CLOSE_WAIT sockets, high event loop delay, or high memory usage.")],-1))])):p("v-if",!0)])])}var Xg={class:"container paper-page admin-page"},Zg={class:"q-header"},xg={class:"q-header-actions"},eb={class:"q-range-btns"},tb={class:"q-cards"},ob=["aria-pressed","onKeydown","onClick"],sb={class:"q-card-head"},rb=["textContent"],ib=["textContent"],ab={class:"q-card-sub"},lb={key:0,class:"q-card-bar"},db={key:0,class:"q-detail"},ub={class:"q-throughput"},cb={class:"q-section-label"},pb={class:"q-section-right"},fb={class:"q-stats-panel"},mb={class:"q-section-label"},hb={class:"q-stats-grid"},vb={class:"q-stat"},yb=["textContent"],gb={class:"q-stat"},bb=["textContent"],wb={class:"q-stat"},kb=["textContent"],Eb={class:"q-stat"},Cb=["textContent"],_b={class:"q-stat"},Sb=["textContent"],Nb={class:"q-stat"},Db=["textContent"],Rb={class:"q-stats-actions"},Tb=["disabled"],Ab={class:"q-jobs"},Ob={class:"q-jobs-header"},Ib={class:"q-section-label"},Pb={class:"q-state-filters"},Vb={class:"q-state-toggle"},qb={type:"checkbox"},Mb={class:"q-search-row"},$b={type:"search",class:"form-control",placeholder:"Search by job/repo id\u2026",autocomplete:"off"},Lb={class:"q-auto-refresh"},Ub={type:"checkbox"},Fb={key:0,class:"q-table"},zb=["onClick"],Hb={class:"q-cell-state"},Bb=["textContent"],jb=["textContent"],Gb={class:"q-cell-id"},Wb=["textContent","href"],Kb={class:"q-cell-payload"},Yb=["textContent"],Jb={key:0,class:"q-payload-detail"},Qb=["textContent"],Xb=["textContent"],Zb={class:"q-cell-progress"},xb={key:0,class:"q-progress-wrap"},e1=["textContent"],t1={class:"q-cell-actions"},o1=["onClick"],n1=["onClick"],s1={key:0,class:"q-detail-row"},r1={colspan:"7"},i1={class:"q-job-detail"},a1={class:"q-job-detail-grid"},l1={class:"q-job-detail-item"},d1={class:"q-job-detail-value"},u1=["textContent","href"],c1={class:"q-job-detail-item"},p1={class:"q-job-detail-value"},f1=["textContent"],m1={key:0,class:"q-job-detail-item"},h1=["textContent"],v1={key:1,class:"q-job-detail-item"},y1=["textContent"],g1={key:2,class:"q-job-detail-item"},b1={class:"q-job-detail-value"},w1={key:3,class:"q-job-detail-item"},k1=["textContent"],E1={key:4,class:"q-job-detail-item"},C1=["textContent"],_1={key:5,class:"q-job-detail-item"},S1=["textContent"],N1={key:6,class:"q-job-detail-item"},D1=["textContent"],R1={key:7,class:"q-job-detail-item"},T1=["textContent"],A1={key:0,class:"q-job-detail-error"},O1=["textContent"],I1={key:1},P1=["textContent"],V1={class:"q-job-detail-actions"},q1=["onClick"],M1=["onClick"],$1=["href"],L1={key:1,class:"paper-table-empty",style:{border:"1px solid var(--border-color)","border-radius":"10px",background:"var(--paper-card)"}},U1={key:0},F1={key:1};function Sl(e,t){let n=be("field");return l(),d("div",Xg,[t[48]||(t[48]=o("div",{class:"paper-crumbs"},[b("Admin \xA0/\xA0 "),o("span",{class:"here"},"Queues")],-1)),o("div",Zg,[t[12]||(t[12]=o("h1",{class:"paper-page-title"},"Queues",-1)),o("div",xg,[o("div",eb,[o("button",{class:A(["btn btn-sm",{active:e.range=="1h"}]),onClick:t[0]||(t[0]=r=>e.setRange("1h"))},"1h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="6h"}]),onClick:t[1]||(t[1]=r=>e.setRange("6h"))},"6h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="24h"}]),onClick:t[2]||(t[2]=r=>e.setRange("24h"))},"24h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="7d"}]),onClick:t[3]||(t[3]=r=>e.setRange("7d"))},"7d",2)]),o("button",{class:"btn btn-sm",onClick:t[4]||(t[4]=r=>e.pauseAll())},"Pause all"),o("button",{class:"btn btn-sm btn-danger-soft",onClick:t[5]||(t[5]=r=>e.drainSelected())},"Drain "+c(e.selectedQueue),1)])]),t[49]||(t[49]=pe('',1)),p(" Queue overview cards "),o("div",tb,[(l(!0),d(X,null,ae(e.queueList,(r,s)=>(l(),d("div",{class:A(["q-card",{selected:e.selectedQueue==r?.key,paused:r?.paused}]),role:"button",tabindex:"0","aria-pressed":e.selectedQueue===r.key,onKeydown:[Ao(de(i=>e.selectQueue(r.key),["prevent"]),["enter"]),Ao(de(i=>e.selectQueue(r.key),["prevent"]),["space"])],onClick:i=>e.selectQueue(r.key)},[o("div",sb,[o("span",{class:A(["q-dot",{"q-dot-red":r?.paused||r?.counts?.failed>0}])},null,2),o("span",{class:"q-card-name",textContent:c(r?.label)},null,8,rb)]),o("div",{class:"q-card-count",textContent:c((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0))},null,8,ib),o("div",ab,[o("span",null,"waiting \xB7 "+c(r?.counts?.active||0)+" active",1),r?.counts?.active?(l(),d("div",lb,[o("div",{class:"q-card-bar-fill",style:qe({width:r?.counts?.active/((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0)||1)*100+"%"})},null,4)])):p("v-if",!0)])],42,ob))),256))]),p(" Detail: throughput chart + stats panel "),e.selectedStats?(l(),d("div",db,[o("div",ub,[o("div",cb,[b(c(e.selectedQueue)+" \xB7 throughput ",1),o("span",pb,[t[13]||(t[13]=o("span",{class:"q-legend-completed"},"\u25CF",-1)),t[14]||(t[14]=b(" completed ",-1)),t[15]||(t[15]=o("span",{class:"q-legend-failed"},"\u25CF",-1)),t[16]||(t[16]=b(" failed ",-1)),t[17]||(t[17]=o("span",{class:"q-legend-exec"},"- -",-1)),b(" avg time \xB7 "+c(e.range),1)])]),t[18]||(t[18]=o("div",{class:"q-chart-wrap"},[o("canvas",{id:"q-throughput-chart",height:"180"}),o("div",{id:"q-chart-tooltip",class:"q-chart-tooltip",style:{display:"none"}}),o("div",{id:"q-chart-crosshair",class:"q-chart-crosshair",style:{display:"none"}})],-1))]),o("div",fb,[o("div",mb,c(e.selectedQueue)+" \xB7 stats",1),o("div",hb,[o("div",vb,[t[19]||(t[19]=o("div",{class:"q-stat-label"},"Waiting",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.waiting||0)},null,8,yb)]),o("div",gb,[t[20]||(t[20]=o("div",{class:"q-stat-label"},"Active",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.active||0)},null,8,bb)]),o("div",wb,[t[21]||(t[21]=o("div",{class:"q-stat-label"},"Completed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.fmt?.number(e.selectedStats?.completed24h))},null,8,kb)]),o("div",Eb,[t[22]||(t[22]=o("div",{class:"q-stat-label"},"Failed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.failed24h||0)},null,8,Cb)]),o("div",_b,[t[23]||(t[23]=o("div",{class:"q-stat-label"},"Delayed",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.delayed||0)},null,8,Sb)]),o("div",Nb,[t[24]||(t[24]=o("div",{class:"q-stat-label"},"Workers",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.workers||0)},null,8,Db)])]),o("div",Rb,[o("button",{class:"btn btn-sm",onClick:t[6]||(t[6]=r=>e.togglePause())},c(e.selectedStats?.paused?"Resume":"Pause"),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=r=>e.retryFailed()),disabled:!e.selectedStats?.counts?.failed},"Retry failed",8,Tb),o("button",{class:"btn btn-sm",onClick:t[8]||(t[8]=r=>e.emptyQueue())},"Empty")])])])):p("v-if",!0),e.actionError?(l(),d("div",{key:1,class:"q-toast-error",onClick:t[9]||(t[9]=r=>e.actionError=null)},[t[25]||(t[25]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),b(" "+c(e.actionError),1)])):p("v-if",!0),p(" Jobs table "),o("div",Ab,[o("div",Ob,[o("div",Ib,"All jobs \xB7 "+c(e.selectedQueue),1),o("div",Pb,[(l(!0),d(X,null,ae(e.allStates,(r,s)=>(l(),d("label",Vb,[D(o("input",qb,null,512),[[n,{state:e.viewState,set:i=>{e.stateFilter[r]=i},value:e.stateFilter[r],form:null,options:{}}]]),o("span",{class:A("q-state-chip q-state-"+r)},c(r),3)]))),256))])]),o("div",Mb,[D(o("input",$b,null,512),[[n,{state:e.viewState,set:r=>{e.query.search=r},value:e.query?.search,form:null,options:{}}]]),o("label",Lb,[D(o("input",Ub,null,512),[[n,{state:e.viewState,set:r=>{e.query.autoRefresh=r},value:e.query?.autoRefresh,form:null,options:{}}]]),t[26]||(t[26]=b(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[10]||(t[10]=r=>e.refreshNow()),"aria-label":"Refresh"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])]),e.filteredJobs().length>0?(l(),d("table",Fb,[t[46]||(t[46]=o("thead",null,[o("tr",null,[o("th",null,"State"),o("th",null,"Job id"),o("th",null,"Payload"),o("th",null,"Attempts"),o("th",null,"Duration"),o("th",null,"Progress"),o("th")])],-1)),(l(!0),d(X,null,ae(e.filteredJobs(),(r,s)=>(l(),d("tbody",null,[o("tr",{style:{cursor:"pointer"},class:A({"q-row-failed":r?._state=="failed","q-row-expanded":e.expanded[r?.id]}),onClick:i=>e.toggleJob(r)},[o("td",Hb,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,Bb),r?._state=="delayed"&&r?.delayUntil?(l(),d("span",{key:0,class:"q-delay-hint",textContent:c(e.delayCountdown(r?.delayUntil))},null,8,jb)):p("v-if",!0)]),o("td",Gb,[(l(),d("svg",{class:A(["ui-icon q-chevron",{"q-chevron-open":e.expanded[r?.id]}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#ui-icon-chevron-right"},null,-1)])],2)),o("a",{target:"_blank",textContent:c("job:"+e.fmt.limitTo(r?.id,6)),onClick:t[11]||(t[11]=i=>i.stopPropagation()),href:e.safeUrl("/r/"+r?.id)},null,8,Wb)]),o("td",Kb,[o("span",{textContent:c(r?.name||"anonymize")},null,8,Yb),r?.data?.repoId&&r?.data?.repoId!==r?.name?(l(),d("span",Jb," \xB7 "+c(r?.data?.repoId),1)):p("v-if",!0)]),o("td",{class:"q-cell-num",textContent:c(r?.attemptsMade||1)},null,8,Qb),o("td",{class:"q-cell-num",textContent:c(e.jobDuration(r))},null,8,Xb),o("td",Zb,[e.jobProgressPct(r)!==null?(l(),d("div",xb,[o("div",{class:"q-progress-bar",style:qe({"--pct":e.jobProgressPct(r)+"%"})},null,4),o("span",{class:"q-progress-label",textContent:c(e.jobProgressPct(r)+"%")},null,8,e1)])):p("v-if",!0)]),o("td",t1,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm btn-icon",title:"Retry",onClick:i=>{e.retryJob(r),i.stopPropagation()},"aria-label":"Retry job"},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])],8,o1)):p("v-if",!0),o("button",{class:"btn btn-sm btn-icon",title:"Remove","aria-label":"Remove job",onClick:i=>{e.removeJob(r),i.stopPropagation()}},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,n1)])],10,zb),e.expanded[r?.id]?(l(),d("tr",s1,[o("td",r1,[o("div",i1,[o("div",a1,[o("div",l1,[t[31]||(t[31]=o("span",{class:"q-job-detail-label"},"Job id",-1)),o("span",d1,[o("a",{target:"_blank",textContent:c(r?.id),href:e.safeUrl("/r/"+r?.id)},null,8,u1)])]),o("div",c1,[t[32]||(t[32]=o("span",{class:"q-job-detail-label"},"State",-1)),o("span",p1,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,f1)])]),r?.data?.repoId?(l(),d("div",m1,[t[33]||(t[33]=o("span",{class:"q-job-detail-label"},"Repo ID",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.data?.repoId)},null,8,h1)])):p("v-if",!0),r?.timestamp?(l(),d("div",v1,[t[34]||(t[34]=o("span",{class:"q-job-detail-label"},"Created",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.timestamp))},null,8,y1)])):p("v-if",!0),r?._state=="delayed"&&r?.delayUntil?(l(),d("div",g1,[t[35]||(t[35]=o("span",{class:"q-job-detail-label"},"Retry at",-1)),o("span",b1,c(e.humanTime(r?.delayUntil))+" ("+c(e.delayCountdown(r?.delayUntil))+")",1)])):p("v-if",!0),r?.processedOn?(l(),d("div",w1,[t[36]||(t[36]=o("span",{class:"q-job-detail-label"},"Processed",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.processedOn))},null,8,k1)])):p("v-if",!0),r?.finishedOn?(l(),d("div",E1,[t[37]||(t[37]=o("span",{class:"q-job-detail-label"},"Finished",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.finishedOn))},null,8,C1)])):p("v-if",!0),r?.attemptsMade?(l(),d("div",_1,[t[38]||(t[38]=o("span",{class:"q-job-detail-label"},"Attempts",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.attemptsMade)},null,8,S1)])):p("v-if",!0),r?.progress&&r?.progress?.status?(l(),d("div",N1,[t[39]||(t[39]=o("span",{class:"q-job-detail-label"},"Status",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.progress?.status)},null,8,D1)])):p("v-if",!0),e.jobProgressPct(r)!==null?(l(),d("div",R1,[t[40]||(t[40]=o("span",{class:"q-job-detail-label"},"Progress",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.jobProgressPct(r)+"%")},null,8,T1)])):p("v-if",!0)]),r?.failedReason?(l(),d("div",A1,[t[41]||(t[41]=o("span",{class:"q-job-detail-label"},"Error",-1)),o("div",{class:"q-error-reason",textContent:c(r?.failedReason)},null,8,O1)])):p("v-if",!0),r?.stacktrace?.length?(l(),d("div",I1,[t[42]||(t[42]=o("span",{class:"q-job-detail-label"},"Stacktrace",-1)),(l(!0),d(X,null,ae(r?.stacktrace,(i,a)=>(l(),d("pre",{class:"q-error-stack",key:a},[o("code",{textContent:c(i)},null,8,P1)]))),128))])):p("v-if",!0),o("div",V1,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm",onClick:i=>e.retryJob(r)},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Retry",-1)])],8,q1)):p("v-if",!0),o("button",{class:"btn btn-sm",onClick:i=>e.removeJob(r)},[...t[44]||(t[44]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,M1),o("a",{class:"btn btn-sm",target:"_blank",href:e.safeUrl("/r/"+r?.id)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1),b(" View repo",-1)])],8,$1)])])])])):p("v-if",!0)]))),256))])):p("v-if",!0),e.filteredJobs().length==0?(l(),d("div",L1,[t[47]||(t[47]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1)),e.query?.search?p("v-if",!0):(l(),d("span",U1,"No jobs in the "+c(e.selectedQueue)+" queue.",1)),e.query?.search?(l(),d("span",F1,"No jobs match the current filters.")):p("v-if",!0)])):p("v-if",!0)])])}var z1={class:"container paper-page admin-page"},H1={class:"admin-summary"},B1={class:"summary-total"},j1={class:"summary-meta"},G1=["aria-pressed"],W1={class:"count"},K1=["aria-pressed"],Y1={class:"count"},J1=["aria-pressed"],Q1={class:"count"},X1=["aria-pressed"],Z1={class:"count"},x1=["aria-pressed"],ew={class:"count"},tw={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},ow={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},nw={class:"admin-filter-row"},sw={class:"search-wrap"},rw={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},iw={key:0,class:"admin-search-hint"},aw={class:"admin-filter-inline"},lw={type:"text",class:"form-control form-control-sm",placeholder:"username"},dw={class:"admin-filter-inline"},uw={type:"text",class:"form-control form-control-sm",placeholder:"ID"},cw={class:"admin-filter-inline","aria-label":"Pagination"},pw=["disabled"],fw={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},mw=["disabled"],hw={key:0,class:"admin-filter-row"},vw={class:"admin-active-chips"},yw={class:"key"},gw=["onClick"],bw={key:1,class:"bulk-bar"},ww={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},kw={class:"paper-table-head",role:"row"},Ew={role:"columnheader",style:{width:"28px"}},Cw=["checked"],_w={role:"columnheader"},Sw={role:"columnheader"},Nw={role:"columnheader",class:"num"},Dw={role:"columnheader"},Rw={role:"cell",style:{width:"28px"}},Tw={type:"checkbox","aria-label":"Select repository"},Aw={class:"cell-anon",role:"cell"},Ow={class:"anon-text"},Iw=["textContent","href"],Pw={class:"anon-sub"},Vw=["textContent","href"],qw={key:0},Mw=["textContent","href"],$w={key:1},Lw=["textContent","href"],Uw={key:2},Fw={class:"cell-status",role:"cell"},zw={class:"status-line"},Hw=["textContent"],Bw=["textContent","title"],jw={class:"cell-views num",role:"cell"},Gw=["textContent"],Ww={class:"cell-expires",role:"cell"},Kw=["textContent"],Yw={class:"cell-actions",role:"cell"},Jw={class:"dropdown"},Qw={class:"dropdown-menu dropdown-menu-right"},Xw=["href"],Zw=["href"],xw=["href"],ek=["onClick"],tk=["onClick"],ok=["onClick"],nk=["onClick"],sk=["onClick"],rk=["onClick"],ik={key:0,class:"paper-table-empty"},ak={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},lk={style:{"font-size":"12px",color:"var(--ink-muted)"}},dk={key:0,class:"pagination-compact"},uk=["disabled"],ck=["max"],pk=["disabled"],fk={class:"admin-filter-inline"},mk={class:"form-control form-control-sm"};function Nl(e,t){let n=be("field"),r=be("form");return l(),d("div",z1,[t[69]||(t[69]=pe('
Admin \xA0/\xA0 Repositories

Repositories

',3)),o("div",H1,[o("span",B1,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("span",j1,c(e.fmt?.humanFileSize(e.totalSize))+" on disk",1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=s=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[18]||(t[18]=b("Ready ",-1)),o("span",W1,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,G1),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=s=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[19]||(t[19]=b("Preparing ",-1)),o("span",Y1,c(e.fmt?.number(e.statusCountFor("preparing")+e.statusCountFor("download"))),1)],10,K1),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=s=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[20]||(t[20]=b("Errored ",-1)),o("span",Q1,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,J1),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=s=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[21]||(t[21]=b("Expired ",-1)),o("span",Z1,c(e.fmt?.number(e.statusCountFor("expired")+e.statusCountFor("expiring"))),1)],10,X1),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=s=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[22]||(t[22]=b("Removed ",-1)),o("span",ew,c(e.fmt?.number(e.statusCountFor("removed")+e.statusCountFor("removing"))),1)],10,x1)]),e.fetchError?(l(),d("div",tw,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):p("v-if",!0),D((l(),d("form",ow,[p(" Row 1: search + scoped inputs + headline actions "),o("div",nw,[o("div",sw,[D(o("input",rw,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?p("v-if",!0):(l(),d("span",iw,"/"))]),o("span",aw,[t[24]||(t[24]=o("label",null,"Owner",-1)),D(o("input",lw,null,512),[[n,{state:e.viewState,set:s=>{e.query.owner=s},value:e.query?.owner,form:null,options:{}}]])]),o("span",dw,[t[25]||(t[25]=o("label",null,"Conference",-1)),D(o("input",uw,null,512),[[n,{state:e.viewState,set:s=>{e.query.conference=s},value:e.query?.conference,form:null,options:{}}]])]),t[29]||(t[29]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[5]||(t[5]=s=>e.exportCsv())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",cw,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,pw),o("span",fw,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,mw)])]),p(" Row 2: appears only when there are active filter chips "),e.chips?.length?(l(),d("div",hw,[o("div",vw,[(l(!0),d(X,null,ae(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",yw,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button","aria-label":"Remove filter",onClick:a=>e.clearFilter(s.key)},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,gw)]))),128))])])):p("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",bw,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[31]||(t[31]=b(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[8]||(t[8]=s=>e.bulkRefresh())},[...t[32]||(t[32]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[9]||(t[9]=s=>e.bulkRemoveCache())},[...t[33]||(t[33]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[10]||(t[10]=s=>e.clearSelection())},"Clear")])):p("v-if",!0),o("div",ww,[o("div",kw,[o("div",Ew,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[11]||(t[11]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,Cw)]),o("div",_w,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[12]||(t[12]=s=>e.sortBy("source.repositoryName"))},[t[35]||(t[35]=b("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",Sw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[13]||(t[13]=s=>e.sortBy("status"))},[t[37]||(t[37]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[36]||(t[36]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",Nw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[14]||(t[14]=s=>e.sortBy("pageView"))},[t[39]||(t[39]=b("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[38]||(t[38]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",Dw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[15]||(t[15]=s=>e.sortBy("anonymizeDate"))},[t[41]||(t[41]=b("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[40]||(t[40]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[42]||(t[42]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,ae(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error","row-selected":e.selected[s?.repoId]}]),role:"row"},[o("div",Rw,[D(o("input",Tw,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.repoId]=a},value:e.selected[s?.repoId],form:null,options:{}}]])]),o("div",Aw,[t[47]||(t[47]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",Ow,[o("a",{class:"repo-name",target:"_blank",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId)},null,8,Iw),o("div",Pw,[o("a",{textContent:c(s?.source?.repositoryName),href:e.safeUrl("https://github.com/"+s?.source?.repositoryName+"/")},null,8,Vw),s?.options?.update?(l(),d("span",qw,[t[43]||(t[43]=b("\xA0\xB7\xA0",-1)),o("a",{textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,Mw)])):p("v-if",!0),s?.options?.update?p("v-if",!0):(l(),d("span",$w,[t[44]||(t[44]=b("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(s?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},null,8,Lw)])),s?.conference?(l(),d("span",Uw,[t[45]||(t[45]=b("\xA0\xB7\xA0",-1)),t[46]||(t[46]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(s?.conference),1)])):p("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(s?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(s?.options?.terms?.length))+" "+c(s?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",Fw,[o("span",zw,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,Hw)]),s?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(s?.statusMessage)),title:s?.statusMessage},null,8,Bw)):p("v-if",!0)]),o("div",jw,[t[48]||(t[48]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[49]||(t[49]=b()),o("span",{textContent:c(e.fmt?.number(s?.pageView||0))},null,8,Gw)]),o("div",Ww,[t[50]||(t[50]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[51]||(t[51]=b()),o("span",{textContent:c(e.fmt?.humanTime(s?.anonymizeDate))},null,8,Kw)]),o("div",Yw,[o("div",Jw,[t[63]||(t[63]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",Qw,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[52]||(t[52]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,Xw),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[53]||(t[53]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View repo",-1)])],8,Zw),s?.options?.page&&s?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+s?.repoId+"/")},[...t[54]||(t[54]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" View page",-1)])],8,xw)):p("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.fetchGithubInfo(s),["prevent"])},[...t[55]||(t[55]=[o("i",{class:"fab fa-github"},null,-1),b(" Live GitHub info",-1)])],8,ek),t[61]||(t[61]=o("div",{class:"dropdown-divider"},null,-1)),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.updateRepository(s),["prevent"])},[...t[56]||(t[56]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update",-1)])],8,tk),[[K,s?.status=="ready"||s?.status=="error"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.updateRepository(s),["prevent"])},[...t[57]||(t[57]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable",-1)])],8,ok),[[K,s?.status=="removed"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.showStatusMessage(s),["prevent"])},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" View status message",-1)])],8,nk),[[K,s?.statusMessage]]),t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.removeCache(s),["prevent"])},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])],8,sk),D(o("a",{class:"dropdown-item text-danger",href:"#",onClick:de(a=>e.removeRepository(s),["prevent"])},[...t[60]||(t[60]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,rk),[[K,s?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",ik,[...t[64]||(t[64]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):p("v-if",!0)]),o("div",ak,[o("span",lk,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",dk,[o("button",{class:"btn btn-sm",onClick:t[16]||(t[16]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[65]||(t[65]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous ",-1)])],8,uk),D(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},"aria-label":"Page",max:e.totalPage},null,8,ck),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[17]||(t[17]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[66]||(t[66]=[b(" Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,pk)])):p("v-if",!0),o("span",fk,[t[68]||(t[68]=o("label",null,"Per page",-1)),D((l(),d("select",mk,[...t[67]||(t[67]=[pe('',5)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var hk={class:"container paper-page admin-page"},vk={class:"paper-crumbs"},yk={class:"here"},gk={class:"paper-page-title"},bk={key:0,class:"user-detail-card"},wk={class:"user-header"},kk=["src"],Ek={class:"status-dot-wrap"},Ck=["textContent"],_k={key:0,class:"type-badge type-repo"},Sk={class:"user-actions",style:{"margin-top":"4px"}},Nk={class:"user-detail-grid"},Dk={class:"detail-value"},Rk={class:"detail-value"},Tk={key:0,class:"detail-value",style:{"font-family":"var(--font-mono)","font-size":"0.85rem"}},Ak={key:1,class:"detail-value text-muted"},Ok={class:"detail-value"},Ik=["href"],Pk={class:"detail-value"},Vk={class:"detail-value"},qk={key:0},Mk={key:1,class:"text-muted"},$k={class:"detail-value"},Lk={key:0,style:{"margin-top":"20px"}},Uk={class:"paper-table w-100",style:{"margin-top":"10px"}},Fk={class:"paper-table-row",style:{"grid-template-columns":"1fr 160px"}},zk={class:"cell-anon",role:"cell"},Hk={class:"anon-text"},Bk=["textContent"],jk={class:"cell-expires",role:"cell"},Gk={key:1,class:"admin-section-header"},Wk={class:"section-count"},Kk={key:2,class:"user-detail-card"},Yk={type:"text",class:"form-control",placeholder:"Token name (e.g. dev-laptop)",required:""},Jk={key:0,class:"alert alert-warning",role:"alert"},Qk={style:{"white-space":"pre-wrap","word-break":"break-all",margin:"8px 0 0","font-family":"var(--font-mono)","font-size":"0.85rem"}},Xk={key:1,class:"paper-table w-100"},Zk={class:"paper-table-row",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},xk=["textContent"],e0=["textContent"],t0={role:"cell"},o0={key:0},n0={key:1,class:"text-muted"},s0={role:"cell"},r0=["onClick"],i0={key:2,class:"paper-table-empty"},a0={class:"admin-section-header"},l0={class:"section-count"},d0={class:"admin-summary"},u0={class:"summary-total"},c0=["aria-pressed"],p0={class:"count"},f0=["aria-pressed"],m0={class:"count"},h0=["aria-pressed"],v0={class:"count"},y0=["aria-pressed"],g0={class:"count"},b0=["aria-pressed"],w0={class:"count"},k0={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},E0={class:"admin-filter-row"},C0={class:"search-wrap"},_0={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},S0={key:3,class:"bulk-bar"},N0={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},D0={class:"paper-table-head",role:"row"},R0={role:"columnheader",style:{width:"28px"}},T0=["checked"],A0={role:"columnheader"},O0={role:"columnheader"},I0={role:"columnheader",class:"num"},P0={role:"columnheader"},V0={role:"cell",style:{width:"28px"}},q0={type:"checkbox","aria-label":"Select repository"},M0={class:"cell-anon",role:"cell"},$0={class:"anon-text"},L0=["textContent","href"],U0={class:"anon-sub"},F0=["textContent","href"],z0={key:0},H0=["textContent","href"],B0={key:1},j0=["textContent","href"],G0={key:2},W0={class:"cell-status",role:"cell"},K0={class:"status-line"},Y0=["textContent"],J0=["textContent","title"],Q0=["textContent"],X0=["textContent"],Z0={class:"cell-actions",role:"cell"},x0={class:"dropdown"},eE={class:"dropdown-menu dropdown-menu-right"},tE=["href"],oE=["href"],nE=["href"],sE=["onClick"],rE=["onClick"],iE=["onClick"],aE=["onClick"],lE=["onClick"],dE=["onClick"],uE={key:0,class:"paper-table-empty"};function Dl(e,t){let n=be("field"),r=be("form");return l(),d("div",hk,[o("div",vk,[t[22]||(t[22]=o("a",{href:"/admin/"},"Admin",-1)),t[23]||(t[23]=b(" \xA0/\xA0 ",-1)),t[24]||(t[24]=o("a",{href:"/admin/users"},"Users",-1)),t[25]||(t[25]=b(" \xA0/\xA0 ",-1)),o("span",yk,c(e.userInfo?.username||"Profile"),1)]),o("h1",gk,c(e.userInfo?.username||"User"),1),t[87]||(t[87]=pe('',1)),e.userInfo?(l(),d("div",bk,[o("div",wk,[e.userInfo?.photo?(l(),d("img",{key:0,width:"56",height:"56",src:e.safeUrl(e.userInfo?.photo)},null,8,kk)):p("v-if",!0),o("div",null,[o("h2",null,[b(c(e.userInfo?.username)+" ",1),o("span",Ek,[o("span",{class:A(["status-dot",{"status-ready":e.userInfo?.status=="active","status-removed":e.userInfo?.status!="active"}])},null,2),o("span",{textContent:c(e.fmt?.title(e.userInfo?.status))},null,8,Ck)]),e.userInfo?.isAdmin?(l(),d("span",_k,"Admin")):p("v-if",!0)]),o("div",Sk,[e.userInfo?.status!=="banned"?(l(),d("button",{key:0,class:"btn btn-sm text-danger",onClick:t[0]||(t[0]=s=>e.banUser())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])])):p("v-if",!0),e.userInfo?.status==="banned"||e.userInfo?.status==="removed"?(l(),d("button",{key:1,class:"btn btn-sm",onClick:t[1]||(t[1]=s=>e.activateUser())},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Activate",-1)])])):p("v-if",!0),e.userInfo?.isAdmin?p("v-if",!0):(l(),d("button",{key:2,class:"btn btn-sm",onClick:t[2]||(t[2]=s=>e.promoteUser())},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-shield"})],-1),b(" Promote to admin",-1)])])),e.userInfo?.isAdmin?(l(),d("button",{key:3,class:"btn btn-sm text-danger",onClick:t[3]||(t[3]=s=>e.demoteUser())},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-minus"})],-1),b(" Remove admin",-1)])])):p("v-if",!0)])])]),o("div",Nk,[t[32]||(t[32]=o("div",{class:"detail-label"},"ID",-1)),o("div",Dk,c(e.userInfo?._id),1),t[33]||(t[33]=o("div",{class:"detail-label"},"Email",-1)),o("div",Rk,c(e.userInfo?.emails?.[0]?.email),1),t[34]||(t[34]=o("div",{class:"detail-label"},"Access token",-1)),e.userInfo?.accessTokens?.github?(l(),d("div",Tk,c(e.userInfo?.accessTokens?.github),1)):p("v-if",!0),e.userInfo?.accessTokens?.github?p("v-if",!0):(l(),d("div",Ak,"None stored")),t[35]||(t[35]=o("div",{class:"detail-label"},"GitHub",-1)),o("div",Ok,[o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+e.userInfo?.username)},[t[30]||(t[30]=o("i",{class:"fab fa-github"},null,-1)),b(" "+c(e.userInfo?.username),1)],8,Ik)]),t[36]||(t[36]=o("div",{class:"detail-label"},"Created",-1)),o("div",Pk,c(e.fmt?.humanTime(e.userInfo?.dateOfEntry)),1),t[37]||(t[37]=o("div",{class:"detail-label"},"Last connection",-1)),o("div",Vk,[e.userInfo?.accessTokenDates?.github?(l(),d("span",qk,c(e.fmt?.humanTime(e.userInfo?.accessTokenDates?.github)),1)):p("v-if",!0),e.userInfo?.accessTokenDates?.github?p("v-if",!0):(l(),d("span",Mk,"never"))]),t[38]||(t[38]=o("div",{class:"detail-label"},"GitHub repos",-1)),o("div",$k,[b(c(e.userInfo?.repositories?.length)+" repositories ",1),o("button",{class:"btn btn-sm ml-2",onClick:t[4]||(t[4]=s=>e.showRepos=!e.showRepos)},c(e.showRepos?"Hide":"Show"),1),o("button",{class:"btn btn-sm ml-1",onClick:t[5]||(t[5]=s=>e.getGitHubRepositories())},[...t[31]||(t[31]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Refresh ",-1)])])])]),e.showRepos?(l(),d("div",Lk,[t[41]||(t[41]=o("div",{class:"paper-section-eyebrow"},"GitHub repositories",-1)),o("div",Uk,[(l(!0),d(X,null,ae(e.userInfo?.repositories,(s,i)=>(l(),d("div",Fk,[o("div",zk,[t[39]||(t[39]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",Hk,[o("span",{class:"repo-name",textContent:c(s?.name)},null,8,Bk)])]),o("div",jk,[t[40]||(t[40]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-database"})],-1)),b(" "+c(e.fmt?.humanFileSize(s?.size)),1)])]))),256))])])):p("v-if",!0)])):p("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",Gk,[t[42]||(t[42]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),b(" API tokens")],-1)),o("span",Wk,c(e.tokens?.length),1)])):p("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",Kk,[t[48]||(t[48]=o("p",{class:"paper-page-lede"},[b("Personal API tokens for this admin account. Send as "),o("code",null,"Authorization: Bearer "),b(" to authenticate without GitHub OAuth (useful for development).")],-1)),D((l(),d("form",{class:"d-flex",style:{gap:"8px","margin-bottom":"12px"},onSubmit:t[6]||(t[6]=de(s=>e.submitForm(s,()=>{e.createToken()}),["prevent"]))},[D(o("input",Yk,null,512),[[n,{state:e.viewState,set:s=>{e.tokenForm.name=s},value:e.tokenForm?.name,form:null,options:{}}]]),t[43]||(t[43]=o("button",{type:"submit",class:"btn btn-ink"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})]),b(" Generate")],-1))],32)),[[r,e.viewState]]),e.tokenForm?.plaintext?(l(),d("div",Jk,[t[44]||(t[44]=o("strong",null,"Copy this token now \u2014 it will not be shown again:",-1)),o("pre",Qk,c(e.tokenForm?.plaintext),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=s=>e.tokenForm.plaintext=null)},"Dismiss")])):p("v-if",!0),e.tokens?.length?(l(),d("div",Xk,[t[46]||(t[46]=o("div",{class:"paper-table-head",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},[o("div",{role:"columnheader"},"Name"),o("div",{role:"columnheader"},"Created"),o("div",{role:"columnheader"},"Last used"),o("div",{role:"columnheader","aria-label":"Actions"})],-1)),(l(!0),d(X,null,ae(e.tokens,(s,i)=>(l(),d("div",Zk,[o("div",{role:"cell",textContent:c(s?.name)},null,8,xk),o("div",{role:"cell",textContent:c(e.fmt?.humanTime(s?.createdAt))},null,8,e0),o("div",t0,[s?.lastUsedAt?(l(),d("span",o0,c(e.fmt?.humanTime(s?.lastUsedAt)),1)):p("v-if",!0),s?.lastUsedAt?p("v-if",!0):(l(),d("span",n0,"never"))]),o("div",s0,[o("button",{class:"btn btn-sm text-danger btn-icon",title:"Revoke","aria-label":"Revoke token",onClick:a=>e.revokeToken(s)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,r0)])]))),256))])):p("v-if",!0),e.tokens?.length?p("v-if",!0):(l(),d("div",i0,[...t[47]||(t[47]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No tokens yet.",-1)])]))])):p("v-if",!0),o("div",a0,[t[49]||(t[49]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})]),b(" Anonymized repositories")],-1)),o("span",l0,c(e.repositories?.length),1)]),o("div",d0,[o("span",u0,c(e.fmt?.number(e.repositories?.length)),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.filters?.status?.ready===!1}]),title:"Toggle ready filter",onClick:t[8]||(t[8]=s=>e.filters.status.ready=!e.filters.status.ready),"aria-pressed":e.filters?.status?.ready===!1},[t[50]||(t[50]=b("Ready ",-1)),o("span",p0,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,c0),o("button",{type:"button",class:A(["summary-pill warn",{active:e.filters?.status?.preparing===!1}]),title:"Toggle preparing filter",onClick:t[9]||(t[9]=s=>e.filters.status.preparing=!e.filters.status.preparing),"aria-pressed":e.filters?.status?.preparing===!1},[t[51]||(t[51]=b("Preparing ",-1)),o("span",m0,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,f0),o("button",{type:"button",class:A(["summary-pill error",{active:e.filters?.status?.error===!1}]),title:"Toggle errored filter",onClick:t[10]||(t[10]=s=>e.filters.status.error=!e.filters.status.error),"aria-pressed":e.filters?.status?.error===!1},[t[52]||(t[52]=b("Errored ",-1)),o("span",v0,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,h0),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.expired===!1}]),title:"Toggle expired filter",onClick:t[11]||(t[11]=s=>e.filters.status.expired=!e.filters.status.expired),"aria-pressed":e.filters?.status?.expired===!1},[t[53]||(t[53]=b("Expired ",-1)),o("span",g0,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,y0),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.removed===!1}]),title:"Toggle removed filter",onClick:t[12]||(t[12]=s=>e.filters.status.removed=!e.filters.status.removed),"aria-pressed":e.filters?.status?.removed===!1},[t[54]||(t[54]=b("Removed ",-1)),o("span",w0,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,b0)]),D((l(),d("form",k0,[o("div",E0,[o("div",C0,[D(o("input",_0,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),t[56]||(t[56]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[13]||(t[13]=s=>e.exportCsv())},[...t[55]||(t[55]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])])])])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",S0,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[57]||(t[57]=b(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[14]||(t[14]=s=>e.bulkRefresh())},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[15]||(t[15]=s=>e.bulkRemoveCache())},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[16]||(t[16]=s=>e.clearSelection())},"Clear")])):p("v-if",!0),o("div",N0,[o("div",D0,[o("div",R0,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[17]||(t[17]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,T0)]),o("div",A0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[18]||(t[18]=s=>e.sortBy("source.repositoryName"))},[t[61]||(t[61]=b("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[60]||(t[60]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",O0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[19]||(t[19]=s=>e.sortBy("status"))},[t[63]||(t[63]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[62]||(t[62]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",I0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[20]||(t[20]=s=>e.sortBy("pageView"))},[t[65]||(t[65]=b("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[64]||(t[64]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),o("div",P0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[21]||(t[21]=s=>e.sortBy("anonymizeDate"))},[t[67]||(t[67]=b("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[66]||(t[66]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[68]||(t[68]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,ae(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error","row-selected":e.selected[s?.repoId]}]),role:"row"},[o("div",V0,[D(o("input",q0,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.repoId]=a},value:e.selected[s?.repoId],form:null,options:{}}]])]),o("div",M0,[t[73]||(t[73]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",$0,[o("a",{class:"repo-name",target:"_blank",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId)},null,8,L0),o("div",U0,[o("a",{textContent:c(s?.source?.fullName),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/")},null,8,F0),s?.options?.update?(l(),d("span",z0,[t[69]||(t[69]=b("\xA0\xB7\xA0",-1)),o("a",{textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,H0)])):p("v-if",!0),s?.options?.update?p("v-if",!0):(l(),d("span",B0,[t[70]||(t[70]=b("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(s?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},null,8,j0)])),s?.conference?(l(),d("span",G0,[t[71]||(t[71]=b("\xA0\xB7\xA0",-1)),t[72]||(t[72]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(s?.conference),1)])):p("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(s?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(s?.options?.terms?.length))+" "+c(s?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",W0,[o("span",K0,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,Y0)]),s?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(s?.statusMessage)),title:s?.statusMessage},null,8,J0)):p("v-if",!0)]),o("div",{class:"cell-views num",role:"cell",textContent:c(e.fmt?.number(s?.pageView||0))},null,8,Q0),o("div",{class:"cell-expires",role:"cell",textContent:c(e.fmt?.humanTime(s?.anonymizeDate))},null,8,X0),o("div",Z0,[o("div",x0,[t[85]||(t[85]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",eE,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[74]||(t[74]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,tE),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[75]||(t[75]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View repo",-1)])],8,oE),s?.options?.page&&s?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+s?.repoId+"/")},[...t[76]||(t[76]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" View page",-1)])],8,nE)):p("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.fetchGithubInfo(s),["prevent"])},[...t[77]||(t[77]=[o("i",{class:"fab fa-github"},null,-1),b(" Live GitHub info",-1)])],8,sE),t[83]||(t[83]=o("div",{class:"dropdown-divider"},null,-1)),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.updateRepository(s),["prevent"])},[...t[78]||(t[78]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update",-1)])],8,rE),[[K,s?.status=="ready"||s?.status=="error"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.updateRepository(s),["prevent"])},[...t[79]||(t[79]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable",-1)])],8,iE),[[K,s?.status=="removed"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.showStatusMessage(s),["prevent"])},[...t[80]||(t[80]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" View status message",-1)])],8,aE),[[K,s?.statusMessage]]),t[84]||(t[84]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.removeCache(s),["prevent"])},[...t[81]||(t[81]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])],8,lE),D(o("a",{class:"dropdown-item text-danger",href:"#",onClick:de(a=>e.removeRepository(s),["prevent"])},[...t[82]||(t[82]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,dE),[[K,s?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",uE,[...t[86]||(t[86]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):p("v-if",!0)])])}var cE={class:"container paper-page admin-page"},pE={class:"admin-summary"},fE={class:"summary-total"},mE=["aria-pressed"],hE={class:"count"},vE=["aria-pressed"],yE={class:"count"},gE=["aria-pressed"],bE={class:"count"},wE={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},kE={class:"w-100 admin-filter-toolbar","aria-label":"Users","accept-charset":"UTF-8"},EE={class:"admin-filter-row"},CE={class:"search-wrap"},_E={type:"search",class:"form-control","aria-label":"Search users",placeholder:"Search username or email\u2026",autocomplete:"off"},SE={key:0,class:"admin-search-hint"},NE={class:"admin-filter-inline"},DE={class:"form-control form-control-sm"},RE={class:"admin-filter-inline","aria-label":"Pagination"},TE=["disabled"],AE={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},OE=["disabled"],IE={key:0,class:"admin-filter-row"},PE={class:"admin-active-chips"},VE={class:"key"},qE=["onClick"],ME={key:1,class:"bulk-bar"},$E={class:"paper-table w-100",role:"table","aria-label":"Users",style:{"--cols":"28px minmax(280px, 2.4fr) 100px 140px 140px 52px"}},LE={class:"paper-table-head admin-users-row",role:"row"},UE={role:"columnheader",style:{width:"28px"}},FE=["checked"],zE={role:"columnheader"},HE={role:"columnheader"},BE={role:"cell",style:{width:"28px"}},jE={type:"checkbox","aria-label":"Select user"},GE={class:"cell-anon",role:"cell"},WE=["src"],KE={class:"anon-text"},YE=["textContent","href"],JE={class:"anon-sub"},QE={key:0},XE=["href"],ZE={key:1},xE={class:"cell-views num",role:"cell"},eC=["textContent","href"],tC={class:"cell-status",role:"cell"},oC=["textContent"],nC={class:"cell-status",role:"cell"},sC={key:0,class:"type-badge type-repo"},rC={key:1,class:"empty-dash"},iC={class:"cell-actions",role:"cell"},aC={class:"dropdown"},lC={class:"dropdown-menu dropdown-menu-right"},dC=["href"],uC=["href"],cC=["onClick"],pC=["onClick"],fC={key:0,class:"paper-table-empty"},mC={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},hC={style:{"font-size":"12px",color:"var(--ink-muted)"}},vC={key:0,class:"pagination-compact"},yC=["disabled"],gC=["max"],bC=["disabled"],wC={class:"admin-filter-inline"},kC={class:"form-control form-control-sm"};function Rl(e,t){let n=be("field"),r=be("form");return l(),d("div",cE,[t[46]||(t[46]=pe('
Admin \xA0/\xA0 Users

Users

',3)),o("div",pE,[o("span",fE,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.status=="active"}]),onClick:t[0]||(t[0]=s=>{e.query.status=e.query.status=="active"?"":"active",e.query.page=1}),"aria-pressed":e.query?.status=="active"},[t[13]||(t[13]=b("Active ",-1)),o("span",hE,c(e.fmt?.number(e.statusCountFor("active"))),1)],10,mE),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.status=="banned"}]),onClick:t[1]||(t[1]=s=>{e.query.status=e.query.status=="banned"?"":"banned",e.query.page=1}),"aria-pressed":e.query?.status=="banned"},[t[14]||(t[14]=b("Banned ",-1)),o("span",yE,c(e.fmt?.number(e.statusCountFor("banned"))),1)],10,vE),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.status=="removed"}]),onClick:t[2]||(t[2]=s=>{e.query.status=e.query.status=="removed"?"":"removed",e.query.page=1}),"aria-pressed":e.query?.status=="removed"},[t[15]||(t[15]=b("Removed ",-1)),o("span",bE,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,gE)]),e.fetchError?(l(),d("div",wE,[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):p("v-if",!0),D((l(),d("form",kE,[o("div",EE,[o("div",CE,[D(o("input",_E,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?p("v-if",!0):(l(),d("span",SE,"/"))]),o("span",NE,[t[18]||(t[18]=o("label",null,"Role",-1)),D((l(),d("select",DE,[...t[17]||(t[17]=[o("option",{value:""},"Any",-1),o("option",{value:"admin"},"Admin",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.role=s},value:e.query?.role,form:null,options:{}}]])]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[3]||(t[3]=s=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",RE,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[4]||(t[4]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,TE),o("span",AE,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[5]||(t[5]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,OE)])]),e.chips?.length?(l(),d("div",IE,[o("div",PE,[(l(!0),d(X,null,ae(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",VE,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(s.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,qE)]))),128))])])):p("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",ME,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[24]||(t[24]=b(" selected",-1))]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[6]||(t[6]=s=>e.bulkBan())},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=s=>{e.selected={},e.allSelected=!1})},"Clear")])):p("v-if",!0),o("div",$E,[o("div",LE,[o("div",UE,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[8]||(t[8]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,FE)]),o("div",zE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="username"}]),onClick:t[9]||(t[9]=s=>e.sortBy("username"))},[t[27]||(t[27]=b("User ",-1)),e.sortIcon("username")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("username")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",HE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[10]||(t[10]=s=>e.sortBy("status"))},[t[29]||(t[29]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader"},"Role",-1)),t[32]||(t[32]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(X,null,ae(e.filteredUsers,(s,i)=>(l(),d("div",{class:A(["paper-table-row admin-users-row",{"row-selected":e.selected[s?.username]}]),role:"row"},[o("div",BE,[D(o("input",jE,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.username]=a},value:e.selected[s?.username],form:null,options:{}}]])]),o("div",GE,[s?.photo?(l(),d("img",{key:0,width:"28",height:"28",class:"rounded-circle",style:{"flex-shrink":"0"},src:e.safeUrl(s?.photo)},null,8,WE)):p("v-if",!0),o("div",KE,[o("a",{class:"repo-name",textContent:c(s?.username),href:e.safeUrl("/admin/users/"+s?.username)},null,8,YE),o("div",JE,[s?.emails?.[0]?.email?(l(),d("span",QE,c(s?.emails?.[0]?.email)+" \xB7 ",1)):p("v-if",!0),o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+s?.username)},[t[33]||(t[33]=o("i",{class:"fab fa-github"},null,-1)),b(" "+c(s?.username),1)],8,XE),s?.dateOfEntry?(l(),d("span",ZE,"\xA0\xB7\xA0Joined "+c(e.fmt?.humanTime(s?.dateOfEntry)),1)):p("v-if",!0)])])]),o("div",xE,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show this user's repositories",textContent:c(e.fmt?.number(s?.repoCount||0)),href:e.safeUrl("/admin/repositories?owner="+s?.username)},null,8,eC)]),o("div",tC,[o("span",{class:A(["status-dot",{"status-ready":s?.status=="active","status-removed":s?.status=="removed"||s?.status=="banned"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,oC)]),o("div",nC,[s?.isAdmin?(l(),d("span",sC,"Admin")):p("v-if",!0),s?.isAdmin?p("v-if",!0):(l(),d("span",rC,"\u2014"))]),o("div",iC,[o("div",aC,[t[40]||(t[40]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",lC,[o("a",{class:"dropdown-item",href:e.safeUrl("/admin/users/"+s?.username)},[...t[35]||(t[35]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View details",-1)])],8,dC),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/repositories?owner="+s?.username)},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),b(" View repositories",-1)])],8,uC),t[39]||(t[39]=o("div",{class:"dropdown-divider"},null,-1)),D(o("a",{class:"dropdown-item text-danger",href:"#",onClick:de(a=>e.banUser(s),["prevent"])},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])],8,cC),[[K,s?.status=="active"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.activateUser(s),["prevent"])},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Activate",-1)])],8,pC),[[K,s?.status=="removed"||s?.status=="banned"]])])])])],2))),256)),e.filteredUsers?.length==0?(l(),d("div",fC,[...t[41]||(t[41]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No users match the current filters.",-1)])])):p("v-if",!0)]),o("div",mC,[o("span",hC,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",vC,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous",-1)])],8,yC),D(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,gC),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[43]||(t[43]=[b("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,bC)])):p("v-if",!0),o("span",wC,[t[45]||(t[45]=o("label",null,"Per page",-1)),D((l(),d("select",kC,[...t[44]||(t[44]=[o("option",{value:"10"},"10",-1),o("option",{value:"25"},"25",-1),o("option",{value:"50"},"50",-1),o("option",{value:"100"},"100",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var EC={class:"anonymize-landing"},CC={class:"anonymize-landing-inner"},_C={class:"form-group mt-4 mb-2"},SC={class:"source-url-label-row"},NC={key:0,class:"repo-access","aria-label":"GitHub access"},DC={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},RC=["aria-pressed","disabled"],TC=["aria-pressed","disabled"],AC={key:1,class:"connection-badge"},OC={id:"sourceUrl-landing",type:"text",class:"form-control form-control-lg",placeholder:"https://github.com/owner/repository"},IC={key:0,class:"draft-status",role:"status"},PC={key:1,class:"text-danger",role:"alert"},VC={key:2,class:"repo-access-details","aria-label":"GitHub access"},qC={class:"repo-access-main"},MC={class:"repo-access-controls"},$C={key:1,class:"connection-link",href:"/connections"},LC={class:"repo-access-note"},UC={key:0},FC={class:"anonymize-workspace"},zC={class:"anonymize-topbar"},HC={class:"anonymize-topbar-inner"},BC={class:"paper-crumbs"},jC={class:"here"},GC={class:"anonymize-topbar-head"},WC={class:"paper-page-title anonymize-topbar-title"},KC={key:0},YC={key:1},JC={key:0,class:"alert alert-info",role:"status"},QC={key:1,class:"alert alert-info",role:"status"},XC={key:1},ZC={class:"anonymize-mobile-tabs",role:"tablist","aria-label":"Anonymization workspace"},xC=["aria-selected","tabindex"],e2=["aria-selected","tabindex"],t2={key:2,class:"anonymize-preview-empty",id:"workspace-preview",role:"status"},o2={class:"anonymize-split"},n2=["role","aria-labelledby"],s2={class:"form needs-validation paper-settings-main",name:"anonymize",novalidate:""},r2={class:"paper-settings-section"},i2={class:"form-group"},a2={class:"source-url-label-row"},l2={key:0,class:"repo-access","aria-label":"GitHub access"},d2={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},u2=["aria-pressed","disabled"],c2=["aria-pressed","disabled"],p2={key:1,class:"connection-badge"},f2=["disabled"],m2={class:"invalid-feedback"},h2={class:"invalid-feedback"},v2={class:"invalid-feedback"},y2={class:"invalid-feedback"},g2={key:0,class:"repo-access-details","aria-label":"GitHub access"},b2={class:"repo-access-main"},w2={class:"repo-access-controls"},k2={key:1,class:"connection-link",href:"/connections"},E2={class:"repo-access-note"},C2={key:0},_2={key:1,class:"repo-access-details"},S2={key:0,role:"status"},N2={key:2,class:"form-grid-2"},D2={class:"form-group"},R2={class:"input-group"},T2={class:"form-control",id:"branch",name:"branch"},A2=["textContent","value"],O2={class:"input-group-append"},I2={class:"form-group"},P2=["disabled"],V2={class:"invalid-feedback"},q2={class:"invalid-feedback"},M2={class:"form-check"},$2={class:"form-check-input",type:"checkbox",id:"update",name:"update"},L2={class:"paper-settings-section"},U2={class:"form-group"},F2=["disabled"],z2={class:"form-text text-muted"},H2={class:"invalid-feedback"},B2={class:"form-group"},j2=["disabled"],G2={class:"form-text text-muted"},W2={class:"invalid-feedback"},K2={class:"form-group"},Y2=["disabled"],J2={class:"form-text text-muted"},Q2={class:"invalid-feedback"},X2={class:"form-group"},Z2={class:"form-text text-muted"},x2=["href"],e_={class:"invalid-feedback"},t_={class:"form-text text-muted"},o_={class:"paper-settings-section"},n_={class:"form-group"},s_={class:"form-text text-muted"},r_={class:"warning-feedback"},i_={class:"invalid-feedback"},a_={class:"paper-settings-section"},l_={class:"form-check"},d_={class:"form-check-input",type:"checkbox",id:"link",name:"link"},u_={class:"form-check"},c_={class:"form-check-input",type:"checkbox",id:"image",name:"image"},p_={class:"form-check"},f_={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},m_={class:"form-check"},h_={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},v_={class:"form-check"},y_=["disabled"],g_={key:0,class:"form-text text-muted"},b_={key:1,class:"form-text text-muted"},w_={class:"form-check"},k_={class:"form-check-input",type:"checkbox",id:"title-gist",name:"title-gist"},E_={class:"form-check"},C_={class:"form-check-input",type:"checkbox",id:"content-gist",name:"content-gist"},__={class:"form-check"},S_={class:"form-check-input",type:"checkbox",id:"comments-gist",name:"comments-gist"},N_={class:"form-check"},D_={class:"form-check-input",type:"checkbox",id:"username-gist",name:"username-gist"},R_={class:"form-check"},T_={class:"form-check-input",type:"checkbox",id:"date-gist",name:"date-gist"},A_={class:"form-check"},O_={class:"form-check-input",type:"checkbox",id:"origin-gist",name:"origin-gist"},I_={class:"form-check"},P_={class:"form-check-input",type:"checkbox",id:"title",name:"title"},V_={class:"form-check"},q_={class:"form-check-input",type:"checkbox",id:"body",name:"body"},M_={class:"form-check"},$_={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},L_={class:"form-check"},U_={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},F_={class:"form-check"},z_={class:"form-check-input",type:"checkbox",id:"username",name:"username"},H_={class:"form-check"},B_={class:"form-check-input",type:"checkbox",id:"date",name:"date"},j_={class:"form-check"},G_={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},W_={class:"paper-settings-section"},K_={class:"form-grid-2"},Y_={class:"form-group"},J_={class:"form-control",id:"expiration",name:"expiration"},Q_={class:"form-group"},X_=["min","max"],Z_={class:"invalid-feedback"},x_={class:"invalid-feedback"},eS={class:"paper-settings-section"},tS={class:"form-group"},oS={style:{position:"relative"}},nS={type:"text",id:"coauthorSearch",class:"form-control",placeholder:"Search GitHub username\u2026",autocomplete:"off"},sS={class:"dropdown-menu show",style:{display:"block","max-height":"220px","overflow-y":"auto",width:"100%"}},rS=["onClick"],iS=["src"],aS=["textContent"],lS=["textContent"],dS={class:"coauthor-list"},uS={class:"coauthor-row d-flex align-items-center",style:{padding:"6px 0",gap:"8px"}},cS=["src"],pS=["textContent","href"],fS=["onClick"],mS={class:"form-text text-muted"},hS=["textContent"],vS={key:1,class:"draft-status",role:"status"},yS={key:2,class:"draft-status"},gS={key:3,class:"anonymize-review-note"},bS={class:"anonymize-submit-bar"},wS=["disabled"],kS=["disabled"],ES=["disabled"],CS=["disabled"],_S=["disabled"],SS=["disabled"],NS=["role","aria-labelledby"],DS={class:"anonymize-preview-head"},RS={class:"anonymize-preview-sub"},TS={key:0,class:"anonymize-preview-status",role:"status"},AS={key:1,class:"anonymize-preview-status",role:"status"},OS={key:2,class:"anonymize-preview-status",role:"alert"},IS={key:3,class:"anonymize-preview-status"},PS=["innerHTML"],VS=["role","aria-labelledby"],qS={class:"anonymize-preview-head"},MS={class:"anonymize-preview-sub"},$S={key:0,class:"anonymize-preview-status",role:"status"},LS={key:1,class:"anonymize-preview-status",role:"status"},US={key:2,class:"anonymize-preview-status",role:"alert"},FS={key:3,class:"anonymize-preview-body"},zS={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},HS={class:"pr-title mb-1"},BS={key:0},jS=["textContent"],GS={key:0},WS={key:1},KS={key:2},YS={class:"pr-comments mt-3"},JS={class:"pr-comment"},QS={class:"pr-comment-head"},XS=["textContent"],ZS={key:0,class:"pr-comment-date"},xS={key:3},eN={class:"pr-comments"},tN={class:"pr-comment"},oN={class:"pr-comment-head"},nN={key:0,class:"pr-comment-author"},sN=["textContent"],rN=["textContent"],iN={key:0,class:"pr-comment-body"},aN=["role","aria-labelledby"],lN={class:"anonymize-preview-head"},dN={class:"anonymize-preview-sub"},uN={key:0,class:"anonymize-preview-status",role:"status"},cN={key:1,class:"anonymize-preview-status",role:"status"},pN={key:2,class:"anonymize-preview-status",role:"alert"},fN={key:3,class:"anonymize-preview-body"},mN={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},hN={class:"pr-title mb-1"},vN={key:0},yN=["textContent"],gN={key:0},bN={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--paper-bg-alt)"}},wN={key:2,class:"paper-tabs",role:"tablist"},kN=["aria-selected","tabindex"],EN=["aria-selected","tabindex"],CN=["textContent"],_N={key:3,class:"anonymize-preview-status"},SN={class:"paper-tab-content"},NN={key:0,role:"tabpanel",id:"preview-pr-diff-panel","aria-labelledby":"preview-pr-diff-tab"},DN=["innerHTML"],RN={key:1,role:"tabpanel",id:"preview-pr-comments-panel","aria-labelledby":"preview-pr-comments-tab"},TN={class:"pr-comments"},AN={class:"pr-comment"},ON={class:"pr-comment-head"},IN={key:0,class:"pr-comment-author"},PN=["textContent"],VN=["textContent"],qN={key:0,class:"pr-comment-body"};function Tl(e,t){let n=We("gist-file"),r=We("markdown"),s=be("field"),i=be("form");return l(),d("div",{class:A(["anonymize-page h-100",{"mobile-preview-active":e.mobilePane==="preview"}])},[p(" ===== STATE 1: No URL \u2014 centered input ===== "),D(o("div",EC,[o("div",CC,[t[36]||(t[36]=o("div",{class:"paper-crumbs"},[b("My work \xA0/\xA0 "),o("span",{class:"here"},"New anonymization")],-1)),t[37]||(t[37]=o("h1",{class:"paper-page-title"},[b("New "),o("em",null,"anonymization")],-1)),t[38]||(t[38]=o("p",{class:"paper-page-lede"}," Paste a GitHub repository, pull-request, or gist URL. We\u2019ll fetch it, redact the terms you choose in text files, and give you a share link. Images and PDFs are served unchanged when enabled. Review them before sharing. ",-1)),o("div",_C,[o("div",SC,[t[32]||(t[32]=o("label",{class:"paper-field-label",for:"sourceUrl-landing"},"Source URL",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",NC,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",DC,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[0]||(t[0]=a=>e.chooseGitHubConnection("github-app"))},[...t[31]||(t[31]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(),o("span",{class:"sr-only"},"Read-only ",-1),b("GitHub App",-1)])],8,RC),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[1]||(t[1]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,TC)])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",AC,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):p("v-if",!0)])):p("v-if",!0)]),D(o("input",OC,null,512),[[s,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:null,options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]])]),e.draftRestored?(l(),d("div",IC,[t[33]||(t[33]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[2]||(t[2]=a=>e.discardDraft())},"Discard draft")])):p("v-if",!0),e.sourceUrlError?(l(),d("p",PC,c(e.sourceUrlError),1)):p("v-if",!0),t[39]||(t[39]=o("small",{class:"form-text",style:{color:"var(--ink-muted)"}}," Repository, pull request (\u2026/pull/42) and gist (gist.github.com/\u2026) URLs are all accepted. ",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",VC,[o("div",qC,[o("div",MC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[3]||(t[3]=a=>e.grantGitHubAccess())},[...t[34]||(t[34]=[b("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",$C,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):p("v-if",!0)])]),o("div",LC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",UC,"Select repositories on GitHub, then return here.")):p("v-if",!0),t[35]||(t[35]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Selected content will be published, including content from private repositories.")],-1))])])):p("v-if",!0)])],512),[[K,!e.workspaceOpen&&!e.isUpdate]]),p(" ===== STATE 2: URL provided \u2014 form (left) + preview (right) ===== "),D(o("div",FC,[o("header",zC,[o("div",HC,[o("div",BC,[t[40]||(t[40]=o("a",{href:"/dashboard"},"My work",-1)),t[41]||(t[41]=b(" \xA0/\xA0 ",-1)),o("span",jC,c(e.isUpdate?"Edit anonymization":"New anonymization"),1)]),o("div",GC,[o("h1",WC,[e.isUpdate?p("v-if",!0):(l(),d("span",KC,[...t[42]||(t[42]=[b("New ",-1),o("em",null,"anonymization",-1)])])),e.isUpdate?(l(),d("span",YC,[...t[43]||(t[43]=[b("Edit ",-1),o("em",null,"anonymization",-1)])])):p("v-if",!0)]),D(o("span",{class:A(["type-badge",{"type-repo":e.detectedType==="repo","type-pr":e.detectedType==="pr","type-gist":e.detectedType==="gist"}])},c(e.detectedType==="repo"?"Repo":e.detectedType==="pr"?"PR":"Gist"),3),[[K,e.detectedType]])])])]),e.detectedType==="gist"&&e.gistAppRequired?(l(),d("aside",JC,[t[44]||(t[44]=o("p",null,"Reconnect your GitHub account to read this gist. Your draft will be restored when you return.",-1)),o("button",{type:"button",class:"btn btn-ink",onClick:t[4]||(t[4]=a=>e.connectGistApp())},"Connect GitHub App to access gists")])):p("v-if",!0),e.detectedType==="gist"&&e.gistOAuthRequired?(l(),d("aside",QC,[t[45]||(t[45]=o("p",null,"Connect GitHub OAuth to access gists. Your account and existing anonymizations stay the same, and your draft will be restored when you return.",-1)),t[46]||(t[46]=o("p",null,"GitHub's legacy OAuth connection includes write access to private repositories.",-1)),e.githubConnections?.oauthEnabled?(l(),d("button",{key:0,type:"button",class:"btn btn-ink",onClick:t[5]||(t[5]=a=>e.connectGistOAuth())},"Connect GitHub OAuth to access gists")):(l(),d("p",XC,"GitHub OAuth is currently unavailable. Please try again later."))])):p("v-if",!0),o("nav",ZC,[o("button",{id:"workspace-settings-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="settings","aria-controls":"workspace-settings",tabindex:e.mobilePane==="settings"?0:-1,onKeydown:t[6]||(t[6]=a=>e.previewTabKeydown(a)),onClick:t[7]||(t[7]=a=>e.selectMobilePane("settings"))},"Settings",40,xC),o("button",{id:"workspace-preview-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="preview","aria-controls":"workspace-preview",tabindex:e.mobilePane==="preview"?0:-1,onKeydown:t[8]||(t[8]=a=>e.previewTabKeydown(a)),onClick:t[9]||(t[9]=a=>e.selectMobilePane("preview"))},"Reviewer preview",40,e2)]),e.detectedType!=="repo"&&!e.details?(l(),d("div",t2,c(e.sourceLoading?"Loading source\u2026":"Choose an accessible source to see its preview."),1)):p("v-if",!0),o("div",o2,[p(" Form column (left) "),o("div",{id:"workspace-settings",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-settings-tab":null,class:"anonymize-form-col overflow-auto"},[D((l(),d("form",s2,[o("section",r2,[t[57]||(t[57]=o("div",{class:"paper-section-eyebrow"},"Source",-1)),o("div",i2,[o("div",a2,[t[48]||(t[48]=o("label",{class:"paper-field-label",for:"sourceUrl"},"GitHub URL",-1)),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",l2,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",d2,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[10]||(t[10]=a=>e.chooseGitHubConnection("github-app"))},[...t[47]||(t[47]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(),o("span",{class:"sr-only"},"Read-only ",-1),b("GitHub App",-1)])],8,u2),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[11]||(t[11]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,c2)])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",p2,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):p("v-if",!0)])):p("v-if",!0)]),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.sourceUrl?.invalid}]),name:"sourceUrl",id:"sourceUrl",disabled:e.isUpdate&&e.detectedType!=="repo",placeholder:"Paste a GitHub repo or pull request URL"},null,10,f2),[[s,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]]),D(o("div",m2," Please provide a valid GitHub URL. ",512),[[K,e.anonymize?.sourceUrl?.errors?.github]]),D(o("div",h2," Not accessible. The organization may restrict access. ",512),[[K,e.anonymize?.sourceUrl?.errors?.access]]),D(o("div",v2," Does not exist or is not accessible. ",512),[[K,e.anonymize?.sourceUrl?.errors?.missing]]),D(o("div",y2," Already anonymized. ",512),[[K,e.anonymize?.sourceUrl?.errors?.used]])]),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",g2,[o("div",b2,[o("div",w2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[12]||(t[12]=a=>e.grantGitHubAccess())},[...t[49]||(t[49]=[b("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):p("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",k2,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):p("v-if",!0)])]),o("div",E2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",C2,"Select repositories on GitHub, then return here.")):p("v-if",!0),t[50]||(t[50]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Selected content will be published, including content from private repositories.")],-1))])])):p("v-if",!0),e.isUpdate&&e.detectedType==="repo"&&e.role==="owner"&&e.sourceUrl==="https://github.com/"+e._originalFullName?(l(),d("aside",_2,[t[51]||(t[51]=o("p",null,"If you deleted and recreated this repository, reconnect it before choosing a branch.",-1)),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[13]||(t[13]=a=>e.reconnectSource())},"Reconnect source repository"),e.reconnectRepositoryId?(l(),d("p",S2,"Source reloaded. Review the branch, commit, and anonymization preview, then save to replace the published snapshot.")):p("v-if",!0)])):p("v-if",!0),e.detectedType==="repo"?(l(),d("div",N2,[o("div",D2,[t[53]||(t[53]=o("label",{class:"paper-field-label",for:"branch"},"Branch",-1)),o("div",R2,[D((l(),d("select",T2,[(l(!0),d(X,null,ae(e.branches,(a,u)=>(l(),d("option",{textContent:c(a?.name),value:a?.name},null,8,A2))),256))])),[[s,{state:e.viewState,set:a=>{e.source.branch=a},value:e.source?.branch,form:"anonymize",options:{}}]]),o("div",O2,[o("button",{class:"btn btn-icon",type:"button",title:"Refresh","data-toggle":"tooltip","data-placement":"bottom",onClick:t[14]||(t[14]=a=>e.getBranches(!0)),"aria-label":"Refresh"},[...t[52]||(t[52]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])])]),o("div",I2,[t[54]||(t[54]=o("label",{class:"paper-field-label",for:"commit"},"Commit",-1)),D(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.commit?.invalid}]),id:"commit",disabled:e.options.update,name:"commit",pattern:"[a-fA-Z0-9]{6,}",required:""},null,10,P2),[[s,{state:e.viewState,set:a=>{e.source.commit=a},value:e.source?.commit,form:"anonymize",options:{}}]]),D(o("div",V2," The commit SHA is not valid. ",512),[[K,e.anonymize?.commit?.errors?.pattern||e.anonymize?.commit?.errors?.required]]),D(o("div",q2," This commit no longer exists in the repository. Click refresh to get the latest. ",512),[[K,e.anonymize?.commit?.errors?.exists]])])])):p("v-if",!0),D(o("div",M2,[D(o("input",$2,null,512),[[s,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"anonymize",options:{}}]]),t[55]||(t[55]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[56]||(t[56]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))],512),[[K,e.detectedType]])]),D(o("section",L2,[t[68]||(t[68]=o("div",{class:"paper-section-eyebrow"},"Identity",-1)),D(o("div",U2,[t[60]||(t[60]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.repoId?.invalid}]),name:"repoId",id:"repoId",disabled:e.isUpdate},null,10,F2),[[s,{state:e.viewState,set:a=>{e.repoId=a},value:e.repoId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",z2,[t[58]||(t[58]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/r/"+c(e.repoId),1),t[59]||(t[59]=b(".",-1))]),D(o("div",H2,"ID can only contain letters and numbers.",512),[[K,e.anonymize?.repoId?.errors?.format]]),D(o("div",{class:"invalid-feedback"},c(e.repoId)+" is already used.",513),[[K,e.anonymize?.repoId?.errors?.used]])],512),[[K,e.detectedType==="repo"]]),D(o("div",B2,[t[63]||(t[63]=o("label",{class:"paper-field-label",for:"pullRequestId"},"Anonymized pull request ID",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId",disabled:e.isUpdate},null,10,j2),[[s,{state:e.viewState,set:a=>{e.pullRequestId=a},value:e.pullRequestId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",G2,[t[61]||(t[61]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/pr/"+c(e.pullRequestId),1),t[62]||(t[62]=b(".",-1))]),D(o("div",W2,"ID can only contain letters and numbers.",512),[[K,e.anonymize?.pullRequestId?.errors?.format]]),D(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used.",513),[[K,e.anonymize?.pullRequestId?.errors?.used]])],512),[[K,e.detectedType==="pr"]]),D(o("div",K2,[t[66]||(t[66]=o("label",{class:"paper-field-label",for:"gistId"},"Anonymized gist ID",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.gistId?.invalid}]),name:"gistId",id:"gistId",disabled:e.isUpdate},null,10,Y2),[[s,{state:e.viewState,set:a=>{e.gistId=a},value:e.gistId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",J2,[t[64]||(t[64]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/gist/"+c(e.gistId),1),t[65]||(t[65]=b(".",-1))]),D(o("div",Q2,"ID can only contain letters and numbers.",512),[[K,e.anonymize?.gistId?.errors?.format]]),D(o("div",{class:"invalid-feedback"},c(e.gistId)+" is already used.",513),[[K,e.anonymize?.gistId?.errors?.used]])],512),[[K,e.detectedType==="gist"]]),o("div",X2,[t[67]||(t[67]=o("label",{class:"paper-field-label",for:"conference"},[b("Conference "),o("span",{class:"paper-optional"},"(optional)")],-1)),D(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[s,{state:e.viewState,set:a=>{e.conference=a},value:e.conference,form:"anonymize",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),D(o("small",Z2,[o("a",{target:"_blank",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,x2),b(" expires "+c(e.fmt?.date(e.conference_data?.endDate))+". ",1)],512),[[K,e.conference_data]]),D(o("div",e_,"The conference is not activated.",512),[[K,e.anonymize?.conference?.errors?.activated]]),D(o("small",t_,"Link to a conference to apply its shared defaults.",512),[[K,!e.conference_data]])])],512),[[K,e.detectedType]]),D(o("section",o_,[t[76]||(t[76]=o("div",{class:"paper-section-eyebrow"},"Anonymization",-1)),o("div",n_,[t[75]||(t[75]=o("label",{class:"paper-field-label",for:"terms"},"Terms to redact",-1)),D(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"4"},null,2),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),o("small",s_,[t[69]||(t[69]=b("One term per line (regex allowed). Replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[70]||(t[70]=b(", or use ",-1)),t[71]||(t[71]=o("code",null,"term=>replacement",-1)),t[72]||(t[72]=b(" to pick your own (e.g. ",-1)),t[73]||(t[73]=o("code",null,"Anonymous=>ABC",-1)),t[74]||(t[74]=b(").",-1))]),D(o("div",r_,"Regex characters detected. Escape them if unintentional.",512),[[K,e.termsRegexWarning]]),D(o("div",i_,"Terms are in an invalid format.",512),[[K,e.anonymize?.terms?.errors?.format]])])],512),[[K,e.detectedType]]),D(o("section",a_,[t[97]||(t[97]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),D(o("div",null,[o("div",l_,[D(o("input",d_,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[77]||(t[77]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),o("div",u_,[D(o("input",c_,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[78]||(t[78]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[79]||(t[79]=o("small",{class:"form-text text-muted"},"Images are served unchanged and may contain names or affiliations.",-1))]),o("div",p_,[D(o("input",f_,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[80]||(t[80]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[81]||(t[81]=o("small",{class:"form-text text-muted"},[b("PDF contents and metadata are served unchanged. "),o("a",{href:"/faq#formats"},"About supported formats")],-1))]),o("div",m_,[D(o("input",h_,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[82]||(t[82]=o("label",{class:"form-check-label",for:"notebook"},"Display Notebooks",-1))]),o("div",v_,[D(o("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,y_),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[83]||(t[83]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?p("v-if",!0):(l(),d("small",g_,c(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",b_,c(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):p("v-if",!0)])],512),[[K,e.detectedType==="repo"]]),D(o("div",null,[o("div",w_,[D(o("input",k_,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[84]||(t[84]=o("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),o("div",E_,[D(o("input",C_,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[85]||(t[85]=o("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),o("div",__,[D(o("input",S_,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[86]||(t[86]=o("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),o("div",N_,[D(o("input",D_,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[87]||(t[87]=o("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),o("div",R_,[D(o("input",T_,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[88]||(t[88]=o("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),o("div",A_,[D(o("input",O_,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[89]||(t[89]=o("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[K,e.detectedType==="gist"]]),D(o("div",null,[o("div",I_,[D(o("input",P_,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[90]||(t[90]=o("label",{class:"form-check-label",for:"title"},"PR title",-1))]),o("div",V_,[D(o("input",q_,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[91]||(t[91]=o("label",{class:"form-check-label",for:"body"},"PR body",-1))]),o("div",M_,[D(o("input",$_,null,512),[[s,{state:e.viewState,set:a=>{e.options.diff=a},value:e.options?.diff,form:"anonymize",options:{}}]]),t[92]||(t[92]=o("label",{class:"form-check-label",for:"diff"},"Diff",-1))]),o("div",L_,[D(o("input",U_,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[93]||(t[93]=o("label",{class:"form-check-label",for:"comments"},"Comments",-1))]),o("div",F_,[D(o("input",z_,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[94]||(t[94]=o("label",{class:"form-check-label",for:"username"},"Usernames",-1))]),o("div",H_,[D(o("input",B_,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[95]||(t[95]=o("label",{class:"form-check-label",for:"date"},"Dates",-1))]),o("div",j_,[D(o("input",G_,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[96]||(t[96]=o("label",{class:"form-check-label",for:"origin"},"Project name",-1))])],512),[[K,e.detectedType==="pr"]])],512),[[K,e.detectedType]]),D(o("section",W_,[t[101]||(t[101]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",K_,[o("div",Y_,[t[99]||(t[99]=o("label",{class:"paper-field-label",for:"expiration"},"Strategy",-1)),D((l(),d("select",J_,[...t[98]||(t[98]=[o("option",{value:"redirect"},"Redirect to GitHub when expired",-1),o("option",{value:"remove",selected:""},"Remove when expired",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"anonymize",options:{}}]])]),o("div",Q_,[t[100]||(t[100]=o("label",{class:"paper-field-label",for:"expirationDate"},"Expiration date",-1)),D(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.expirationDate?.invalid}]),type:"date",name:"expirationDate",id:"expirationDate",required:"",min:e.minExpirationDate,max:e.maxExpirationDate},null,10,X_),[[s,{state:e.viewState,set:a=>{e.options.expirationDate=a},value:e.options?.expirationDate,form:"anonymize",options:{}}]]),D(o("div",Z_,"Pick a date in the future.",512),[[K,e.anonymize?.expirationDate?.errors?.min]]),D(o("div",{class:"invalid-feedback"},"Pick a date on or before "+c(e.fmt?.date(e.maxExpirationDate))+".",513),[[K,e.anonymize?.expirationDate?.errors?.max]]),D(o("div",x_,"Enter a valid expiration date.",512),[[K,e.anonymize?.expirationDate?.errors?.required||e.anonymize?.expirationDate?.errors?.date]])])]),D(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the content will be removed.",513),[[K,e.options?.expirationMode=="remove"&&e.options?.expirationDate]]),D(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", visitors will be redirected to GitHub.",513),[[K,e.options?.expirationMode=="redirect"&&e.options?.expirationDate]])],512),[[K,e.detectedType]]),D(o("section",eS,[t[105]||(t[105]=o("div",{class:"paper-section-eyebrow"},"Co-authors",-1)),t[106]||(t[106]=o("p",{class:"form-text text-muted",style:{"margin-bottom":"8px"}}," Co-authors can view and edit these settings. They cannot delete the anonymization or manage co-authors. ",-1)),D(o("div",tS,[t[102]||(t[102]=o("label",{class:"paper-field-label",for:"coauthorSearch"},"Add a GitHub user",-1)),o("div",oS,[D(o("input",nS,null,512),[[s,{state:e.viewState,set:a=>{e.coauthorSearch=a},value:e.coauthorSearch,form:"anonymize",options:{debounce:300},change:()=>{e.searchCoauthors()}}]]),D(o("div",sS,[(l(!0),d(X,null,ae(e.coauthorResults,(a,u)=>(l(),d("a",{href:"#",class:"dropdown-item d-flex align-items-center",onClick:de(f=>e.addCoauthor(a,f),["prevent"])},[o("img",{alt:"",style:{width:"22px",height:"22px","border-radius":"50%","margin-right":"8px"},src:e.safeUrl(a?.photo)},null,8,iS),o("span",{textContent:c(a?.username)},null,8,aS)],8,rS))),256))],512),[[K,e.coauthorResults?.length>0]])]),D(o("small",{class:"form-text text-muted",textContent:c(e.coauthorError)},null,8,lS),[[K,e.coauthorError]])],512),[[K,e.role==="owner"||e.role==="admin"]]),o("div",dS,[(l(!0),d(X,null,ae(e.coauthors,(a,u)=>(l(),d("div",uS,[a?.photo?(l(),d("img",{key:0,alt:"",style:{width:"24px",height:"24px","border-radius":"50%"},src:e.safeUrl(a?.photo)},null,8,cS)):p("v-if",!0),o("a",{target:"_blank",textContent:c(a?.username),href:e.safeUrl("https://github.com/"+a?.username)},null,8,pS),t[104]||(t[104]=o("span",{class:"type-badge type-coauthor"},"Co-author",-1)),D(o("button",{type:"button",class:"btn btn-sm btn-icon",style:{"margin-left":"auto"},title:"Remove co-author",onClick:f=>e.removeCoauthor(a),"aria-label":"Remove co-author"},[...t[103]||(t[103]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,fS),[[K,e.role==="owner"||e.role==="admin"]])]))),256)),D(o("div",mS," No co-authors yet. ",512),[[K,!e.coauthors||e.coauthors?.length===0]])])],512),[[K,e.isUpdate&&e.detectedType==="repo"]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,hS)):p("v-if",!0),e.draftRestored?(l(),d("div",vS,[t[107]||(t[107]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[15]||(t[15]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",yS,[b(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[16]||(t[16]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):p("v-if",!0),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",gS,"Review enabled images and PDFs before sharing. Their contents are not anonymized.")):p("v-if",!0),o("button",{type:"button",class:"btn btn-outline-ink mobile-preview-jump",onClick:t[17]||(t[17]=a=>e.selectMobilePane("preview"))},[...t[108]||(t[108]=[b("Review preview ",-1),o("span",{"aria-hidden":"true"},"\u2192",-1)])]),D(o("div",bS,[e.detectedType==="repo"&&!e.isUpdate?(l(),d("button",{key:0,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[18]||(t[18]=de(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[109]||(t[109]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Repository ",-1)])],8,wS)):p("v-if",!0),e.detectedType==="repo"&&e.isUpdate?(l(),d("button",{key:1,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[19]||(t[19]=de(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[110]||(t[110]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Repository ",-1)])],8,kS)):p("v-if",!0),e.detectedType==="pr"&&!e.isUpdate?(l(),d("button",{key:2,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[20]||(t[20]=de(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[111]||(t[111]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Pull Request ",-1)])],8,ES)):p("v-if",!0),e.detectedType==="pr"&&e.isUpdate?(l(),d("button",{key:3,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[21]||(t[21]=de(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[112]||(t[112]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Pull Request ",-1)])],8,CS)):p("v-if",!0),e.detectedType==="gist"&&!e.isUpdate?(l(),d("button",{key:4,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[22]||(t[22]=de(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[113]||(t[113]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Gist ",-1)])],8,_S)):p("v-if",!0),e.detectedType==="gist"&&e.isUpdate?(l(),d("button",{key:5,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[23]||(t[23]=de(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[114]||(t[114]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Gist ",-1)])],8,SS)):p("v-if",!0)],512),[[K,e.detectedType]])])),[[i,e.viewState]])],8,n2),p(" Preview column (right) "),e.detectedType==="repo"?(l(),d("div",{key:0,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",DS,[t[115]||(t[115]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",RS,c(e.previewStatus==="ready"?"README with redactions applied":"README preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",TS,"Loading source\u2026")):p("v-if",!0),e.previewStatus==="loading"?(l(),d("div",AS,"Updating the anonymized preview\u2026")):p("v-if",!0),e.previewStatus==="error"?(l(),d("div",OS,[t[116]||(t[116]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[24]||(t[24]=a=>e.retryPreview())},"Retry preview")])):p("v-if",!0),!e.sourceLoading&&!e.readme&&e.previewStatus==="idle"?(l(),d("div",IS,"No README is available to preview. Review the published files before sharing.")):p("v-if",!0),e.previewStatus==="ready"?(l(),d("div",{key:4,class:"anonymize-preview-body markdown-body body",innerHTML:e.sanitize(e.html_readme)},null,8,PS)):p("v-if",!0)],8,NS)):p("v-if",!0),e.detectedType==="gist"&&e.details?(l(),d("div",{key:1,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",qS,[t[117]||(t[117]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",MS,c(e.previewStatus==="ready"?"Gist with redactions applied":"Gist preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",$S,"Loading source\u2026")):p("v-if",!0),e.previewStatus==="loading"?(l(),d("div",LS,"Updating the anonymized preview\u2026")):p("v-if",!0),e.previewStatus==="error"?(l(),d("div",US,[t[118]||(t[118]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[25]||(t[25]=a=>e.retryPreview())},"Retry preview")])):p("v-if",!0),e.previewStatus==="ready"?(l(),d("div",FS,[o("div",zS,[o("h2",HS,[e.options?.title?(l(),d("span",BS,c(e.anonymizeGistContent(e.details?.gist?.description)||"Untitled gist"),1)):p("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.gist?.isPublic,"badge-secondary":!e.details?.gist?.isPublic}])},c(e.details?.gist?.isPublic?"public":"secret"),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.gist?.updatedDate))},null,8,jS)):p("v-if",!0)]),e.options?.origin?(l(),d("small",GS,"Gist ID: "+c(e.details?.source?.gistId),1)):p("v-if",!0),e.options?.username&&e.details?.gist?.ownerLogin?(l(),d("small",WS,"By @"+c(e.anonymizeGistContent(e.details?.gist?.ownerLogin)),1)):p("v-if",!0),e.options?.content&&e.previewGistFiles?.length?(l(),d("div",KS,[o("ul",YS,[(l(!0),d(X,null,ae(e.previewGistFiles,(a,u)=>(l(),d("li",JS,[o("div",QS,[o("strong",{textContent:c(a?.filename)},null,8,XS),a?.language?(l(),d("span",ZS,c(a?.language),1)):p("v-if",!0)]),Ce(n,{file:a,terms:e.terms,options:e.options},null,8,["file","terms","options"])]))),256))])])):p("v-if",!0),e.options?.comments&&e.details?.gist?.comments&&e.details?.gist?.comments?.length?(l(),d("div",xS,[t[121]||(t[121]=o("h3",{class:"paper-section-eyebrow mt-3"},"Comments",-1)),o("ul",eN,[(l(!0),d(X,null,ae(e.details?.gist?.comments,(a,u)=>(l(),d("li",tN,[o("div",oN,[e.options?.username?(l(),d("span",nN,[t[119]||(t[119]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[120]||(t[120]=b(" @",-1)),o("span",{textContent:c(e.anonymizeGistContent(a?.author))},null,8,sN)])):p("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,rN)):p("v-if",!0)]),e.options?.body?(l(),d("div",iN,[Ce(r,{content:e.anonymizeGistContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0)]))),256))])])):p("v-if",!0)])):p("v-if",!0)],8,VS)):p("v-if",!0),e.detectedType==="pr"&&e.details?(l(),d("div",{key:2,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",lN,[t[122]||(t[122]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",dN,c(e.previewStatus==="ready"?"Pull request with redactions applied":"Pull request preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",uN,"Loading source\u2026")):p("v-if",!0),e.previewStatus==="loading"?(l(),d("div",cN,"Updating the anonymized preview\u2026")):p("v-if",!0),e.previewStatus==="error"?(l(),d("div",pN,[t[123]||(t[123]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[26]||(t[26]=a=>e.retryPreview())},"Retry preview")])):p("v-if",!0),e.previewStatus==="ready"?(l(),d("div",fN,[o("div",mN,[o("h2",hN,[e.options?.title?(l(),d("span",vN,c(e.anonymizePrContent(e.details?.pullRequest?.title)),1)):p("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,yN)):p("v-if",!0)]),e.options?.origin?(l(),d("small",gN,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):p("v-if",!0),e.options?.body?(l(),d("div",bN,[Ce(r,{content:e.anonymizePrContent(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0),e.options?.diff||e.options?.comments?(l(),d("nav",wN,[e.options?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.prTabState?.active=="diff"}]),type:"button",role:"tab",id:"preview-pr-diff-tab","aria-selected":e.prTabState?.active==="diff","aria-controls":"preview-pr-diff-panel",tabindex:e.prTabState?.active==="diff"?0:-1,onKeydown:t[27]||(t[27]=a=>e.previewTabKeydown(a)),onClick:t[28]||(t[28]=a=>e.prTabState.active="diff")},[...t[124]||(t[124]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Diff ",-1)])],42,kN)):p("v-if",!0),e.options?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.prTabState?.active=="comments"}]),type:"button",role:"tab",id:"preview-pr-comments-tab","aria-selected":e.prTabState?.active==="comments","aria-controls":"preview-pr-comments-panel",tabindex:e.prTabState?.active==="comments"?0:-1,onKeydown:t[29]||(t[29]=a=>e.previewTabKeydown(a)),onClick:t[30]||(t[30]=a=>e.prTabState.active="comments")},[t[125]||(t[125]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,CN)],42,EN)):p("v-if",!0)])):p("v-if",!0),!e.options?.diff&&!e.options?.comments?(l(),d("div",_N,"Diff and comments are hidden by your display settings.")):p("v-if",!0),o("div",SN,[e.options?.diff&&e.prTabState?.active=="diff"?(l(),d("div",NN,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.anonymizePrContent(e.details?.pullRequest?.diff)))},null,8,DN)])):p("v-if",!0),e.options?.comments&&e.prTabState?.active=="comments"?(l(),d("div",RN,[o("ul",TN,[(l(!0),d(X,null,ae(e.details?.pullRequest?.comments,(a,u)=>(l(),d("li",AN,[o("div",ON,[e.options?.username?(l(),d("span",IN,[t[126]||(t[126]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[127]||(t[127]=b(" @",-1)),o("span",{textContent:c(e.anonymizePrContent(a?.author))},null,8,PN)])):p("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,VN)):p("v-if",!0)]),e.options?.body?(l(),d("div",qN,[Ce(r,{content:e.anonymizePrContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0)]))),256))])])):p("v-if",!0)])])):p("v-if",!0)],8,aN)):p("v-if",!0)])],512),[[K,e.workspaceOpen||e.isUpdate]])],2)}var MN={class:"container-fluid h-100 anonymize-page"},$N={class:"row h-100 flex-column flex-md-row"},LN={class:"col-md sidePanel shadow overflow-auto anonymize-form-col"},UN={class:"form-group"},FN={class:"form-group"},zN={class:"form-check"},HN={class:"form-check-input",type:"checkbox",id:"update",name:"update"},BN={class:"form-group"},jN={class:"form-text text-muted"},GN=["href"],WN={class:"invalid-feedback"},KN={class:"form-text text-muted"},YN={class:"form-group"},JN={id:"idHelp",class:"form-text text-muted"},QN={class:"invalid-feedback"},XN={class:"form-group"},ZN={class:"invalid-feedback"},xN={class:"form-group"},eD={class:"form-control",id:"expiration",name:"expiration"},tD={class:"form-group",id:"expiration-date-form"},oD={class:"form-control",type:"date",name:"expirationDate",id:"expirationDate"},nD={class:"accordion mb-3",id:"options"},sD={class:"card"},rD={id:"collapseOne",class:"collapse show","aria-labelledby":"headingOne","data-parent":"#options"},iD={class:"card-body"},aD={class:"form-group mb-0"},lD={class:"form-check"},dD={class:"form-check-input",type:"checkbox",id:"link",name:"link"},uD={class:"form-check"},cD={class:"form-check-input",type:"checkbox",id:"image",name:"image"},pD={class:"form-check"},fD={class:"form-check-input",type:"checkbox",id:"date",name:"date"},mD={class:"form-check"},hD={class:"form-check-input",type:"checkbox",id:"username",name:"username"},vD={class:"form-check"},yD={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},gD={class:"form-check"},bD={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},wD={class:"form-check"},kD={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},ED={class:"form-check"},CD={class:"form-check-input",type:"checkbox",id:"title",name:"title"},_D={class:"form-check"},SD={class:"form-check-input",type:"checkbox",id:"body",name:"body"},ND=["textContent"],DD={class:"anonymize-submit-bar"},RD={key:0,class:"col-md-8 p-2 overflow-auto anonymize-preview-col"},TD={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},AD={class:"pr-title mb-1"},OD={key:0},ID=["textContent"],PD={key:0},VD={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},qD={class:"nav nav-tabs",id:"myTab",role:"tablist"},MD={key:0,class:"nav-item",role:"presentation"},$D={key:1,class:"nav-item",role:"presentation"},LD=["textContent"],UD={class:"tab-content",id:"pills-tabContent"},FD={class:"tab-pane show active",id:"pills-diff",role:"tabpanel","aria-labelledby":"pills-diff-tab"},zD={key:0,class:"pr-diff shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},HD={style:{"overflow-x":"auto"}},BD=["innerHTML"],jD={key:0,class:"pr-comments list-group"},GD={class:"pr-comment list-group-item"},WD={class:"d-flex w-100 justify-content-between flex-wrap"},KD={key:0,class:"mb-1"},YD=["textContent"],JD={class:"mb-1"};function Al(e,t){let n=We("markdown"),r=be("field"),s=be("form");return l(),d("div",MN,[o("div",$N,[o("div",LN,[o("div",{class:A(["p-0 py-2 m-auto",{card:!e.pullRequestUrl,container:e.pullRequestUrl}])},[D((l(),d("form",{class:A(["form needs-validation",{"card-body":!e.pullRequestUrl}]),name:"anonymizeForm",novalidate:""},[t[30]||(t[30]=pe('
Anonymize \xA0/\xA0 Pull request

Anonymize a pull request

Fill in the details \u2014 it only takes a minute.

Source
',4)),p(" pullRequestUrl "),o("div",UN,[t[2]||(t[2]=o("label",{for:"pullRequestUrl"},"URL of your pull request",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestUrl?.invalid}]),name:"pullRequestUrl",id:"pullRequestUrl",placeholder:"https://github.com/owner/repo/pull/123"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestUrl=i},value:e.pullRequestUrl,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.pullRequestSelected()}}]]),D(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is not accessible. Some organizations are restricting the access to the repositories. ",513),[[K,e.anonymize?.pullRequestUrl?.errors?.access]]),D(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" does not exist or is not accessible ",513),[[K,e.anonymize?.pullRequestUrl?.errors?.missing]]),D(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is already anonymized ",513),[[K,e.anonymize?.pullRequestUrl?.errors?.used]])]),D(o("div",null,[o("div",FN,[o("div",zN,[D(o("input",HN,null,512),[[r,{state:e.viewState,set:i=>{e.options.update=i},value:e.options?.update,form:"anonymizeForm",options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"update"},"Auto update",-1)),t[4]||(t[4]=o("small",{id:"updateHelp",class:"form-text text-muted"},"Automatically update the anonymized pull request with the latest updates. The pull request is updated once per day maximum.",-1))])]),t[26]||(t[26]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})]),b(" Conference ID ")],-1)),p(" Conference "),o("div",BN,[t[5]||(t[5]=o("label",{for:"conference"},[b("Conference ID "),o("span",{class:"text-muted"},"(Optional)")],-1)),D(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[r,{state:e.viewState,set:i=>{e.conference=i},value:e.conference,form:"anonymizeForm",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),D(o("small",jN,[o("a",{target:"_target",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,GN),b(" will expire on "+c(e.fmt?.date(e.conference_data?.endDate))+".",1)],512),[[K,e.conference_data]]),D(o("div",WN," The conference is not activated. ",512),[[K,e.anonymize?.conference?.errors?.activated]]),D(o("small",KN," Use the Conference ID that your conference provided you. This will update automatically the anonymization options based on the conference preferences. ",512),[[K,!e.conference_data]])]),t[27]||(t[27]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),b(" Anonymization Options ")],-1)),p(" Pull Request ID "),o("div",YN,[t[6]||(t[6]=o("label",{for:"pullRequestId"},"Anonymized pull request id",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestId=i},value:e.pullRequestId,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",JN,"Id used in the url: https://anonymous.4open.science/r/"+c(e.pullRequestId),1),D(o("div",QN," Repository id can only contain letters and numbers ",512),[[K,e.anonymize?.pullRequestId?.errors?.format]]),D(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used ",513),[[K,e.anonymize?.pullRequestId?.errors?.used]])]),p(" Terms "),o("div",XN,[t[7]||(t[7]=o("label",{for:"terms"},"Terms to anonymize",-1)),D(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"3"},null,2),[[r,{state:e.viewState,set:i=>{e.terms=i},value:e.terms,form:"anonymizeForm",options:{debounce:250}}]]),t[8]||(t[8]=o("small",{id:"termsHelp",class:"form-text text-muted"},"One term per line. Each term will be replaced by XXX.",-1)),D(o("div",ZN," Terms are in an invalid format ",512),[[K,e.anonymize?.terms?.errors?.format]])]),o("div",xN,[t[10]||(t[10]=o("label",{for:"expiration"},"Expiration strategy",-1)),D((l(),d("select",eD,[...t[9]||(t[9]=[o("option",{value:"never",selected:""},"Never expire",-1),o("option",{value:"redirect"}," Redirect to GitHub when expired ",-1),o("option",{value:"remove"},"Remove when expired",-1)])])),[[r,{state:e.viewState,set:i=>{e.options.expirationMode=i},value:e.options?.expirationMode,form:"anonymizeForm",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},"Define the expiration strategy for the anonymized repository.",-1))]),D(o("div",tD,[t[12]||(t[12]=o("label",{for:"expirationDate"},"Expiration date of the anonymized repository",-1)),D(o("input",oD,null,512),[[r,{state:e.viewState,set:i=>{e.options.expirationDate=i},value:e.options?.expirationDate,form:"anonymizeForm",options:{}}]]),D(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the repository will be removed and the visitor will not be able to see the content of the repository.",513),[[K,e.options?.expirationMode=="remove"]]),D(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the visitors of the anonymized repository will be redirected to "+c(e.pullRequestUrl)+".",513),[[K,e.options?.expirationMode=="redirect"]])],512),[[K,e.options?.expirationMode!="never"]]),o("div",nD,[o("div",sD,[t[25]||(t[25]=pe('

',1)),o("div",rD,[o("div",iD,[o("div",aD,[o("div",lD,[D(o("input",dD,null,512),[[r,{state:e.viewState,set:i=>{e.options.link=i},value:e.options?.link,form:"anonymizeForm",options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Keep or remove all the links.",-1))]),o("div",uD,[D(o("input",cD,null,512),[[r,{state:e.viewState,set:i=>{e.options.image=i},value:e.options?.image,form:"anonymizeForm",options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"Images are not anonymized",-1))]),o("div",pD,[D(o("input",fD,null,512),[[r,{state:e.viewState,set:i=>{e.options.date=i},value:e.options?.date,form:"anonymizeForm",options:{}}]]),t[17]||(t[17]=o("label",{class:"form-check-label",for:"date"},"Display dates",-1)),t[18]||(t[18]=o("small",{class:"form-text text-muted"},"Display the date of the Pull Request and the date of the comments.",-1))]),o("div",mD,[D(o("input",hD,null,512),[[r,{state:e.viewState,set:i=>{e.options.username=i},value:e.options?.username,form:"anonymizeForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"username"},"Display username",-1))]),o("div",vD,[D(o("input",yD,null,512),[[r,{state:e.viewState,set:i=>{e.options.comments=i},value:e.options?.comments,form:"anonymizeForm",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"comments"},"Display comments",-1))]),o("div",gD,[D(o("input",bD,null,512),[[r,{state:e.viewState,set:i=>{e.options.diff=i},value:e.options?.diff,form:"anonymizeForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"diff"},"Display diff",-1))]),o("div",wD,[D(o("input",kD,null,512),[[r,{state:e.viewState,set:i=>{e.options.origin=i},value:e.options?.origin,form:"anonymizeForm",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"origin"},"Display the project name",-1))]),o("div",ED,[D(o("input",CD,null,512),[[r,{state:e.viewState,set:i=>{e.options.title=i},value:e.options?.title,form:"anonymizeForm",options:{}}]]),t[23]||(t[23]=o("label",{class:"form-check-label",for:"title"},"Display the PR title",-1))]),o("div",_D,[D(o("input",SD,null,512),[[r,{state:e.viewState,set:i=>{e.options.body=i},value:e.options?.body,form:"anonymizeForm",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"body"},"Display the PR body and comment bodies",-1))])])])])])])],512),[[K,e.pullRequestUrl]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,ND)):p("v-if",!0),D(o("div",DD,[e.isUpdate?p("v-if",!0):(l(),d("button",{key:0,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[0]||(t[0]=de(i=>e.submitForm(i,()=>{e.anonymizePullRequest(i)}),["prevent"]))},[...t[28]||(t[28]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize ",-1)])])),e.isUpdate?(l(),d("button",{key:1,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[1]||(t[1]=de(i=>e.submitForm(i,()=>{e.updatePullRequest(i)}),["prevent"]))},[...t[29]||(t[29]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update ",-1)])])):p("v-if",!0)],512),[[K,e.pullRequestUrl]])],2)),[[s,e.viewState]])],2)]),e.details?(l(),d("div",RD,[o("div",TD,[o("h2",AD,[e.options?.title?(l(),d("span",OD,c(e.anonymize(e.details?.pullRequest?.title)),1)):p("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,ID)):p("v-if",!0)]),e.options?.origin?(l(),d("small",PD,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):p("v-if",!0),e.options?.body?(l(),d("div",VD,[Ce(n,{content:e.anonymize(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):p("v-if",!0),o("ul",qD,[e.options?.diff?(l(),d("li",MD,[...t[31]||(t[31]=[o("button",{class:"nav-link active",id:"pills-diff-tab","data-toggle":"pill","data-target":"#pills-diff",type:"button",role:"tab","aria-controls":"pills-diff","aria-selected":"true"}," Diff ",-1)])])):p("v-if",!0),e.options?.comments?(l(),d("li",$D,[o("button",{class:A(["nav-link",{active:!e.options?.diff}]),id:"pills-comments-tab","data-toggle":"pill","data-target":"#pills-comments",type:"button",role:"tab","aria-controls":"pills-comments","aria-selected":"false"},[o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comment",one:"One Comment",other:"{} Comments"}))},null,8,LD)],2)])):p("v-if",!0)]),o("div",UD,[o("div",FD,[e.options?.diff?(l(),d("div",zD,[o("pre",HD,[o("code",{innerHTML:e.sanitize(e.fmt?.diff(e.anonymize(e.details?.pullRequest?.diff)))},null,8,BD)])])):p("v-if",!0)]),o("div",{class:A(["tab-pane",{"show active":!e.options?.diff}]),id:"pills-comments",role:"tabpanel","aria-labelledby":"pills-comments-tab"},[e.options?.comments?(l(),d("ul",jD,[(l(!0),d(X,null,ae(e.details?.pullRequest?.comments,(i,a)=>(l(),d("li",GD,[o("div",WD,[e.options?.username?(l(),d("h5",KD," @"+c(e.anonymize(i?.author)),1)):p("v-if",!0),e.options?.date?(l(),d("small",{key:1,textContent:c(e.fmt?.date(i?.updatedDate))},null,8,YD)):p("v-if",!0)]),o("p",JD,[e.options?.body?(l(),Lt(n,{key:0,class:"pr-comment-body",content:e.anonymize(i?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])):p("v-if",!0)])]))),256))])):p("v-if",!0)],2)])])):p("v-if",!0)])])}var QD={class:"container paper-page claim-page"},XD={class:"paper-settings-main claim-form"},ZD={class:"form-group"},xD={class:"invalid-feedback"},eR={class:"form-group"};function Ol(e,t){let n=be("field"),r=be("form");return l(),d("div",QD,[t[6]||(t[6]=pe('
My work \xA0/\xA0 Claim

Claim an anonymization

Take ownership of an existing anonymized repository so it appears on your dashboard.

',3)),o("div",XD,[t[5]||(t[5]=o("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),D((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=de(s=>e.submitForm(s,()=>{e.claim()}),["prevent"]))},[o("div",ZD,[t[1]||(t[1]=o("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",placeholder:"https://github.com/owner/repository",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoUrl=s},value:e.repoUrl,form:"claimForm",options:{}}]]),D(o("div",xD," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[K,e.claimForm?.repoUrl?.errors?.not_found]])]),o("div",eR,[t[2]||(t[2]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",placeholder:"e.g. my-paper-7F2A","aria-describedby":"idHelp",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoId=s},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=o("small",{id:"idHelp",class:"form-text text-muted"},[b("The ID is the last part of the anonymized URL: "),o("code",null,"anonymous.4open.science/r/"),b(".")],-1))]),t[4]||(t[4]=o("button",{id:"submit",type:"submit",class:"btn btn-ink"}," Claim anonymization ",-1))],32)),[[r,e.viewState]])])])}var tR={class:"container page paper-page conference-page"},oR={class:"paper-crumbs"},nR={class:"here"},sR={class:"d-flex align-items-end flex-wrap",style:{gap:"12px","justify-content":"space-between"}},rR=["textContent"],iR={key:0,class:"paper-page-lede"},aR=["textContent","href"],lR={class:"d-flex align-items-center flex-wrap",style:{gap:"10px"}},dR=["textContent"],uR=["href"],cR={class:"paper-meta-rule"},pR=["textContent"],fR=["textContent"],mR={key:0},hR={class:"search-wrap"},vR={type:"search",id:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search by ID or source repository\u2026",autocomplete:"off"},yR={class:"dashboard-filter-controls"},gR={class:"dropdown"},bR={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},wR={class:"filter-btn-value"},kR={class:"dropdown-menu","aria-labelledby":"dropdownSort"},ER={class:"form-check dropdown-item"},CR={class:"form-check-input",type:"radio",name:"sort",id:"anonymizeDate",value:"-anonymizeDate"},_R={class:"form-check dropdown-item"},SR={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"repoId"},NR={class:"form-check dropdown-item"},DR={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},RR={class:"form-check dropdown-item"},TR={class:"form-check-input",type:"radio",name:"sort",id:"sortViews",value:"-pageView"},AR={class:"dropdown"},OR={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},IR={key:0,class:"filter-btn-value"},PR={key:1,class:"filter-btn-value"},VR={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},qR={class:"form-check dropdown-item"},MR=["id"],$R=["for"],LR={class:"dashboard-meta"},UR={class:"dashboard-count"},FR={key:0},zR={key:0},HR={key:1},BR={key:1},jR={key:0,class:"filter-chip"},GR=["onClick","aria-label"],WR={class:"paper-table paper-table-repos w-100",role:"table","aria-label":"Repositories"},KR={class:"cell-anon",role:"cell"},YR={class:"anon-text"},JR=["textContent","href"],QR={class:"anon-sub"},XR={class:"anon-source"},ZR=["textContent","href"],xR={key:0},eT=["textContent","href"],tT={key:1},oT=["href"],nT={class:"cell-status",role:"cell"},sT={class:"status-line"},rT=["textContent"],iT={key:0,class:"status-sub"},aT={class:"cell-views num",role:"cell"},lT=["textContent"],dT={class:"cell-expires",role:"cell"},uT={key:0,class:"expires-never"},cT=["textContent"],pT={key:2,class:"expires-past"},fT={key:0},mT={key:3,class:"empty-dash","aria-label":"Not applicable"},hT={class:"cell-actions",role:"cell"},vT={class:"dropdown"},yT=["aria-label"],gT={class:"dropdown-menu dropdown-menu-right"},bT=["href"],wT=["href"],kT={key:0,class:"paper-table-empty"},ET={key:0},CT={key:1},_T={key:2,class:"paper-table-empty-actions"};function Il(e,t){let n=be("field"),r=be("form");return l(),d("div",tR,[o("div",null,[o("div",oR,[t[2]||(t[2]=o("a",{href:"/dashboard"},"My work",-1)),t[3]||(t[3]=b(" \xA0/\xA0 ",-1)),t[4]||(t[4]=o("a",{href:"/conferences"},"Conferences",-1)),t[5]||(t[5]=b(" \xA0/\xA0 ",-1)),o("span",nR,c(e.conference?.conferenceID),1)]),o("div",sR,[o("div",null,[o("h1",{class:"paper-page-title",textContent:c(e.conference?.name)},null,8,rR),e.conference?.url?(l(),d("p",iR,[o("a",{target:"_blank",rel:"noopener",textContent:c(e.conference?.url),href:e.safeUrl(e.conference?.url)},null,8,aR)])):p("v-if",!0)]),o("div",lR,[o("span",{class:A(["status-pill",{"status-pill-ready":e.conference?.status=="ready","status-pill-removed":e.conference?.status=="removed"||e.conference?.status=="expired"}])},[o("span",{class:A(["status-dot","status-"+e.conference?.status]),"aria-hidden":"true"},null,2),o("span",{textContent:c(e.fmt?.statusLabel(e.conference?.status))},null,8,dR)],2),o("a",{class:"btn btn-outline-ink",href:e.safeUrl("/conference/"+e.conference?.conferenceID+"/edit")},[...t[6]||(t[6]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit conference",-1)])],8,uR)])]),o("div",cR,[o("span",null,[t[7]||(t[7]=b("ID ",-1)),o("b",{class:"commit-hash",textContent:c(e.conference?.conferenceID)},null,8,pR)]),o("span",null,[t[8]||(t[8]=b("Review window ",-1)),o("b",null,c(e.fmt?.date(e.conference?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(e.conference?.endDate,"mediumDate")),1)]),o("span",null,[t[9]||(t[9]=b("Repositories ",-1)),o("b",null,c(e.fmt?.number(e.conference?.repositories?.length)),1)]),o("span",null,[t[10]||(t[10]=b("Plan ",-1)),o("b",{textContent:c(e.conference?.plan?.name||e.conference?.plan?.planID||"Free")},null,8,fR)]),e.conference?.price?(l(),d("span",mR,[t[11]||(t[11]=b("Cost so far ",-1)),o("b",null,c(e.fmt?.number(e.conference?.price,2))+" \u20AC",1)])):p("v-if",!0)]),t[32]||(t[32]=o("div",{class:"paper-section-eyebrow"},"Repositories",-1)),D((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter repositories","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=de(s=>e.submitForm(s,()=>{s.preventDefault()}),["prevent"]))},[o("div",hR,[D(o("input",vR,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",yR,[o("div",gR,[o("button",bR,[t[12]||(t[12]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",wR,c({"-anonymizeDate":"Anonymize date",repoId:"ID","-status":"Status","-pageView":"Views"}[e.orderBy]||"Custom"),1)]),o("div",kR,[t[17]||(t[17]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",ER,[D(o("input",CR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"anonymizeDate"},"Anonymize date",-1))]),o("div",_R,[D(o("input",SR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[14]||(t[14]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",NR,[D(o("input",DR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",RR,[D(o("input",TR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[16]||(t[16]=o("label",{class:"form-check-label",for:"sortViews"},"Views",-1))])])]),o("div",AR,[o("button",OR,[t[18]||(t[18]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",IR,"All")):p("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?p("v-if",!0):(l(),d("span",PR,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",VR,[t[19]||(t[19]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(X,null,ae(e.statusLabels,(s,i,a)=>(l(),d("div",qR,[D(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,MR),[[n,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(s),9,$R)]))),256))])])])],32)),[[r,e.viewState]]),o("div",LR,[o("span",UR,[e.filteredRepositories?.length===e.conference?.repositories?.length?(l(),d("span",FR,[b(c(e.fmt?.number(e.conference?.repositories?.length))+" repositor",1),e.conference?.repositories?.length===1?(l(),d("span",zR,"y")):p("v-if",!0),e.conference?.repositories?.length!==1?(l(),d("span",HR,"ies")):p("v-if",!0)])):p("v-if",!0),e.filteredRepositories?.length!==e.conference?.repositories?.length?(l(),d("span",BR,c(e.fmt?.number(e.filteredRepositories?.length))+" of "+c(e.fmt?.number(e.conference?.repositories?.length))+" shown",1)):p("v-if",!0)]),(l(!0),d(X,null,ae(e.filters?.status,(s,i,a)=>(l(),d(X,null,[s===!1?(l(),d("span",jR,[b(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,GR)])):p("v-if",!0)],64))),256))]),o("div",WR,[t[31]||(t[31]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Repository"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Views"),o("div",{role:"columnheader"},"Expires"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(X,null,ae(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error"}]),role:"row",key:s?.repoId},[o("div",KR,[t[22]||(t[22]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",YR,[o("a",{class:"repo-name",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId+"/")},null,8,JR),o("div",QR,[o("span",XR,[o("a",{target:"_blank",rel:"noopener",textContent:c(s?.source?.fullName),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/")},null,8,ZR),s?.options?.update&&s?.source?.branch?(l(),d("span",xR,[t[20]||(t[20]=b(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,eT)])):p("v-if",!0),s?.source?.commit?(l(),d("span",tT,[t[21]||(t[21]=b(" \xB7 ",-1)),o("a",{class:"commit-hash",target:"_blank",rel:"noopener",href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},"@"+c(s?.source?.commit?.substring(0,8)),9,oT)])):p("v-if",!0)])])])]),o("div",nT,[o("div",sT,[o("span",{class:A(["status-dot","status-"+(s?.status=="error"?"error":s?.status=="ready"?"ready":s?.status=="expired"||s?.status=="removed"?s?.status:"progress")]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(s?.status))},null,8,rT)]),s?.anonymizeDate?(l(),d("div",iT,"anonymized "+c(e.fmt?.humanTime(s?.anonymizeDate)),1)):p("v-if",!0)]),o("div",aT,[t[23]||(t[23]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[24]||(t[24]=b()),o("span",{textContent:c(e.fmt?.number(s?.pageView))},null,8,lT)]),o("div",dT,[t[26]||(t[26]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),s?.status=="ready"&&(s?.options?.expirationMode==="never"||!s?.options?.expirationDate)?(l(),d("span",uT,"Never")):p("v-if",!0),s?.status=="ready"&&s?.options?.expirationMode!=="never"&&s?.options?.expirationDate?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(s?.options?.expirationDate))},null,8,cT)):p("v-if",!0),s?.status=="expired"?(l(),d("span",pT,[t[25]||(t[25]=b("Expired",-1)),s?.options?.expirationDate?(l(),d("span",fT,c(e.fmt?.humanTime(s?.options?.expirationDate)),1)):p("v-if",!0)])):p("v-if",!0),s?.status!="ready"&&s?.status!="expired"?(l(),d("span",mT,"\u2014")):p("v-if",!0)]),o("div",hT,[o("div",vT,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions for "+s?.repoId},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,yT),o("div",gT,[o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View ",-1)])],8,bT),o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,wT)])])])],2))),128)),e.filteredRepositories?.length==0?(l(),d("div",kT,[t[30]||(t[30]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conference?.repositories?.length?p("v-if",!0):(l(),d("span",ET,"No repository has been submitted to this conference yet.")),e.conference?.repositories?.length?(l(),d("span",CT,"Nothing matches the current filters.")):p("v-if",!0),e.conference?.repositories?.length?(l(),d("div",_T,[o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=s=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")])):p("v-if",!0)])):p("v-if",!0)])])])}var ST={class:"container page paper-page conferences-page"},NT={class:"row"},DT={class:"w-100"},RT={class:"search-wrap"},TT={type:"search",id:"search",class:"form-control","aria-label":"Search conferences",placeholder:"Search by name or ID\u2026",autocomplete:"off"},AT={class:"dashboard-filter-controls"},OT={class:"dropdown"},IT={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},PT={class:"filter-btn-value"},VT={class:"dropdown-menu","aria-labelledby":"dropdownSort"},qT={class:"form-check dropdown-item"},MT={class:"form-check-input",type:"radio",name:"sort",id:"sortName",value:"name"},$T={class:"form-check dropdown-item"},LT={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"conferenceID"},UT={class:"form-check dropdown-item"},FT={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},zT={class:"dropdown"},HT={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},BT={key:0,class:"filter-btn-value"},jT={key:1,class:"filter-btn-value"},GT={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},WT={class:"form-check dropdown-item"},KT=["id"],YT=["for"],JT={class:"dashboard-meta"},QT={class:"dashboard-count"},XT={key:0},ZT={key:0},xT={key:1},eA={key:0,class:"filter-chip"},tA=["onClick","aria-label"],oA={key:0,class:"conference-feedback",role:"alert"},nA={key:1,class:"conference-feedback",role:"status"},sA={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},rA={class:"cell-anon",role:"cell"},iA={class:"anon-text"},aA=["textContent","href"],lA={class:"anon-sub"},dA={class:"anon-source"},uA=["textContent"],cA={key:0},pA=["textContent","href"],fA={class:"cell-status",role:"cell"},mA={class:"status-line"},hA=["textContent"],vA={class:"cell-views num",role:"cell"},yA=["textContent"],gA={class:"cell-expires",role:"cell"},bA={key:0},wA={key:1,class:"empty-dash","aria-label":"No review window"},kA={class:"cell-actions",role:"cell"},EA={class:"dropdown"},CA=["disabled","aria-label"],_A={class:"dropdown-menu dropdown-menu-right"},SA=["href"],NA=["href"],DA={key:0},RA=["onClick"],TA={key:0,class:"paper-table-empty"},AA={key:0},OA={key:1},IA={class:"paper-table-empty-actions"},PA={key:1,href:"/conference/new",class:"btn btn-ink"};function Pl(e,t){let n=be("field"),r=be("form");return l(),d("div",ST,[o("div",NT,[o("div",DT,[t[10]||(t[10]=pe('
My work \xA0/\xA0 Conferences

Your conferences

Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.

New conference
',2)),D((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter conferences","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=de(s=>e.submitForm(s,()=>{s.preventDefault()}),["prevent"]))},[o("div",RT,[D(o("input",TT,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",AT,[o("div",OT,[o("button",IT,[t[3]||(t[3]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",PT,c({name:"Name",conferenceID:"ID","-status":"Status"}[e.orderBy]||"Custom"),1)]),o("div",VT,[t[7]||(t[7]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",qT,[D(o("input",MT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortName"},"Name",-1))]),o("div",$T,[D(o("input",LT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[5]||(t[5]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",UT,[D(o("input",FT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[6]||(t[6]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))])])]),o("div",zT,[o("button",HT,[t[8]||(t[8]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",BT,"All")):p("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?p("v-if",!0):(l(),d("span",jT,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",GT,[t[9]||(t[9]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(X,null,ae(e.statusLabels,(s,i,a)=>(l(),d("div",WT,[D(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,KT),[[n,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(s),9,YT)]))),256))])])])],32)),[[r,e.viewState]]),o("div",JT,[o("span",QT,[e.filteredConferences?.length===e.conferences?.length?(l(),d("span",XT,[b(c(e.fmt?.number(e.conferences?.length))+" conference",1),e.conferences?.length!==1?(l(),d("span",ZT,"s")):p("v-if",!0)])):p("v-if",!0),e.filteredConferences?.length!==e.conferences?.length?(l(),d("span",xT,c(e.fmt?.number(e.filteredConferences?.length))+" of "+c(e.fmt?.number(e.conferences?.length))+" shown",1)):p("v-if",!0)]),(l(!0),d(X,null,ae(e.filters?.status,(s,i,a)=>(l(),d(X,null,[s===!1?(l(),d("span",eA,[b(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,tA)])):p("v-if",!0)],64))),256))])]),e.error?(l(),d("div",oA,[o("span",null,c(e.error),1),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=s=>e.loadConferences())},"Retry")])):p("v-if",!0),e.loading?(l(),d("div",nA,"Loading conferences\u2026")):p("v-if",!0),o("div",sA,[t[24]||(t[24]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Conference"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Repos"),o("div",{role:"columnheader"},"Review window"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(X,null,ae(e.filteredConferences,(s,i)=>(l(),d("div",{class:A(["paper-table-row row-clickable",{"repo-inactive":s?.status=="expired"||s?.status=="removed"}]),role:"row",key:s?.conferenceID},[o("div",rA,[t[13]||(t[13]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",iA,[o("a",{class:"repo-name",textContent:c(s?.name),href:e.safeUrl("/conference/"+s?.conferenceID)},null,8,aA),o("div",lA,[o("span",dA,[t[12]||(t[12]=b("ID ",-1)),o("span",{class:"commit-hash",textContent:c(s?.conferenceID)},null,8,uA),s?.url?(l(),d("span",cA,[t[11]||(t[11]=b(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(e.fmt?.limitTo(s?.url,60)),href:e.safeUrl(s?.url)},null,8,pA)])):p("v-if",!0)])])])]),o("div",fA,[o("div",mA,[o("span",{class:A(["status-dot","status-"+s?.status]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(s?.status))},null,8,hA)])]),o("div",vA,[t[14]||(t[14]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),t[15]||(t[15]=b()),o("span",{textContent:c(e.fmt?.number(s?.nbRepositories||0))},null,8,yA)]),o("div",gA,[t[16]||(t[16]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),s?.startDate?(l(),d("span",bA,c(e.fmt?.date(s?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(s?.endDate,"mediumDate")),1)):p("v-if",!0),s?.startDate?p("v-if",!0):(l(),d("span",wA,"\u2014"))]),o("div",kA,[o("div",EA,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:s?.removing,"aria-label":"Actions for "+s?.name},[...t[17]||(t[17]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,CA),o("div",_A,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/")},[...t[18]||(t[18]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View ",-1)])],8,SA),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/edit")},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,NA),s?.status!="removed"?(l(),d("div",DA,[t[21]||(t[21]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:a=>e.removeConference(s)},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove ",-1)])],8,RA)])):p("v-if",!0)])])])],2))),128)),!e.loading&&!e.error&&e.filteredConferences?.length==0?(l(),d("div",TA,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conferences?.length==0?(l(),d("span",AA,"You have not created a conference yet.")):p("v-if",!0),e.conferences?.length>0?(l(),d("span",OA,"Nothing matches the current filters.")):p("v-if",!0),o("div",IA,[e.conferences?.length>0?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[2]||(t[2]=s=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")):p("v-if",!0),e.conferences?.length==0?(l(),d("a",PA,[...t[22]||(t[22]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),b(" New conference",-1)])])):p("v-if",!0)])])):p("v-if",!0)])])])}var VA={class:"container page dashboard-page paper-page"},qA={class:"row"},MA={class:"w-100"},$A={class:"dashboard-heading"},LA=["open"],UA=["aria-expanded"],FA=["stroke-dasharray"],zA={key:1,d:"M7 12c0-4 4-4 5 0s5 4 5 0-4-4-5 0-5 4-5 0",class:"quota-ring-unlimited"},HA={key:0,class:"quota-summary-value"},BA={key:0},jA={class:"quota-panel",id:"dashboard-usage"},GA={class:"quota-panel-heading"},WA={key:1,class:"quota-loading",role:"status"},KA={class:"search-wrap"},YA={type:"search",id:"search",class:"form-control","aria-label":"Search anonymizations",placeholder:"Search projects, IDs, or conferences\u2026",autocomplete:"off"},JA=["aria-expanded"],QA={class:"btn-group",role:"group","aria-label":"Type"},XA=["aria-pressed"],ZA=["aria-pressed"],xA=["aria-pressed"],eO=["aria-pressed"],tO={class:"dropdown"},oO={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},nO={class:"filter-btn-value"},sO={class:"sr-only"},rO={class:"dropdown-menu","aria-labelledby":"dropdownSort"},iO={class:"form-check dropdown-item"},aO=["onClick","checked","id"],lO=["for"],dO={class:"dropdown"},uO={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},cO={key:0,class:"filter-btn-value"},pO={key:1,class:"filter-btn-value"},fO={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},mO={class:"form-check dropdown-item"},hO=["id"],vO=["for"],yO={key:0,class:"dashboard-meta"},gO={class:"dashboard-view-tabs",role:"group","aria-label":"Project view"},bO=["aria-pressed"],wO=["aria-pressed","aria-label"],kO={class:"dashboard-count"},EO={key:0},CO={key:0},_O={key:1},SO={class:"dashboard-active-filters"},NO=["onClick","aria-label","title"],DO=["aria-busy"],RO={class:"paper-table-head",role:"row"},TO=["aria-sort"],AO=["aria-sort"],OO=["aria-sort"],IO=["aria-sort"],PO={key:0,class:"paper-table-row paper-table-skeleton",role:"row","aria-hidden":"true"},VO=["onClick"],qO={class:"cell-anon",role:"cell"},MO=["aria-label","title"],$O={class:"project-type-svg","aria-hidden":"true"},LO=["href"],UO={class:"anon-text"},FO={class:"anon-title"},zO=["title","textContent","href"],HO=["textContent"],BO={key:2,class:"type-badge type-coauthor",title:"You are a co-author on this anonymization"},jO={class:"anon-sub"},GO=["title"],WO=["title"],KO=["title"],YO=["textContent"],JO={class:"dashboard-row-meta",role:"presentation"},QO={class:"cell-status",role:"cell"},XO={class:"status-line"},ZO=["textContent"],xO=["textContent","title"],e4=["title"],t4=["href"],o4=["onClick"],n4={key:4,class:"status-sub status-sub-date"},s4=["aria-label"],r4={class:"cell-expires",role:"cell"},i4={key:0,class:"expires-never"},a4=["textContent"],l4={key:2,class:"expires-past"},d4={key:3,class:"expires-past"},u4={key:4,class:"empty-dash","aria-label":"Not applicable"},c4={class:"cell-actions",role:"cell"},p4=["onClick","disabled","title","aria-label"],f4=["onClick","data-project-actions","aria-controls","aria-expanded"],m4={key:2,class:"dropdown"},h4=["data-project-actions","aria-label"],v4={class:"dropdown-menu dropdown-menu-right"},y4=["onClick","aria-controls","aria-expanded"],g4=["href"],b4=["href"],w4=["onClick","disabled"],k4=["href"],E4=["onClick"],C4=["onClick"],_4=["onClick"],S4={key:5},N4=["onClick"],D4={key:1,class:"project-details-row",role:"row"},R4=["id","onKeydown"],T4={class:"project-details-heading"},A4=["onClick"],O4={class:"project-details-list"},I4={key:0},P4={key:1},V4={key:0},q4={key:2},M4={key:0,class:"project-progress-help"},$4=["href"],L4=["onSubmit"],U4=["for"],F4=["id"],z4={class:"project-name-controls"},H4=["id","aria-describedby","disabled"],B4=["disabled"],j4={key:0,class:"project-name-error",role:"alert"},G4={key:1,role:"status"},W4={key:0,class:"paper-table-empty"},K4={key:0},Y4={key:1},J4={class:"paper-table-empty-actions"},Q4={key:1,href:"/anonymize",class:"btn btn-ink"},X4={key:0,class:"dashboard-pagination"},Z4={key:0,role:"alert"},x4=["disabled"];function Vl(e,t){let n=We("quota-usage"),r=be("field"),s=be("form");return l(),d("div",VA,[o("div",qA,[o("div",MA,[o("div",$A,[o("div",null,[t[27]||(t[27]=o("h1",{class:"paper-page-title"},"Projects",-1)),t[28]||(t[28]=o("p",{class:"paper-page-lede"},"Manage your anonymous links.",-1)),o("details",{class:"dashboard-quota",open:e.quotaExpanded,onToggle:t[1]||(t[1]=i=>e.quotaExpanded=i.target.open),onKeydown:t[2]||(t[2]=Ao(de(i=>e.closeQuota(),["prevent","stop"]),["esc"]))},[o("summary",{"aria-controls":"dashboard-usage","aria-expanded":e.quotaExpanded},[(l(),d("svg",{class:A(["quota-summary-ring",e.quota?"quota-"+e.quota.repository.level:""]),viewBox:"0 0 24 24","aria-hidden":"true"},[t[21]||(t[21]=o("circle",{class:"quota-ring-track",cx:"12",cy:"12",r:"9"},null,-1)),e.quota&&!e.quota.repository.unlimited?(l(),d("circle",{key:0,class:"quota-ring-fill",cx:"12",cy:"12",r:"9",pathLength:"100","stroke-dasharray":e.quota.repository.percent+" 100"},null,8,FA)):p("v-if",!0),e.quota?.repository.unlimited?(l(),d("path",zA)):p("v-if",!0)],2)),t[23]||(t[23]=o("span",{class:"quota-summary-label"},"Usage",-1)),e.quota?(l(),d("span",HA,[b(c(e.fmt.number(e.quota.repository.used)),1),e.quota.repository.unlimited?p("v-if",!0):(l(),d("span",BA," / "+c(e.fmt.number(e.quota.repository.total)),1)),t[22]||(t[22]=b(" repos",-1))])):p("v-if",!0),t[24]||(t[24]=o("svg",{class:"project-type-svg quota-summary-chevron","aria-hidden":"true"},[o("use",{href:"#project-icon-chevron"})],-1))],8,UA),o("div",jA,[o("div",GA,[t[26]||(t[26]=o("h2",null,"Account usage",-1)),o("button",{type:"button",class:"project-close","aria-label":"Close usage",onClick:t[0]||(t[0]=i=>e.closeQuota())},[...t[25]||(t[25]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),e.quota?(l(),Lt(n,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):(l(),d("p",WA,"Loading usage\u2026"))])],40,LA)]),t[29]||(t[29]=pe('',1))]),p(" Search + filters "),D((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter anonymizations","accept-charset":"UTF-8",onSubmit:t[9]||(t[9]=de(i=>e.submitForm(i,()=>{i.preventDefault()}),["prevent"]))},[o("div",KA,[D(o("input",YA,null,512),[[r,{state:e.viewState,set:i=>{e.search=i},value:e.search,form:null,options:{}}]])]),o("button",{class:"btn dashboard-filters-toggle",type:"button","aria-expanded":e.filtersExpanded,"aria-controls":"dashboard-filter-controls",onClick:t[3]||(t[3]=i=>e.filtersExpanded=!e.filtersExpanded)},[...t[30]||(t[30]=[b("Filters",-1),o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1)])],8,JA),o("div",{id:"dashboard-filter-controls",class:A(["dashboard-filter-controls",{expanded:e.filtersExpanded}])},[o("div",QA,[o("button",{type:"button",class:A(["btn",{"btn-primary":e.typeFilter==="all"}]),onClick:t[4]||(t[4]=i=>e.typeFilter="all"),"aria-pressed":e.typeFilter==="all"},"All",10,XA),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="repo"}]),title:"Repositories",onClick:t[5]||(t[5]=i=>e.typeFilter="repo"),"aria-pressed":e.typeFilter==="repo"},[...t[31]||(t[31]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("span",{class:"type-filter-label"},"Repos",-1)])],10,ZA),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="pr"}]),title:"Pull requests",onClick:t[6]||(t[6]=i=>e.typeFilter="pr"),"aria-pressed":e.typeFilter==="pr"},[...t[32]||(t[32]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-pr"})],-1),o("span",{class:"type-filter-label"},"PRs",-1)])],10,xA),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="gist"}]),title:"Gists",onClick:t[7]||(t[7]=i=>e.typeFilter="gist"),"aria-pressed":e.typeFilter==="gist"},[...t[33]||(t[33]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1),o("span",{class:"type-filter-label"},"Gists",-1)])],10,eO)]),o("div",{id:"dashboard-extra-filters",class:A(["dashboard-extra-filters",{expanded:e.filtersExpanded}])},[o("div",tO,[o("button",oO,[t[35]||(t[35]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",nO,c(e.sortLabel()),1),(l(),d("svg",{class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)),o("span",sO,c(e.sortDesc()?"descending":"ascending"),1)]),o("div",rO,[t[36]||(t[36]=o("h6",{class:"dropdown-header"},"Order by",-1)),(l(!0),d(X,null,ae(e.sortFields,(i,a,u)=>(l(),d("div",iO,[o("input",{class:"form-check-input",type:"radio",name:"sort",onClick:f=>e.setSort(a,i.defaultDesc),checked:e.isSortedBy(a),id:"sort-"+u},null,8,aO),o("label",{class:"form-check-label",for:"sort-"+u},c(i?.label),9,lO)]))),256)),t[37]||(t[37]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item",onClick:t[8]||(t[8]=i=>e.toggleSortDirection())},c(e.sortDesc()?"Switch to ascending":"Switch to descending"),1)])]),o("div",dO,[o("button",uO,[t[38]||(t[38]=o("span",{class:"filter-btn-label"},"Status",-1)),e.hasHiddenStatus()?p("v-if",!0):(l(),d("span",cO,"All")),e.hasHiddenStatus()?(l(),d("span",pO,c(e.hiddenStatusCount())+" hidden",1)):p("v-if",!0)]),o("div",fO,[t[39]||(t[39]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(X,null,ae(e.statusKeyLabels,(i,a,u)=>(l(),d("div",mO,[D(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+a},null,8,hO),[[r,{state:e.viewState,set:f=>{e.filters.status[a]=f},value:e.filters?.status[a],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+a},c(i),9,vO)]))),256))])])],2)],2)],32)),[[s,e.viewState]]),p(" Result count + active filter chips "),e.loading?p("v-if",!0):(l(),d("div",yO,[o("div",gO,[o("button",{type:"button","aria-pressed":e.projectView==="all",onClick:t[10]||(t[10]=i=>e.setProjectView("all")),"aria-label":"All projects"},[...t[40]||(t[40]=[o("span",{class:"dashboard-view-long"},"All projects",-1),o("span",{class:"dashboard-view-short","aria-hidden":"true"},"All",-1)])],8,bO),o("button",{type:"button","aria-pressed":e.projectView==="attention",onClick:t[11]||(t[11]=i=>e.setProjectView("attention")),"aria-label":"Needs attention "+e.attentionCount()},[t[41]||(t[41]=o("span",{class:"dashboard-attention-prefix"},"Needs ",-1)),t[42]||(t[42]=o("span",null,"attention",-1)),t[43]||(t[43]=b()),o("span",{class:A(["attention-count",{"has-attention":e.attentionCount()>0}])},c(e.attentionCount()),3)],8,wO)]),o("span",kO,[(e.dashboardTotals?.filtered??e.filteredItems?.length)===(e.dashboardTotals?.total??e.items?.length)?(l(),d("span",EO,[b(c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" project",1),(e.dashboardTotals?.total??e.items?.length)!==1?(l(),d("span",CO,"s")):p("v-if",!0)])):(l(),d("span",_O,c(e.fmt?.number(e.dashboardTotals?.filtered??e.filteredItems?.length))+" of "+c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" shown",1))]),o("div",SO,[(l(!0),d(X,null,ae(e.filters?.status,(i,a,u)=>(l(),d(X,null,[i===!1?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:f=>e.filters.status[a]=!0,"aria-label":"Show "+e.statusKeyLabels[a]+" again",title:"Show "+e.statusKeyLabels[a]+" again"},[b(c(e.statusKeyLabels[a])+" hidden",1),t[44]||(t[44]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))],8,NO)):p("v-if",!0)],64))),256)),e.typeFilter!=="all"?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:t[12]||(t[12]=i=>e.typeFilter="all"),"aria-label":"Show all project types"},[b(c(e.typeFilter==="repo"?"Repositories":e.typeFilter==="pr"?"Pull requests":"Gists"),1),t[45]||(t[45]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))])):p("v-if",!0),e.showClearFilters()?(l(),d("button",{key:1,type:"button",class:"btn-link-inline",onClick:t[13]||(t[13]=i=>e.clearFilters())},"Clear filters")):p("v-if",!0)])]))]),p(" Table "),o("div",{class:"paper-table paper-table-dashboard",role:"table","aria-label":"Anonymizations","aria-busy":e.loading},[o("div",RO,[o("div",{role:"columnheader","aria-sort":e.isSortedBy("_label")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("_label")}]),onClick:t[14]||(t[14]=i=>e.setSort("_label"))},[t[47]||(t[47]=b(" Project ",-1)),e.isSortedBy("_label")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[46]||(t[46]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,TO),o("div",{role:"columnheader","aria-sort":e.isSortedBy("status")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("status")}]),onClick:t[15]||(t[15]=i=>e.setSort("status"))},[t[49]||(t[49]=b(" Status ",-1)),e.isSortedBy("status")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[48]||(t[48]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,AO),o("div",{role:"columnheader",class:"num","aria-sort":e.isSortedBy("pageView")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("pageView")}]),onClick:t[16]||(t[16]=i=>e.setSort("pageView"))},[t[51]||(t[51]=b(" Views ",-1)),e.isSortedBy("pageView")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[50]||(t[50]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,OO),o("div",{role:"columnheader","aria-sort":e.isSortedBy("options.expirationDate")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("options.expirationDate")}]),onClick:t[17]||(t[17]=i=>e.setSort("options.expirationDate"))},[t[53]||(t[53]=b(" Expires ",-1)),e.isSortedBy("options.expirationDate")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[52]||(t[52]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):p("v-if",!0)],2)],8,IO),t[54]||(t[54]=o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")],-1))]),p(" Loading skeleton: keeps the layout stable while the three lists load "),(l(),d(X,null,ae([1,2,3,4],(i,a)=>(l(),d(X,null,[e.loading?(l(),d("div",PO,[...t[55]||(t[55]=[o("div",{class:"cell-anon",role:"cell"},[o("span",{class:"skeleton skeleton-badge"}),o("div",{class:"anon-text"},[o("span",{class:"skeleton skeleton-line",style:{width:"38%"}}),o("span",{class:"skeleton skeleton-line skeleton-line-sm",style:{width:"56%"}})])],-1),o("div",{class:"cell-status",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"60%"}})],-1),o("div",{class:"cell-views num",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}})],-1),o("div",{class:"cell-expires",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"55%"}})],-1),o("div",{class:"cell-actions",role:"cell"},null,-1)])])):p("v-if",!0)],64))),64)),(l(!0),d(X,null,ae(e.filteredItems,(i,a)=>(l(),d(X,{key:i?._type+":"+(i?._id||a)},[e.loading?p("v-if",!0):(l(),d("div",{key:0,class:A(["paper-table-row",{"repo-inactive":i?._statusKey=="expired"||i?._statusKey=="removed","repo-error":i?.status=="error","row-clickable":!!i?._viewUrl}]),role:"row",onClick:u=>e.openItem(i,u)},[o("div",qO,[o("span",{class:"project-type-icon",role:"img","aria-label":i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist",title:i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist"},[(l(),d("svg",$O,[o("use",{href:"#project-type-"+i._type},null,8,LO)]))],8,MO),o("div",UO,[o("div",FO,[i?._viewUrl?(l(),d("a",{key:0,class:"repo-name",title:i._label,textContent:c(i?._label),href:e.safeUrl(i?._viewUrl)},null,8,zO)):p("v-if",!0),i?._viewUrl?p("v-if",!0):(l(),d("span",{key:1,class:"repo-name repo-name-static",textContent:c(i?._label)},null,8,HO)),i?.role==="coauthor"?(l(),d("span",BO,"Co-author")):p("v-if",!0)]),o("div",jO,[i?._id?(l(),d("code",{key:0,class:"anonymous-id",title:i._id},c(i._id),9,GO)):p("v-if",!0),i?._type==="repo"&&i?.source?.commit?(l(),d("span",{key:1,class:"commit-hash",title:i.source.commit},c(i.source.commit.substring(0,8)),9,WO)):p("v-if",!0),i?.conference?(l(),d("span",{key:2,class:"cell-conf conf-tag",title:i?.conference},[t[56]||(t[56]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),t[57]||(t[57]=b()),o("span",{textContent:c(i?.conference)},null,8,YO)],8,KO)):p("v-if",!0)])])]),o("div",JO,[o("div",QO,[o("div",XO,[o("span",{class:A(["status-dot","status-"+i?._statusKey]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(i?.status))},null,8,ZO)]),i?.status=="error"&&i?.statusMessage?(l(),d("div",{key:0,class:"status-sub status-sub-error",textContent:c(e.fmt?.statusMsg(i?.statusMessage)),title:i?.statusMessage},null,8,xO)):p("v-if",!0),i?._stale?(l(),d("div",{key:1,class:"status-sub status-sub-warn",title:"Last activity "+e.fmt?.humanTime(i?.anonymizeDate||i?.lastView)}," Last activity "+c(e.fmt?.humanTime(i?.anonymizeDate||i?.lastView))+" \xB7 may be stuck ",9,e4)):p("v-if",!0),i.status==="error"&&i._editUrl?(l(),d("a",{key:2,class:"project-attention-action",href:e.safeUrl(i._editUrl)},"Fix source",8,t4)):p("v-if",!0),i._stale||i._broken?(l(),d("button",{key:3,type:"button",class:"project-attention-action",onClick:de(u=>e.showProjectDetails(i),["stop"])},c(i._broken?"Review details":"Check progress"),9,o4)):p("v-if",!0),i?.status!="error"&&!i?._stale&&i?.anonymizeDate?(l(),d("div",n4," anonymized "+c(e.fmt?.humanTime(i?.anonymizeDate)),1)):p("v-if",!0)]),o("div",{class:"cell-views num",role:"cell","aria-label":e.fmt.number(i.pageView)+" views"},[t[58]||(t[58]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),o("span",null,c(e.fmt.number(i.pageView)),1)],8,s4),o("div",r4,[t[59]||(t[59]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),i?._expiry?.kind==="never"?(l(),d("span",i4,"Never")):p("v-if",!0),i?._expiry?.kind==="date"?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(i?._expiry?.date))},null,8,a4)):p("v-if",!0),i?._expiry?.kind==="expired"&&i?._expiry?.date?(l(),d("span",l4,"Expired "+c(e.fmt?.humanTime(i?._expiry?.date)),1)):p("v-if",!0),i?._expiry?.kind==="expired"&&!i?._expiry?.date?(l(),d("span",d4,"Expired")):p("v-if",!0),i?._expiry?.kind==="none"?(l(),d("span",u4,"\u2014")):p("v-if",!0)])]),o("div",c4,[i._viewUrl?(l(),d("button",{key:0,type:"button",class:"copy-link-inline",onClick:de(u=>e.copyLink(i),["stop"]),disabled:!!e.copyingId,title:"Copy anonymous link for "+i._label,"aria-label":"Copy anonymous link for "+i._label},[...t[60]||(t[60]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-copy"})],-1)])],8,p4)):p("v-if",!0),i._broken?(l(),d("button",{key:1,type:"button",class:"project-details-button",onClick:de(u=>e.showProjectDetails(i),["stop"]),"data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Details",8,f4)):p("v-if",!0),i?._broken?p("v-if",!0):(l(),d("div",m4,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-label":"Actions for "+i?._name},[...t[61]||(t[61]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,h4),o("div",v4,[o("button",{type:"button",class:"dropdown-item",onClick:u=>e.showProjectDetails(i),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Project details & name",8,y4),o("a",{class:"dropdown-item",href:e.safeUrl(i?._viewUrl)}," View ",8,g4),i?._type==="repo"&&i?.options?.page&&i?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+i?.repoId+"/")}," View page ",8,b4)):p("v-if",!0),i?._viewUrl?(l(),d("button",{key:1,type:"button",class:"dropdown-item",onClick:u=>e.copyLink(i),disabled:!!e.copyingId}," Copy anonymous link ",8,w4)):p("v-if",!0),o("a",{class:"dropdown-item",href:e.safeUrl(i?._editUrl)}," Edit ",8,k4),i?.status=="ready"||i?.status=="error"?(l(),d("button",{key:2,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Force update ",8,E4)):p("v-if",!0),i?.status=="removed"?(l(),d("button",{key:3,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Enable ",8,C4)):p("v-if",!0),i?.status=="expired"?(l(),d("button",{key:4,type:"button",class:"dropdown-item",onClick:u=>e.extendItem(i)}," Extend 6 months ",8,_4)):p("v-if",!0),(i?.status=="ready"||i?.status=="expired"||i?.status=="error")&&i?.role!=="coauthor"?(l(),d("div",S4,[t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:u=>e.removeItem(i)}," Remove ",8,N4)])):p("v-if",!0)])]))])],10,VO)),!e.loading&&e.selectedProject===i?(l(),d("div",D4,[o("div",{class:"project-details",role:"cell","aria-colspan":"5",id:e.projectDetailsId(i),tabindex:"-1",onKeydown:Ao(de(u=>e.closeProjectDetails(i),["stop"]),["esc"])},[o("div",T4,[t[64]||(t[64]=o("h2",null,"Project details",-1)),o("button",{type:"button",class:"project-close",onClick:u=>e.closeProjectDetails(i),"aria-label":"Close project details"},[...t[63]||(t[63]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,A4)]),o("dl",O4,[o("div",null,[t[65]||(t[65]=o("dt",null,"Source",-1)),o("dd",null,c(i._source||"Not available"),1)]),o("div",null,[t[66]||(t[66]=o("dt",null,"Anonymous ID",-1)),o("dd",null,[o("code",null,c(i._id||"Missing identifier"),1)])]),i.source?.commit?(l(),d("div",I4,[t[67]||(t[67]=o("dt",null,"Commit",-1)),o("dd",null,[o("code",null,c(i.source.commit),1)])])):p("v-if",!0),i.conference?(l(),d("div",P4,[t[68]||(t[68]=o("dt",null,"Conference",-1)),o("dd",null,c(i.conference),1)])):p("v-if",!0),o("div",null,[t[69]||(t[69]=o("dt",null,"Status",-1)),o("dd",null,[b(c(e.fmt.statusLabel(i.status)),1),i.statusMessage?(l(),d("span",V4," \xB7 "+c(e.fmt.statusMsg(i.statusMessage)),1)):p("v-if",!0)])]),i.anonymizeDate?(l(),d("div",q4,[t[70]||(t[70]=o("dt",null,"Last anonymized",-1)),o("dd",null,c(e.fmt.humanTime(i.anonymizeDate)),1)])):p("v-if",!0)]),i._stale?(l(),d("p",M4,"This download has not progressed recently. Check the source access and selected branch before retrying.")):p("v-if",!0),i._editUrl?(l(),d("a",{key:1,class:"project-attention-action",href:e.safeUrl(i._editUrl)},c(e.needsAttention(i)?"Check source settings":"Edit anonymization settings"),9,$4)):p("v-if",!0),i._id?(l(),d("form",{key:2,class:"project-name-form",onSubmit:de(u=>e.saveProjectName(i),["prevent"])},[o("label",{for:"project-name-"+i._type+"-"+i._id},"Project name",8,U4),o("p",{id:"project-name-help-"+i._type+"-"+i._id},"Only you see this name. Leave it blank to use the default.",8,F4),o("div",z4,[D(o("input",{class:"form-control",type:"text",id:"project-name-"+i._type+"-"+i._id,"aria-describedby":"project-name-help-"+i._type+"-"+i._id,maxlength:"100","onUpdate:modelValue":t[18]||(t[18]=u=>e.projectName=u),disabled:e.nameSaving},null,8,H4),[[to,e.projectName]]),o("button",{class:"btn btn-ink",type:"submit",disabled:e.nameSaving},c(e.nameSaving?"Saving\u2026":"Save name"),9,B4)]),e.nameError?(l(),d("p",j4,c(e.nameError),1)):p("v-if",!0),e.nameMessage?(l(),d("p",G4,c(e.nameMessage),1)):p("v-if",!0)],40,L4)):p("v-if",!0)],40,R4)])):p("v-if",!0)],64))),128)),!e.loading&&e.filteredItems?.length==0?(l(),d("div",W4,[t[72]||(t[72]=o("svg",{class:"project-type-svg project-empty-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.hasProjects()?p("v-if",!0):(l(),d("span",K4,"You have no anonymizations yet.")),e.hasProjects()?(l(),d("span",Y4,"Nothing matches the current filters.")):p("v-if",!0),o("div",J4,[e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[19]||(t[19]=i=>e.clearFilters())},"Clear filters")):p("v-if",!0),e.hasProjects()?p("v-if",!0):(l(),d("a",Q4,[...t[71]||(t[71]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),b(" New anonymization",-1)])]))])])):p("v-if",!0)],8,DO)]),e.dashboardCursor||e.dashboardError?(l(),d("div",X4,[e.dashboardError?(l(),d("p",Z4,c(e.dashboardError),1)):p("v-if",!0),e.dashboardCursor?(l(),d("button",{key:1,type:"button",class:"btn",onClick:t[20]||(t[20]=i=>e.loadMoreProjects()),disabled:e.loadingMore},c(e.loadingMore?"Loading\u2026":"Load more projects"),9,x4)):p("v-if",!0)])):p("v-if",!0)])}var eI={class:"explorer-page"},tI=["aria-label"],oI={class:"ui-icon","aria-hidden":"true"},nI=["href"],sI=["textContent"],rI={class:"leftCol-head"},iI={class:"leftCol-search"},aI={class:"tree-search-box"},lI=["href"],dI={type:"text",class:"tree-search-input",placeholder:"Search files","aria-label":"Search files"},uI={class:"leftCol-project-header"},cI=["textContent","title"],pI={class:"project-file-count"},fI=["title"],mI={class:"leftCol-body"},hI={key:0,class:"paper-inline-warning",role:"alert"},vI={key:1,class:"paper-inline-warning",role:"alert"},yI={class:"leftCol-foot"},gI=["title"],bI=["title"],wI=["title"],kI={key:2,class:"last-update",title:"Older repositories have no recorded publication date. The source commit date does not establish when files became available here."},EI={class:"explorer-main"},CI={class:"status-bar"},_I={class:"breadcrumb paths","aria-label":"Path"},SI=["textContent"],NI={class:"status-bar-actions"},DI=["href"],RI={class:"d-none d-md-inline"},TI={class:"ui-icon","aria-hidden":"true"},AI=["href"],OI={class:"d-none d-md-inline"},II=["href"],PI=["href"],VI=["href"],qI=["href"],MI={class:"explorer-content"};function ql(e,t){let n=We("tree"),r=We("partial-view"),s=be("field");return l(),d("div",eI,[D(o("button",{class:"sidebar-toggle",onClick:t[0]||(t[0]=i=>e.sidebarCollapsed=!e.sidebarCollapsed),"aria-label":e.sidebarCollapsed?"Show files":"Hide files"},[(l(),d("svg",oI,[o("use",{href:e.sidebarCollapsed?"#ui-icon-folder":"#project-icon-close"},null,8,nI)])),o("span",{textContent:c(e.sidebarCollapsed?"Files":"Close")},null,8,sI)],8,tI),[[K,e.files?.length]]),D(o("div",{class:A(["leftCol",{collapsed:e.sidebarCollapsed}])},[o("div",rI,[t[7]||(t[7]=o("span",{class:"leftCol-eyebrow"},"Files",-1)),o("button",{class:"leftCol-close","aria-label":"Close files",onClick:t[1]||(t[1]=i=>e.sidebarCollapsed=!0)},[...t[6]||(t[6]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),o("div",iI,[o("div",aI,[(l(),d("svg",{class:A(["ui-icon tree-search-icon",{"fa-spin":e.fileSearchLoading}]),"aria-hidden":"true"},[o("use",{href:e.fileSearchLoading?"#ui-icon-spinner":"#ui-icon-search"},null,8,lI)],2)),D(o("input",dI,null,512),[[s,{state:e.viewState,set:i=>{e.fileSearchQuery=i},value:e.fileSearchQuery,form:null,options:{debounce:300},change:()=>{e.onFileSearchChange()}}]]),D(o("kbd",{class:"tree-search-kbd"},c(e.isMac?"\u2318":"Ctrl+")+"K",513),[[K,!e.fileSearchQuery]]),D(o("button",{class:"tree-search-clear","aria-label":"Clear search",onClick:t[2]||(t[2]=i=>{e.fileSearchQuery="",e.onFileSearchChange()})},"\xD7",512),[[K,e.fileSearchQuery]])])]),o("div",uI,[o("span",{class:"project-name",textContent:c(e.repoId),title:e.repoId},null,8,cI),o("span",pI,c(e.fileCounts?.[""]||e.files?.length)+" files",1),e.options?.expirationDate?(l(),d("span",{key:0,class:"project-expiry",title:e.options.expirationDate},[t[8]||(t[8]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" Available until "+c(e.fmt?.date(e.options.expirationDate)),1)],8,fI)):p("v-if",!0)]),o("div",mI,[e.options?.truncatedFolders?.length>0?(l(),d("div",hI,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fmt?.translate("WARNINGS.repo_truncated")),1)])):p("v-if",!0),e.options?.hasSubmodules?(l(),d("div",vI,[t[10]||(t[10]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fmt?.translate("WARNINGS.submodules_not_included")),1)])):p("v-if",!0),Ce(n,{class:"files",file:e.files,"search-query":e.fileSearchQuery,"search-results":e.fileSearchResults,page:e.viewState},null,8,["file","search-query","search-results","page"])]),o("div",yI,[o("span",{class:"last-update",title:e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate},c(e.options?.sourceCommitDate?"Source commit":e.options?.anonymizedAt?"Anonymized":"Updated")+" "+c(e.fmt?.date(e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate)),9,gI),e.options?.settingsSavedAt?(l(),d("span",{key:0,class:"last-update",title:e.options.settingsSavedAt}," Settings saved "+c(e.fmt?.date(e.options.settingsSavedAt)),9,bI)):p("v-if",!0),e.options?.publishedAt?(l(),d("span",{key:1,class:"last-update",title:e.options.publishedAt}," Snapshot ready "+c(e.fmt?.date(e.options.publishedAt)),9,wI)):p("v-if",!0),e.options?.anonymizedAt&&!e.options?.publishedAt?(l(),d("span",kI," Snapshot ready date not recorded ")):p("v-if",!0)])],2),[[K,e.files?.length]]),D(o("div",{class:"leftCol-backdrop",onClick:t[3]||(t[3]=i=>e.sidebarCollapsed=!0)},null,512),[[K,e.files?.length&&!e.sidebarCollapsed]]),o("div",EI,[D(o("div",CI,[o("ol",_I,[(l(!0),d(X,null,ae(e.paths,(i,a)=>(l(),d("li",{class:"breadcrumb-item",textContent:c(i)},null,8,SI))),256))]),o("div",NI,[e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[11]||(t[11]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,DI)):p("v-if",!0),e.type=="html-doc"&&!e.showSource?(l(),d("button",{key:1,class:A(["btn btn-sm",{"btn-active":e.allowScripts}]),"aria-label":"Allow this document to run JavaScript",title:"Scripts in this file are blocked by default. Enable them only if you trust the repository \u2014 the document stays isolated from your session either way.",onClick:t[4]||(t[4]=i=>e.toggleAllowScripts())},[t[12]||(t[12]=o("i",{class:"fab fa-js"},null,-1)),o("span",RI,c(e.allowScripts?"JS on":"JS off"),1)],2)):p("v-if",!0),e.type=="html-doc"?(l(),d("button",{key:2,class:"btn btn-sm","aria-label":"Toggle between the rendered document and its source",title:"Toggle between the rendered document and its source",onClick:t[5]||(t[5]=i=>e.toggleSource())},[(l(),d("svg",TI,[o("use",{href:e.showSource?"#project-icon-eye":"#ui-icon-code"},null,8,AI)])),o("span",OI,c(e.showSource?"Rendered":"Source"),1)])):p("v-if",!0),D(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"View raw current file",title:"View raw file",href:e.safeUrl(e.url)},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1)])],8,II),[[K,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),D(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"Download current file",title:"Download this file",href:e.safeUrl(e.url+"&download=true")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-download"})],-1)])],8,PI),[[K,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),e.options?.download?(l(),d("a",{key:3,target:"_self",class:"btn btn-sm btn-ink","aria-label":"Download repository as ZIP",title:"Download the whole repository as a ZIP archive",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[15]||(t[15]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-archive"})],-1),o("span",{class:"d-none d-md-inline"}," Download repository",-1)])],8,VI)):p("v-if",!0),e.options?.hasWebsite?(l(),d("a",{key:4,target:"_self",class:"btn btn-sm","aria-label":"Website",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),o("span",{class:"d-none d-md-inline"}," Website",-1)])],8,qI)):p("v-if",!0)])],512),[[K,e.type!="error"||e.files?.length]]),o("div",MI,[Ce(r,{name:"partials/pageView.htm",state:e.viewState},null,8,["state"])])])])}var $I={class:"paper-faq"};function Ml(e,t){return l(),d("div",$I,[...t[0]||(t[0]=[pe('
Help

Answers to the questions that come up most.

If something's missing, write to us \u2014 report a bug on GitHub.

',1),o("div",{class:"paper-faq-body"},[o("aside",{class:"paper-faq-toc"},[o("div",{class:"paper-faq-toc-head"},"Contents"),o("nav",null,[o("a",{href:"#faq-general"},"General"),o("a",{href:"#faq-features"},"Features"),o("a",{href:"#faq-limitations"},"Limitations"),o("a",{href:"#faq-privacy"},"Privacy & Security"),o("a",{href:"#faq-hosting"},"Self-Hosting")])]),o("section",{class:"faq-section","aria-label":"FAQs"},[o("div",null,[p(" General "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b("General ")]),o("div",{class:"panel-group",id:"faq-general",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingWhatIs"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#whatIs","aria-expanded":"false","aria-controls":"whatIs"}," What is Anonymous GitHub? ")])]),o("div",{id:"whatIs",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingWhatIs"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub is a free, open-source tool that anonymizes GitHub repositories and pull requests for double-anonymous (double-blind) peer review. It replaces identifying information \u2014 such as the repository owner, organization name, and custom terms \u2014 so that reviewers cannot determine the identity of the authors through the code repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingHowWork"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#howWork","aria-expanded":"false","aria-controls":"howWork"}," How does Anonymous GitHub work? ")])]),o("div",{id:"howWork",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingHowWork"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies requests to GitHub on the fly. In both cases, the original and anonymized versions of files are cached on the server. The system automatically detects and replaces the repository owner, organization name, and repository name. You can also specify additional custom terms to anonymize using one-per-line regex patterns. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingScope"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#scope","aria-expanded":"false","aria-controls":"scope"}," What is the scope of anonymization? ")])]),o("div",{id:"scope",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingScope"},[o("div",{class:"panel-body p-3"},[o("p",null," In double-anonymous peer review, the boundary of anonymization is the paper plus its online appendix \u2014 not the entire internet. Searching for any part of the paper or the online appendix can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the repository owner, organization, repository name, file and directory names, and file contents across all text-based file types. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCost"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#cost","aria-expanded":"false","aria-controls":"cost"}," How much does it cost? ")])]),o("div",{id:"cost",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCost"},[o("div",{class:"panel-body p-3"},[o("p",null,[b(" Anonymous GitHub is completely free to use. However, the server costs hundreds of dollars per year to maintain. If you find the service useful, a small donation would be greatly appreciated. You can support the project by "),o("a",{href:"https://github.com/sponsors/tdurieux/",target:"_blank"},"sponsoring on GitHub"),b(", donating through "),o("a",{href:"https://ko-fi.com/tdurieux",target:"_blank"},"Ko-fi"),b(', or by clicking the "Support me" button on the site. ')])])])])]),p(" Features "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})]),b("Features ")]),o("div",{class:"panel-group",id:"faq-features",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingFormats"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#formats","aria-expanded":"false","aria-controls":"formats"}," Which file formats are supported? ")])]),o("div",{id:"formats",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingFormats"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub can display and render a wide variety of file types: "),o("ul",null,[o("li",null,[o("strong",null,"Text and source code"),b(" \u2014 displayed with syntax highlighting")]),o("li",null,[o("strong",null,"Markdown"),b(" \u2014 rendered as formatted HTML")]),o("li",null,[o("strong",null,"Images"),b(" (PNG, JPG, SVG, etc.) \u2014 displayed inline")]),o("li",null,[o("strong",null,"PDFs"),b(" \u2014 rendered directly in the browser")]),o("li",null,[o("strong",null,"Jupyter Notebooks"),b(" \u2014 rendered with code cells and outputs")])]),o("p",null," Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to determine whether it is textual or binary. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPR"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#pullRequests","aria-expanded":"false","aria-controls":"pullRequests"}," Can I anonymize pull requests? ")])]),o("div",{id:"pullRequests",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPR"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository, and the system will automatically detect that it is a pull request and anonymize it accordingly. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingConference"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#conference","aria-expanded":"false","aria-controls":"conference"}," What is the Conference ID feature? ")])]),o("div",{id:"conference",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingConference"},[o("div",{class:"panel-body p-3"},[o("p",null," When creating an anonymized repository, you can associate it with a Conference ID. This allows conferences to define default anonymization settings (such as expiration dates) that are automatically applied to repositories submitted under that conference. If your conference provides a Conference ID, enter it during the anonymization setup. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingExpiration"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#expiration","aria-expanded":"false","aria-controls":"expiration"}," What happens when an anonymized repository expires? ")])]),o("div",{id:"expiration",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingExpiration"},[o("div",{class:"panel-body p-3"},[o("p",null," You can configure one of three expiration strategies when creating your anonymized repository: "),o("ul",null,[o("li",null,[o("strong",null,"Never expire"),b(" \u2014 the anonymized repository remains accessible indefinitely.")]),o("li",null,[o("strong",null,"Redirect to GitHub"),b(" \u2014 after expiration, visitors are redirected to the original GitHub repository.")]),o("li",null,[o("strong",null,"Remove content"),b(" \u2014 after expiration, the anonymized content is deleted from the server.")])])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDownload"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#download","aria-expanded":"false","aria-controls":"download"}," Can I download an anonymized repository? ")])]),o("div",{id:"download",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDownload"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers want to build or test the code locally. The downloaded archive contains the fully anonymized version of the repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingUpdates"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#updates","aria-expanded":"false","aria-controls":"updates"}," Are updates to the original repository reflected in the anonymized version? ")])]),o("div",{id:"updates",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingUpdates"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. The anonymized repository tracks the source on GitHub: when you push new commits to the original repository, the anonymized view picks up those changes (cached files are refreshed against GitHub). This means you can keep iterating on the code while reviewers have the link, and you do not need to recreate the anonymized repository every time you update the source. "),o("p",null," A few practical implications worth keeping in mind: "),o("ul",null,[o("li",null," You can safely create the anonymized repository early in the writing process \u2014 later commits will be visible to reviewers without any additional action. "),o("li",null," If you rename files, add new identifiers, or introduce new contributor names after creation, revisit the anonymization options (custom terms, file filters) to make sure the new content is still properly anonymized. "),o("li",null," If the original repository is made private or deleted, the anonymized repository will no longer be able to fetch updated content. ")])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCLI"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#cli","aria-expanded":"false","aria-controls":"cli"}," Is there a command-line tool? ")])]),o("div",{id:"cli",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCLI"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally, generating an anonymized ZIP file on your machine. Install it via npm: "),o("pre",{style:{"background-color":"var(--hover-bg-color)",padding:"12px","border-radius":"4px","margin-top":"8px",color:"var(--color)"}},[o("code",null,`npm install -g @tdurieux/anonymous_github +anonymous_github`)])])])])]),p(" Limitations "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})]),b("Limitations ")]),o("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),o("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[o("div",{class:"panel-body p-3"},[o("ul",null,[o("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),o("li",null," Files larger than 8 MB are not supported. "),o("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),o("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),p(" Privacy & Security "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),b("Privacy & Security ")]),o("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),o("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[o("div",{class:"panel-body p-3"},[o("p",null," Data stored on Anonymous GitHub is never shared or used for any purpose beyond providing the anonymization service. When a repository is removed or expires, only its configuration is retained \u2014 this makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),o("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[o("div",{class:"panel-body p-3"},[o("p",null,[b("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),o("a",{href:"/connections"},"GitHub connections"),b(" page.")]),o("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),o("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),o("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[o("div",{class:"panel-body p-3"},[o("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),p(" Self-Hosting "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-storage"})]),b("Self-Hosting ")]),o("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),o("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[o("div",{class:"panel-body p-3"},[o("p",null,[b(" Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment. You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup instructions are available on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/",target:"_blank"},"GitHub repository"),b(". ")]),o("p",null," The basic steps are: "),o("ol",null,[o("li",null,"Clone the repository and install dependencies"),o("li",null,[b("Create a "),o("code",null,".env"),b(" file with your GitHub token, OAuth client ID, and client secret")]),o("li",null,[b("Run "),o("code",null,"docker-compose up -d")])])])])])]),o("div",{class:"text-center mt-5 mb-5 p-4",style:{"background-color":"var(--hover-bg-color)","border-radius":"8px"}},[o("p",{class:"mb-2",style:{"font-size":"1.1rem"}}," Still have questions? "),o("p",{class:"text-muted mb-0"},[b(" Open an issue on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/issues",target:"_blank"},"GitHub repository"),b(" and we'll be happy to help. ")])])])])],-1)])])}var LI={class:"pr-page"},UI={class:"container paper-page pr-page-inner"},FI={class:"pr-header"},zI={class:"pr-title-row"},HI={class:"paper-page-title pr-title"},BI=["textContent"],jI={key:1,class:"text-muted"},GI=["href"],WI={class:"pr-header-meta"},KI={key:0,class:"pr-meta-item"},YI=["textContent"],JI={key:1,class:"pr-meta-item"},QI=["textContent"],XI={key:2,class:"pr-meta-item"},ZI=["textContent"],xI={key:0,class:"paper-tabs",role:"tablist"},e3=["aria-selected","tabindex"],t3=["textContent"],o3=["aria-selected","tabindex"],n3=["textContent"],s3={class:"paper-tab-content"},r3={key:0,role:"tabpanel",id:"gist-files-panel","aria-labelledby":"gist-files-tab"},i3={class:"pr-comments"},a3={class:"pr-comment"},l3={class:"pr-comment-head"},d3=["textContent"],u3={key:0,class:"pr-comment-date"},c3={key:0,class:"paper-table-empty"},p3={key:1,role:"tabpanel",id:"gist-comments-panel","aria-labelledby":"gist-comments-tab"},f3={class:"pr-comments"},m3={class:"pr-comment"},h3={class:"pr-comment-head"},v3={key:0,class:"pr-comment-author"},y3=["textContent"],g3=["textContent"],b3={key:0,class:"pr-comment-body"},w3={key:0,class:"paper-table-empty"};function $l(e,t){let n=We("gist-file"),r=We("markdown");return l(),d("div",LI,[o("div",UI,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),b(" \xA0/\xA0 "),o("span",{class:"here"},"Gist")],-1)),o("header",FI,[o("div",zI,[o("h1",HI,[e.details?.description?(l(),d("span",{key:0,textContent:c(e.details?.description)},null,8,BI)):p("v-if",!0),e.details?.description?p("v-if",!0):(l(),d("span",jI,"Untitled gist"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/gist-anonymize/"+e.gistId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,GI)):p("v-if",!0)]),o("div",WI,[o("span",{class:A(["paper-pill",{good:e.details?.isPublic,warn:!e.details?.isPublic}])},c(e.details?.isPublic?"Public":"Secret"),3),e.details?.ownerLogin?(l(),d("span",KI,[t[5]||(t[5]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[6]||(t[6]=b(" @",-1)),o("span",{textContent:c(e.details?.ownerLogin)},null,8,YI)])):p("v-if",!0),e.details?.updatedDate?(l(),d("span",JI,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=b()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,QI)])):p("v-if",!0),e.details?.anonymizeDate?(l(),d("span",XI,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=b(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,ZI)])):p("v-if",!0)])]),e.details?.files&&e.details?.files?.length||e.details?.comments&&e.details?.comments?.length?(l(),d("nav",xI,[e.details?.files?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="files"}]),type:"button",role:"tab",id:"gist-files-tab","aria-selected":e.tabState?.active==="files","aria-controls":"gist-files-panel",tabindex:e.tabState?.active==="files"?0:-1,onKeydown:t[0]||(t[0]=s=>e.previewTabKeydown(s)),onClick:t[1]||(t[1]=s=>e.tabState.active="files")},[t[11]||(t[11]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.files?.length,{0:"No files",one:"1 file",other:"{} files"}))},null,8,t3)],42,e3)):p("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"gist-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"gist-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=s=>e.previewTabKeydown(s)),onClick:t[3]||(t[3]=s=>e.tabState.active="comments")},[t[12]||(t[12]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,n3)],42,o3)):p("v-if",!0)])):p("v-if",!0),o("div",s3,[e.details?.files&&e.tabState?.active=="files"?(l(),d("div",r3,[o("ul",i3,[(l(!0),d(X,null,ae(e.details?.files,(s,i)=>(l(),d("li",a3,[o("div",l3,[o("strong",{textContent:c(s?.filename)},null,8,d3),s?.language?(l(),d("span",u3,c(s?.language),1)):p("v-if",!0)]),Ce(n,{file:s},null,8,["file"])]))),256)),e.details?.files?.length?p("v-if",!0):(l(),d("li",c3,[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1),o("span",null,"No files in this gist.",-1)])]))])])):p("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",p3,[o("ul",f3,[(l(!0),d(X,null,ae(e.details?.comments,(s,i)=>(l(),d("li",m3,[o("div",h3,[s?.author?(l(),d("span",v3,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=b(" @",-1)),o("span",{textContent:c(s?.author)},null,8,y3)])):p("v-if",!0),s?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(s?.updatedDate))},null,8,g3)):p("v-if",!0)]),s?.body?(l(),d("div",b3,[Ce(r,{content:s?.body},null,8,["content"])])):p("v-if",!0)]))),256)),e.details?.comments?.length?p("v-if",!0):(l(),d("li",w3,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this gist.",-1)])]))])])):p("v-if",!0)])])])}var k3={class:"collapse navbar-collapse",id:"navbarSupportedContent"},E3={class:"navbar-nav mr-auto smooth-scroll"},C3={key:0,class:"nav-item"},_3={key:1,class:"nav-item"},S3={key:2,class:"nav-item"},N3={key:3,class:"nav-item"},D3={class:"nav-item"},R3={key:4,class:"nav-item"},T3={class:"navbar-nav"},A3={key:0,class:"nav-item"},O3={key:1,class:"nav-item"},I3={key:2,class:"nav-item"},P3={key:3,class:"nav-item"},V3={key:4,class:"nav-item dropdown user-chip-wrap"},q3={class:"nav-link user-chip dropdown-toggle",href:"#",id:"navbarDropdownMenuLink",role:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},M3=["src"],$3={class:"user-chip-name"},L3={class:"dropdown-menu dropdown-menu-right user-menu","aria-labelledby":"navbarDropdownMenuLink"},U3={class:"dropdown-header"},F3=["innerHTML"],z3=["disabled"],H3={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},B3={class:"email-prompt-actions"},j3=["disabled"],G3=["disabled"],W3=["disabled"];function Ll(e,t){return l(),d(X,null,[o("nav",{class:A(["navbar navbar-expand-lg",{"navbar-dark":e.isDarkMode}])},[t[18]||(t[18]=pe('Anonymous GitHubSupport',3)),o("div",k3,[o("ul",E3,[e.user?p("v-if",!0):(l(),d("li",C3,[o("a",{class:A(["nav-link",{active:e.path=="/"}]),href:"/"}," Home ",2)])),e.user?(l(),d("li",_3,[o("a",{class:A(["nav-link",{active:e.path=="/dashboard"}]),href:"/dashboard"},[...t[7]||(t[7]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-grid"})],-1),b(" My work ",-1)])],2)])):p("v-if",!0),e.user?(l(),d("li",S3,[o("a",{class:A(["nav-link",{active:e.path=="/anonymize"||e.path=="/pull-request-anonymize"}]),href:"/anonymize"},[...t[8]||(t[8]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize ",-1)])],2)])):p("v-if",!0),e.user?(l(),d("li",N3,[o("a",{class:A(["nav-link",{active:e.path=="/conferences"}]),href:"/conferences"},[...t[9]||(t[9]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1),b(" Conferences ",-1)])],2)])):p("v-if",!0),o("li",D3,[o("a",{class:A(["nav-link",{active:e.path=="/faq"}]),href:"/faq"},[...t[10]||(t[10]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-help"})],-1),b("FAQ",-1)])],2)]),e.user&&e.user?.isAdmin?(l(),d("li",R3,[o("a",{class:A(["nav-link",{active:e.path?.indexOf("/admin")===0}]),href:"/admin/"},[...t[11]||(t[11]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1),b(" Admin ",-1)])],2)])):p("v-if",!0)]),o("ul",T3,[e.user||!e.isReviewerRoute?(l(),d("li",A3,[...t[12]||(t[12]=[o("a",{class:"nav-link nav-icon",target:"_blank",href:"https://github.com/tdurieux/anonymous_github/",title:"Anonymous GitHub source code","aria-label":"Anonymous GitHub source code on GitHub",rel:"noopener","data-offset":"30"},[o("i",{class:"fab fa-github","aria-hidden":"true"})],-1)])])):p("v-if",!0),p(` "Report a bug" is about this service. Reviewers who land on an anonymized repository often think it is about the paper, so the - label names the service and the tooltip says who to contact. `),t[12]||(t[12]=o("li",{class:"nav-item d-none d-lg-block"},[o("a",{class:"nav-link",target:"_blank",rel:"noopener",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",title:"Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors.","data-offset":"30"},[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-bug"})]),b("Report a bug ")])],-1)),e.isDarkMode?p("v-if",!0):(l(),d("li",s3,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to dark mode","aria-label":"Switch to dark mode",role:"button",onClick:t[0]||(t[0]=me(s=>{e.darkMode(!0)},["prevent"]))},[...t[8]||(t[8]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",n3,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to light mode","aria-label":"Switch to light mode",role:"button",onClick:t[1]||(t[1]=me(s=>{e.darkMode(!1)},["prevent"]))},[...t[9]||(t[9]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-sun"})],-1)])])])):p("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",r3,[...t[10]||(t[10]=[o("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[o("i",{class:"fab fa-github mr-1"}),b(" Sign in ")],-1)])])):p("v-if",!0),e.user?(l(),d("li",i3,[o("a",a3,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,l3)):p("v-if",!0),o("span",d3,c(e.user?.username),1)]),o("div",u3,[o("h6",c3,"Signed in as @"+c(e.user?.username),1),t[11]||(t[11]=ce('SettingsDefaults, quotas, accountGitHub connectionsRepository access and OAuthClaim an anonymizationAttach an existing mirror to your accountReport a bugAbout this service, not a paperSource codeSupport the projectSign out',9))])])):p("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,p3)):p("v-if",!0)],64)}var f3={class:"paper-landing"},m3={class:"paper-hero"},h3={class:"paper-hero-copy"},v3={class:"paper-cta-row"},g3={key:0,href:"/signin",target:"_self",class:"btn-hero"},y3={key:1,href:"/anonymize",class:"btn-hero"},b3={class:"paper-stats paper-wrap",id:"metrics","aria-label":"Usage over the last 60 days"},w3={class:"paper-stats-grid"},k3={class:"paper-stat-value"},E3={class:"paper-stat-label"},C3=["viewBox"],_3=["x","y","width","height"],S3={key:1,class:"paper-stat-delta"},N3={class:"paper-features paper-wrap","aria-label":"Product features"},D3={class:"paper-features-list",role:"tablist","aria-label":"Features","aria-orientation":"vertical"},R3=["onClick","onKeydown","id","aria-controls","aria-selected","tabindex"],T3={class:"paper-eyebrow"},A3={class:"paper-feature-title"},O3={class:"paper-feature-more"},I3={class:"paper-feature-title paper-feature-title-m","aria-hidden":"true"},P3=["href","target"],V3={class:"paper-features-stage"},q3=["id","aria-labelledby"],M3={class:"paper-frame"},$3={class:"paper-frame-bar","aria-hidden":"true"},L3={class:"url"},U3=["src","alt"],F3={class:"paper-footer"},z3={class:"paper-footer-inner"},H3={class:"paper-footer-col"},B3={key:0,href:"/dashboard"},j3={key:1,href:"/conferences"},G3={class:"paper-footer-foot"};function Il(e,t){return l(),d("div",f3,[p(" Hero: copy on the left, the product on the right "),o("section",m3,[o("div",h3,[t[2]||(t[2]=o("div",{class:"paper-eyebrow"},"For double-blind peer review",-1)),t[3]||(t[3]=o("h1",{class:"hero-title"},[b(" Share the code,"),o("br"),o("span",{class:"accent"},"not the author.")],-1)),t[4]||(t[4]=o("p",{class:"hero-subtitle"}," Anonymous GitHub makes a read-only mirror of your repository, pull request, or gist. It redacts the terms you choose in text files, so reviewers can browse your artifact through an anonymous link. ",-1)),o("div",v3,[e.user?p("v-if",!0):(l(),d("a",g3,[...t[0]||(t[0]=[o("i",{class:"fab fa-github mr-2","aria-hidden":"true"},null,-1),b("Sign in with GitHub ",-1)])])),e.user?(l(),d("a",y3," Anonymize a repository \u2192 ")):p("v-if",!0),t[1]||(t[1]=o("a",{class:"paper-link-arrow",target:"_self",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/"},"See an anonymized repository \u2192",-1))]),t[5]||(t[5]=o("ul",{class:"paper-reassure"},[o("li",null,"Free and open source"),o("li",null,"Read-only: never writes to your repos"),o("li",null,"Expires on the date you set")],-1))]),t[6]||(t[6]=ce('
A reviewer preview with the author, affiliation, and email replaced by anonymous terms
',1))]),p(" Proof "),t[16]||(t[16]=ce('
Trusted by authors at
ICSEFSEOOPSLA
',1)),p(" Live stats "),o("section",b3,[t[7]||(t[7]=o("div",{class:"paper-stats-meta"},[o("div",{class:"paper-stats-meta-left"},"Live \xB7 last 60 days"),o("div",{class:"paper-stats-meta-right"},[o("span",{class:"paper-stats-dot","aria-hidden":"true"}),b(" updated daily ")])],-1)),o("div",w3,[(l(!0),d(X,null,re(e.cards,(s,r)=>(l(),d("div",{class:"paper-stat-card",key:s?.key},[o("div",k3,c(e.fmt?.bigNum(s?.total)),1),o("div",E3,c(s?.label),1),e.history[s?.key].bars?.length>1?(l(),d("svg",{key:0,class:"paper-stat-bars",preserveAspectRatio:"none","aria-hidden":"true",viewBox:"0 0 "+e.history[s?.key].viewW+" 36"},[(l(!0),d(X,null,re(e.history[s?.key].bars,(n,i)=>(l(),d("rect",{key:i,class:A({"is-latest":i===e.history[s.key].bars.length-1}),x:n?.x,y:n?.y,width:n?.w,height:n?.h},null,10,_3))),128))],8,C3)):p("v-if",!0),e.history[s?.key].bars?.length>1?(l(),d("div",S3," +"+c(e.fmt?.number(e.history[s?.key].deltaToday))+" today ",1)):p("v-if",!0)]))),128))])]),p(" Before / after "),t[17]||(t[17]=o("section",{class:"paper-section-head paper-wrap"},[o("div",null,[o("div",{class:"paper-eyebrow"},"Before \xB7 after"),o("h2",null,[b("The same repository, "),o("em",null,"minus you.")])]),o("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),t[18]||(t[18]=o("div",{class:"paper-preview paper-wrap","aria-label":"Before and after example"},[o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"Before \xB7 your repo"),o("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),b(),o("strong",null,"DeepLearnUtils")]),o("div",null,"Developed by Jane Smith at MIT CSAIL."),o("div",null,"See Smith et\xA0al., \u201CAttention That Works,\u201D 2026."),o("div",null,"Contact: jane.smith@mit.edu")])]),o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"After \xB7 anonymous mirror"),o("span",{class:"pane-url"},"anonymous.4open.science/r/paper-7f2a")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),b(),o("strong",null,"DeepLearnUtils")]),o("div",null,[b("Developed by "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),b(" at "),o("span",{class:"redact",role:"img","aria-label":"redacted affiliation"},"XXXX-2"),b(".")]),o("div",null,[b("See "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),b(" et\xA0al., \u201CAttention That Works,\u201D 2026.")]),o("div",null,[b("Contact: "),o("span",{class:"redact",role:"img","aria-label":"redacted email address"},"XXXX-3")])])])],-1)),p(" What you get: one screenshot, three tabs "),t[19]||(t[19]=o("section",{class:"paper-section-head paper-wrap",id:"about"},[o("div",null,[o("div",{class:"paper-eyebrow"},"What you get"),o("h2",null,[b("Anonymize, review, "),o("em",null,"manage.")])]),o("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),o("section",N3,[o("div",D3,[(l(!0),d(X,null,re(e.features,(s,r)=>(l(),d("div",{class:A(["paper-feature",{"is-on":e.feature===s?.key}]),key:s?.key},[o("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:n=>e.selectFeature(s.key),onKeydown:n=>e.featureKeydown(n,r),id:"feature-tab-"+s?.key,"aria-controls":"feature-panel-"+s?.key,"aria-selected":e.feature===s?.key,tabindex:e.feature===s?.key?0:-1},[o("span",T3,c(s?.num)+" \xB7 "+c(s?.eyebrow),1),o("span",A3,[b(c(s?.title)+" ",1),o("em",null,c(s?.accent),1)])],40,R3),o("div",O3,[o("span",I3,[b(c(s?.title)+" ",1),o("em",null,c(s?.accent),1)]),o("p",null,c(s?.text),1),o("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(s)),target:e.featureTarget(s)},c(s?.cta)+" \u2192",9,P3)])],2))),128))]),o("div",V3,[(l(!0),d(X,null,re(e.features,(s,r)=>N((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:s?.key,id:"feature-panel-"+s?.key,"aria-labelledby":"feature-tab-"+s?.key},[o("div",M3,[o("div",$3,[t[8]||(t[8]=o("span",{class:"dots"},[o("i"),o("i"),o("i")],-1)),o("span",L3,c(s?.url),1)]),o("div",{class:A("paper-crop paper-crop-"+s?.key)},[o("img",{loading:"lazy",width:"2880",height:"1800",src:e.safeUrl(s?.img),alt:s?.alt},null,8,U3)],2)])],8,q3)),[[W,e.feature===s?.key]])),128))])]),p(" FAQ teaser "),t[20]||(t[20]=ce('
Before you sign in

The questions that come up most.

Read the full FAQ \u2192
What access does GitHub sign-in require?

The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories.

Which file formats are supported?

Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged.

What happens when an anonymized repository expires?

You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.

',1)),o("footer",F3,[o("div",z3,[t[12]||(t[12]=o("div",{class:"paper-footer-brand"},[o("div",{class:"paper-footer-mark"},[b("Anonymous "),o("em",null,"GitHub")]),o("p",{class:"paper-footer-tag"}," A read-only, identity-stripped mirror of your repository, built for double-anonymous peer review. ")],-1)),o("div",H3,[t[9]||(t[9]=o("div",{class:"paper-footer-head"},"Product",-1)),t[10]||(t[10]=o("a",{href:"/anonymize"},"Anonymize",-1)),e.user?(l(),d("a",B3,"My work")):p("v-if",!0),e.user?(l(),d("a",j3,"Conferences")):p("v-if",!0),t[11]||(t[11]=o("a",{href:"/faq"},"FAQ",-1))]),t[13]||(t[13]=ce('',2))]),t[15]||(t[15]=o("div",{class:"paper-footer-rule"},null,-1)),o("div",G3,[o("span",null,"\xA9 "+c(e.year||2026)+" Anonymous GitHub \xB7 GPL-3.0 licensed",1),t[14]||(t[14]=o("span",{class:"paper-footer-meta"},"Built for reviewers, by researchers.",-1))])])])}var W3={class:"paper-empty"},K3={class:"paper-empty-inner"},Y3={key:0,class:"paper-eyebrow"},J3={key:1,class:"paper-eyebrow"},Q3={key:2,class:"paper-empty-title"},X3=["textContent"];function Pl(e,t){return l(),d("div",W3,[o("div",K3,[e.error?p("v-if",!0):(l(),d("div",Y3,"Working")),e.error?(l(),d("div",J3,"Error")):p("v-if",!0),e.error?p("v-if",!0):(l(),d("h1",Q3,[...t[0]||(t[0]=[b(" Loading",-1),o("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:c(e.fmt.translate(e.error))},null,8,X3)):p("v-if",!0)])])}var Z3={class:"container paper-page paper-settings"},x3={class:"paper-crumbs"},eP={class:"here"},tP={class:"paper-page-title"},oP={class:"paper-settings-body"},sP={class:"paper-settings-toc"},nP={href:"#conf-billing"},rP={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},iP={id:"conf-basics",class:"paper-settings-section"},aP={class:"form-group"},lP={class:"invalid-feedback"},dP={class:"invalid-feedback"},uP={class:"form-group"},cP={class:"invalid-feedback"},pP={class:"form-group"},fP={class:"invalid-feedback"},mP={class:"invalid-feedback"},hP={id:"conf-window",class:"paper-settings-section"},vP={class:"form-grid-2"},gP={class:"form-group"},yP={class:"invalid-feedback"},bP={class:"invalid-feedback"},wP={class:"form-group"},kP={class:"invalid-feedback"},EP={class:"invalid-feedback"},CP={id:"conf-rendering",class:"paper-settings-section"},_P={class:"form-check"},SP={class:"form-check-input",type:"checkbox",id:"link",name:"link"},NP={class:"form-check"},DP={class:"form-check-input",type:"checkbox",id:"image",name:"image"},RP={class:"form-check"},TP={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},AP={class:"form-check"},OP={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},IP={id:"conf-features",class:"paper-settings-section"},PP={class:"form-check"},VP={class:"form-check-input",type:"checkbox",id:"update",name:"update"},qP={class:"form-check"},MP={class:"form-check-input",type:"checkbox",id:"page",name:"page"},$P={id:"conf-plan",class:"paper-settings-section"},LP={class:"paper-plan-grid"},UP=["value"],FP=["textContent"],zP={class:"paper-plan-price"},HP=["innerHTML"],BP={key:0,id:"conf-billing",class:"paper-settings-section"},jP={class:"form-group"},GP={class:"form-group"},WP={class:"form-group"},KP={class:"form-group"},YP={class:"form-grid-3"},JP={class:"form-group"},QP={class:"form-group"},XP={class:"form-group"},ZP={class:"form-group"},xP={class:"paper-settings-footer"},eV=["textContent"],tV=["textContent"],oV=["disabled"];function Vl(e,t){let s=be("paper-scrollspy"),r=be("field"),n=be("form");return l(),d("div",Z3,[o("div",x3,[t[1]||(t[1]=o("a",{href:"/dashboard"},"My work",-1)),t[2]||(t[2]=b(" \xA0/\xA0 ",-1)),t[3]||(t[3]=o("a",{href:"/conferences"},"Conferences",-1)),t[4]||(t[4]=b(" \xA0/\xA0 ",-1)),o("span",eP,c(e.editionMode?"Edit":"New"),1)]),o("h1",tP,[b(c(e.editionMode?"Edit":"Create a")+" ",1),t[5]||(t[5]=o("em",null,"conference",-1))]),t[43]||(t[43]=o("p",{class:"paper-page-lede"}," Give chairs access to every anonymization submitted to a venue, and lift author quotas during the review window. ",-1)),o("div",oP,[N((l(),d("aside",sP,[t[7]||(t[7]=o("div",{class:"paper-settings-toc-head"},"On this page",-1)),o("nav",null,[t[6]||(t[6]=ce('BasicsReview windowRendering defaultsFeaturesPlan',5)),N(o("a",nP,"Billing",512),[[W,e.plan?.pricePerRepo>0]])])])),[[s]]),N((l(),d("form",rP,[o("section",iP,[t[12]||(t[12]=o("div",{class:"paper-section-eyebrow"},"Basics",-1)),o("div",aP,[t[8]||(t[8]=o("label",{class:"paper-field-label",for:"name"},"Conference name",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.name?.invalid&&(e.conference?.name?.touched||e.conference?.submitted)}]),name:"name",id:"name",required:"",placeholder:"e.g. International Conference on Software Engineering"},null,2),[[r,{state:e.viewState,set:i=>{e.options.name=i},value:e.options?.name,form:"conference",options:{}}]]),N(o("div",lP," The name of the conference is invalid. ",512),[[W,e.conference?.name?.errors?.invalid]]),N(o("div",dP," The name of the conference is required. ",512),[[W,e.conference?.name?.errors?.required]])]),o("div",uP,[t[9]||(t[9]=o("label",{class:"paper-field-label",for:"url"},"Website",-1)),N(o("input",{type:"url",class:A(["form-control",{"is-invalid":e.conference?.url?.invalid&&(e.conference?.url?.touched||e.conference?.submitted)}]),name:"url",id:"url",placeholder:"https://example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.url=i},value:e.options?.url,form:"conference",options:{}}]]),N(o("div",cP," The url of the conference is invalid. ",512),[[W,e.conference?.url?.errors?.url]])]),o("div",pP,[t[10]||(t[10]=o("label",{class:"paper-field-label",for:"conferenceID"},"Conference ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.conferenceID?.invalid&&(e.conference?.conferenceID?.touched||e.conference?.submitted)}]),name:"conferenceID",id:"conferenceID",required:"",pattern:"[a-zA-Z0-9\\-_]{3,10}",placeholder:"ICSE26"},null,2),[[r,{state:e.viewState,set:i=>{e.options.conferenceID=i},value:e.options?.conferenceID,form:"conference",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},[b("3\u201310 characters, letters, numbers, "),o("code",null,"-"),b(" and "),o("code",null,"_"),b(". Authors reference this when they anonymize.")],-1)),N(o("div",{class:"invalid-feedback"}," The conference ID '"+c(e.options?.conferenceID)+"' is already used. ",513),[[W,e.conference?.conferenceID?.errors?.used]]),N(o("div",fP," The conference ID is required. ",512),[[W,e.conference?.conferenceID?.errors?.required]]),N(o("div",mP," The format of the conference ID is incorrect ([a-zA-Z0-9-_]{3,10}). ",512),[[W,e.conference?.conferenceID?.errors?.pattern]])])]),o("section",hP,[t[17]||(t[17]=o("div",{class:"paper-section-eyebrow"},"Review window",-1)),o("div",vP,[o("div",gP,[t[13]||(t[13]=o("label",{class:"paper-field-label",for:"startDate"},"Start date",-1)),N(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.startDate?.invalid&&(e.conference?.startDate?.touched||e.conference?.submitted)}]),name:"startDate",id:"startDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.startDate=i},value:e.options?.startDate,form:"conference",options:{}}]]),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Beginning of the review process.",-1)),N(o("div",yP," Start date is required. ",512),[[W,e.conference?.startDate?.errors?.required]]),N(o("div",bP," Start date must be before end date. ",512),[[W,e.conference?.startDate?.errors?.invalid]])]),o("div",wP,[t[15]||(t[15]=o("label",{class:"paper-field-label",for:"endDate"},"End date",-1)),N(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.endDate?.invalid&&(e.conference?.endDate?.touched||e.conference?.submitted)}]),name:"endDate",id:"endDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.endDate=i},value:e.options?.endDate,form:"conference",options:{}}]]),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"All repositories expire on this date.",-1)),N(o("div",kP," End date is required. ",512),[[W,e.conference?.endDate?.errors?.required]]),N(o("div",EP," End date is invalid. ",512),[[W,e.conference?.endDate?.errors?.invalid]])])])]),o("section",CP,[t[26]||(t[26]=o("div",{class:"paper-section-eyebrow"},"Rendering defaults",-1)),o("div",_P,[N(o("input",SP,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.link=i},value:e.options?.options?.link,form:"conference",options:{}}]]),t[18]||(t[18]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[19]||(t[19]=o("small",{class:"form-text text-muted"},"Keep or remove all links from text files.",-1))]),o("div",NP,[N(o("input",DP,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.image=i},value:e.options?.options?.image,form:"conference",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[21]||(t[21]=o("small",{class:"form-text text-muted"},"Images are not anonymized.",-1))]),o("div",RP,[N(o("input",TP,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.pdf=i},value:e.options?.options?.pdf,form:"conference",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[23]||(t[23]=o("small",{class:"form-text text-muted"},"PDFs are not anonymized.",-1))]),o("div",AP,[N(o("input",OP,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.notebook=i},value:e.options?.options?.notebook,form:"conference",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[25]||(t[25]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])]),o("section",IP,[t[31]||(t[31]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",PP,[N(o("input",VP,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.update=i},value:e.options?.options?.update,form:"conference",options:{}}]]),t[27]||(t[27]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[28]||(t[28]=o("small",{class:"form-text text-muted"},"Pull the latest commit automatically (hourly maximum).",-1))]),o("div",qP,[N(o("input",MP,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.page=i},value:e.options?.options?.page,form:"conference",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Enable anonymized GitHub pages.",-1))])]),o("section",$P,[t[33]||(t[33]=o("div",{class:"paper-section-eyebrow"},"Plan",-1)),t[34]||(t[34]=o("p",{class:"paper-section-copy"},"Billed per repository per month, prorated by the day for as long as a repository stays in the conference.",-1)),o("div",LP,[(l(!0),d(X,null,re(e.plans,(i,a)=>(l(),d("label",{class:A(["paper-plan-card",{selected:e.options?.plan?.planID==i?.id}])},[N(o("input",{type:"radio",name:"planPicker",value:i?.id},null,8,UP),[[r,{state:e.viewState,set:u=>{e.options.plan.planID=u},value:e.options?.plan?.planID,form:"conference",options:{}}]]),o("div",{class:"paper-plan-head",textContent:c(i?.name)},null,8,FP),o("div",zP,[b(c(e.fmt?.number(i?.pricePerRepo))+"\u20AC ",1),t[32]||(t[32]=o("span",{class:"paper-plan-per"},"/ repo / month",-1))]),o("div",{class:"paper-plan-desc",innerHTML:e.sanitize(i?.description)},null,8,HP)],2))),256))])]),e.plan?.pricePerRepo>0?(l(),d("section",BP,[t[42]||(t[42]=o("div",{class:"paper-section-eyebrow"},"Billing",-1)),o("div",jP,[t[35]||(t[35]=o("label",{class:"paper-field-label",for:"billing_name"},"Name",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.billing_name?.invalid&&(e.conference?.billing_name?.touched||e.conference?.submitted)}]),name:"billing_name",id:"billing_name",required:"",placeholder:"First & last name"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.name=i},value:e.options?.billing?.name,form:"conference",options:{}}]])]),o("div",GP,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"email"},"Email",-1)),N(o("input",{type:"email",class:A(["form-control",{"is-invalid":e.conference?.email?.invalid&&(e.conference?.email?.touched||e.conference?.submitted)}]),name:"email",id:"email",required:"",placeholder:"you@example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.email=i},value:e.options?.billing?.email,form:"conference",options:{}}]])]),o("div",WP,[t[37]||(t[37]=o("label",{class:"paper-field-label",for:"inputAddress"},"Address",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress?.invalid&&(e.conference?.inputAddress?.touched||e.conference?.submitted)}]),name:"inputAddress",id:"inputAddress",required:"",placeholder:"1234 Main St"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address=i},value:e.options?.billing?.address,form:"conference",options:{}}]])]),o("div",KP,[N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress2?.invalid&&(e.conference?.inputAddress2?.touched||e.conference?.submitted)}]),name:"inputAddress2",id:"inputAddress2",placeholder:"Apartment, studio, or floor"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address2=i},value:e.options?.billing?.address2,form:"conference",options:{}}]])]),o("div",YP,[o("div",JP,[t[38]||(t[38]=o("label",{class:"paper-field-label",for:"city"},"City",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.city?.invalid&&(e.conference?.city?.touched||e.conference?.submitted)}]),name:"city",id:"city",required:"",placeholder:"City"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.city=i},value:e.options?.billing?.city,form:"conference",options:{}}]])]),o("div",QP,[t[39]||(t[39]=o("label",{class:"paper-field-label",for:"country"},"Country",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.country?.invalid&&(e.conference?.country?.touched||e.conference?.submitted)}]),name:"country",id:"country",required:"",placeholder:"Country"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.country=i},value:e.options?.billing?.country,form:"conference",options:{}}]])]),o("div",XP,[t[40]||(t[40]=o("label",{class:"paper-field-label",for:"zip"},"Zip",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.zip?.invalid&&(e.conference?.zip?.touched||e.conference?.submitted)}]),name:"zip",id:"zip",required:"",placeholder:"Zip"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.zip=i},value:e.options?.billing?.zip,form:"conference",options:{}}]])])]),o("div",ZP,[t[41]||(t[41]=o("label",{class:"paper-field-label",for:"vat"},"VAT number",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.vat?.invalid&&(e.conference?.vat?.touched||e.conference?.submitted)}]),name:"vat",id:"vat",placeholder:"VAT Number"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.vat=i},value:e.options?.billing?.vat,form:"conference",options:{}}]])])])):p("v-if",!0),o("div",xP,[e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,eV)):p("v-if",!0),e.message?(l(),d("div",{key:1,class:"alert alert-success",role:"alert",textContent:c(e.message)},null,8,tV)):p("v-if",!0),o("button",{id:"send",disabled:e.saving,type:"submit",class:"btn btn-ink",onClick:t[0]||(t[0]=me(i=>e.submitForm(i,()=>{e.submit(i)}),["prevent"]))},c(e.saving?e.editionMode?"Updating\u2026":"Creating\u2026":e.editionMode?"Update conference":"Create conference"),9,oV)])])),[[n,e.viewState]])])])}var sV={key:0},nV=["innerHTML"],rV={key:3},iV=["src"],aV=["src"],lV={key:7},dV={controls:"controls"},uV=["src"],cV={key:8},pV={key:9,class:"file-error container d-flex h-100"},fV={class:"paper-ratelimit-card m-auto",style:{"max-width":"520px"}},mV={class:"paper-error-msg"},hV={key:10,class:"file-error container d-flex h-100"},vV={class:"paper-error-card file-error-card m-auto",role:"alert"},gV=["textContent"],yV={key:11,class:"file-error container d-flex h-100"},bV={key:12,class:"file-error container d-flex h-100"},wV={key:13,class:"file-error container d-flex h-100"},kV={key:14,class:"file-error container d-flex h-100"},EV={class:"paper-empty-title m-auto"},CV=["href"];function ql(e,t){let s=We("html-doc"),r=We("pdfviewer"),n=We("notebook"),i=be("code-editor");return l(),d(X,null,[e.type=="text"?N((l(),d("div",sV,null,512)),[[i,{content:e.content,options:e.aceOption}]]):p("v-if",!0),e.type=="html"?(l(),d("div",{key:1,class:"file-content markdown-body",innerHTML:e.highlightRedactions(e.sanitize(e.content))},null,8,nV)):p("v-if",!0),e.type=="html-doc"&&!e.showSource&&e.content!=null?(l(),Mt(s,{key:2,content:e.content,"base-url":e.fileBaseUrl,"allow-scripts":e.allowScripts},null,8,["content","base-url","allow-scripts"])):p("v-if",!0),(e.type=="code"||e.type=="html-doc"&&e.showSource)&&e.content!=null?N((l(),d("div",rV,null,512)),[[i,{content:e.content,options:e.aceOption}]]):p("v-if",!0),e.type=="image"?(l(),d("img",{key:4,class:"image-content",src:e.safeUrl(e.url)},null,8,iV)):p("v-if",!0),e.type=="media"?(l(),d("iframe",{key:5,class:"h-100 overflow-auto w-100 b-0",src:e.safeUrl(e.url)},null,8,aV)):p("v-if",!0),e.type=="pdf"?(l(),Mt(r,{key:6,src:e.safeUrl(e.url)},null,8,["src"])):p("v-if",!0),e.type=="audio"?(l(),d("div",lV,[o("audio",dV,[o("source",{src:e.safeUrl(e.url)},null,8,uV)])])):p("v-if",!0),e.type=="IPython"?(l(),d("div",cV,[Ce(n,{file:e.url,content:e.content},null,8,["file","content"])])):p("v-if",!0),e.type=="rate_limited"?(l(),d("div",pV,[o("div",fV,[t[2]||(t[2]=ce('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",mV,[t[0]||(t[0]=b("This repository will be available in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[1]||(t[1]=b(". The page will reload automatically.",-1))])])])):p("v-if",!0),e.type=="error"?(l(),d("div",hV,[o("div",vV,[t[3]||(t[3]=o("div",{class:"paper-error-eyebrow"},"Unavailable",-1)),t[4]||(t[4]=o("div",{class:"paper-error-title"},"This content can\u2019t be shown",-1)),o("p",{class:"file-error-msg",textContent:c(e.fmt.translate("ERRORS."+e.content))},null,8,gV),t[5]||(t[5]=o("div",{class:"file-error-actions"},[o("a",{href:"/",class:"btn btn-sm"},"Back to home"),o("a",{href:"/faq",class:"btn btn-sm"},"Read the FAQ")],-1))])])):p("v-if",!0),e.type=="loading"&&!e.error?(l(),d("div",yV,[...t[6]||(t[6]=[o("h1",{class:"paper-empty-title m-auto"},"Loading\u2026",-1)])])):p("v-if",!0),e.type=="empty"?(l(),d("div",bV,[...t[7]||(t[7]=[o("h1",{class:"paper-empty-title m-auto"},[b("Empty "),o("em",null,"repository"),b(".")],-1)])])):p("v-if",!0),e.content==null&&e.type!="empty"?(l(),d("div",wV,[...t[8]||(t[8]=[o("h1",{class:"paper-empty-title m-auto"},[b("Empty "),o("em",null,"file"),b(".")],-1)])])):p("v-if",!0),e.type=="binary"?(l(),d("div",kV,[o("h1",EV,[t[9]||(t[9]=b("Unsupported ",-1)),t[10]||(t[10]=o("em",null,"binary file",-1)),t[11]||(t[11]=b(". You can ",-1)),o("a",{target:"_blank",href:e.safeUrl(e.url+"&download=true")},"download it",8,CV),t[12]||(t[12]=b(".",-1))])])):p("v-if",!0)],64)}var _V={class:"container page dashboard-page paper-page"},SV={class:"row"},NV={class:"w-100"},DV={class:"w-100","aria-label":"Pull Requests","accept-charset":"UTF-8"},RV={class:"d-flex flex-column flex-md-row align-items-md-center",style:{gap:"8px"}},TV={class:"flex-grow-1"},AV={type:"search",id:"search",class:"form-control","aria-label":"Find a pull request...",placeholder:"Find a pull request...",autocomplete:"off"},OV={class:"d-flex flex-wrap",style:{gap:"6px"}},IV={class:"dropdown"},PV={class:"dropdown-menu","aria-labelledby":"dropdownSort"},VV={class:"form-check dropdown-item"},qV={class:"form-check-input",type:"radio",name:"sort",id:"sortFullName",value:"fullName"},MV={class:"form-check dropdown-item"},$V={class:"form-check-input",type:"radio",name:"sort",id:"sortAnonymizeDate",value:"-anonymizeDate"},LV={class:"form-check dropdown-item"},UV={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},FV={class:"form-check dropdown-item"},zV={class:"form-check-input",type:"radio",name:"sort",id:"sortLastView",value:"-lastView"},HV={class:"form-check dropdown-item"},BV={class:"form-check-input",type:"radio",name:"sort",id:"sortPageView",value:"-pageView"},jV={class:"dropdown"},GV={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},WV={class:"form-check dropdown-item"},KV={class:"form-check-input",type:"checkbox",name:"sort",id:"statusReady",value:"ready"},YV={class:"form-check dropdown-item"},JV={class:"form-check-input",type:"checkbox",name:"sort",id:"statusExpired",value:"expired"},QV={class:"form-check dropdown-item"},XV={class:"form-check-input",type:"checkbox",name:"sort",id:"statusRemoved",value:"removed"},ZV={class:"d-flex flex-wrap mt-2",style:{gap:"6px"}},xV={class:"filter-chip"},e5=["onClick"],t5={class:"repo-list w-100"},o5={class:"repo-list-item-content"},s5={class:"repo-list-item-main"},n5={class:"repo-list-item-header"},r5=["textContent","href"],i5=["textContent"],a5=["textContent"],l5={class:"repo-source"},d5=["href"],u5={class:"repo-date"},c5={class:"repo-meta"},p5={key:0,title:"Conference"},f5=["title"],m5=["title"],h5=["title"],v5={key:1},g5={class:"repo-list-item-actions"},y5={class:"dropdown"},b5={class:"dropdown-menu dropdown-menu-right"},w5=["href"],k5=["onClick"],E5=["onClick"],C5=["onClick"],_5=["href"],S5={key:0,class:"repo-list-empty"};function Ml(e,t){let s=be("field"),r=be("form");return l(),d("div",_V,[o("div",SV,[o("div",NV,[t[12]||(t[12]=ce('
My work \xA0/\xA0 Pull requests

Anonymized pull requests

Track PR mirrors you\u2019ve created and their reviewer traffic.

',2)),p(" Search + filters row "),N((l(),d("form",DV,[o("div",RV,[o("div",TV,[N(o("input",AV,null,512),[[s,{state:e.viewState,set:n=>{e.search=n},value:e.search,form:null,options:{}}]])]),o("div",OV,[o("div",IV,[t[6]||(t[6]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Sort ",-1)),o("div",PV,[t[5]||(t[5]=o("h6",{class:"dropdown-header"},"Select order",-1)),o("div",VV,[N(o("input",qV,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[0]||(t[0]=o("label",{class:"form-check-label",for:"sortFullName"},"Pull Request",-1))]),o("div",MV,[N(o("input",$V,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[1]||(t[1]=o("label",{class:"form-check-label",for:"sortAnonymizeDate"},"Anonymize Date",-1))]),o("div",LV,[N(o("input",UV,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[2]||(t[2]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",FV,[N(o("input",zV,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"sortLastView"},"Last View",-1))]),o("div",HV,[N(o("input",BV,null,512),[[s,{state:e.viewState,set:n=>{e.orderBy=n},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortPageView"},"Page View",-1))])])]),o("div",jV,[t[11]||(t[11]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Status ",-1)),o("div",GV,[t[10]||(t[10]=o("h6",{class:"dropdown-header"},"Select status",-1)),o("div",WV,[N(o("input",KV,null,512),[[s,{state:e.viewState,set:n=>{e.filters.status.ready=n},value:e.filters?.status?.ready,form:null,options:{}}]]),t[7]||(t[7]=o("label",{class:"form-check-label",for:"statusReady"},"Ready",-1))]),o("div",YV,[N(o("input",JV,null,512),[[s,{state:e.viewState,set:n=>{e.filters.status.expired=n},value:e.filters?.status?.expired,form:null,options:{}}]]),t[8]||(t[8]=o("label",{class:"form-check-label",for:"statusExpired"},"Expired",-1))]),o("div",QV,[N(o("input",XV,null,512),[[s,{state:e.viewState,set:n=>{e.filters.status.removed=n},value:e.filters?.status?.removed,form:null,options:{}}]]),t[9]||(t[9]=o("label",{class:"form-check-label",for:"statusRemoved"},"Removed",-1))])])])])])])),[[r,e.viewState]]),p(" Active filter chips "),N(o("div",ZV,[(l(!0),d(X,null,re(e.filters?.status,(n,i,a)=>N((l(),d("span",xV,[b(c(e.fmt?.title(i))+" ",1),o("button",{type:"button",class:"filter-chip-close","aria-label":"Remove filter",onClick:u=>{e.filters.status[i]=!0}}," \xD7 ",8,e5)],512)),[[W,!n]])),256))],512),[[W,e.filters?.status?.ready===!1||e.filters?.status?.expired===!1||e.filters?.status?.removed===!1]])]),p(" Pull request list "),o("ul",t5,[(l(!0),d(X,null,re(e.filteredPullRequests,(n,i)=>(l(),d("li",{class:A(["repo-list-item",{"repo-inactive":n?.status=="expired"||n?.status=="removed"||n?.status=="error"}])},[o("div",o5,[o("div",s5,[o("div",n5,[o("a",{class:"repo-name",textContent:c(n?.pullRequestId),href:e.safeUrl("/pr/"+n?.pullRequestId)},null,8,r5),o("span",{class:A(["status-badge",{"status-removed":n?.status=="removed"||n?.status=="expired"||n?.status=="removing"||n?.status=="expiring","status-preparing":n?.status=="preparing"||n?.status=="download","status-ready":n?.status=="ready","status-error":n?.status=="error"}])},[o("span",{textContent:c(e.fmt?.title(n?.status))},null,8,i5),n?.status=="error"?(l(),d("span",{key:0,textContent:c(": "+n?.statusMessage)},null,8,a5)):p("v-if",!0)],2)]),o("div",l5,[o("span",null,[t[13]||(t[13]=o("i",{class:"fab fa-github","aria-hidden":"true"},null,-1)),o("a",{href:e.safeUrl("https://github.com/"+n?.source?.repositoryFullName+"/pull/"+n?.source?.pullRequestId)},c(n?.source?.repositoryFullName)+"#"+c(n?.source?.pullRequestId),9,d5)]),o("span",{class:A(["status-badge",{"status-ready":n?.merged,"status-removed":n?.state=="open","status-error":n?.state=="closed"&&!n?.merged}]),style:{"font-size":"10px"}},c(e.fmt?.title(n?.merged?"merged":n?.state)),3),o("span",u5,"anonymized "+c(e.fmt?.humanTime(n?.anonymizeDate)),1)])]),o("div",c5,[n?.conference?(l(),d("span",p5,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(n?.conference),1)])):p("v-if",!0),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Terms: "+n?.options?.terms?.join(", ")},[t[15]||(t[15]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),b(" "+c(e.fmt?.number(n?.options?.terms?.length)),1)],8,f5),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Views: "+e.fmt?.number(n?.pageView)},[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),b(" "+c(e.fmt?.number(n?.pageView)),1)],8,m5),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Last view: "+e.fmt?.date(n?.lastView)},[t[17]||(t[17]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-calendar"})],-1)),b(" "+c(e.fmt?.humanTime(n?.lastView)),1)],8,h5),n?.options?.expirationMode!="never"&&n?.status=="ready"?(l(),d("span",v5,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" Expire: "+c(e.fmt?.humanTime(n?.options?.expirationDate)),1)])):p("v-if",!0)])]),o("div",g5,[o("div",y5,[t[24]||(t[24]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Actions ",-1)),o("div",b5,[o("a",{class:"dropdown-item",href:e.safeUrl("/pull-request-anonymize/"+n?.pullRequestId)},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,w5),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.updatePullRequest(n),["prevent"])},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update ",-1)])],8,k5),[[W,n?.status=="ready"||n?.status=="error"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.updatePullRequest(n),["prevent"])},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable ",-1)])],8,E5),[[W,n?.status=="removed"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:me(a=>e.removePullRequest(n),["prevent"])},[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove ",-1)])],8,C5),[[W,n?.status=="ready"]]),o("a",{class:"dropdown-item",href:e.safeUrl("/pr/"+n?.pullRequestId+"/")},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View PR ",-1)])],8,_5)])])])],2))),256)),e.filteredPullRequests?.length==0?(l(),d("li",S5,[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No pull requests to display.",-1)])])):p("v-if",!0)])])])}var N5={class:"container paper-page paper-settings"},D5={class:"paper-settings-body"},R5={class:"paper-settings-toc"},T5={class:"paper-settings-main"},A5={id:"settings-quota",class:"paper-settings-section"},O5={key:1,class:"quota-row","aria-hidden":"true"},I5={class:"quota-item"},P5={id:"settings-terms",class:"paper-settings-section"},V5={class:"form-group"},q5={class:"form-control",id:"terms",name:"terms",rows:"4",placeholder:`Jane Smith + label names the service and the tooltip says who to contact. `),t[17]||(t[17]=o("li",{class:"nav-item d-none d-lg-block"},[o("a",{class:"nav-link",target:"_blank",rel:"noopener",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",title:"Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors.","data-offset":"30"},[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-bug"})]),b("Report a bug ")])],-1)),e.isDarkMode?p("v-if",!0):(l(),d("li",O3,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to dark mode","aria-label":"Switch to dark mode",role:"button",onClick:t[0]||(t[0]=de(n=>{e.darkMode(!0)},["prevent"]))},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",I3,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to light mode","aria-label":"Switch to light mode",role:"button",onClick:t[1]||(t[1]=de(n=>{e.darkMode(!1)},["prevent"]))},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-sun"})],-1)])])])):p("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",P3,[...t[15]||(t[15]=[o("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[o("i",{class:"fab fa-github mr-1"}),b(" Sign in ")],-1)])])):p("v-if",!0),e.user?(l(),d("li",V3,[o("a",q3,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,M3)):p("v-if",!0),o("span",$3,c(e.user?.username),1)]),o("div",L3,[o("h6",U3,"Signed in as @"+c(e.user?.username),1),t[16]||(t[16]=pe('SettingsDefaults, quotas, accountGitHub connectionsRepository access and OAuthClaim an anonymizationAttach an existing mirror to your accountReport a bugAbout this service, not a paperSource codeSupport the projectSign out',9))])])):p("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,F3)):p("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[6]||(t[6]=de(n=>e.respondToEmailPrompt("later"),["prevent"]))},[o("form",{onSubmit:t[5]||(t[5]=de(n=>e.respondToEmailPrompt("save"),["prevent"]))},[t[19]||(t[19]=o("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[20]||(t[20]=o("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[21]||(t[21]=o("label",{for:"email-prompt-address"},"Email address",-1)),D(o("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[2]||(t[2]=n=>e.emailPromptAddress=n),disabled:e.emailPromptBusy},null,8,z3),[[to,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p",H3,c(e.emailPromptError),1)):p("v-if",!0),o("div",B3,[o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[3]||(t[3]=n=>e.respondToEmailPrompt("later"))},"Remind me later",8,j3),o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[4]||(t[4]=n=>e.respondToEmailPrompt("never"))},"Never",8,G3),o("button",{type:"submit",class:"btn btn-ink",disabled:e.emailPromptBusy},c(e.emailPromptBusy?"Saving\u2026":"Save"),9,W3)])],32)],32)):p("v-if",!0)],64)}var K3={class:"paper-landing"},Y3={class:"paper-hero"},J3={class:"paper-hero-copy"},Q3={class:"paper-cta-row"},X3={key:0,href:"/signin",target:"_self",class:"btn-hero"},Z3={key:1,href:"/anonymize",class:"btn-hero"},x3={class:"paper-stats paper-wrap",id:"metrics","aria-label":"Usage over the last 60 days"},eP={class:"paper-stats-grid"},tP={class:"paper-stat-value"},oP={class:"paper-stat-label"},nP=["viewBox"],sP=["x","y","width","height"],rP={key:1,class:"paper-stat-delta"},iP={class:"paper-features paper-wrap","aria-label":"Product features"},aP={class:"paper-features-list",role:"tablist","aria-label":"Features","aria-orientation":"vertical"},lP=["onClick","onKeydown","id","aria-controls","aria-selected","tabindex"],dP={class:"paper-eyebrow"},uP={class:"paper-feature-title"},cP={class:"paper-feature-more"},pP={class:"paper-feature-title paper-feature-title-m","aria-hidden":"true"},fP=["href","target"],mP={class:"paper-features-stage"},hP=["id","aria-labelledby"],vP={class:"paper-frame"},yP={class:"paper-frame-bar","aria-hidden":"true"},gP={class:"url"},bP=["src","alt"],wP={class:"paper-footer"},kP={class:"paper-footer-inner"},EP={class:"paper-footer-col"},CP={key:0,href:"/dashboard"},_P={key:1,href:"/conferences"},SP={class:"paper-footer-foot"};function Ul(e,t){return l(),d("div",K3,[p(" Hero: copy on the left, the product on the right "),o("section",Y3,[o("div",J3,[t[2]||(t[2]=o("div",{class:"paper-eyebrow"},"For double-blind peer review",-1)),t[3]||(t[3]=o("h1",{class:"hero-title"},[b(" Share the code,"),o("br"),o("span",{class:"accent"},"not the author.")],-1)),t[4]||(t[4]=o("p",{class:"hero-subtitle"}," Anonymous GitHub makes a read-only mirror of your repository, pull request, or gist. It redacts the terms you choose in text files, so reviewers can browse your artifact through an anonymous link. ",-1)),o("div",Q3,[e.user?p("v-if",!0):(l(),d("a",X3,[...t[0]||(t[0]=[o("i",{class:"fab fa-github mr-2","aria-hidden":"true"},null,-1),b("Sign in with GitHub ",-1)])])),e.user?(l(),d("a",Z3," Anonymize a repository \u2192 ")):p("v-if",!0),t[1]||(t[1]=o("a",{class:"paper-link-arrow",target:"_self",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/"},"See an anonymized repository \u2192",-1))]),t[5]||(t[5]=o("ul",{class:"paper-reassure"},[o("li",null,"Free and open source"),o("li",null,"Read-only: never writes to your repos"),o("li",null,"Expires on the date you set")],-1))]),t[6]||(t[6]=pe('
A reviewer preview with the author, affiliation, and email replaced by anonymous terms
',1))]),p(" Proof "),t[16]||(t[16]=pe('
Trusted by authors at
ICSEFSEOOPSLA
',1)),p(" Live stats "),o("section",x3,[t[7]||(t[7]=o("div",{class:"paper-stats-meta"},[o("div",{class:"paper-stats-meta-left"},"Live \xB7 last 60 days"),o("div",{class:"paper-stats-meta-right"},[o("span",{class:"paper-stats-dot","aria-hidden":"true"}),b(" updated daily ")])],-1)),o("div",eP,[(l(!0),d(X,null,ae(e.cards,(n,r)=>(l(),d("div",{class:"paper-stat-card",key:n?.key},[o("div",tP,c(e.fmt?.bigNum(n?.total)),1),o("div",oP,c(n?.label),1),e.history[n?.key].bars?.length>1?(l(),d("svg",{key:0,class:"paper-stat-bars",preserveAspectRatio:"none","aria-hidden":"true",viewBox:"0 0 "+e.history[n?.key].viewW+" 36"},[(l(!0),d(X,null,ae(e.history[n?.key].bars,(s,i)=>(l(),d("rect",{key:i,class:A({"is-latest":i===e.history[n.key].bars.length-1}),x:s?.x,y:s?.y,width:s?.w,height:s?.h},null,10,sP))),128))],8,nP)):p("v-if",!0),e.history[n?.key].bars?.length>1?(l(),d("div",rP," +"+c(e.fmt?.number(e.history[n?.key].deltaToday))+" today ",1)):p("v-if",!0)]))),128))])]),p(" Before / after "),t[17]||(t[17]=o("section",{class:"paper-section-head paper-wrap"},[o("div",null,[o("div",{class:"paper-eyebrow"},"Before \xB7 after"),o("h2",null,[b("The same repository, "),o("em",null,"minus you.")])]),o("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),t[18]||(t[18]=o("div",{class:"paper-preview paper-wrap","aria-label":"Before and after example"},[o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"Before \xB7 your repo"),o("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),b(),o("strong",null,"DeepLearnUtils")]),o("div",null,"Developed by Jane Smith at MIT CSAIL."),o("div",null,"See Smith et\xA0al., \u201CAttention That Works,\u201D 2026."),o("div",null,"Contact: jane.smith@mit.edu")])]),o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"After \xB7 anonymous mirror"),o("span",{class:"pane-url"},"anonymous.4open.science/r/paper-7f2a")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),b(),o("strong",null,"DeepLearnUtils")]),o("div",null,[b("Developed by "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),b(" at "),o("span",{class:"redact",role:"img","aria-label":"redacted affiliation"},"XXXX-2"),b(".")]),o("div",null,[b("See "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),b(" et\xA0al., \u201CAttention That Works,\u201D 2026.")]),o("div",null,[b("Contact: "),o("span",{class:"redact",role:"img","aria-label":"redacted email address"},"XXXX-3")])])])],-1)),p(" What you get: one screenshot, three tabs "),t[19]||(t[19]=o("section",{class:"paper-section-head paper-wrap",id:"about"},[o("div",null,[o("div",{class:"paper-eyebrow"},"What you get"),o("h2",null,[b("Anonymize, review, "),o("em",null,"manage.")])]),o("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),o("section",iP,[o("div",aP,[(l(!0),d(X,null,ae(e.features,(n,r)=>(l(),d("div",{class:A(["paper-feature",{"is-on":e.feature===n?.key}]),key:n?.key},[o("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:s=>e.selectFeature(n.key),onKeydown:s=>e.featureKeydown(s,r),id:"feature-tab-"+n?.key,"aria-controls":"feature-panel-"+n?.key,"aria-selected":e.feature===n?.key,tabindex:e.feature===n?.key?0:-1},[o("span",dP,c(n?.num)+" \xB7 "+c(n?.eyebrow),1),o("span",uP,[b(c(n?.title)+" ",1),o("em",null,c(n?.accent),1)])],40,lP),o("div",cP,[o("span",pP,[b(c(n?.title)+" ",1),o("em",null,c(n?.accent),1)]),o("p",null,c(n?.text),1),o("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(n)),target:e.featureTarget(n)},c(n?.cta)+" \u2192",9,fP)])],2))),128))]),o("div",mP,[(l(!0),d(X,null,ae(e.features,(n,r)=>D((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:n?.key,id:"feature-panel-"+n?.key,"aria-labelledby":"feature-tab-"+n?.key},[o("div",vP,[o("div",yP,[t[8]||(t[8]=o("span",{class:"dots"},[o("i"),o("i"),o("i")],-1)),o("span",gP,c(n?.url),1)]),o("div",{class:A("paper-crop paper-crop-"+n?.key)},[o("img",{loading:"lazy",width:"2880",height:"1800",src:e.safeUrl(n?.img),alt:n?.alt},null,8,bP)],2)])],8,hP)),[[K,e.feature===n?.key]])),128))])]),p(" FAQ teaser "),t[20]||(t[20]=pe('
Before you sign in

The questions that come up most.

Read the full FAQ \u2192
What access does GitHub sign-in require?

The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories.

Which file formats are supported?

Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged.

What happens when an anonymized repository expires?

You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.

',1)),o("footer",wP,[o("div",kP,[t[12]||(t[12]=o("div",{class:"paper-footer-brand"},[o("div",{class:"paper-footer-mark"},[b("Anonymous "),o("em",null,"GitHub")]),o("p",{class:"paper-footer-tag"}," A read-only, identity-stripped mirror of your repository, built for double-anonymous peer review. ")],-1)),o("div",EP,[t[9]||(t[9]=o("div",{class:"paper-footer-head"},"Product",-1)),t[10]||(t[10]=o("a",{href:"/anonymize"},"Anonymize",-1)),e.user?(l(),d("a",CP,"My work")):p("v-if",!0),e.user?(l(),d("a",_P,"Conferences")):p("v-if",!0),t[11]||(t[11]=o("a",{href:"/faq"},"FAQ",-1))]),t[13]||(t[13]=pe('',2))]),t[15]||(t[15]=o("div",{class:"paper-footer-rule"},null,-1)),o("div",SP,[o("span",null,"\xA9 "+c(e.year||2026)+" Anonymous GitHub \xB7 GPL-3.0 licensed",1),t[14]||(t[14]=o("span",{class:"paper-footer-meta"},"Built for reviewers, by researchers.",-1))])])])}var NP={class:"paper-empty"},DP={class:"paper-empty-inner"},RP={key:0,class:"paper-eyebrow"},TP={key:1,class:"paper-eyebrow"},AP={key:2,class:"paper-empty-title"},OP=["textContent"];function Fl(e,t){return l(),d("div",NP,[o("div",DP,[e.error?p("v-if",!0):(l(),d("div",RP,"Working")),e.error?(l(),d("div",TP,"Error")):p("v-if",!0),e.error?p("v-if",!0):(l(),d("h1",AP,[...t[0]||(t[0]=[b(" Loading",-1),o("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:c(e.fmt.translate(e.error))},null,8,OP)):p("v-if",!0)])])}var IP={class:"container paper-page paper-settings"},PP={class:"paper-crumbs"},VP={class:"here"},qP={class:"paper-page-title"},MP={class:"paper-settings-body"},$P={class:"paper-settings-toc"},LP={href:"#conf-billing"},UP={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},FP={id:"conf-basics",class:"paper-settings-section"},zP={class:"form-group"},HP={class:"invalid-feedback"},BP={class:"invalid-feedback"},jP={class:"form-group"},GP={class:"invalid-feedback"},WP={class:"form-group"},KP={class:"invalid-feedback"},YP={class:"invalid-feedback"},JP={id:"conf-window",class:"paper-settings-section"},QP={class:"form-grid-2"},XP={class:"form-group"},ZP={class:"invalid-feedback"},xP={class:"invalid-feedback"},eV={class:"form-group"},tV={class:"invalid-feedback"},oV={class:"invalid-feedback"},nV={id:"conf-rendering",class:"paper-settings-section"},sV={class:"form-check"},rV={class:"form-check-input",type:"checkbox",id:"link",name:"link"},iV={class:"form-check"},aV={class:"form-check-input",type:"checkbox",id:"image",name:"image"},lV={class:"form-check"},dV={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},uV={class:"form-check"},cV={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},pV={id:"conf-features",class:"paper-settings-section"},fV={class:"form-check"},mV={class:"form-check-input",type:"checkbox",id:"update",name:"update"},hV={class:"form-check"},vV={class:"form-check-input",type:"checkbox",id:"page",name:"page"},yV={id:"conf-plan",class:"paper-settings-section"},gV={class:"paper-plan-grid"},bV=["value"],wV=["textContent"],kV={class:"paper-plan-price"},EV=["innerHTML"],CV={key:0,id:"conf-billing",class:"paper-settings-section"},_V={class:"form-group"},SV={class:"form-group"},NV={class:"form-group"},DV={class:"form-group"},RV={class:"form-grid-3"},TV={class:"form-group"},AV={class:"form-group"},OV={class:"form-group"},IV={class:"form-group"},PV={class:"paper-settings-footer"},VV=["textContent"],qV=["textContent"],MV=["disabled"];function zl(e,t){let n=be("paper-scrollspy"),r=be("field"),s=be("form");return l(),d("div",IP,[o("div",PP,[t[1]||(t[1]=o("a",{href:"/dashboard"},"My work",-1)),t[2]||(t[2]=b(" \xA0/\xA0 ",-1)),t[3]||(t[3]=o("a",{href:"/conferences"},"Conferences",-1)),t[4]||(t[4]=b(" \xA0/\xA0 ",-1)),o("span",VP,c(e.editionMode?"Edit":"New"),1)]),o("h1",qP,[b(c(e.editionMode?"Edit":"Create a")+" ",1),t[5]||(t[5]=o("em",null,"conference",-1))]),t[43]||(t[43]=o("p",{class:"paper-page-lede"}," Give chairs access to every anonymization submitted to a venue, and lift author quotas during the review window. ",-1)),o("div",MP,[D((l(),d("aside",$P,[t[7]||(t[7]=o("div",{class:"paper-settings-toc-head"},"On this page",-1)),o("nav",null,[t[6]||(t[6]=pe('BasicsReview windowRendering defaultsFeaturesPlan',5)),D(o("a",LP,"Billing",512),[[K,e.plan?.pricePerRepo>0]])])])),[[n]]),D((l(),d("form",UP,[o("section",FP,[t[12]||(t[12]=o("div",{class:"paper-section-eyebrow"},"Basics",-1)),o("div",zP,[t[8]||(t[8]=o("label",{class:"paper-field-label",for:"name"},"Conference name",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.name?.invalid&&(e.conference?.name?.touched||e.conference?.submitted)}]),name:"name",id:"name",required:"",placeholder:"e.g. International Conference on Software Engineering"},null,2),[[r,{state:e.viewState,set:i=>{e.options.name=i},value:e.options?.name,form:"conference",options:{}}]]),D(o("div",HP," The name of the conference is invalid. ",512),[[K,e.conference?.name?.errors?.invalid]]),D(o("div",BP," The name of the conference is required. ",512),[[K,e.conference?.name?.errors?.required]])]),o("div",jP,[t[9]||(t[9]=o("label",{class:"paper-field-label",for:"url"},"Website",-1)),D(o("input",{type:"url",class:A(["form-control",{"is-invalid":e.conference?.url?.invalid&&(e.conference?.url?.touched||e.conference?.submitted)}]),name:"url",id:"url",placeholder:"https://example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.url=i},value:e.options?.url,form:"conference",options:{}}]]),D(o("div",GP," The url of the conference is invalid. ",512),[[K,e.conference?.url?.errors?.url]])]),o("div",WP,[t[10]||(t[10]=o("label",{class:"paper-field-label",for:"conferenceID"},"Conference ID",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.conferenceID?.invalid&&(e.conference?.conferenceID?.touched||e.conference?.submitted)}]),name:"conferenceID",id:"conferenceID",required:"",pattern:"[a-zA-Z0-9\\-_]{3,10}",placeholder:"ICSE26"},null,2),[[r,{state:e.viewState,set:i=>{e.options.conferenceID=i},value:e.options?.conferenceID,form:"conference",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},[b("3\u201310 characters, letters, numbers, "),o("code",null,"-"),b(" and "),o("code",null,"_"),b(". Authors reference this when they anonymize.")],-1)),D(o("div",{class:"invalid-feedback"}," The conference ID '"+c(e.options?.conferenceID)+"' is already used. ",513),[[K,e.conference?.conferenceID?.errors?.used]]),D(o("div",KP," The conference ID is required. ",512),[[K,e.conference?.conferenceID?.errors?.required]]),D(o("div",YP," The format of the conference ID is incorrect ([a-zA-Z0-9-_]{3,10}). ",512),[[K,e.conference?.conferenceID?.errors?.pattern]])])]),o("section",JP,[t[17]||(t[17]=o("div",{class:"paper-section-eyebrow"},"Review window",-1)),o("div",QP,[o("div",XP,[t[13]||(t[13]=o("label",{class:"paper-field-label",for:"startDate"},"Start date",-1)),D(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.startDate?.invalid&&(e.conference?.startDate?.touched||e.conference?.submitted)}]),name:"startDate",id:"startDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.startDate=i},value:e.options?.startDate,form:"conference",options:{}}]]),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Beginning of the review process.",-1)),D(o("div",ZP," Start date is required. ",512),[[K,e.conference?.startDate?.errors?.required]]),D(o("div",xP," Start date must be before end date. ",512),[[K,e.conference?.startDate?.errors?.invalid]])]),o("div",eV,[t[15]||(t[15]=o("label",{class:"paper-field-label",for:"endDate"},"End date",-1)),D(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.endDate?.invalid&&(e.conference?.endDate?.touched||e.conference?.submitted)}]),name:"endDate",id:"endDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.endDate=i},value:e.options?.endDate,form:"conference",options:{}}]]),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"All repositories expire on this date.",-1)),D(o("div",tV," End date is required. ",512),[[K,e.conference?.endDate?.errors?.required]]),D(o("div",oV," End date is invalid. ",512),[[K,e.conference?.endDate?.errors?.invalid]])])])]),o("section",nV,[t[26]||(t[26]=o("div",{class:"paper-section-eyebrow"},"Rendering defaults",-1)),o("div",sV,[D(o("input",rV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.link=i},value:e.options?.options?.link,form:"conference",options:{}}]]),t[18]||(t[18]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[19]||(t[19]=o("small",{class:"form-text text-muted"},"Keep or remove all links from text files.",-1))]),o("div",iV,[D(o("input",aV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.image=i},value:e.options?.options?.image,form:"conference",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[21]||(t[21]=o("small",{class:"form-text text-muted"},"Images are not anonymized.",-1))]),o("div",lV,[D(o("input",dV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.pdf=i},value:e.options?.options?.pdf,form:"conference",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[23]||(t[23]=o("small",{class:"form-text text-muted"},"PDFs are not anonymized.",-1))]),o("div",uV,[D(o("input",cV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.notebook=i},value:e.options?.options?.notebook,form:"conference",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[25]||(t[25]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])]),o("section",pV,[t[31]||(t[31]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",fV,[D(o("input",mV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.update=i},value:e.options?.options?.update,form:"conference",options:{}}]]),t[27]||(t[27]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[28]||(t[28]=o("small",{class:"form-text text-muted"},"Pull the latest commit automatically (hourly maximum).",-1))]),o("div",hV,[D(o("input",vV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.page=i},value:e.options?.options?.page,form:"conference",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Enable anonymized GitHub pages.",-1))])]),o("section",yV,[t[33]||(t[33]=o("div",{class:"paper-section-eyebrow"},"Plan",-1)),t[34]||(t[34]=o("p",{class:"paper-section-copy"},"Billed per repository per month, prorated by the day for as long as a repository stays in the conference.",-1)),o("div",gV,[(l(!0),d(X,null,ae(e.plans,(i,a)=>(l(),d("label",{class:A(["paper-plan-card",{selected:e.options?.plan?.planID==i?.id}])},[D(o("input",{type:"radio",name:"planPicker",value:i?.id},null,8,bV),[[r,{state:e.viewState,set:u=>{e.options.plan.planID=u},value:e.options?.plan?.planID,form:"conference",options:{}}]]),o("div",{class:"paper-plan-head",textContent:c(i?.name)},null,8,wV),o("div",kV,[b(c(e.fmt?.number(i?.pricePerRepo))+"\u20AC ",1),t[32]||(t[32]=o("span",{class:"paper-plan-per"},"/ repo / month",-1))]),o("div",{class:"paper-plan-desc",innerHTML:e.sanitize(i?.description)},null,8,EV)],2))),256))])]),e.plan?.pricePerRepo>0?(l(),d("section",CV,[t[42]||(t[42]=o("div",{class:"paper-section-eyebrow"},"Billing",-1)),o("div",_V,[t[35]||(t[35]=o("label",{class:"paper-field-label",for:"billing_name"},"Name",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.billing_name?.invalid&&(e.conference?.billing_name?.touched||e.conference?.submitted)}]),name:"billing_name",id:"billing_name",required:"",placeholder:"First & last name"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.name=i},value:e.options?.billing?.name,form:"conference",options:{}}]])]),o("div",SV,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"email"},"Email",-1)),D(o("input",{type:"email",class:A(["form-control",{"is-invalid":e.conference?.email?.invalid&&(e.conference?.email?.touched||e.conference?.submitted)}]),name:"email",id:"email",required:"",placeholder:"you@example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.email=i},value:e.options?.billing?.email,form:"conference",options:{}}]])]),o("div",NV,[t[37]||(t[37]=o("label",{class:"paper-field-label",for:"inputAddress"},"Address",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress?.invalid&&(e.conference?.inputAddress?.touched||e.conference?.submitted)}]),name:"inputAddress",id:"inputAddress",required:"",placeholder:"1234 Main St"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address=i},value:e.options?.billing?.address,form:"conference",options:{}}]])]),o("div",DV,[D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress2?.invalid&&(e.conference?.inputAddress2?.touched||e.conference?.submitted)}]),name:"inputAddress2",id:"inputAddress2",placeholder:"Apartment, studio, or floor"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address2=i},value:e.options?.billing?.address2,form:"conference",options:{}}]])]),o("div",RV,[o("div",TV,[t[38]||(t[38]=o("label",{class:"paper-field-label",for:"city"},"City",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.city?.invalid&&(e.conference?.city?.touched||e.conference?.submitted)}]),name:"city",id:"city",required:"",placeholder:"City"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.city=i},value:e.options?.billing?.city,form:"conference",options:{}}]])]),o("div",AV,[t[39]||(t[39]=o("label",{class:"paper-field-label",for:"country"},"Country",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.country?.invalid&&(e.conference?.country?.touched||e.conference?.submitted)}]),name:"country",id:"country",required:"",placeholder:"Country"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.country=i},value:e.options?.billing?.country,form:"conference",options:{}}]])]),o("div",OV,[t[40]||(t[40]=o("label",{class:"paper-field-label",for:"zip"},"Zip",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.zip?.invalid&&(e.conference?.zip?.touched||e.conference?.submitted)}]),name:"zip",id:"zip",required:"",placeholder:"Zip"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.zip=i},value:e.options?.billing?.zip,form:"conference",options:{}}]])])]),o("div",IV,[t[41]||(t[41]=o("label",{class:"paper-field-label",for:"vat"},"VAT number",-1)),D(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.vat?.invalid&&(e.conference?.vat?.touched||e.conference?.submitted)}]),name:"vat",id:"vat",placeholder:"VAT Number"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.vat=i},value:e.options?.billing?.vat,form:"conference",options:{}}]])])])):p("v-if",!0),o("div",PV,[e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,VV)):p("v-if",!0),e.message?(l(),d("div",{key:1,class:"alert alert-success",role:"alert",textContent:c(e.message)},null,8,qV)):p("v-if",!0),o("button",{id:"send",disabled:e.saving,type:"submit",class:"btn btn-ink",onClick:t[0]||(t[0]=de(i=>e.submitForm(i,()=>{e.submit(i)}),["prevent"]))},c(e.saving?e.editionMode?"Updating\u2026":"Creating\u2026":e.editionMode?"Update conference":"Create conference"),9,MV)])])),[[s,e.viewState]])])])}var $V={key:0},LV=["innerHTML"],UV={key:3},FV=["src"],zV=["src"],HV={key:7},BV={controls:"controls"},jV=["src"],GV={key:8},WV={key:9,class:"file-error container d-flex h-100"},KV={class:"paper-ratelimit-card m-auto",style:{"max-width":"520px"}},YV={class:"paper-error-msg"},JV={key:10,class:"file-error container d-flex h-100"},QV={class:"paper-error-card file-error-card m-auto",role:"alert"},XV=["textContent"],ZV={key:11,class:"file-error container d-flex h-100"},xV={key:12,class:"file-error container d-flex h-100"},e5={key:13,class:"file-error container d-flex h-100"},t5={key:14,class:"file-error container d-flex h-100"},o5={class:"paper-empty-title m-auto"},n5=["href"];function Hl(e,t){let n=We("html-doc"),r=We("pdfviewer"),s=We("notebook"),i=be("code-editor");return l(),d(X,null,[e.type=="text"?D((l(),d("div",$V,null,512)),[[i,{content:e.content,options:e.aceOption}]]):p("v-if",!0),e.type=="html"?(l(),d("div",{key:1,class:"file-content markdown-body",innerHTML:e.highlightRedactions(e.sanitize(e.content))},null,8,LV)):p("v-if",!0),e.type=="html-doc"&&!e.showSource&&e.content!=null?(l(),Lt(n,{key:2,content:e.content,"base-url":e.fileBaseUrl,"allow-scripts":e.allowScripts},null,8,["content","base-url","allow-scripts"])):p("v-if",!0),(e.type=="code"||e.type=="html-doc"&&e.showSource)&&e.content!=null?D((l(),d("div",UV,null,512)),[[i,{content:e.content,options:e.aceOption}]]):p("v-if",!0),e.type=="image"?(l(),d("img",{key:4,class:"image-content",src:e.safeUrl(e.url)},null,8,FV)):p("v-if",!0),e.type=="media"?(l(),d("iframe",{key:5,class:"h-100 overflow-auto w-100 b-0",src:e.safeUrl(e.url)},null,8,zV)):p("v-if",!0),e.type=="pdf"?(l(),Lt(r,{key:6,src:e.safeUrl(e.url)},null,8,["src"])):p("v-if",!0),e.type=="audio"?(l(),d("div",HV,[o("audio",BV,[o("source",{src:e.safeUrl(e.url)},null,8,jV)])])):p("v-if",!0),e.type=="IPython"?(l(),d("div",GV,[Ce(s,{file:e.url,content:e.content},null,8,["file","content"])])):p("v-if",!0),e.type=="rate_limited"?(l(),d("div",WV,[o("div",KV,[t[2]||(t[2]=pe('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",YV,[t[0]||(t[0]=b("This repository will be available in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[1]||(t[1]=b(". The page will reload automatically.",-1))])])])):p("v-if",!0),e.type=="error"?(l(),d("div",JV,[o("div",QV,[t[3]||(t[3]=o("div",{class:"paper-error-eyebrow"},"Unavailable",-1)),t[4]||(t[4]=o("div",{class:"paper-error-title"},"This content can\u2019t be shown",-1)),o("p",{class:"file-error-msg",textContent:c(e.fmt.translate("ERRORS."+e.content))},null,8,XV),t[5]||(t[5]=o("div",{class:"file-error-actions"},[o("a",{href:"/",class:"btn btn-sm"},"Back to home"),o("a",{href:"/faq",class:"btn btn-sm"},"Read the FAQ")],-1))])])):p("v-if",!0),e.type=="loading"&&!e.error?(l(),d("div",ZV,[...t[6]||(t[6]=[o("h1",{class:"paper-empty-title m-auto"},"Loading\u2026",-1)])])):p("v-if",!0),e.type=="empty"?(l(),d("div",xV,[...t[7]||(t[7]=[o("h1",{class:"paper-empty-title m-auto"},[b("Empty "),o("em",null,"repository"),b(".")],-1)])])):p("v-if",!0),e.content==null&&e.type!="empty"?(l(),d("div",e5,[...t[8]||(t[8]=[o("h1",{class:"paper-empty-title m-auto"},[b("Empty "),o("em",null,"file"),b(".")],-1)])])):p("v-if",!0),e.type=="binary"?(l(),d("div",t5,[o("h1",o5,[t[9]||(t[9]=b("Unsupported ",-1)),t[10]||(t[10]=o("em",null,"binary file",-1)),t[11]||(t[11]=b(". You can ",-1)),o("a",{target:"_blank",href:e.safeUrl(e.url+"&download=true")},"download it",8,n5),t[12]||(t[12]=b(".",-1))])])):p("v-if",!0)],64)}var s5={class:"container page dashboard-page paper-page"},r5={class:"row"},i5={class:"w-100"},a5={class:"w-100","aria-label":"Pull Requests","accept-charset":"UTF-8"},l5={class:"d-flex flex-column flex-md-row align-items-md-center",style:{gap:"8px"}},d5={class:"flex-grow-1"},u5={type:"search",id:"search",class:"form-control","aria-label":"Find a pull request...",placeholder:"Find a pull request...",autocomplete:"off"},c5={class:"d-flex flex-wrap",style:{gap:"6px"}},p5={class:"dropdown"},f5={class:"dropdown-menu","aria-labelledby":"dropdownSort"},m5={class:"form-check dropdown-item"},h5={class:"form-check-input",type:"radio",name:"sort",id:"sortFullName",value:"fullName"},v5={class:"form-check dropdown-item"},y5={class:"form-check-input",type:"radio",name:"sort",id:"sortAnonymizeDate",value:"-anonymizeDate"},g5={class:"form-check dropdown-item"},b5={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},w5={class:"form-check dropdown-item"},k5={class:"form-check-input",type:"radio",name:"sort",id:"sortLastView",value:"-lastView"},E5={class:"form-check dropdown-item"},C5={class:"form-check-input",type:"radio",name:"sort",id:"sortPageView",value:"-pageView"},_5={class:"dropdown"},S5={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},N5={class:"form-check dropdown-item"},D5={class:"form-check-input",type:"checkbox",name:"sort",id:"statusReady",value:"ready"},R5={class:"form-check dropdown-item"},T5={class:"form-check-input",type:"checkbox",name:"sort",id:"statusExpired",value:"expired"},A5={class:"form-check dropdown-item"},O5={class:"form-check-input",type:"checkbox",name:"sort",id:"statusRemoved",value:"removed"},I5={class:"d-flex flex-wrap mt-2",style:{gap:"6px"}},P5={class:"filter-chip"},V5=["onClick"],q5={class:"repo-list w-100"},M5={class:"repo-list-item-content"},$5={class:"repo-list-item-main"},L5={class:"repo-list-item-header"},U5=["textContent","href"],F5=["textContent"],z5=["textContent"],H5={class:"repo-source"},B5=["href"],j5={class:"repo-date"},G5={class:"repo-meta"},W5={key:0,title:"Conference"},K5=["title"],Y5=["title"],J5=["title"],Q5={key:1},X5={class:"repo-list-item-actions"},Z5={class:"dropdown"},x5={class:"dropdown-menu dropdown-menu-right"},eq=["href"],tq=["onClick"],oq=["onClick"],nq=["onClick"],sq=["href"],rq={key:0,class:"repo-list-empty"};function Bl(e,t){let n=be("field"),r=be("form");return l(),d("div",s5,[o("div",r5,[o("div",i5,[t[12]||(t[12]=pe('
My work \xA0/\xA0 Pull requests

Anonymized pull requests

Track PR mirrors you\u2019ve created and their reviewer traffic.

',2)),p(" Search + filters row "),D((l(),d("form",a5,[o("div",l5,[o("div",d5,[D(o("input",u5,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",c5,[o("div",p5,[t[6]||(t[6]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Sort ",-1)),o("div",f5,[t[5]||(t[5]=o("h6",{class:"dropdown-header"},"Select order",-1)),o("div",m5,[D(o("input",h5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[0]||(t[0]=o("label",{class:"form-check-label",for:"sortFullName"},"Pull Request",-1))]),o("div",v5,[D(o("input",y5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[1]||(t[1]=o("label",{class:"form-check-label",for:"sortAnonymizeDate"},"Anonymize Date",-1))]),o("div",g5,[D(o("input",b5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[2]||(t[2]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",w5,[D(o("input",k5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"sortLastView"},"Last View",-1))]),o("div",E5,[D(o("input",C5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortPageView"},"Page View",-1))])])]),o("div",_5,[t[11]||(t[11]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Status ",-1)),o("div",S5,[t[10]||(t[10]=o("h6",{class:"dropdown-header"},"Select status",-1)),o("div",N5,[D(o("input",D5,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.ready=s},value:e.filters?.status?.ready,form:null,options:{}}]]),t[7]||(t[7]=o("label",{class:"form-check-label",for:"statusReady"},"Ready",-1))]),o("div",R5,[D(o("input",T5,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.expired=s},value:e.filters?.status?.expired,form:null,options:{}}]]),t[8]||(t[8]=o("label",{class:"form-check-label",for:"statusExpired"},"Expired",-1))]),o("div",A5,[D(o("input",O5,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.removed=s},value:e.filters?.status?.removed,form:null,options:{}}]]),t[9]||(t[9]=o("label",{class:"form-check-label",for:"statusRemoved"},"Removed",-1))])])])])])])),[[r,e.viewState]]),p(" Active filter chips "),D(o("div",I5,[(l(!0),d(X,null,ae(e.filters?.status,(s,i,a)=>D((l(),d("span",P5,[b(c(e.fmt?.title(i))+" ",1),o("button",{type:"button",class:"filter-chip-close","aria-label":"Remove filter",onClick:u=>{e.filters.status[i]=!0}}," \xD7 ",8,V5)],512)),[[K,!s]])),256))],512),[[K,e.filters?.status?.ready===!1||e.filters?.status?.expired===!1||e.filters?.status?.removed===!1]])]),p(" Pull request list "),o("ul",q5,[(l(!0),d(X,null,ae(e.filteredPullRequests,(s,i)=>(l(),d("li",{class:A(["repo-list-item",{"repo-inactive":s?.status=="expired"||s?.status=="removed"||s?.status=="error"}])},[o("div",M5,[o("div",$5,[o("div",L5,[o("a",{class:"repo-name",textContent:c(s?.pullRequestId),href:e.safeUrl("/pr/"+s?.pullRequestId)},null,8,U5),o("span",{class:A(["status-badge",{"status-removed":s?.status=="removed"||s?.status=="expired"||s?.status=="removing"||s?.status=="expiring","status-preparing":s?.status=="preparing"||s?.status=="download","status-ready":s?.status=="ready","status-error":s?.status=="error"}])},[o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,F5),s?.status=="error"?(l(),d("span",{key:0,textContent:c(": "+s?.statusMessage)},null,8,z5)):p("v-if",!0)],2)]),o("div",H5,[o("span",null,[t[13]||(t[13]=o("i",{class:"fab fa-github","aria-hidden":"true"},null,-1)),o("a",{href:e.safeUrl("https://github.com/"+s?.source?.repositoryFullName+"/pull/"+s?.source?.pullRequestId)},c(s?.source?.repositoryFullName)+"#"+c(s?.source?.pullRequestId),9,B5)]),o("span",{class:A(["status-badge",{"status-ready":s?.merged,"status-removed":s?.state=="open","status-error":s?.state=="closed"&&!s?.merged}]),style:{"font-size":"10px"}},c(e.fmt?.title(s?.merged?"merged":s?.state)),3),o("span",j5,"anonymized "+c(e.fmt?.humanTime(s?.anonymizeDate)),1)])]),o("div",G5,[s?.conference?(l(),d("span",W5,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(s?.conference),1)])):p("v-if",!0),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Terms: "+s?.options?.terms?.join(", ")},[t[15]||(t[15]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),b(" "+c(e.fmt?.number(s?.options?.terms?.length)),1)],8,K5),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Views: "+e.fmt?.number(s?.pageView)},[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),b(" "+c(e.fmt?.number(s?.pageView)),1)],8,Y5),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Last view: "+e.fmt?.date(s?.lastView)},[t[17]||(t[17]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-calendar"})],-1)),b(" "+c(e.fmt?.humanTime(s?.lastView)),1)],8,J5),s?.options?.expirationMode!="never"&&s?.status=="ready"?(l(),d("span",Q5,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" Expire: "+c(e.fmt?.humanTime(s?.options?.expirationDate)),1)])):p("v-if",!0)])]),o("div",X5,[o("div",Z5,[t[24]||(t[24]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Actions ",-1)),o("div",x5,[o("a",{class:"dropdown-item",href:e.safeUrl("/pull-request-anonymize/"+s?.pullRequestId)},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,eq),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.updatePullRequest(s),["prevent"])},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update ",-1)])],8,tq),[[K,s?.status=="ready"||s?.status=="error"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.updatePullRequest(s),["prevent"])},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable ",-1)])],8,oq),[[K,s?.status=="removed"]]),D(o("a",{class:"dropdown-item",href:"#",onClick:de(a=>e.removePullRequest(s),["prevent"])},[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove ",-1)])],8,nq),[[K,s?.status=="ready"]]),o("a",{class:"dropdown-item",href:e.safeUrl("/pr/"+s?.pullRequestId+"/")},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View PR ",-1)])],8,sq)])])])],2))),256)),e.filteredPullRequests?.length==0?(l(),d("li",rq,[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No pull requests to display.",-1)])])):p("v-if",!0)])])])}var iq={class:"container paper-page paper-settings"},aq={class:"paper-settings-body"},lq={class:"paper-settings-toc"},dq={class:"paper-settings-main"},uq={id:"settings-quota",class:"paper-settings-section"},cq={key:1,class:"quota-row","aria-hidden":"true"},pq={class:"quota-item"},fq={id:"settings-terms",class:"paper-settings-section"},mq={class:"form-group"},hq={class:"form-control",id:"terms",name:"terms",rows:"4",placeholder:`Jane Smith MIT CSAIL -jane.smith@example.org`},M5={id:"termsHelp",class:"form-text text-muted"},$5={class:"invalid-feedback"},L5={id:"settings-display",class:"paper-settings-section"},U5={class:"form-group paper-check-list"},F5={class:"form-check"},z5={class:"form-check-input",type:"checkbox",id:"link",name:"link"},H5={class:"form-check"},B5={class:"form-check-input",type:"checkbox",id:"image",name:"image"},j5={class:"form-check"},G5={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},W5={class:"form-check"},K5={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},Y5={id:"settings-features",class:"paper-settings-section"},J5={class:"form-group paper-check-list"},Q5={class:"form-check"},X5={class:"form-check-input",type:"checkbox",id:"page",name:"page"},Z5={class:"form-check"},x5={class:"form-check-input",type:"checkbox",id:"loc",name:"loc"},eq={class:"form-check"},tq={class:"form-check-input",type:"checkbox",id:"update",name:"update"},oq={class:"form-group"},sq={class:"form-control",id:"mode",name:"mode"},nq={class:"form-text text-muted"},rq={id:"settings-expiration",class:"paper-settings-section"},iq={class:"form-group"},aq={class:"form-control",id:"expiration",name:"expiration"},lq={key:0,class:"draft-status",role:"status"},dq={key:1,class:"draft-status"},uq={class:"paper-settings-footer"},cq={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},pq=["textContent"],fq={class:"paper-settings-actions"},mq=["disabled"],hq={key:0,class:"ui-icon mr-1","aria-hidden":"true"},vq={id:"settings-account",class:"paper-settings-section"},gq={class:"paper-account-card"},yq=["src"],bq={class:"paper-account-identity"},wq={class:"paper-account-name"},kq={class:"paper-danger-zone"},Eq={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Cq=["textContent"],_q=["disabled"];function $l(e,t){let s=We("quota-usage"),r=be("paper-scrollspy"),n=be("field"),i=be("form");return l(),d("div",N5,[t[52]||(t[52]=ce('
My work \xA0/\xA0 Settings

Your settings

Defaults applied to every new anonymization, your quotas, and your account.

',3)),o("div",D5,[N((l(),d("aside",R5,[...t[4]||(t[4]=[ce('
On this page
',2)])])),[[r]]),o("div",T5,[p(" Account usage shares the dashboard component. "),o("section",A5,[t[6]||(t[6]=o("div",{class:"paper-section-eyebrow"},"Quota",-1)),t[7]||(t[7]=o("p",{class:"paper-section-copy"},"What you are using across all your anonymizations. Conferences can lift these limits during a review window.",-1)),e.quota?(l(),Mt(s,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):p("v-if",!0),e.quota?p("v-if",!0):(l(),d("div",O5,[(l(),d(X,null,re([1,2,3],(a,u)=>o("div",I5,[...t[5]||(t[5]=[o("div",{class:"quota-header"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}}),o("span",{class:"skeleton skeleton-line",style:{width:"25%"}})],-1),o("div",{class:"quota-track"},null,-1)])])),64))]))]),N((l(),d("form",{class:"form needs-validation",name:"defaultsForm",novalidate:"",onSubmit:t[2]||(t[2]=me(a=>e.submitForm(a,()=>{e.saveDefault(a)}),["prevent"]))},[o("section",P5,[t[13]||(t[13]=o("div",{class:"paper-section-eyebrow"},"Terms to redact",-1)),t[14]||(t[14]=o("p",{class:"paper-section-copy"},"Pre-filled in every new anonymization. You can still edit the list per anonymization.",-1)),o("div",V5,[t[12]||(t[12]=o("label",{class:"paper-field-label",for:"terms"},"Default terms",-1)),N(o("textarea",q5,null,512),[[n,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),o("small",M5,[t[8]||(t[8]=b(" One term per line (regex allowed). Each match is replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[9]||(t[9]=b(", or use ",-1)),t[10]||(t[10]=o("code",null,"term=>replacement",-1)),t[11]||(t[11]=b(" to pick your own. ",-1))]),N(o("div",$5," Terms are in an invalid format ",512),[[W,e.defaultsForm?.terms?.errors?.format]])])]),o("section",L5,[t[23]||(t[23]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),t[24]||(t[24]=o("p",{class:"paper-section-copy"},"What reviewers can see inside an anonymized repository.",-1)),o("div",U5,[o("div",F5,[N(o("input",z5,null,512),[[n,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"Unchecked, every link in text files is removed.",-1))]),o("div",H5,[N(o("input",B5,null,512),[[n,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"defaultsForm",options:{}}]]),t[17]||(t[17]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[18]||(t[18]=o("small",{class:"form-text text-muted"},"Images are shown as is. They are not anonymized.",-1))]),o("div",j5,[N(o("input",G5,null,512),[[n,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"defaultsForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[20]||(t[20]=o("small",{class:"form-text text-muted"},"PDFs are shown as is. They are not anonymized.",-1))]),o("div",W5,[N(o("input",K5,null,512),[[n,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[22]||(t[22]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])])]),o("section",Y5,[t[33]||(t[33]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",J5,[o("div",Q5,[N(o("input",X5,null,512),[[n,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"defaultsForm",options:{}}]]),t[25]||(t[25]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[26]||(t[26]=o("small",{class:"form-text text-muted"},"Serve an anonymized copy of the repository's GitHub Pages site. Only pages built from the anonymized branch are supported.",-1))]),o("div",Z5,[N(o("input",x5,null,512),[[n,{state:e.viewState,set:a=>{e.options.loc=a},value:e.options?.loc,form:"defaultsForm",options:{}}]]),t[27]||(t[27]=o("label",{class:"form-check-label",for:"loc"},"Lines of code",-1)),t[28]||(t[28]=o("small",{class:"form-text text-muted"},"Show the line count of the repository in the explorer.",-1))]),o("div",eq,[N(o("input",tq,null,512),[[n,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"defaultsForm",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))])]),o("div",oq,[t[32]||(t[32]=o("label",{class:"paper-field-label",for:"mode"},"Fetch mode",-1)),N((l(),d("select",sq,[...t[31]||(t[31]=[o("option",{value:"GitHubStream",selected:""},"Stream from GitHub on demand",-1),o("option",{value:"GitHubDownload"},"Download to Anonymous GitHub",-1)])])),[[n,{state:e.viewState,set:a=>{e.options.mode=a},value:e.options?.mode,form:"defaultsForm",options:{}}]]),o("small",nq," Download is faster for reviewers and enables every feature. Streaming is the only option above "+c(e.fmt?.humanFileSize(e.site_options?.MAX_REPO_SIZE*1024))+". ",1)])]),o("section",rq,[t[37]||(t[37]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",iq,[t[35]||(t[35]=o("label",{class:"paper-field-label",for:"expiration"},"When an anonymization expires",-1)),N((l(),d("select",aq,[...t[34]||(t[34]=[o("option",{value:"redirect"},"Redirect visitors to the GitHub repository",-1),o("option",{value:"remove",selected:""},"Remove the anonymized repository",-1)])])),[[n,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"defaultsForm",options:{}}]]),t[36]||(t[36]=o("small",{class:"form-text text-muted"}," The expiration date itself is chosen per anonymization. Redirecting reveals the source repository, so pick it only once the review is over. ",-1))])]),e.draftRestored?(l(),d("div",lq,[t[38]||(t[38]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[0]||(t[0]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",dq,[b(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[1]||(t[1]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):p("v-if",!0),o("div",uq,[e.error?(l(),d("div",cq,[t[39]||(t[39]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[40]||(t[40]=b()),o("span",{textContent:c(e.error)},null,8,pq)])):p("v-if",!0),o("div",fq,[o("button",{id:"save",type:"submit",class:"btn btn-ink",disabled:e.saving},[e.message?(l(),d("svg",hq,[...t[41]||(t[41]=[o("use",{href:"#ui-icon-check"},null,-1)])])):p("v-if",!0),b(c(e.saving?"Saving\u2026":e.message?"Saved":"Save defaults"),1)],8,mq),t[42]||(t[42]=o("span",{class:"paper-settings-hint"},"Applies to new anonymizations only. Existing ones keep their settings.",-1))])])],32)),[[i,e.viewState]]),o("section",vq,[t[50]||(t[50]=o("div",{class:"paper-section-eyebrow"},"Account",-1)),o("div",gq,[e.user?.photo?(l(),d("img",{key:0,width:"40",height:"40",class:"rounded-circle",alt:"",src:e.safeUrl(e.user?.photo)},null,8,yq)):p("v-if",!0),o("div",bq,[o("div",wq,"@"+c(e.user?.username),1),t[43]||(t[43]=o("div",{class:"paper-account-meta"},"Signed in with GitHub. Anonymous GitHub only reads your repositories.",-1))]),t[44]||(t[44]=o("a",{class:"btn btn-outline-ink",href:"/api/user/logout",target:"_self"},"Sign out",-1))]),t[51]||(t[51]=o("a",{class:"paper-settings-connection-link",href:"/connections"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",null,[b("GitHub connections"),o("small",null,"Manage repository access and legacy OAuth.")]),o("span",{"aria-hidden":"true"},"\u2192")],-1)),o("div",kq,[t[48]||(t[48]=o("div",{class:"paper-danger-head"},"Delete account",-1)),t[49]||(t[49]=o("p",{class:"paper-danger-copy"}," Removes all your anonymized repositories, gists, and pull requests, revokes the application's access to your GitHub account, and erases your personal data (username, email, access tokens). This cannot be undone. ",-1)),e.deleteError?(l(),d("div",Eq,[t[45]||(t[45]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[46]||(t[46]=b()),o("span",{textContent:c(e.deleteError)},null,8,Cq)])):p("v-if",!0),o("button",{type:"button",class:"btn btn-outline-danger",onClick:t[3]||(t[3]=a=>e.deleteAccount()),disabled:e.deletingAccount},[t[47]||(t[47]=o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)),b(c(e.deletingAccount?"Deleting\u2026":"Delete my account"),1)],8,_q)])])])])])}var Sq={class:"pr-page"},Nq={class:"container paper-page pr-page-inner"},Dq={class:"pr-header"},Rq={class:"pr-title-row"},Tq={class:"paper-page-title pr-title"},Aq=["textContent"],Oq={key:1,class:"text-muted"},Iq=["href"],Pq={class:"pr-header-meta"},Vq={key:0,class:"pr-meta-item"},qq=["textContent"],Mq={key:1,class:"pr-meta-item"},$q=["textContent"],Lq={key:2,class:"pr-meta-item"},Uq=["textContent"],Fq={key:0,class:"pr-body-card"},zq={key:1,class:"paper-tabs",role:"tablist"},Hq=["aria-selected","tabindex"],Bq=["aria-selected","tabindex"],jq=["textContent"],Gq={class:"paper-tab-content"},Wq={key:0,role:"tabpanel",id:"pr-diff-panel","aria-labelledby":"pr-diff-tab"},Kq=["innerHTML"],Yq={key:1,role:"tabpanel",id:"pr-comments-panel","aria-labelledby":"pr-comments-tab"},Jq={class:"pr-comments"},Qq={class:"pr-comment"},Xq={class:"pr-comment-head"},Zq={key:0,class:"pr-comment-author"},xq=["textContent"],eM=["textContent"],tM={key:0,class:"pr-comment-body"},oM={key:0,class:"paper-table-empty"};function Ll(e,t){let s=We("markdown");return l(),d("div",Sq,[o("div",Nq,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),b(" \xA0/\xA0 "),o("span",{class:"here"},"Pull request")],-1)),o("header",Dq,[o("div",Rq,[o("h1",Tq,[e.details?.title?(l(),d("span",{key:0,textContent:c(e.details?.title)},null,8,Aq)):p("v-if",!0),e.details?.title?p("v-if",!0):(l(),d("span",Oq,"Untitled pull request"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/pull-request-anonymize/"+e.pullRequestId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,Iq)):p("v-if",!0)]),o("div",Pq,[o("span",{class:A(["paper-pill",{good:e.details?.merged,warn:e.details?.state=="open",bad:e.details?.state=="closed"&&!e.details?.merged}])},[o("span",{class:A(["status-dot",{"status-ready":e.details?.merged,"status-error":e.details?.state=="closed"&&!e.details?.merged}])},null,2),b(" "+c(e.details?.merged?"Merged":e.fmt.title(e.details?.state)),1)],2),e.details?.baseRepositoryFullName?(l(),d("span",Vq,[t[5]||(t[5]=o("i",{class:"fab fa-github"},null,-1)),t[6]||(t[6]=b()),o("span",{textContent:c(e.details?.baseRepositoryFullName)},null,8,qq)])):p("v-if",!0),e.details?.updatedDate?(l(),d("span",Mq,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=b()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,$q)])):p("v-if",!0),e.details?.anonymizeDate?(l(),d("span",Lq,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=b(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,Uq)])):p("v-if",!0)])]),e.details?.body?(l(),d("section",Fq,[t[11]||(t[11]=o("div",{class:"paper-section-eyebrow"},"Description",-1)),Ce(s,{content:e.details?.body},null,8,["content"])])):p("v-if",!0),e.details?.diff||e.details?.comments?(l(),d("nav",zq,[e.details?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="diff"}]),type:"button",role:"tab",id:"pr-diff-tab","aria-selected":e.tabState?.active==="diff","aria-controls":"pr-diff-panel",tabindex:e.tabState?.active==="diff"?0:-1,onKeydown:t[0]||(t[0]=r=>e.previewTabKeydown(r)),onClick:t[1]||(t[1]=r=>e.tabState.active="diff")},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Diff ",-1)])],42,Hq)):p("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"pr-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"pr-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=r=>e.previewTabKeydown(r)),onClick:t[3]||(t[3]=r=>e.tabState.active="comments")},[t[13]||(t[13]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,jq)],42,Bq)):p("v-if",!0)])):p("v-if",!0),o("div",Gq,[e.details?.diff&&e.tabState?.active=="diff"?(l(),d("div",Wq,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.details?.diff))},null,8,Kq)])):p("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",Yq,[o("ul",Jq,[(l(!0),d(X,null,re(e.details?.comments,(r,n)=>(l(),d("li",Qq,[o("div",Xq,[r?.author?(l(),d("span",Zq,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=b(" @",-1)),o("span",{textContent:c(r?.author)},null,8,xq)])):p("v-if",!0),r?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(r?.updatedDate))},null,8,eM)):p("v-if",!0)]),r?.body?(l(),d("div",tM,[Ce(s,{content:r?.body},null,8,["content"])])):p("v-if",!0)]))),256)),e.details?.comments?.length?p("v-if",!0):(l(),d("li",oM,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this pull request.",-1)])]))])])):p("v-if",!0)])])])}var sM={class:"container paper-page status-page"},nM={class:"d-flex align-items-center justify-content-between flex-wrap",style:{gap:"12px"}},rM={class:"paper-page-title"},iM=["textContent"],aM={key:1},lM={class:"paper-settings-section"},dM=["textContent"],uM={key:0,class:"paper-section-copy"},cM={key:1,class:"paper-ratelimit-card",role:"status"},pM={class:"paper-error-msg"},fM=["aria-valuenow"],mM={class:"paper-progress-label"},hM=["textContent"],vM={key:0},gM=["textContent"],yM={class:"paper-progress-pct"},bM={key:3,class:"paper-error-card",role:"alert"},wM={key:0,class:"paper-error-msg"},kM={key:1,class:"paper-error-msg"},EM={class:"paper-error-actions"},CM=["href"],_M={key:4,class:"share-link"},SM={class:"share-link-row"},NM=["value"],DM={class:"ui-icon","aria-hidden":"true"},RM=["href"],TM=["textContent"],AM={class:"share-link-actions"},OM=["href"],IM=["href"];function Ul(e,t){return l(),d("div",sM,[t[16]||(t[16]=o("div",{class:"paper-crumbs"},[b("Anonymization \xA0/\xA0 "),o("span",{class:"here"},"Status")],-1)),o("div",nM,[o("div",null,[o("h1",rM,[t[2]||(t[2]=b("Status of ",-1)),o("em",null,c(e.repoId),1)]),t[3]||(t[3]=o("p",{class:"paper-page-lede"},"Track progress as your anonymization is prepared.",-1))]),o("span",{class:A(["status-pill",{"status-pill-ready":e.repo?.status=="ready","status-pill-error":e.repo?.status=="error","status-pill-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-pill-ratelimit":e.rateLimitResetAt}])},[o("span",{class:A(["status-dot",{"status-ready":e.repo?.status=="ready","status-error":e.repo?.status=="error","status-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-ratelimit":e.rateLimitResetAt}])},null,2),e.rateLimitResetAt?p("v-if",!0):(l(),d("span",{key:0,textContent:c(e.fmt?.title(e.repo?.status))},null,8,iM)),e.rateLimitResetAt?(l(),d("span",aM,"Rate limited")):p("v-if",!0)],2)]),o("section",lM,[o("div",{class:"paper-section-eyebrow",textContent:c(e.repo?.status=="ready"?"Your anonymous link":"Progress")},null,8,dM),e.repo?.status!="ready"?(l(),d("p",uM,[...t[4]||(t[4]=[b(" The repository will take a few minutes to get ready, depending on its size. Visit the ",-1),o("a",{href:"/faq"},"FAQ",-1),b(" for more information. ",-1)])])):p("v-if",!0),e.rateLimitResetAt?(l(),d("div",cM,[t[7]||(t[7]=ce('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",pM,[t[5]||(t[5]=b("Anonymization will resume automatically in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[6]||(t[6]=b(". No action needed \u2014 the job is queued and will continue where it left off.",-1))])])):p("v-if",!0),e.repo?.status!="error"&&e.repo?.status!="ready"&&!e.rateLimitResetAt?(l(),d("div",{key:2,class:A(["paper-progress",{"paper-progress-ready":e.repo?.status=="ready"}]),role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.progress},[o("div",{class:"paper-progress-bar",style:qe("width: "+e.progress+"%;")},null,4),o("div",mM,[o("span",{textContent:c(e.fmt?.title(e.repo?.status))},null,8,hM),e.repo?.statusMessage?(l(),d("span",vM,[t[8]||(t[8]=b("\xA0\xB7\xA0",-1)),o("span",{textContent:c(e.repo?.statusMessage)},null,8,gM)])):p("v-if",!0),o("span",yM,c(e.progress||0)+"%",1)])],10,fM)):p("v-if",!0),e.repo?.status=="error"&&!e.rateLimitResetAt?(l(),d("div",bM,[t[11]||(t[11]=ce('
Anonymization failed
Something went wrong while preparing this repository.
',1)),e.repo?.statusMessage?(l(),d("p",wM,c(e.fmt?.translate("ERRORS."+e.repo?.statusMessage)),1)):p("v-if",!0),e.repo?.statusMessage?p("v-if",!0):(l(),d("p",kM,"No additional details were reported. The most common causes are private repositories, missing branches, and rate limits.")),t[12]||(t[12]=o("ul",{class:"paper-error-hints"},[o("li",null,"Make sure the source URL points to a repository or pull request you can access."),o("li",null,"Check that the chosen branch and commit still exist on GitHub."),o("li",null,"If you just signed in, the access token may need a moment to propagate \u2014 try again.")],-1)),o("div",EM,[o("a",{class:"btn btn-ink",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[9]||(t[9]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit anonymization",-1)])],8,CM),t[10]||(t[10]=ce(' Read the FAQ Report a bug in Anonymous GitHub',2))])])):p("v-if",!0),e.repo?.status=="ready"?(l(),d("div",_M,[t[15]||(t[15]=o("p",{class:"paper-section-copy"},"Reviewers can browse the repository at this address without seeing who you are.",-1)),o("div",SM,[o("input",{id:"share-url",class:"form-control share-link-input",readonly:"","aria-label":"Anonymous link",value:e.shareUrl,onFocus:t[0]||(t[0]=s=>s.target.select())},null,40,NM),o("button",{type:"button",class:"btn btn-ink",onClick:t[1]||(t[1]=s=>e.copyShareUrl())},[(l(),d("svg",DM,[o("use",{href:e.copied?"#ui-icon-check":"#project-icon-copy"},null,8,RM)])),o("span",{"aria-live":"polite",textContent:c(e.copied?"Copied":"Copy link")},null,8,TM)])]),o("div",AM,[o("a",{class:"btn",target:"_self",href:e.safeUrl("/r/"+e.repoId+"/")},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" Open repository ",-1)])],8,OM),e.repo?.options?.page?(l(),d("a",{key:0,class:"btn",target:"_self",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" Open GitHub page ",-1)])],8,IM)):p("v-if",!0)])])):p("v-if",!0)]),t[17]||(t[17]=ce('
Support Anonymous GitHub

A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.

',1))])}var nn={"partials/connections.htm":pl,"partials/signin.htm":fl,"partials/404.htm":ml,"partials/admin/conferences.htm":hl,"partials/admin/errors.htm":vl,"partials/admin/overview.htm":gl,"partials/admin/queues.htm":yl,"partials/admin/repositories.htm":bl,"partials/admin/user.htm":wl,"partials/admin/users.htm":kl,"partials/anonymize.htm":El,"partials/anonymizePullRequest.htm":Cl,"partials/claim.htm":_l,"partials/conference.htm":Sl,"partials/conferences.htm":Nl,"partials/dashboard.htm":Dl,"partials/explorer.htm":Rl,"partials/faq.htm":Tl,"partials/gist.htm":Al,"partials/header.htm":Ol,"partials/home.htm":Il,"partials/loading.htm":Pl,"partials/newConference.htm":Vl,"partials/pageView.htm":ql,"partials/pr-dashboard.htm":Ml,"partials/profile.htm":$l,"partials/pullRequest.htm":Ll,"partials/status.htm":Ul};var PM={class:"ui-icon-definitions","aria-hidden":"true",focusable:"false"};function Fl(e,t){return l(),d("svg",PM,[...t[0]||(t[0]=[ce('',1)])])}function zl(e,t){e==="partials/explorer.htm"&&(t.sidebarCollapsed=window.matchMedia?.("(max-width: 767px)").matches||!1),e==="partials/anonymize.htm"&&(t.prTabState={active:t.options.diff?"diff":"comments"},t.watchGroup(["options.diff","options.comments"],()=>{t.options[t.prTabState.active]||(t.prTabState.active=t.options.diff?"diff":t.options.comments?"comments":null)})),e==="partials/gist.htm"&&(t.tabState={active:t.details?.files?"files":"comments"}),["partials/conferences.htm","partials/conference.htm"].includes(e)&&(t.statusLabels={ready:"Ready",expired:"Expired",removed:"Removed"});let r={"partials/dashboard.htm":["filteredItems",()=>t.items,"itemFilter"],"partials/conferences.htm":["filteredConferences",()=>t.conferences,"conferenceFilter"],"partials/conference.htm":["filteredRepositories",()=>t.conference?.repositories,"repoFiler"],"partials/admin/repositories.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/user.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/users.htm":["filteredUsers",()=>t.users,"userFiler"],"partials/admin/conferences.htm":["filteredConferences",()=>t.conferences]}[e];if(r){let n=ot(()=>t.fmt.orderBy(t.fmt.filter(r[1](),t[r[2]]),t.orderBy));Object.defineProperty(t,r[0],{configurable:!0,get:()=>n.value})}}function Hl(e=(...t)=>fetch(...t)){async function t(r,n,i,a={}){let u=new URL(n,window.location.href);for(let[h,k]of Object.entries(a.params||{}))if(k!=null)for(let m of Array.isArray(k)?k:[k])u.searchParams.append(h,typeof m=="object"?JSON.stringify(m):m);let f=new AbortController,v;a.timeout?.then?a.timeout.then(()=>f.abort()):a.timeout&&(v=setTimeout(()=>f.abort(),a.timeout));try{let h={Accept:"application/json, text/plain, */*",...a.headers},k=document.cookie.match(/(?:^|;\s*)XSRF-TOKEN=([^;]*)/);k&&u.origin===window.location.origin&&(h["X-XSRF-TOKEN"]=decodeURIComponent(k[1]));let m;i!==void 0&&(i instanceof FormData?m=i:(h["Content-Type"]||(h["Content-Type"]="application/json;charset=utf-8"),m=JSON.stringify(i)));let E=await e(u.href,{method:r,headers:h,body:m,credentials:"same-origin",signal:f.signal}),y=await E.text(),w=y;if(a.transformResponse)w=a.transformResponse(y);else if(y&&(/json/i.test(E.headers.get("content-type")||"")||/^[\[{]/.test(y.trim())))try{w=JSON.parse(y)}catch{}let D={data:w,status:E.status,headers:R=>E.headers.get(R)};if(!E.ok)throw D;return D}catch(h){throw h.name==="AbortError"?{status:-1,data:null}:h}finally{clearTimeout(v)}}let s={};for(let r of["get","delete","head"])s[r]=(n,i)=>t(r.toUpperCase(),n,void 0,i);for(let r of["post","put","patch"])s[r]=(n,i,a)=>t(r.toUpperCase(),n,i,a);return s}var Bl={resolve:e=>Promise.resolve(e),reject:e=>Promise.reject(e),all:e=>Promise.all(e),defer(){let e,t;return{promise:new Promise((r,n)=>{e=r,t=n}),resolve:e,reject:t}}};var jl=function(e){function t(s){return s=s||{used:0,total:0},s.unlimited=!s.total,s.percent=s.unlimited?0:Math.min(100,s.used*100/s.total),s.level=s.unlimited?"unlimited":s.percent>=95?"danger":s.percent>=80?"warn":"ok",s}return{decorate:t,load:function(){return e.get("/api/user/quota").then(s=>{let r=s.data||{};return r.storage=t(r.storage),r.file=t(r.file),r.repository=t(r.repository),r})}}};var ir={};dd(ir,{bigNum:()=>qM,date:()=>WM,diff:()=>FM,filter:()=>jM,humanFileSize:()=>VM,humanTime:()=>MM,limitTo:()=>BM,number:()=>zM,orderBy:()=>GM,plural:()=>KM,statusLabel:()=>LM,statusMsg:()=>UM,title:()=>$M,uppercase:()=>HM});var VM=e=>window.humanFileSize(e),qM=(function(){return function(t){let s=Number(t)||0,r=Math.abs(s);return r<1e3?String(s):r<1e4?(s/1e3).toFixed(1).replace(/\.0$/,"")+"k":r<1e6?Math.round(s/1e3)+"k":r<1e7?(s/1e6).toFixed(1).replace(/\.0$/,"")+"M":Math.round(s/1e6)+"M"}})(),MM=(function(){return function(t){if(!t)return"never";t instanceof Date&&(t=Math.round((Date.now()-t)/1e3)),(typeof t=="string"||typeof t=="number")&&(t=Math.round((Date.now()-new Date(t))/1e3));var s=t<0?"from now":"ago";if(Math.abs(t)>7200*24){let f=new Date;return f.setSeconds(f.getSeconds()-t),"on "+f.toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}t=Math.abs(t);for(var r=[t/60/60/24/365,t/60/60/24/30,t/60/60/24/7,t/60/60/24,t/60/60,t/60,t],n=["year","month","week","day","hour","minute","second"],i=0;i1&&(u+="s"),a>=1)return a+" "+u+" "+s}return"0 seconds "+s}})(),$M=(function(){return function(e){if(!e)return e;e=e.toLowerCase();var t=e.split(" "),s=t.map(function(r){return r.charAt(0).toUpperCase()+r.substring(1,r.length)});return s.join(" ")}})(),LM=(function(){var e={ready:"Ready",error:"Error",expired:"Expired",expiring:"Expiring",removed:"Removed",removing:"Removing",queue:"Queued",download:"Downloading",downloaded:"Downloaded",preparing:"Preparing",anonymizing:"Anonymizing"};return function(t){if(!t)return"";if(e[t])return e[t];var s=String(t).replace(/[_-]+/g," ").toLowerCase();return s.charAt(0).toUpperCase()+s.slice(1)}})(),UM=(function(){var e={branch_not_found:"Branch not found on GitHub",repo_not_found:"Repository not found on GitHub",repository_not_found:"Repository not found on GitHub",repo_not_accessible:"Repository is not accessible with your token",pr_not_found:"Pull request not found on GitHub",gist_not_found:"Gist not found on GitHub",commit_not_found:"Commit not found on GitHub",repo_too_big:"Repository exceeds the size limit",quota_exceeded:"Storage quota exceeded",incomplete_record:"Incomplete record: missing identifier"};return function(t){if(!t)return t;var s=t.match(/^rate_limited:(\d+)$/);if(s){var r=Math.max(0,Math.ceil((parseInt(s[1],10)-Date.now())/1e3));if(r<=0)return"Rate limited \u2014 resuming soon";var n=Math.floor(r/60),i=r%60;return"Rate limited \u2014 retrying in "+(n>0?n+"m "+i+"s":i+"s")}if(e[t])return e[t];if(/^[a-z0-9]+(_[a-z0-9]+)+$/.test(t)){var a=t.replace(/_/g," ");return a.charAt(0).toUpperCase()+a.slice(1)}return t}})(),FM=(function(e){let t=r=>r.replace(/&/g,"&").replace(//g,">");function s(r,n){if(!n)return;let i=n.newPath&&n.newPath!=="/dev/null"?n.newPath:n.oldPath||"",a=n.oldPath==="/dev/null"?"added":n.newPath==="/dev/null"?"deleted":n.oldPath&&n.newPath&&n.oldPath!==n.newPath?"renamed":"modified";if(r.push('
'),r.push('
'+t(i)+''+a+"
"),n.lines.length){r.push('');for(let u of n.lines)r.push('");r.push("
'+(u.oldNo||"")+''+(u.newNo||"")+''+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+''+t(u.text)+"
")}r.push("
")}return function(r){if(!r)return r;let n=[],i=null,a=0,u=0,f=()=>(i||(i={oldPath:"",newPath:"",lines:[]}),i),v=()=>{i&&(i.lines.length||i.oldPath||i.newPath)&&(s(n,i),i=null)},h=r.split(` -`);for(let k=0;ke});function zM(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function HM(e){return String(e??"").toUpperCase()}function BM(e,t,s=0){return(e||[]).slice(s,s+t)}function jM(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function GM(e,t){if(!t)return e||[];let s=Array.isArray(t)?t:[t];return[...e||[]].sort((r,n)=>{for(let i of s){let a=i[0]==="-"?-1:1;i=i.replace(/^[+-]/,"");let u=i.split(".").reduce((v,h)=>v?.[h],r),f=i.split(".").reduce((v,h)=>v?.[h],n);if(typeof u=="string"&&(u=u.toLowerCase()),typeof f=="string"&&(f=f.toLowerCase()),u!==f)return(u==null?-1:f==null?1:ur[n])}function KM(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var ar={ERRORS:{cache_busy:"Downloads are busy. Please try again shortly.",invalid_sort:"The selected sort order is invalid.",invalid_cursor:"This project page is no longer valid. Reload the list.",repository_changed:"The repository changed while processing. Please retry.",repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"Unknown error, contact the admin.",unreachable:"Anonymous GitHub is unreachable, contact the admin.",request_error:"Unable to download the file, check your connection or contact the admin.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"The repository was not found on GitHub. Check the URL and spelling, make sure you are signed in to the account that can see it, and confirm the repo isn't hidden under an org that restricts third-party app access.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please try again shortly.",pull_request_not_available:"This pull request is currently not available.",invalid_pullRequestId:"The pull request ID is invalid.",pullRequestId_already_used:"This pull request ID is already in use. Please choose a different one.",repository_not_specified:"A repository must be specified for this pull request.",pullRequestId_not_specified:"A pull request ID must be specified.",pullRequestId_is_not_a_number:"The source pull request ID must be a number.",options_not_provided:"Anonymization options are mandatory.",terms_not_specified:"Anonymization terms must be specified.",invalid_terms_format:"Terms are in an invalid format.",missing_content:"No content was provided to the anonymization preview.",unable_to_anonymize:"An error happened during the anonymization process. Please try later or report the issue.",non_supported_mode:"The selected anonymization mode is invalid, only download and stream are supported.",invalid_path:"The provided path is invalid or missing.",path_not_specified:"A file path must be specified.",path_not_defined:"The file path has not been resolved yet.",invalid_file_path:"The requested file path is not valid.",invalid_request:"The request is missing required fields or is malformed.",invalid_project_name:"Use a project name of up to 100 characters without line breaks or control characters.",no_file_selected:"Please select a file.",file_not_found:"The requested file is not found.",file_not_accessible:"The requested file is not accessible.",file_not_supported:"The file type is not supported. Anonymous GitHub cannot handle it.",file_too_big:"The file size exceeds the limit of Anonymous GitHub.",is_folder:"The path points to a folder.",folder_not_supported:"The path points to a folder. Please select a file.",unable_to_write_file:"Unable to write file on disk.",download_not_enabled:"Repository downloads are not enabled on this server.",unable_to_download:"The repository could not be downloaded. Please try again later.",s3_config_not_provided:"Object storage has not been configured on this server.",stats_unsupported:"Statistics are only supported in download mode.",branches_not_found:"The requested branch is not found.",readme_not_available:"No README for the repository is found.",page_not_supported_on_different_branch:"GitHub Pages is served from a different branch than the one selected. Pick the branch that GitHub Pages is configured to use.",page_not_activated:"GitHub Pages is not enabled on this repository. Enable it in the repository settings on GitHub before anonymizing.",is_removed:"This resource has been removed and is no longer available.",conf_name_missing:"A conference name is required.",conf_id_missing:"A conference ID is required.",conf_id_used:"This conference ID is already in use. Please choose a different one.",conf_start_date_missing:"A start date is required for the conference.",conf_end_date_missing:"An end date is required for the conference.",conf_start_date_invalid:"The start date must be before the end date.",conf_end_date_invalid:"The end date must be in the future.",invalid_plan:"The selected plan is not valid.",conference_not_found:"The requested conference could not be found.",conf_not_found:"The requested conference could not be found.",conf_not_activated:"The conference is not activated.",billing_missing:"Billing information is required for this plan.",billing_name_missing:"A billing name is required.",billing_email_missing:"A billing email is required.",billing_address_missing:"A billing address is required.",billing_city_missing:"A billing city is required.",billing_zip_missing:"A billing ZIP/postal code is required.",billing_country_missing:"A billing country is required.",queue_not_found:"The specified queue could not be found.",job_not_found:"The specified job could not be found in the queue.",error_retrying_job:"An error occurred while retrying the job.",gist_expired:"The gist is expired.",gist_not_ready:"Anonymous GitHub is still processing the gist, it can take several minutes.",gist_not_found:"The requested gist could not be found.",gist_not_available:"This gist is currently not available.",invalid_gistId:"The format of the gist ID is invalid.",gistId_not_specified:"A gist ID must be provided.",gistId_already_used:"The gist ID is already used.",missing_token:"An authentication token is required.",invalid_token:"The provided authentication token is invalid.",login_failed:"Login failed. Please try again.",server_error:"An unexpected server error occurred. Please try again later.",username_not_defined:"A username must be provided.",github_user_not_found:"The specified GitHub user could not be found.",cannot_coauthor_self:"You cannot add yourself as a co-author.",storage_write_size_mismatch:"The downloaded file was smaller than expected. The upstream source may have returned an incomplete response \u2014 please try again.",storage_read_error:"An error occurred while reading the file from storage \u2014 please try again.",upstream_error:"A temporary error occurred while fetching from GitHub \u2014 please try again.",token_expired:"Your GitHub access token has expired. Please log out and log in again to refresh it.",job_is_active:"This job is currently running \u2014 wait for it to finish or remove it first.",github_app_access_required:"Allow this repository on GitHub using the read-only access button, then retry. Organization access may require administrator approval.",github_app_reconnect_required:"Reconnect your GitHub App account to restore read-only access.",github_app_disabled:"New GitHub App connections are currently unavailable.",github_oauth_required:"Connect legacy GitHub OAuth to use this feature.",github_identity_mismatch:"Use the same GitHub account that you are signed in with here.",github_app_permissions_invalid:"The GitHub App must be configured with read-only permissions.",github_unavailable:"GitHub is temporarily unavailable. Please retry.",connection_changed:"The repository connection changed. Reload and try again.",repository_busy:"Wait for the repository operation to finish before changing its connection.",invalid_connection:"Select a supported GitHub connection.",github_oauth_disabled:"Legacy OAuth sign-in is currently disabled.",invalid_auth_state:"The authorization session expired. Please start again from Anonymous GitHub.",invalid_webhook_signature:"The webhook signature is invalid.",webhook_processing_failed:"Webhook processing failed. Retry the delivery.",github_app_authorization_cancelled:"GitHub authorization was cancelled.",github_account_link_required:"Verify your existing account with your previous GitHub connection. Future sign-ins will use the GitHub App.",github_app_refresh_busy:"GitHub credentials are being renewed. Please retry shortly.",github_grant_revocation_failed:"Unable to revoke the GitHub grant. Please retry.",another_login_required:"Connect and verify another sign-in method before disconnecting OAuth.",oauth_resources_remaining:"Some resources still require OAuth. Migrate or remove them before disconnecting.",invalid_github_path:"The GitHub repository path is invalid."},WARNINGS:{page_not_enabled_on_repo:"GitHub Pages is not enabled on this repository. Enable it in the repository's Settings \u2192 Pages on GitHub, then refresh.",page_branch_mismatch:"GitHub Pages on this repository is served from the '{{pageBranch}}' branch, but you selected '{{selectedBranch}}'. Switch the branch above to '{{pageBranch}}' to anonymize the Pages site.",folder_truncated:"This folder has more than 10,000 entries; only a partial listing is shown.",repo_truncated:"Some folders in this repository have too many files to be fully listed. Affected folders are marked with a warning icon.",submodules_not_included:"This repository uses git submodules. Submodule contents are not included in the anonymized repository and appear as empty folders."}};var Gl={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=et(null);return qt(()=>{let r=[t.value][0];r.classList.add("html-doc");function n(){r.innerHTML="";let i=e.content;if(typeof i!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let u=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&u.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",u.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),r.appendChild(a);let f="";e.baseUrl&&(f=''),a.srcdoc=f+i}Be(()=>e.content,n,{immediate:!0}),Be(()=>e.baseUrl,n,{immediate:!0}),Be(()=>e.allowScripts,n,{immediate:!0})}),()=>ke("html-doc",{ref:t})}};var Wl={name:"pdfviewer",props:["src"],setup(e){let t=et(null);return qt(()=>{let s=[t.value],r=400,n=[.5,.75,1,1.25,1.5,2,3],i=1e3,a=s[0];a.classList.add("pdf-viewer");let u=null,f=[],v=!1,h=null,k=1,m=1,E=0,y=0,w=612/792,D=0,R=null,T=new Map,I=0;function H(M){let g=T.get(M);g&&(g.cancelled=!0,g.task?.cancel?.(),T.delete(M));let S=M.querySelector("canvas");S&&(S.width=0,S.height=0),M.innerHTML="",delete M.dataset.state}let q=document.createElement("div");q.className="pdf-toolbar";let U=document.createElement("div");U.className="pdf-pages",U.tabIndex=0,U.setAttribute("aria-label","PDF pages"),a.appendChild(q),a.appendChild(U);function ae(M,g,S){let V=document.createElement("button");return V.type="button",V.className="pdf-toolbar-btn",V.title=g,V.setAttribute("aria-label",g),V.innerHTML='',V.addEventListener("click",S),V}let ie=ae("fa-chevron-up","Previous page",function(){_e(m-1)}),_=ae("fa-chevron-down","Next page",function(){_e(m+1)}),O=document.createElement("input");O.type="text",O.className="pdf-toolbar-page",O.setAttribute("aria-label","Page number"),O.title="Page number \u2014 type a page and press Enter",O.addEventListener("keydown",function(M){M.key==="Enter"&&(_e(parseInt(O.value,10)),O.blur())}),O.addEventListener("blur",function(){O.value=String(m)});let Y=document.createElement("span");Y.className="pdf-toolbar-count";let Z=ae("fa-search-minus","Zoom out",function(){C(n[Math.max(0,pe()-1)])}),te=ae("fa-search-plus","Zoom in",function(){C(n[Math.min(n.length-1,pe()+1)])}),J=document.createElement("button");J.type="button",J.className="pdf-toolbar-btn pdf-toolbar-zoom",J.title="Reset zoom to fit the width",J.setAttribute("aria-label","Reset zoom to fit the width"),J.addEventListener("click",function(){C(1)}),q.appendChild(ie),q.appendChild(_);let se=document.createElement("span");se.className="pdf-toolbar-group",se.appendChild(O),se.appendChild(Y),q.appendChild(se);let ue=document.createElement("span");ue.className="pdf-toolbar-group pdf-toolbar-right",ue.appendChild(Z),ue.appendChild(J),ue.appendChild(te),q.appendChild(ue);function pe(){let M=0;for(let g=0;g=M,J.textContent=Math.round(k*100)+"%",Z.disabled=pe()===0,te.disabled=pe()===n.length-1}function Oe(M){let g=f[M-1];g&&(U.scrollTop+=g.getBoundingClientRect().top-U.getBoundingClientRect().top)}function _e(M){if(!u||isNaN(M))return;let g=Math.min(Math.max(1,M),u.numPages);f[g-1]&&(Oe(g),m=g,E=g,y=Date.now()+800,le(),Ee())}function Ue(){if(!f.length||Date.now(){}),R=null),h&&(clearTimeout(h),h=null),u&&(u.destroy(),u=null),f=[],m=1,U.innerHTML="",le()}function $e(){U.innerHTML="";let M=document.createElement("div");M.className="pdf-viewer-error",M.textContent="This PDF could not be displayed.",U.appendChild(M)}function Pe(){let M=Math.max(120,U.clientWidth-24);return Math.round(Math.min(M,i)*k)}function He(M,g,S){let V=window.devicePixelRatio||1,z=M.getViewport({scale:1}),j=parseFloat(g.style.width);if(!j)return;let L=M.getViewport({scale:j/z.width*V}),G=document.createElement("canvas");return G.width=Math.floor(L.width),G.height=Math.floor(L.height),G.style.width=j+"px",G.style.height=Math.floor(L.height/V)+"px",g.innerHTML="",g.appendChild(G),g.style.height=G.style.height,S.task=M.render({canvasContext:G.getContext("2d"),viewport:L}),S.task.promise}function Ee(){if(!u)return;let M=D,g=U.getBoundingClientRect(),S=g.top-r,V=g.top+U.clientHeight+r,z=f.map((L,G)=>({slot:L,i:G,rect:L.getBoundingClientRect()})).filter(L=>L.rect.top<=V&&L.rect.bottom>=S).sort((L,G)=>Math.abs(L.rect.top-g.top)-Math.abs(G.rect.top-g.top)).slice(0,6),j=new Set(z.map(L=>L.slot));for(let L of T.keys())j.has(L)||H(L);for(let{slot:L,i:G}of z){if(L.dataset.state||I>=2)continue;let ee={cancelled:!1,task:null};T.set(L,ee),I++,L.dataset.state="rendering";let x;u.getPage(G+1).then(K=>{if(x=K,!(ee.cancelled||M!==D))return He(x,L,ee)}).then(()=>{ee.cancelled||M!==D||(L.dataset.state="done",E&&Date.now(){!ee.cancelled&&M===D&&(L.dataset.state="failed")}).finally(()=>{I--,x?.cleanup?.(),u&&Ee()})}}function F(){v||(v=!0,window.requestAnimationFrame(function(){v=!1,Ue(),Ee()}))}function oe(){let M=!1;function g(){M||(M=!0,Ee())}window.requestAnimationFrame(g),window.setTimeout(g,50)}function Q(){D++,f.forEach(H);let M=Pe();f.forEach(function(g){delete g.dataset.state,g.innerHTML="",g.style.width=M+"px",g.style.height=Math.round(M/w)+"px"}),Ee()}function C(M){if(!u||!f.length||M===k)return;let g=m;k=M,le(),Q(),_e(g)}function P(){u&&(h&&clearTimeout(h),h=setTimeout(function(){h=null,u&&f.length&&Q()},250))}function B(M){if(Re(),!M)return;let g=D;R=pdfjsLib.getDocument({url:M,isEvalSupported:!1,standardFontDataUrl:"/script/external/pdf-standard-fonts/",cMapUrl:"/script/external/pdf-cmaps/",cMapPacked:!0}),R.promise.then(function(S){if(g!==D){S.destroy();return}return u=S,u.getPage(1).then(function(V){if(g!==D)return;let z=V.getViewport({scale:1});z.width&&z.height&&(w=z.width/z.height);let j=Pe();for(let L=1;L<=u.numPages;L++){let G=document.createElement("div");G.className="pdf-viewer-page",G.style.width=j+"px",G.style.height=Math.round(j/w)+"px",U.appendChild(G),f.push(G)}le(),oe()})}).catch(function(){g===D&&$e()})}U.addEventListener("scroll",F,{passive:!0}),$(window).on("resize",P),le(),Be(()=>e.src,B,{immediate:!0}),ao(function(){U.removeEventListener("scroll",F),$(window).off("resize",P),Re()})}),()=>ke("pdfviewer",{ref:t})}};var JM={key:0,class:"quota-row quota-usage"},QM={class:"quota-header"},XM={class:"quota-label"},ZM={class:"project-type-svg","aria-hidden":"true"},xM=["href"],e8={key:0,class:"quota-percent"},t8={key:1,class:"quota-unlimited-tag"},o8={class:"quota-value"},s8={key:0},n8=["aria-label","aria-valuenow","aria-valuemax","aria-valuetext"],r8={key:1,class:"quota-remaining"},i8={key:2,class:"quota-remaining quota-limit"};function Kl(e,t){return e.quota?(l(),d("div",JM,[(l(),d(X,null,re([{key:"repository",label:"Repositories",kind:"count",icon:"project-type-repo"},{key:"storage",label:"Storage",kind:"bytes",icon:"project-icon-storage"},{key:"file",label:"Files",kind:"count",icon:"project-icon-file"}],s=>o("div",{class:A(["quota-item","quota-"+e.quota[s.key].level]),key:s.key},[o("div",QM,[o("span",XM,[(l(),d("svg",ZM,[o("use",{href:"#"+s.icon},null,8,xM)])),b(c(s.label),1)]),e.quota[s.key].unlimited?p("v-if",!0):(l(),d("span",e8,c(e.fmt.number(e.quota[s.key].percent,0))+"% used",1)),e.quota[s.key].unlimited?(l(),d("span",t8,"Unlimited")):p("v-if",!0)]),o("div",o8,[o("strong",null,c(e.formatAmount(e.quota[s.key].used,s.kind)),1),e.quota[s.key].unlimited?p("v-if",!0):(l(),d("span",s8," / "+c(e.formatAmount(e.quota[s.key].total,s.kind)),1))]),e.quota[s.key].unlimited?p("v-if",!0):(l(),d("div",{key:0,class:A(["quota-track","quota-"+e.quota[s.key].level]),role:"progressbar","aria-valuemin":"0","aria-label":s.label+" quota","aria-valuenow":Math.min(e.quota[s.key].used,e.quota[s.key].total),"aria-valuemax":e.quota[s.key].total,"aria-valuetext":e.fmt.number(e.quota[s.key].percent,0)+"% used"},[e.quota[s?.key].unlimited?p("v-if",!0):(l(),d("div",{key:0,class:"quota-fill",style:qe({width:e.quota[s.key].percent+"%"})},null,4))],10,n8)),!e.quota[s.key].unlimited&&e.quota[s.key].used=e.quota[s.key].total?(l(),d("p",i8,c(e.quota[s.key].used>e.quota[s.key].total?"Limit exceeded":"Limit reached"),1)):p("v-if",!0)],2)),64))])):p("v-if",!0)}var a8={props:["quota","fmt"],setup(e){return{formatAmount:(t,s)=>s==="bytes"?e.fmt.humanFileSize(t).replace(/([a-zA-Z]+)$/," $1"):e.fmt.number(t)}},render:Kl},l8=new Set(he),Jl={props:["content","terms","options"],setup(e){let t=et(null),s=()=>{t.value.innerHTML=renderMD(e.content||"",window.location.pathname+"/../")};return qt(()=>{s(),Be(()=>[e.content,e.terms,e.options],s,{deep:!0})}),()=>ke("markdown",{ref:t})}},d8={props:["file","terms","options"],setup(e){let t=et(null),s=()=>st(()=>t.value?.querySelectorAll("pre code").forEach(r=>window.Prism?.highlightElement(r)));return qt(s),Be(()=>[e.file?.content,e.terms,e.options],s,{deep:!0}),()=>{let r=e.file||{},n=(r.filename||"").split(".").pop().toLowerCase();if(["md","markdown"].includes(n)||r.language==="Markdown")return ke("gist-file",{ref:t},ke(Jl,{content:r.content,terms:e.terms,options:e.options}));let i={js:"javascript",jsx:"javascript",ts:"javascript",typescript:"javascript",py:"python",html:"markup",xml:"markup",svg:"markup",sh:"bash"},a=(r.language||n||"none").toLowerCase();return ke("gist-file",{ref:t},ke("pre",{class:"line-numbers"},ke("code",{class:"language-"+(i[a]||a),key:r.content},r.content||"")))}}},u8={props:["file","content"],setup(e){let t=et(null),s=0,r,n=async()=>{let i=++s;r?.abort(),r=new AbortController;try{let a=e.content?JSON.parse(e.content):await fetch(e.file?.download_url||e.file,{signal:r.signal}).then(u=>{if(!u.ok)throw Error("Notebook request failed");return u.json()});if(await Xt("notebook"),i!==s)return;t.value.innerHTML=DOMPurify.sanitize(nb.parse(a).render()),t.value.querySelectorAll("pre code").forEach(u=>window.Prism?.highlightElement(u))}catch(a){i===s&&a.name!=="AbortError"&&(t.value.textContent="Unable to render the notebook.")}};return qt(()=>{n(),Be(()=>[e.file,e.content],n)}),ao(()=>{s++,r?.abort()}),()=>ke("notebook",{ref:t})}},c8={props:["stats"],setup(e){return()=>{let t=Object.entries(e.stats||{}).filter(([,r])=>r.code),s=t.reduce((r,[,n])=>r+n.code,0);return ke("loc",t.map(([r,n])=>ke("div",{class:"lang",title:`${r}: ${n.code.toLocaleString()} lines`,style:{width:n.code*100/s+"%",background:langColors[r]}})))}}},Ql={Markdown:Jl,GistFile:d8,Notebook:u8,Loc:c8,HtmlDoc:Gl,QuotaUsage:a8,Pdfviewer:ci(async()=>(await Xt("pdf"),pdfjsLib.GlobalWorkerOptions.workerSrc="/script/external/pdf.worker.js",Wl))},Xl={async mounted(e,{value:t}){e._editorValue=t;try{if(await pr(),e._editorDisposed)return;let s=e._editorValue,r=ace.edit(e);e._editor=r,r.setValue(String(s.content??""),-1),Yl(e,s.options),e._editorCleanup=s.options?.onLoad?.(r)}catch(s){e._editorDisposed||(e.textContent=s.message)}},updated(e,{value:t}){e._editorValue=t,e._editor&&(e._editor.getValue()!==String(t.content??"")&&e._editor.setValue(String(t.content??""),-1),Yl(e,t.options))},beforeUnmount(e){e._editorDisposed=!0,e._editorCleanup?.(),e._editor?.destroy()}};function Yl(e,t={}){let s=l8.has(t.mode)?t.mode:"text";e._editor.session.setMode("ace/mode/"+s),t.theme&&e._editor.setTheme("ace/theme/"+t.theme),e._editor.setReadOnly(t.readOnly!==!1)}var Zl={mounted(e){if(!window.IntersectionObserver)return;let t=[...e.querySelectorAll('a[href^="#"]')],s=new Set,r=new IntersectionObserver(n=>{n.forEach(a=>a.isIntersecting?s.add(a.target.id):s.delete(a.target.id));let i=t.find(a=>s.has(a.hash.slice(1)));t.forEach(a=>a.classList.toggle("active",a===i))},{rootMargin:"-20% 0px -60% 0px",threshold:0});st(()=>t.forEach(n=>{let i=document.getElementById(n.hash.slice(1));i&&r.observe(i)})),e._observer=r},beforeUnmount(e){e._observer?.disconnect()}};function p8(e){let t={children:[]},s=new Map([["",t]]);function r(n){if(s.has(n))return s.get(n);let i=n.lastIndexOf("/"),a=r(i<0?"":n.slice(0,i)),u={name:n.slice(i+1),children:[]};return s.set(n,u),a.children.push(u),u}for(let n of e||[]){let i=n.path?`${n.path}/${n.name}`:n.name;n.size==null?r(i):r(n.path||"").children.push({...n})}return t.children}var xl={name:"FileTree",props:["file","parent","searchQuery","searchResults","page"],setup(e){let t=Ua(),s=et(null),r=ze(Object.create(null)),n=null,i=ot(()=>p8(e.file)),a=()=>"/"+(Array.isArray(t.params.path)?t.params.path.join("/"):t.params.path||"");Be(()=>[t.params.repoId,t.params.path],()=>{let m="";a().split("/").filter(Boolean).forEach(E=>{m+="/"+E,r[m]=!0})},{immediate:!0});let u=ot(()=>{if(!e.searchQuery||!e.searchResults)return null;let m=new Set,E=new Set;return e.searchResults.forEach(y=>{m.add(y.path?`${y.path}/${y.name}`:y.name);let w="";(y.path||"").split("/").filter(Boolean).forEach(D=>{w=w?w+"/"+D:D,E.add(w)})}),{files:m,folders:E}}),f=()=>[...s.value.querySelectorAll("li > a")],v=m=>{s.value.querySelector(".tree-focused")?.classList.remove("tree-focused"),m&&(n=m.dataset.path,m.classList.add("tree-focused"),m.scrollIntoView?.({block:"nearest"}),s.value.focus())};function h(m){let E=f(),y=s.value.querySelector(".tree-focused")||E[0],w=E.indexOf(y);if(!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Enter"].includes(m.key)||(m.preventDefault(),m.key==="ArrowDown"&&v(E[(w+1)%E.length]),m.key==="ArrowUp"&&v(E[(w-1+E.length)%E.length]),!y))return;let D=y.closest("li");m.key==="ArrowRight"&&D.classList.contains("folder")&&(D.classList.contains("open")?v(D.querySelector(":scope > ul > li > a")):y.click()),m.key==="ArrowLeft"&&(D.classList.contains("folder")&&D.classList.contains("open")?y.click():v(D.parentElement.closest("li.folder")?.querySelector(":scope > a"))),m.key==="Enter"&&y.click()}function k(m,E=""){let y=[...m].sort((w,D)=>+!!D.children-+!!w.children||w.name.localeCompare(D.name));return ke("ul",y.flatMap(w=>{let D=w,R=D.name,T=(E+"/"+R).slice(1);if(u.value&&!u.value.files.has(T)&&!u.value.folders.has(T))return[];for(;D.children?.length===1;)D=D.children[0],R+="/"+D.name;let I=E+"/"+R,H=!!D.children,q=u.value?r[I]!==!1:!!r[I],U=H&&e.page?.options?.truncatedFolders?.includes(I.slice(1)),ae=e.page?.fileCounts?.[I.slice(1)]||0,ie=ke("span",{class:H?"tree-icon-folder":"far fa-file tree-icon-file","aria-hidden":"true"},H?ke("svg",{viewBox:"0 0 14 12",focusable:"false"},ke("path",{d:"M1.5 10.5v-9h4l1.5 2h5.5v7z"})):null),_=ke("span",{class:"tree-name"},R),O=Z=>{v(Z.currentTarget),H&&(Z.preventDefault(),r[I]=!q,r[I]&&!D.children.length&&e.page.getFiles(I.slice(1)),st(()=>v(f().find(te=>te.dataset.path===n))))},Y=ke("a",{"data-path":I,href:H?void 0:`/r/${encodeURIComponent(t.params.repoId)}${encodePathForUrl(I)}`,class:{"tree-focused":n===I},onClick:O},[H?ke("span",{class:"tree-toggle"}):E?ke("span",{class:"tree-spacer"}):null,ie,_,U?ke("span",{class:"truncated-warning",title:e.page.fmt.translate("WARNINGS.folder_truncated")},ke("i",{class:"fas fa-exclamation-triangle"})):null,H&&ae?ke("span",{class:"tree-count"},ae):null]);return ke("li",{key:I,class:{file:!0,folder:H,open:q,active:a()===I,truncated:U},title:H?"":`Size: ${humanFileSize(D.size||0)}`},[Y,H&&q?k(D.children,I):null])}))}return()=>ke("tree",{ref:s,tabindex:0,onKeydown:h},e.file?.length?u.value?.files.size===0?ke("div",{class:"tree-search-empty"},"No files found"):k(i.value):"Empty repository")}};function td(){return ze({errors:{},dirty:!1,touched:!1,submitted:!1,get invalid(){return Object.values(this.errors).some(Boolean)},setValidity(e,t){this.errors[e]=!t},setDirty(){this.dirty=!0}})}function od(e,t){if(!e[t]){let s=td();Object.defineProperty(s,"invalid",{get(){return Object.values(s.errors).some(Boolean)||Object.keys(s).some(r=>r!=="invalid"&&s[r]&&typeof s[r]=="object"&&s[r].invalid)}}),e[t]=s}return e[t]}var sd={beforeMount(e,{value:t}){e._formState=od(t,e.name),e.addEventListener("submit",s=>s.preventDefault())}};function f8(e){return e instanceof Date?isNaN(e)?"":`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`:e||""}function ed(e){let t=e._field.binding.value;e.type==="checkbox"?e.checked=!!t:e.type==="radio"?e.checked=t==(e._value??e.value):e._field.timer||(e.value=e.type==="date"?f8(t):t??""),lr(e)}function lr(e){let t=e._field.validation;if(!t)return;let s=e.validity;for(let[r,n]of Object.entries({required:s.valueMissing,pattern:s.patternMismatch,min:s.rangeUnderflow,max:s.rangeOverflow,date:s.badInput,email:s.typeMismatch&&e.type==="email",url:s.typeMismatch&&e.type==="url"}))t.setValidity(r,e.disabled||!n)}var nd={beforeMount(e,{value:t}){var a;let s=t.form&&od(t.state,t.form),r=s&&e.name?s[a=e.name]||(s[a]=td()):null;e._field={binding:t,validation:r,timer:null};let n=()=>{clearTimeout(e._field.timer),e._field.timer=null;let u=e._field.binding,f=e.type==="checkbox"?e.checked:e._value??e.value;if(!(e.type==="radio"&&!e.checked)){if((e.type==="number"||e.type==="range")&&(f=e.value===""?null:Number(e.value)),e.type==="date"&&(f=e.value?new Date(e.value+"T00:00:00"):null),r){r.setDirty();for(let v of Object.keys(r.errors))r.setValidity(v,!0)}u.set(f),lr(e),u.change?.()}};e._field.commit=n;let i=u=>{let f=e._field.binding.options?.debounce||0,v=typeof f=="number"?f:f[u.type]??f.default??0;clearTimeout(e._field.timer),v?e._field.timer=setTimeout(n,v):n()};e.addEventListener(e.tagName==="SELECT"||["checkbox","radio","date"].includes(e.type)?"change":"input",i),e.addEventListener("blur",()=>{r&&(r.touched=!0),e._field.timer&&n()})},mounted:ed,updated(e,{value:t}){e._field.binding=t,ed(e)},beforeUnmount(e){clearTimeout(e._field.timer);let{binding:t,validation:s}=e._field,r=t.form&&t.state[t.form];r&&r[e.name]===s&&delete r[e.name]}};function rd(e,t){let s=e.target.closest("form");if(s?._formState&&(s._formState.submitted=!0),s?.querySelectorAll("input, select, textarea").forEach(r=>{r._field?.timer&&r._field.commit(),r._field&&lr(r)}),s&&!s.checkValidity()){let r=s.querySelector(":invalid");r?.scrollIntoView?.({block:"center"}),r?.focus(),s.reportValidity();return}return t()}var id=Symbol("session"),m8=/^\/(w|api|github)(\/|$)/;function ad(e,t={}){let s=e?.split(".").reduce((r,n)=>r?.[n],ar);return s==null&&e?.startsWith("ERRORS.")&&(s=ar.ERRORS.unknown_error),String(s??e??"").replace(/{{\s*([^}]+?)\s*}}/g,(r,n)=>t[n]??"")}var h8={...ir,translate:ad};function v8(e){if(e==null||e==="")return e;try{let t=new URL(e,window.location.href);return["http:","https:","mailto:","tel:","blob:"].includes(t.protocol)?e:void 0}catch{return}}function g8(e="#app",t={}){!t.history&&window.location.pathname==="/"&&/^#!\/r\/[^/?#]+/.test(window.location.hash)&&window.history.replaceState(window.history.state,"",window.location.hash.slice(2));let s=new Map,r=Hl(t.fetch),n,i;function a(){let v=ct(),h={url(m){return m===void 0?i.currentRoute.value.fullPath:(i.push(m),h)},path(){return i.currentRoute.value.path},search(){return i.currentRoute.value.query}},k=new Proxy({},{get(m,E){let y=i.currentRoute.value.params[E];return Array.isArray(y)?y.join("/"):y}});return{http:r,...v,location:h,params:k,window,promises:Bl,html:{trustAsHtml:m=>m},translate:(m,E)=>Promise.resolve(ad(m,E)),quotaService:jl(r)}}function u(v){return{name:v.template,setup(){let h=or(ut(id),s);v.setup(h,a()),zl(v.template,h);let k=[];return()=>nn[v.template](h,k)}}}i=La({history:t.history||qa(),routes:cl.map(v=>v.redirect?v:{path:v.path,component:u(v),meta:{title:v.title,preserveExplorer:v.preserveExplorer}})});let f=oa({setup(){n=or(null,s),n.fmt=h8,n.window=window,n.Math=Math,n.sanitize=m=>DOMPurify.sanitize(m??""),n.highlightRedactions=m=>(n.site_options,Ba(m)),n.submitForm=rd,n.safeUrl=v8;let v=a();Ga(n,v.http,v.location,v.timeout),io(id,n),Be(()=>n.title,m=>{document.title=m||"Anonymous GitHub"});let h=[],k=m=>{let E=m.target.closest?.("a[href]");if(m.defaultPrevented||m.button!==0||m.metaKey||m.ctrlKey||m.shiftKey||m.altKey||!E||E.hasAttribute("download")||E.target&&E.target!=="_self"||E.dataset.toggle||E.getAttribute("href").startsWith("#"))return;let w=new URL(E.href,window.location.href);w.origin!==window.location.origin||m8.test(w.pathname)||(m.preventDefault(),i.push(w.pathname+w.search+w.hash),$("#navbarSupportedContent.show").collapse("hide"))};return document.addEventListener("click",k),ao(()=>document.removeEventListener("click",k)),()=>[Fl(n,[]),ke("header",{class:"app-header"},nn["partials/header.htm"](n,h)),ke("main",{class:"app-view align-items-stretch w-100"},ke(tr,null,{default:({Component:m,route:E})=>m?ke(m,{key:E.meta.preserveExplorer?E.matched[0]?.path:E.path}):null})),ke("div",{class:"position-fixed p-3",style:{zIndex:999999999,right:0,bottom:0}},n.toasts.map((m,E)=>ke("div",{class:"toast show",role:"alert","aria-live":"assertive","aria-atomic":"true",key:E},[ke("div",{class:"toast-header"},[ke("strong",{class:"mr-auto"},m.title),ke("button",{type:"button",class:"ml-2 mb-1 close","aria-label":"Close",onClick:()=>n.removeToast(m)},"\xD7")]),ke("div",{class:"toast-body"},m.body)])))]}});for(let[v,h]of Object.entries(Ql))f.component(v,h);return f.component("Tree",xl),f.component("PartialView",{props:["name","state"],setup(v){let h=[];return()=>nn[v.name](v.state,h)}}),f.directive("field",nd),f.directive("form",sd),f.directive("code-editor",Xl),f.directive("paper-scrollspy",Zl),f.use(i),i.beforeEach(async v=>{n?.emit("routeLeave"),/^\/(r|repository|anonymize|pull-request-anonymize|gist-anonymize|pr|gist)(\/|$)/.test(v.path)&&await Xt("markdown"),/^\/(r|repository)\//.test(v.path)&&await Xt("org")}),i.afterEach(v=>{if(!n)return;n.title=v.meta.title,n.emit("routeChange",{title:v.meta.title}),n.emit("routeUpdate",{title:v.meta.title});let h=document.querySelector(".app-view");!v.meta.preserveExplorer&&h&&(h.scrollTop=0)}),f.mount(e),{app:f,router:i,state:n}}document.querySelector("#app")&&(window.anonymousApp=g8());})(); +jane.smith@example.org`},vq={id:"termsHelp",class:"form-text text-muted"},yq={class:"invalid-feedback"},gq={id:"settings-display",class:"paper-settings-section"},bq={class:"form-group paper-check-list"},wq={class:"form-check"},kq={class:"form-check-input",type:"checkbox",id:"link",name:"link"},Eq={class:"form-check"},Cq={class:"form-check-input",type:"checkbox",id:"image",name:"image"},_q={class:"form-check"},Sq={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},Nq={class:"form-check"},Dq={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},Rq={id:"settings-features",class:"paper-settings-section"},Tq={class:"form-group paper-check-list"},Aq={class:"form-check"},Oq={class:"form-check-input",type:"checkbox",id:"page",name:"page"},Iq={class:"form-check"},Pq={class:"form-check-input",type:"checkbox",id:"loc",name:"loc"},Vq={class:"form-check"},qq={class:"form-check-input",type:"checkbox",id:"update",name:"update"},Mq={class:"form-group"},$q={class:"form-control",id:"mode",name:"mode"},Lq={class:"form-text text-muted"},Uq={id:"settings-expiration",class:"paper-settings-section"},Fq={class:"form-group"},zq={class:"form-control",id:"expiration",name:"expiration"},Hq={key:0,class:"draft-status",role:"status"},Bq={key:1,class:"draft-status"},jq={class:"paper-settings-footer"},Gq={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Wq=["textContent"],Kq={class:"paper-settings-actions"},Yq=["disabled"],Jq={key:0,class:"ui-icon mr-1","aria-hidden":"true"},Qq={id:"settings-account",class:"paper-settings-section"},Xq={class:"paper-account-card"},Zq=["src"],xq={class:"paper-account-identity"},eM={class:"paper-account-name"},tM={class:"paper-danger-zone"},oM={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},nM=["textContent"],sM=["disabled"];function jl(e,t){let n=We("quota-usage"),r=be("paper-scrollspy"),s=be("field"),i=be("form");return l(),d("div",iq,[t[52]||(t[52]=pe('
My work \xA0/\xA0 Settings

Your settings

Defaults applied to every new anonymization, your quotas, and your account.

',3)),o("div",aq,[D((l(),d("aside",lq,[...t[4]||(t[4]=[pe('
On this page
',2)])])),[[r]]),o("div",dq,[p(" Account usage shares the dashboard component. "),o("section",uq,[t[6]||(t[6]=o("div",{class:"paper-section-eyebrow"},"Quota",-1)),t[7]||(t[7]=o("p",{class:"paper-section-copy"},"What you are using across all your anonymizations. Conferences can lift these limits during a review window.",-1)),e.quota?(l(),Lt(n,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):p("v-if",!0),e.quota?p("v-if",!0):(l(),d("div",cq,[(l(),d(X,null,ae([1,2,3],(a,u)=>o("div",pq,[...t[5]||(t[5]=[o("div",{class:"quota-header"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}}),o("span",{class:"skeleton skeleton-line",style:{width:"25%"}})],-1),o("div",{class:"quota-track"},null,-1)])])),64))]))]),D((l(),d("form",{class:"form needs-validation",name:"defaultsForm",novalidate:"",onSubmit:t[2]||(t[2]=de(a=>e.submitForm(a,()=>{e.saveDefault(a)}),["prevent"]))},[o("section",fq,[t[13]||(t[13]=o("div",{class:"paper-section-eyebrow"},"Terms to redact",-1)),t[14]||(t[14]=o("p",{class:"paper-section-copy"},"Pre-filled in every new anonymization. You can still edit the list per anonymization.",-1)),o("div",mq,[t[12]||(t[12]=o("label",{class:"paper-field-label",for:"terms"},"Default terms",-1)),D(o("textarea",hq,null,512),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),o("small",vq,[t[8]||(t[8]=b(" One term per line (regex allowed). Each match is replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[9]||(t[9]=b(", or use ",-1)),t[10]||(t[10]=o("code",null,"term=>replacement",-1)),t[11]||(t[11]=b(" to pick your own. ",-1))]),D(o("div",yq," Terms are in an invalid format ",512),[[K,e.defaultsForm?.terms?.errors?.format]])])]),o("section",gq,[t[23]||(t[23]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),t[24]||(t[24]=o("p",{class:"paper-section-copy"},"What reviewers can see inside an anonymized repository.",-1)),o("div",bq,[o("div",wq,[D(o("input",kq,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"Unchecked, every link in text files is removed.",-1))]),o("div",Eq,[D(o("input",Cq,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"defaultsForm",options:{}}]]),t[17]||(t[17]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[18]||(t[18]=o("small",{class:"form-text text-muted"},"Images are shown as is. They are not anonymized.",-1))]),o("div",_q,[D(o("input",Sq,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"defaultsForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[20]||(t[20]=o("small",{class:"form-text text-muted"},"PDFs are shown as is. They are not anonymized.",-1))]),o("div",Nq,[D(o("input",Dq,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[22]||(t[22]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])])]),o("section",Rq,[t[33]||(t[33]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",Tq,[o("div",Aq,[D(o("input",Oq,null,512),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"defaultsForm",options:{}}]]),t[25]||(t[25]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[26]||(t[26]=o("small",{class:"form-text text-muted"},"Serve an anonymized copy of the repository's GitHub Pages site. Only pages built from the anonymized branch are supported.",-1))]),o("div",Iq,[D(o("input",Pq,null,512),[[s,{state:e.viewState,set:a=>{e.options.loc=a},value:e.options?.loc,form:"defaultsForm",options:{}}]]),t[27]||(t[27]=o("label",{class:"form-check-label",for:"loc"},"Lines of code",-1)),t[28]||(t[28]=o("small",{class:"form-text text-muted"},"Show the line count of the repository in the explorer.",-1))]),o("div",Vq,[D(o("input",qq,null,512),[[s,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"defaultsForm",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))])]),o("div",Mq,[t[32]||(t[32]=o("label",{class:"paper-field-label",for:"mode"},"Fetch mode",-1)),D((l(),d("select",$q,[...t[31]||(t[31]=[o("option",{value:"GitHubStream",selected:""},"Stream from GitHub on demand",-1),o("option",{value:"GitHubDownload"},"Download to Anonymous GitHub",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.mode=a},value:e.options?.mode,form:"defaultsForm",options:{}}]]),o("small",Lq," Download is faster for reviewers and enables every feature. Streaming is the only option above "+c(e.fmt?.humanFileSize(e.site_options?.MAX_REPO_SIZE*1024))+". ",1)])]),o("section",Uq,[t[37]||(t[37]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",Fq,[t[35]||(t[35]=o("label",{class:"paper-field-label",for:"expiration"},"When an anonymization expires",-1)),D((l(),d("select",zq,[...t[34]||(t[34]=[o("option",{value:"redirect"},"Redirect visitors to the GitHub repository",-1),o("option",{value:"remove",selected:""},"Remove the anonymized repository",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"defaultsForm",options:{}}]]),t[36]||(t[36]=o("small",{class:"form-text text-muted"}," The expiration date itself is chosen per anonymization. Redirecting reveals the source repository, so pick it only once the review is over. ",-1))])]),e.draftRestored?(l(),d("div",Hq,[t[38]||(t[38]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[0]||(t[0]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",Bq,[b(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[1]||(t[1]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):p("v-if",!0),o("div",jq,[e.error?(l(),d("div",Gq,[t[39]||(t[39]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[40]||(t[40]=b()),o("span",{textContent:c(e.error)},null,8,Wq)])):p("v-if",!0),o("div",Kq,[o("button",{id:"save",type:"submit",class:"btn btn-ink",disabled:e.saving},[e.message?(l(),d("svg",Jq,[...t[41]||(t[41]=[o("use",{href:"#ui-icon-check"},null,-1)])])):p("v-if",!0),b(c(e.saving?"Saving\u2026":e.message?"Saved":"Save defaults"),1)],8,Yq),t[42]||(t[42]=o("span",{class:"paper-settings-hint"},"Applies to new anonymizations only. Existing ones keep their settings.",-1))])])],32)),[[i,e.viewState]]),o("section",Qq,[t[50]||(t[50]=o("div",{class:"paper-section-eyebrow"},"Account",-1)),o("div",Xq,[e.user?.photo?(l(),d("img",{key:0,width:"40",height:"40",class:"rounded-circle",alt:"",src:e.safeUrl(e.user?.photo)},null,8,Zq)):p("v-if",!0),o("div",xq,[o("div",eM,"@"+c(e.user?.username),1),t[43]||(t[43]=o("div",{class:"paper-account-meta"},"Signed in with GitHub. Anonymous GitHub only reads your repositories.",-1))]),t[44]||(t[44]=o("a",{class:"btn btn-outline-ink",href:"/api/user/logout",target:"_self"},"Sign out",-1))]),t[51]||(t[51]=o("a",{class:"paper-settings-connection-link",href:"/connections"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",null,[b("GitHub connections"),o("small",null,"Manage repository access and legacy OAuth.")]),o("span",{"aria-hidden":"true"},"\u2192")],-1)),o("div",tM,[t[48]||(t[48]=o("div",{class:"paper-danger-head"},"Delete account",-1)),t[49]||(t[49]=o("p",{class:"paper-danger-copy"}," Removes all your anonymized repositories, gists, and pull requests, revokes the application's access to your GitHub account, and erases your personal data (username, email, access tokens). This cannot be undone. ",-1)),e.deleteError?(l(),d("div",oM,[t[45]||(t[45]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[46]||(t[46]=b()),o("span",{textContent:c(e.deleteError)},null,8,nM)])):p("v-if",!0),o("button",{type:"button",class:"btn btn-outline-danger",onClick:t[3]||(t[3]=a=>e.deleteAccount()),disabled:e.deletingAccount},[t[47]||(t[47]=o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)),b(c(e.deletingAccount?"Deleting\u2026":"Delete my account"),1)],8,sM)])])])])])}var rM={class:"pr-page"},iM={class:"container paper-page pr-page-inner"},aM={class:"pr-header"},lM={class:"pr-title-row"},dM={class:"paper-page-title pr-title"},uM=["textContent"],cM={key:1,class:"text-muted"},pM=["href"],fM={class:"pr-header-meta"},mM={key:0,class:"pr-meta-item"},hM=["textContent"],vM={key:1,class:"pr-meta-item"},yM=["textContent"],gM={key:2,class:"pr-meta-item"},bM=["textContent"],wM={key:0,class:"pr-body-card"},kM={key:1,class:"paper-tabs",role:"tablist"},EM=["aria-selected","tabindex"],CM=["aria-selected","tabindex"],_M=["textContent"],SM={class:"paper-tab-content"},NM={key:0,role:"tabpanel",id:"pr-diff-panel","aria-labelledby":"pr-diff-tab"},DM=["innerHTML"],RM={key:1,role:"tabpanel",id:"pr-comments-panel","aria-labelledby":"pr-comments-tab"},TM={class:"pr-comments"},AM={class:"pr-comment"},OM={class:"pr-comment-head"},IM={key:0,class:"pr-comment-author"},PM=["textContent"],VM=["textContent"],qM={key:0,class:"pr-comment-body"},MM={key:0,class:"paper-table-empty"};function Gl(e,t){let n=We("markdown");return l(),d("div",rM,[o("div",iM,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),b(" \xA0/\xA0 "),o("span",{class:"here"},"Pull request")],-1)),o("header",aM,[o("div",lM,[o("h1",dM,[e.details?.title?(l(),d("span",{key:0,textContent:c(e.details?.title)},null,8,uM)):p("v-if",!0),e.details?.title?p("v-if",!0):(l(),d("span",cM,"Untitled pull request"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/pull-request-anonymize/"+e.pullRequestId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,pM)):p("v-if",!0)]),o("div",fM,[o("span",{class:A(["paper-pill",{good:e.details?.merged,warn:e.details?.state=="open",bad:e.details?.state=="closed"&&!e.details?.merged}])},[o("span",{class:A(["status-dot",{"status-ready":e.details?.merged,"status-error":e.details?.state=="closed"&&!e.details?.merged}])},null,2),b(" "+c(e.details?.merged?"Merged":e.fmt.title(e.details?.state)),1)],2),e.details?.baseRepositoryFullName?(l(),d("span",mM,[t[5]||(t[5]=o("i",{class:"fab fa-github"},null,-1)),t[6]||(t[6]=b()),o("span",{textContent:c(e.details?.baseRepositoryFullName)},null,8,hM)])):p("v-if",!0),e.details?.updatedDate?(l(),d("span",vM,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=b()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,yM)])):p("v-if",!0),e.details?.anonymizeDate?(l(),d("span",gM,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=b(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,bM)])):p("v-if",!0)])]),e.details?.body?(l(),d("section",wM,[t[11]||(t[11]=o("div",{class:"paper-section-eyebrow"},"Description",-1)),Ce(n,{content:e.details?.body},null,8,["content"])])):p("v-if",!0),e.details?.diff||e.details?.comments?(l(),d("nav",kM,[e.details?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="diff"}]),type:"button",role:"tab",id:"pr-diff-tab","aria-selected":e.tabState?.active==="diff","aria-controls":"pr-diff-panel",tabindex:e.tabState?.active==="diff"?0:-1,onKeydown:t[0]||(t[0]=r=>e.previewTabKeydown(r)),onClick:t[1]||(t[1]=r=>e.tabState.active="diff")},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Diff ",-1)])],42,EM)):p("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"pr-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"pr-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=r=>e.previewTabKeydown(r)),onClick:t[3]||(t[3]=r=>e.tabState.active="comments")},[t[13]||(t[13]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,_M)],42,CM)):p("v-if",!0)])):p("v-if",!0),o("div",SM,[e.details?.diff&&e.tabState?.active=="diff"?(l(),d("div",NM,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.details?.diff))},null,8,DM)])):p("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",RM,[o("ul",TM,[(l(!0),d(X,null,ae(e.details?.comments,(r,s)=>(l(),d("li",AM,[o("div",OM,[r?.author?(l(),d("span",IM,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=b(" @",-1)),o("span",{textContent:c(r?.author)},null,8,PM)])):p("v-if",!0),r?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(r?.updatedDate))},null,8,VM)):p("v-if",!0)]),r?.body?(l(),d("div",qM,[Ce(n,{content:r?.body},null,8,["content"])])):p("v-if",!0)]))),256)),e.details?.comments?.length?p("v-if",!0):(l(),d("li",MM,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this pull request.",-1)])]))])])):p("v-if",!0)])])])}var $M={class:"container paper-page status-page"},LM={class:"d-flex align-items-center justify-content-between flex-wrap",style:{gap:"12px"}},UM={class:"paper-page-title"},FM=["textContent"],zM={key:1},HM={class:"paper-settings-section"},BM=["textContent"],jM={key:0,class:"paper-section-copy"},GM={key:1,class:"paper-ratelimit-card",role:"status"},WM={class:"paper-error-msg"},KM=["aria-valuenow"],YM={class:"paper-progress-label"},JM=["textContent"],QM={key:0},XM=["textContent"],ZM={class:"paper-progress-pct"},xM={key:3,class:"paper-error-card",role:"alert"},e8={key:0,class:"paper-error-msg"},t8={key:1,class:"paper-error-msg"},o8={class:"paper-error-actions"},n8=["href"],s8={key:4,class:"share-link"},r8={class:"share-link-row"},i8=["value"],a8={class:"ui-icon","aria-hidden":"true"},l8=["href"],d8=["textContent"],u8={class:"share-link-actions"},c8=["href"],p8=["href"];function Wl(e,t){return l(),d("div",$M,[t[16]||(t[16]=o("div",{class:"paper-crumbs"},[b("Anonymization \xA0/\xA0 "),o("span",{class:"here"},"Status")],-1)),o("div",LM,[o("div",null,[o("h1",UM,[t[2]||(t[2]=b("Status of ",-1)),o("em",null,c(e.repoId),1)]),t[3]||(t[3]=o("p",{class:"paper-page-lede"},"Track progress as your anonymization is prepared.",-1))]),o("span",{class:A(["status-pill",{"status-pill-ready":e.repo?.status=="ready","status-pill-error":e.repo?.status=="error","status-pill-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-pill-ratelimit":e.rateLimitResetAt}])},[o("span",{class:A(["status-dot",{"status-ready":e.repo?.status=="ready","status-error":e.repo?.status=="error","status-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-ratelimit":e.rateLimitResetAt}])},null,2),e.rateLimitResetAt?p("v-if",!0):(l(),d("span",{key:0,textContent:c(e.fmt?.title(e.repo?.status))},null,8,FM)),e.rateLimitResetAt?(l(),d("span",zM,"Rate limited")):p("v-if",!0)],2)]),o("section",HM,[o("div",{class:"paper-section-eyebrow",textContent:c(e.repo?.status=="ready"?"Your anonymous link":"Progress")},null,8,BM),e.repo?.status!="ready"?(l(),d("p",jM,[...t[4]||(t[4]=[b(" The repository will take a few minutes to get ready, depending on its size. Visit the ",-1),o("a",{href:"/faq"},"FAQ",-1),b(" for more information. ",-1)])])):p("v-if",!0),e.rateLimitResetAt?(l(),d("div",GM,[t[7]||(t[7]=pe('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",WM,[t[5]||(t[5]=b("Anonymization will resume automatically in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[6]||(t[6]=b(". No action needed \u2014 the job is queued and will continue where it left off.",-1))])])):p("v-if",!0),e.repo?.status!="error"&&e.repo?.status!="ready"&&!e.rateLimitResetAt?(l(),d("div",{key:2,class:A(["paper-progress",{"paper-progress-ready":e.repo?.status=="ready"}]),role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.progress},[o("div",{class:"paper-progress-bar",style:qe("width: "+e.progress+"%;")},null,4),o("div",YM,[o("span",{textContent:c(e.fmt?.title(e.repo?.status))},null,8,JM),e.repo?.statusMessage?(l(),d("span",QM,[t[8]||(t[8]=b("\xA0\xB7\xA0",-1)),o("span",{textContent:c(e.repo?.statusMessage)},null,8,XM)])):p("v-if",!0),o("span",ZM,c(e.progress||0)+"%",1)])],10,KM)):p("v-if",!0),e.repo?.status=="error"&&!e.rateLimitResetAt?(l(),d("div",xM,[t[11]||(t[11]=pe('
Anonymization failed
Something went wrong while preparing this repository.
',1)),e.repo?.statusMessage?(l(),d("p",e8,c(e.fmt?.translate("ERRORS."+e.repo?.statusMessage)),1)):p("v-if",!0),e.repo?.statusMessage?p("v-if",!0):(l(),d("p",t8,"No additional details were reported. The most common causes are private repositories, missing branches, and rate limits.")),t[12]||(t[12]=o("ul",{class:"paper-error-hints"},[o("li",null,"Make sure the source URL points to a repository or pull request you can access."),o("li",null,"Check that the chosen branch and commit still exist on GitHub."),o("li",null,"If you just signed in, the access token may need a moment to propagate \u2014 try again.")],-1)),o("div",o8,[o("a",{class:"btn btn-ink",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[9]||(t[9]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit anonymization",-1)])],8,n8),t[10]||(t[10]=pe(' Read the FAQ Report a bug in Anonymous GitHub',2))])])):p("v-if",!0),e.repo?.status=="ready"?(l(),d("div",s8,[t[15]||(t[15]=o("p",{class:"paper-section-copy"},"Reviewers can browse the repository at this address without seeing who you are.",-1)),o("div",r8,[o("input",{id:"share-url",class:"form-control share-link-input",readonly:"","aria-label":"Anonymous link",value:e.shareUrl,onFocus:t[0]||(t[0]=n=>n.target.select())},null,40,i8),o("button",{type:"button",class:"btn btn-ink",onClick:t[1]||(t[1]=n=>e.copyShareUrl())},[(l(),d("svg",a8,[o("use",{href:e.copied?"#ui-icon-check":"#project-icon-copy"},null,8,l8)])),o("span",{"aria-live":"polite",textContent:c(e.copied?"Copied":"Copy link")},null,8,d8)])]),o("div",u8,[o("a",{class:"btn",target:"_self",href:e.safeUrl("/r/"+e.repoId+"/")},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" Open repository ",-1)])],8,c8),e.repo?.options?.page?(l(),d("a",{key:0,class:"btn",target:"_self",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" Open GitHub page ",-1)])],8,p8)):p("v-if",!0)])])):p("v-if",!0)]),t[17]||(t[17]=pe('
Support Anonymous GitHub

A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.

',1))])}var as={"partials/reviewConsent.htm":gl,"partials/connections.htm":bl,"partials/signin.htm":wl,"partials/404.htm":kl,"partials/admin/conferences.htm":El,"partials/admin/errors.htm":Cl,"partials/admin/overview.htm":_l,"partials/admin/queues.htm":Sl,"partials/admin/repositories.htm":Nl,"partials/admin/user.htm":Dl,"partials/admin/users.htm":Rl,"partials/anonymize.htm":Tl,"partials/anonymizePullRequest.htm":Al,"partials/claim.htm":Ol,"partials/conference.htm":Il,"partials/conferences.htm":Pl,"partials/dashboard.htm":Vl,"partials/explorer.htm":ql,"partials/faq.htm":Ml,"partials/gist.htm":$l,"partials/header.htm":Ll,"partials/home.htm":Ul,"partials/loading.htm":Fl,"partials/newConference.htm":zl,"partials/pageView.htm":Hl,"partials/pr-dashboard.htm":Bl,"partials/profile.htm":jl,"partials/pullRequest.htm":Gl,"partials/status.htm":Wl};var f8={class:"ui-icon-definitions","aria-hidden":"true",focusable:"false"};function Kl(e,t){return l(),d("svg",f8,[...t[0]||(t[0]=[pe('',1)])])}function Yl(e,t){e==="partials/explorer.htm"&&(t.sidebarCollapsed=window.matchMedia?.("(max-width: 767px)").matches||!1),e==="partials/anonymize.htm"&&(t.prTabState={active:t.options.diff?"diff":"comments"},t.watchGroup(["options.diff","options.comments"],()=>{t.options[t.prTabState.active]||(t.prTabState.active=t.options.diff?"diff":t.options.comments?"comments":null)})),e==="partials/gist.htm"&&(t.tabState={active:t.details?.files?"files":"comments"}),["partials/conferences.htm","partials/conference.htm"].includes(e)&&(t.statusLabels={ready:"Ready",expired:"Expired",removed:"Removed"});let r={"partials/dashboard.htm":["filteredItems",()=>t.items,"itemFilter"],"partials/conferences.htm":["filteredConferences",()=>t.conferences,"conferenceFilter"],"partials/conference.htm":["filteredRepositories",()=>t.conference?.repositories,"repoFiler"],"partials/admin/repositories.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/user.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/users.htm":["filteredUsers",()=>t.users,"userFiler"],"partials/admin/conferences.htm":["filteredConferences",()=>t.conferences]}[e];if(r){let s=ot(()=>t.fmt.orderBy(t.fmt.filter(r[1](),t[r[2]]),t.orderBy));Object.defineProperty(t,r[0],{configurable:!0,get:()=>s.value})}}function Jl(e=(...t)=>fetch(...t)){async function t(r,s,i,a={}){let u=new URL(s,window.location.href);for(let[h,w]of Object.entries(a.params||{}))if(w!=null)for(let m of Array.isArray(w)?w:[w])u.searchParams.append(h,typeof m=="object"?JSON.stringify(m):m);let f=new AbortController,k;a.timeout?.then?a.timeout.then(()=>f.abort()):a.timeout&&(k=setTimeout(()=>f.abort(),a.timeout));try{let h={Accept:"application/json, text/plain, */*",...a.headers},w=document.cookie.match(/(?:^|;\s*)XSRF-TOKEN=([^;]*)/);w&&u.origin===window.location.origin&&(h["X-XSRF-TOKEN"]=decodeURIComponent(w[1]));let m;i!==void 0&&(i instanceof FormData?m=i:(h["Content-Type"]||(h["Content-Type"]="application/json;charset=utf-8"),m=JSON.stringify(i)));let E=await e(u.href,{method:r,headers:h,body:m,credentials:"same-origin",signal:f.signal}),y=await E.text(),g=y;if(a.transformResponse)g=a.transformResponse(y);else if(y&&(/json/i.test(E.headers.get("content-type")||"")||/^[\[{]/.test(y.trim())))try{g=JSON.parse(y)}catch{}let _={data:g,status:E.status,headers:R=>E.headers.get(R)};if(!E.ok)throw _;return _}catch(h){throw h.name==="AbortError"?{status:-1,data:null}:h}finally{clearTimeout(k)}}let n={};for(let r of["get","delete","head"])n[r]=(s,i)=>t(r.toUpperCase(),s,void 0,i);for(let r of["post","put","patch"])n[r]=(s,i,a)=>t(r.toUpperCase(),s,i,a);return n}var Ql={resolve:e=>Promise.resolve(e),reject:e=>Promise.reject(e),all:e=>Promise.all(e),defer(){let e,t;return{promise:new Promise((r,s)=>{e=r,t=s}),resolve:e,reject:t}}};var Xl=function(e){function t(n){return n=n||{used:0,total:0},n.unlimited=!n.total,n.percent=n.unlimited?0:Math.min(100,n.used*100/n.total),n.level=n.unlimited?"unlimited":n.percent>=95?"danger":n.percent>=80?"warn":"ok",n}return{decorate:t,load:function(){return e.get("/api/user/quota").then(n=>{let r=n.data||{};return r.storage=t(r.storage),r.file=t(r.file),r.repository=t(r.repository),r})}}};var dr={};vd(dr,{bigNum:()=>h8,date:()=>N8,diff:()=>w8,filter:()=>_8,humanFileSize:()=>m8,humanTime:()=>v8,limitTo:()=>C8,number:()=>k8,orderBy:()=>S8,plural:()=>D8,statusLabel:()=>g8,statusMsg:()=>b8,title:()=>y8,uppercase:()=>E8});var m8=e=>window.humanFileSize(e),h8=(function(){return function(t){let n=Number(t)||0,r=Math.abs(n);return r<1e3?String(n):r<1e4?(n/1e3).toFixed(1).replace(/\.0$/,"")+"k":r<1e6?Math.round(n/1e3)+"k":r<1e7?(n/1e6).toFixed(1).replace(/\.0$/,"")+"M":Math.round(n/1e6)+"M"}})(),v8=(function(){return function(t){if(!t)return"never";t instanceof Date&&(t=Math.round((Date.now()-t)/1e3)),(typeof t=="string"||typeof t=="number")&&(t=Math.round((Date.now()-new Date(t))/1e3));var n=t<0?"from now":"ago";if(Math.abs(t)>7200*24){let f=new Date;return f.setSeconds(f.getSeconds()-t),"on "+f.toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}t=Math.abs(t);for(var r=[t/60/60/24/365,t/60/60/24/30,t/60/60/24/7,t/60/60/24,t/60/60,t/60,t],s=["year","month","week","day","hour","minute","second"],i=0;i1&&(u+="s"),a>=1)return a+" "+u+" "+n}return"0 seconds "+n}})(),y8=(function(){return function(e){if(!e)return e;e=e.toLowerCase();var t=e.split(" "),n=t.map(function(r){return r.charAt(0).toUpperCase()+r.substring(1,r.length)});return n.join(" ")}})(),g8=(function(){var e={ready:"Ready",error:"Error",expired:"Expired",expiring:"Expiring",removed:"Removed",removing:"Removing",queue:"Queued",download:"Downloading",downloaded:"Downloaded",preparing:"Preparing",anonymizing:"Anonymizing"};return function(t){if(!t)return"";if(e[t])return e[t];var n=String(t).replace(/[_-]+/g," ").toLowerCase();return n.charAt(0).toUpperCase()+n.slice(1)}})(),b8=(function(){var e={branch_not_found:"Branch not found on GitHub",repo_not_found:"Repository not found on GitHub",repository_not_found:"Repository not found on GitHub",repo_not_accessible:"Repository is not accessible with your token",pr_not_found:"Pull request not found on GitHub",gist_not_found:"Gist not found on GitHub",commit_not_found:"Commit not found on GitHub",repo_too_big:"Repository exceeds the size limit",quota_exceeded:"Storage quota exceeded",incomplete_record:"Incomplete record: missing identifier"};return function(t){if(!t)return t;var n=t.match(/^rate_limited:(\d+)$/);if(n){var r=Math.max(0,Math.ceil((parseInt(n[1],10)-Date.now())/1e3));if(r<=0)return"Rate limited \u2014 resuming soon";var s=Math.floor(r/60),i=r%60;return"Rate limited \u2014 retrying in "+(s>0?s+"m "+i+"s":i+"s")}if(e[t])return e[t];if(/^[a-z0-9]+(_[a-z0-9]+)+$/.test(t)){var a=t.replace(/_/g," ");return a.charAt(0).toUpperCase()+a.slice(1)}return t}})(),w8=(function(e){let t=r=>r.replace(/&/g,"&").replace(//g,">");function n(r,s){if(!s)return;let i=s.newPath&&s.newPath!=="/dev/null"?s.newPath:s.oldPath||"",a=s.oldPath==="/dev/null"?"added":s.newPath==="/dev/null"?"deleted":s.oldPath&&s.newPath&&s.oldPath!==s.newPath?"renamed":"modified";if(r.push('
'),r.push('
'+t(i)+''+a+"
"),s.lines.length){r.push('');for(let u of s.lines)r.push('");r.push("
'+(u.oldNo||"")+''+(u.newNo||"")+''+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+''+t(u.text)+"
")}r.push("
")}return function(r){if(!r)return r;let s=[],i=null,a=0,u=0,f=()=>(i||(i={oldPath:"",newPath:"",lines:[]}),i),k=()=>{i&&(i.lines.length||i.oldPath||i.newPath)&&(n(s,i),i=null)},h=r.split(` +`);for(let w=0;we});function k8(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function E8(e){return String(e??"").toUpperCase()}function C8(e,t,n=0){return(e||[]).slice(n,n+t)}function _8(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function S8(e,t){if(!t)return e||[];let n=Array.isArray(t)?t:[t];return[...e||[]].sort((r,s)=>{for(let i of n){let a=i[0]==="-"?-1:1;i=i.replace(/^[+-]/,"");let u=i.split(".").reduce((k,h)=>k?.[h],r),f=i.split(".").reduce((k,h)=>k?.[h],s);if(typeof u=="string"&&(u=u.toLowerCase()),typeof f=="string"&&(f=f.toLowerCase()),u!==f)return(u==null?-1:f==null?1:ur[s])}function D8(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var ur={ERRORS:{cache_busy:"Downloads are busy. Please try again shortly.",invalid_sort:"The selected sort order is invalid.",invalid_cursor:"This project page is no longer valid. Reload the list.",repository_changed:"The repository changed while processing. Please retry.",repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"Unknown error, contact the admin.",unreachable:"Anonymous GitHub is unreachable, contact the admin.",request_error:"Unable to download the file, check your connection or contact the admin.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"The repository was not found on GitHub. Check the URL and spelling, make sure you are signed in to the account that can see it, and confirm the repo isn't hidden under an org that restricts third-party app access.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please try again shortly.",pull_request_not_available:"This pull request is currently not available.",invalid_pullRequestId:"The pull request ID is invalid.",pullRequestId_already_used:"This pull request ID is already in use. Please choose a different one.",repository_not_specified:"A repository must be specified for this pull request.",pullRequestId_not_specified:"A pull request ID must be specified.",pullRequestId_is_not_a_number:"The source pull request ID must be a number.",options_not_provided:"Anonymization options are mandatory.",terms_not_specified:"Anonymization terms must be specified.",invalid_terms_format:"Terms are in an invalid format.",missing_content:"No content was provided to the anonymization preview.",unable_to_anonymize:"An error happened during the anonymization process. Please try later or report the issue.",non_supported_mode:"The selected anonymization mode is invalid, only download and stream are supported.",invalid_path:"The provided path is invalid or missing.",path_not_specified:"A file path must be specified.",path_not_defined:"The file path has not been resolved yet.",invalid_file_path:"The requested file path is not valid.",invalid_request:"The request is missing required fields or is malformed.",invalid_project_name:"Use a project name of up to 100 characters without line breaks or control characters.",no_file_selected:"Please select a file.",file_not_found:"The requested file is not found.",file_not_accessible:"The requested file is not accessible.",file_not_supported:"The file type is not supported. Anonymous GitHub cannot handle it.",file_too_big:"The file size exceeds the limit of Anonymous GitHub.",is_folder:"The path points to a folder.",folder_not_supported:"The path points to a folder. Please select a file.",unable_to_write_file:"Unable to write file on disk.",download_not_enabled:"Repository downloads are not enabled on this server.",unable_to_download:"The repository could not be downloaded. Please try again later.",s3_config_not_provided:"Object storage has not been configured on this server.",stats_unsupported:"Statistics are only supported in download mode.",branches_not_found:"The requested branch is not found.",readme_not_available:"No README for the repository is found.",page_not_supported_on_different_branch:"GitHub Pages is served from a different branch than the one selected. Pick the branch that GitHub Pages is configured to use.",page_not_activated:"GitHub Pages is not enabled on this repository. Enable it in the repository settings on GitHub before anonymizing.",is_removed:"This resource has been removed and is no longer available.",conf_name_missing:"A conference name is required.",conf_id_missing:"A conference ID is required.",conf_id_used:"This conference ID is already in use. Please choose a different one.",conf_start_date_missing:"A start date is required for the conference.",conf_end_date_missing:"An end date is required for the conference.",conf_start_date_invalid:"The start date must be before the end date.",conf_end_date_invalid:"The end date must be in the future.",invalid_plan:"The selected plan is not valid.",conference_not_found:"The requested conference could not be found.",conf_not_found:"The requested conference could not be found.",conf_not_activated:"The conference is not activated.",billing_missing:"Billing information is required for this plan.",billing_name_missing:"A billing name is required.",billing_email_missing:"A billing email is required.",billing_address_missing:"A billing address is required.",billing_city_missing:"A billing city is required.",billing_zip_missing:"A billing ZIP/postal code is required.",billing_country_missing:"A billing country is required.",queue_not_found:"The specified queue could not be found.",job_not_found:"The specified job could not be found in the queue.",error_retrying_job:"An error occurred while retrying the job.",gist_expired:"The gist is expired.",gist_not_ready:"Anonymous GitHub is still processing the gist, it can take several minutes.",gist_not_found:"The requested gist could not be found.",gist_not_available:"This gist is currently not available.",invalid_gistId:"The format of the gist ID is invalid.",gistId_not_specified:"A gist ID must be provided.",gistId_already_used:"The gist ID is already used.",missing_token:"An authentication token is required.",invalid_token:"The provided authentication token is invalid.",login_failed:"Login failed. Please try again.",server_error:"An unexpected server error occurred. Please try again later.",username_not_defined:"A username must be provided.",github_user_not_found:"The specified GitHub user could not be found.",cannot_coauthor_self:"You cannot add yourself as a co-author.",storage_write_size_mismatch:"The downloaded file was smaller than expected. The upstream source may have returned an incomplete response \u2014 please try again.",storage_read_error:"An error occurred while reading the file from storage \u2014 please try again.",upstream_error:"A temporary error occurred while fetching from GitHub \u2014 please try again.",token_expired:"Your GitHub access token has expired. Please log out and log in again to refresh it.",job_is_active:"This job is currently running \u2014 wait for it to finish or remove it first.",github_app_access_required:"Allow this repository on GitHub using the read-only access button, then retry. Organization access may require administrator approval.",github_app_reconnect_required:"Reconnect your GitHub App account to restore read-only access.",github_app_disabled:"New GitHub App connections are currently unavailable.",github_oauth_required:"Connect legacy GitHub OAuth to use this feature.",github_identity_mismatch:"Use the same GitHub account that you are signed in with here.",github_app_permissions_invalid:"The GitHub App must be configured with read-only permissions.",github_unavailable:"GitHub is temporarily unavailable. Please retry.",connection_changed:"The repository connection changed. Reload and try again.",repository_busy:"Wait for the repository operation to finish before changing its connection.",invalid_connection:"Select a supported GitHub connection.",github_oauth_disabled:"Legacy OAuth sign-in is currently disabled.",invalid_auth_state:"The authorization session expired. Please start again from Anonymous GitHub.",invalid_webhook_signature:"The webhook signature is invalid.",webhook_processing_failed:"Webhook processing failed. Retry the delivery.",github_app_authorization_cancelled:"GitHub authorization was cancelled.",github_account_link_required:"Verify your existing account with your previous GitHub connection. Future sign-ins will use the GitHub App.",github_app_refresh_busy:"GitHub credentials are being renewed. Please retry shortly.",github_grant_revocation_failed:"Unable to revoke the GitHub grant. Please retry.",another_login_required:"Connect and verify another sign-in method before disconnecting OAuth.",oauth_resources_remaining:"Some resources still require OAuth. Migrate or remove them before disconnecting.",invalid_github_path:"The GitHub repository path is invalid."},WARNINGS:{page_not_enabled_on_repo:"GitHub Pages is not enabled on this repository. Enable it in the repository's Settings \u2192 Pages on GitHub, then refresh.",page_branch_mismatch:"GitHub Pages on this repository is served from the '{{pageBranch}}' branch, but you selected '{{selectedBranch}}'. Switch the branch above to '{{pageBranch}}' to anonymize the Pages site.",folder_truncated:"This folder has more than 10,000 entries; only a partial listing is shown.",repo_truncated:"Some folders in this repository have too many files to be fully listed. Affected folders are marked with a warning icon.",submodules_not_included:"This repository uses git submodules. Submodule contents are not included in the anonymized repository and appear as empty folders."}};var Zl={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=et(null);return $t(()=>{let r=[t.value][0];r.classList.add("html-doc");function s(){r.innerHTML="";let i=e.content;if(typeof i!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let u=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&u.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",u.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),r.appendChild(a);let f="";e.baseUrl&&(f=''),a.srcdoc=f+i}Be(()=>e.content,s,{immediate:!0}),Be(()=>e.baseUrl,s,{immediate:!0}),Be(()=>e.allowScripts,s,{immediate:!0})}),()=>ke("html-doc",{ref:t})}};var xl={name:"pdfviewer",props:["src"],setup(e){let t=et(null);return $t(()=>{let n=[t.value],r=400,s=[.5,.75,1,1.25,1.5,2,3],i=1e3,a=n[0];a.classList.add("pdf-viewer");let u=null,f=[],k=!1,h=null,w=1,m=1,E=0,y=0,g=612/792,_=0,R=null,T=new Map,I=0;function F(L){let v=T.get(L);v&&(v.cancelled=!0,v.task?.cancel?.(),T.delete(L));let N=L.querySelector("canvas");N&&(N.width=0,N.height=0),L.innerHTML="",delete L.dataset.state}let P=document.createElement("div");P.className="pdf-toolbar";let M=document.createElement("div");M.className="pdf-pages",M.tabIndex=0,M.setAttribute("aria-label","PDF pages"),a.appendChild(P),a.appendChild(M);function se(L,v,N){let q=document.createElement("button");return q.type="button",q.className="pdf-toolbar-btn",q.title=v,q.setAttribute("aria-label",v),q.innerHTML='',q.addEventListener("click",N),q}let oe=se("fa-chevron-up","Previous page",function(){_e(m-1)}),S=se("fa-chevron-down","Next page",function(){_e(m+1)}),O=document.createElement("input");O.type="text",O.className="pdf-toolbar-page",O.setAttribute("aria-label","Page number"),O.title="Page number \u2014 type a page and press Enter",O.addEventListener("keydown",function(L){L.key==="Enter"&&(_e(parseInt(O.value,10)),O.blur())}),O.addEventListener("blur",function(){O.value=String(m)});let Y=document.createElement("span");Y.className="pdf-toolbar-count";let Z=se("fa-search-minus","Zoom out",function(){C(s[Math.max(0,fe()-1)])}),te=se("fa-search-plus","Zoom in",function(){C(s[Math.min(s.length-1,fe()+1)])}),J=document.createElement("button");J.type="button",J.className="pdf-toolbar-btn pdf-toolbar-zoom",J.title="Reset zoom to fit the width",J.setAttribute("aria-label","Reset zoom to fit the width"),J.addEventListener("click",function(){C(1)}),P.appendChild(oe),P.appendChild(S);let re=document.createElement("span");re.className="pdf-toolbar-group",re.appendChild(O),re.appendChild(Y),P.appendChild(re);let ce=document.createElement("span");ce.className="pdf-toolbar-group pdf-toolbar-right",ce.appendChild(Z),ce.appendChild(J),ce.appendChild(te),P.appendChild(ce);function fe(){let L=0;for(let v=0;v=L,J.textContent=Math.round(w*100)+"%",Z.disabled=fe()===0,te.disabled=fe()===s.length-1}function Oe(L){let v=f[L-1];v&&(M.scrollTop+=v.getBoundingClientRect().top-M.getBoundingClientRect().top)}function _e(L){if(!u||isNaN(L))return;let v=Math.min(Math.max(1,L),u.numPages);f[v-1]&&(Oe(v),m=v,E=v,y=Date.now()+800,le(),Ee())}function Ue(){if(!f.length||Date.now(){}),R=null),h&&(clearTimeout(h),h=null),u&&(u.destroy(),u=null),f=[],m=1,M.innerHTML="",le()}function Me(){M.innerHTML="";let L=document.createElement("div");L.className="pdf-viewer-error",L.textContent="This PDF could not be displayed.",M.appendChild(L)}function Pe(){let L=Math.max(120,M.clientWidth-24);return Math.round(Math.min(L,i)*w)}function He(L,v,N){let q=window.devicePixelRatio||1,H=L.getViewport({scale:1}),j=parseFloat(v.style.width);if(!j)return;let U=L.getViewport({scale:j/H.width*q}),G=document.createElement("canvas");return G.width=Math.floor(U.width),G.height=Math.floor(U.height),G.style.width=j+"px",G.style.height=Math.floor(U.height/q)+"px",v.innerHTML="",v.appendChild(G),v.style.height=G.style.height,N.task=L.render({canvasContext:G.getContext("2d"),viewport:U}),N.task.promise}function Ee(){if(!u)return;let L=_,v=M.getBoundingClientRect(),N=v.top-r,q=v.top+M.clientHeight+r,H=f.map((U,G)=>({slot:U,i:G,rect:U.getBoundingClientRect()})).filter(U=>U.rect.top<=q&&U.rect.bottom>=N).sort((U,G)=>Math.abs(U.rect.top-v.top)-Math.abs(G.rect.top-v.top)).slice(0,6),j=new Set(H.map(U=>U.slot));for(let U of T.keys())j.has(U)||F(U);for(let{slot:U,i:G}of H){if(U.dataset.state||I>=2)continue;let ee={cancelled:!1,task:null};T.set(U,ee),I++,U.dataset.state="rendering";let x;u.getPage(G+1).then(W=>{if(x=W,!(ee.cancelled||L!==_))return He(x,U,ee)}).then(()=>{ee.cancelled||L!==_||(U.dataset.state="done",E&&Date.now(){!ee.cancelled&&L===_&&(U.dataset.state="failed")}).finally(()=>{I--,x?.cleanup?.(),u&&Ee()})}}function z(){k||(k=!0,window.requestAnimationFrame(function(){k=!1,Ue(),Ee()}))}function ne(){let L=!1;function v(){L||(L=!0,Ee())}window.requestAnimationFrame(v),window.setTimeout(v,50)}function Q(){_++,f.forEach(F);let L=Pe();f.forEach(function(v){delete v.dataset.state,v.innerHTML="",v.style.width=L+"px",v.style.height=Math.round(L/g)+"px"}),Ee()}function C(L){if(!u||!f.length||L===w)return;let v=m;w=L,le(),Q(),_e(v)}function V(){u&&(h&&clearTimeout(h),h=setTimeout(function(){h=null,u&&f.length&&Q()},250))}function B(L){if(Re(),!L)return;let v=_;R=pdfjsLib.getDocument({url:L,isEvalSupported:!1,standardFontDataUrl:"/script/external/pdf-standard-fonts/",cMapUrl:"/script/external/pdf-cmaps/",cMapPacked:!0}),R.promise.then(function(N){if(v!==_){N.destroy();return}return u=N,u.getPage(1).then(function(q){if(v!==_)return;let H=q.getViewport({scale:1});H.width&&H.height&&(g=H.width/H.height);let j=Pe();for(let U=1;U<=u.numPages;U++){let G=document.createElement("div");G.className="pdf-viewer-page",G.style.width=j+"px",G.style.height=Math.round(j/g)+"px",M.appendChild(G),f.push(G)}le(),ne()})}).catch(function(){v===_&&Me()})}M.addEventListener("scroll",z,{passive:!0}),$(window).on("resize",V),le(),Be(()=>e.src,B,{immediate:!0}),co(function(){M.removeEventListener("scroll",z),$(window).off("resize",V),Re()})}),()=>ke("pdfviewer",{ref:t})}};var T8={key:0,class:"quota-row quota-usage"},A8={class:"quota-header"},O8={class:"quota-label"},I8={class:"project-type-svg","aria-hidden":"true"},P8=["href"],V8={key:0,class:"quota-percent"},q8={key:1,class:"quota-unlimited-tag"},M8={class:"quota-value"},$8={key:0},L8=["aria-label","aria-valuenow","aria-valuemax","aria-valuetext"],U8={key:1,class:"quota-remaining"},F8={key:2,class:"quota-remaining quota-limit"};function ed(e,t){return e.quota?(l(),d("div",T8,[(l(),d(X,null,ae([{key:"repository",label:"Repositories",kind:"count",icon:"project-type-repo"},{key:"storage",label:"Storage",kind:"bytes",icon:"project-icon-storage"},{key:"file",label:"Files",kind:"count",icon:"project-icon-file"}],n=>o("div",{class:A(["quota-item","quota-"+e.quota[n.key].level]),key:n.key},[o("div",A8,[o("span",O8,[(l(),d("svg",I8,[o("use",{href:"#"+n.icon},null,8,P8)])),b(c(n.label),1)]),e.quota[n.key].unlimited?p("v-if",!0):(l(),d("span",V8,c(e.fmt.number(e.quota[n.key].percent,0))+"% used",1)),e.quota[n.key].unlimited?(l(),d("span",q8,"Unlimited")):p("v-if",!0)]),o("div",M8,[o("strong",null,c(e.formatAmount(e.quota[n.key].used,n.kind)),1),e.quota[n.key].unlimited?p("v-if",!0):(l(),d("span",$8," / "+c(e.formatAmount(e.quota[n.key].total,n.kind)),1))]),e.quota[n.key].unlimited?p("v-if",!0):(l(),d("div",{key:0,class:A(["quota-track","quota-"+e.quota[n.key].level]),role:"progressbar","aria-valuemin":"0","aria-label":n.label+" quota","aria-valuenow":Math.min(e.quota[n.key].used,e.quota[n.key].total),"aria-valuemax":e.quota[n.key].total,"aria-valuetext":e.fmt.number(e.quota[n.key].percent,0)+"% used"},[e.quota[n?.key].unlimited?p("v-if",!0):(l(),d("div",{key:0,class:"quota-fill",style:qe({width:e.quota[n.key].percent+"%"})},null,4))],10,L8)),!e.quota[n.key].unlimited&&e.quota[n.key].used=e.quota[n.key].total?(l(),d("p",F8,c(e.quota[n.key].used>e.quota[n.key].total?"Limit exceeded":"Limit reached"),1)):p("v-if",!0)],2)),64))])):p("v-if",!0)}var z8={props:["quota","fmt"],setup(e){return{formatAmount:(t,n)=>n==="bytes"?e.fmt.humanFileSize(t).replace(/([a-zA-Z]+)$/," $1"):e.fmt.number(t)}},render:ed},H8=new Set(he),od={props:["content","terms","options"],setup(e){let t=et(null),n=()=>{t.value.innerHTML=renderMD(e.content||"",window.location.pathname+"/../")};return $t(()=>{n(),Be(()=>[e.content,e.terms,e.options],n,{deep:!0})}),()=>ke("markdown",{ref:t})}},B8={props:["file","terms","options"],setup(e){let t=et(null),n=()=>nt(()=>t.value?.querySelectorAll("pre code").forEach(r=>window.Prism?.highlightElement(r)));return $t(n),Be(()=>[e.file?.content,e.terms,e.options],n,{deep:!0}),()=>{let r=e.file||{},s=(r.filename||"").split(".").pop().toLowerCase();if(["md","markdown"].includes(s)||r.language==="Markdown")return ke("gist-file",{ref:t},ke(od,{content:r.content,terms:e.terms,options:e.options}));let i={js:"javascript",jsx:"javascript",ts:"javascript",typescript:"javascript",py:"python",html:"markup",xml:"markup",svg:"markup",sh:"bash"},a=(r.language||s||"none").toLowerCase();return ke("gist-file",{ref:t},ke("pre",{class:"line-numbers"},ke("code",{class:"language-"+(i[a]||a),key:r.content},r.content||"")))}}},j8={props:["file","content"],setup(e){let t=et(null),n=0,r,s=async()=>{let i=++n;r?.abort(),r=new AbortController;try{let a=e.content?JSON.parse(e.content):await fetch(e.file?.download_url||e.file,{signal:r.signal}).then(u=>{if(!u.ok)throw Error("Notebook request failed");return u.json()});if(await oo("notebook"),i!==n)return;t.value.innerHTML=DOMPurify.sanitize(nb.parse(a).render()),t.value.querySelectorAll("pre code").forEach(u=>window.Prism?.highlightElement(u))}catch(a){i===n&&a.name!=="AbortError"&&(t.value.textContent="Unable to render the notebook.")}};return $t(()=>{s(),Be(()=>[e.file,e.content],s)}),co(()=>{n++,r?.abort()}),()=>ke("notebook",{ref:t})}},G8={props:["stats"],setup(e){return()=>{let t=Object.entries(e.stats||{}).filter(([,r])=>r.code),n=t.reduce((r,[,s])=>r+s.code,0);return ke("loc",t.map(([r,s])=>ke("div",{class:"lang",title:`${r}: ${s.code.toLocaleString()} lines`,style:{width:s.code*100/n+"%",background:langColors[r]}})))}}},nd={Markdown:od,GistFile:B8,Notebook:j8,Loc:G8,HtmlDoc:Zl,QuotaUsage:z8,Pdfviewer:vi(async()=>(await oo("pdf"),pdfjsLib.GlobalWorkerOptions.workerSrc="/script/external/pdf.worker.js",xl))},sd={async mounted(e,{value:t}){e._editorValue=t;try{if(await yr(),e._editorDisposed)return;let n=e._editorValue,r=ace.edit(e);e._editor=r,r.setValue(String(n.content??""),-1),td(e,n.options),e._editorCleanup=n.options?.onLoad?.(r)}catch(n){e._editorDisposed||(e.textContent=n.message)}},updated(e,{value:t}){e._editorValue=t,e._editor&&(e._editor.getValue()!==String(t.content??"")&&e._editor.setValue(String(t.content??""),-1),td(e,t.options))},beforeUnmount(e){e._editorDisposed=!0,e._editorCleanup?.(),e._editor?.destroy()}};function td(e,t={}){let n=H8.has(t.mode)?t.mode:"text";e._editor.session.setMode("ace/mode/"+n),t.theme&&e._editor.setTheme("ace/theme/"+t.theme),e._editor.setReadOnly(t.readOnly!==!1)}var rd={mounted(e){if(!window.IntersectionObserver)return;let t=[...e.querySelectorAll('a[href^="#"]')],n=new Set,r=new IntersectionObserver(s=>{s.forEach(a=>a.isIntersecting?n.add(a.target.id):n.delete(a.target.id));let i=t.find(a=>n.has(a.hash.slice(1)));t.forEach(a=>a.classList.toggle("active",a===i))},{rootMargin:"-20% 0px -60% 0px",threshold:0});nt(()=>t.forEach(s=>{let i=document.getElementById(s.hash.slice(1));i&&r.observe(i)})),e._observer=r},beforeUnmount(e){e._observer?.disconnect()}};function W8(e){let t={children:[]},n=new Map([["",t]]);function r(s){if(n.has(s))return n.get(s);let i=s.lastIndexOf("/"),a=r(i<0?"":s.slice(0,i)),u={name:s.slice(i+1),children:[]};return n.set(s,u),a.children.push(u),u}for(let s of e||[]){let i=s.path?`${s.path}/${s.name}`:s.name;s.size==null?r(i):r(s.path||"").children.push({...s})}return t.children}var id={name:"FileTree",props:["file","parent","searchQuery","searchResults","page"],setup(e){let t=Ga(),n=et(null),r=ze(Object.create(null)),s=null,i=ot(()=>W8(e.file)),a=()=>"/"+(Array.isArray(t.params.path)?t.params.path.join("/"):t.params.path||"");Be(()=>[t.params.repoId,t.params.path],()=>{let m="";a().split("/").filter(Boolean).forEach(E=>{m+="/"+E,r[m]=!0})},{immediate:!0});let u=ot(()=>{if(!e.searchQuery||!e.searchResults)return null;let m=new Set,E=new Set;return e.searchResults.forEach(y=>{m.add(y.path?`${y.path}/${y.name}`:y.name);let g="";(y.path||"").split("/").filter(Boolean).forEach(_=>{g=g?g+"/"+_:_,E.add(g)})}),{files:m,folders:E}}),f=()=>[...n.value.querySelectorAll("li > a")],k=m=>{n.value.querySelector(".tree-focused")?.classList.remove("tree-focused"),m&&(s=m.dataset.path,m.classList.add("tree-focused"),m.scrollIntoView?.({block:"nearest"}),n.value.focus())};function h(m){let E=f(),y=n.value.querySelector(".tree-focused")||E[0],g=E.indexOf(y);if(!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Enter"].includes(m.key)||(m.preventDefault(),m.key==="ArrowDown"&&k(E[(g+1)%E.length]),m.key==="ArrowUp"&&k(E[(g-1+E.length)%E.length]),!y))return;let _=y.closest("li");m.key==="ArrowRight"&&_.classList.contains("folder")&&(_.classList.contains("open")?k(_.querySelector(":scope > ul > li > a")):y.click()),m.key==="ArrowLeft"&&(_.classList.contains("folder")&&_.classList.contains("open")?y.click():k(_.parentElement.closest("li.folder")?.querySelector(":scope > a"))),m.key==="Enter"&&y.click()}function w(m,E=""){let y=[...m].sort((g,_)=>+!!_.children-+!!g.children||g.name.localeCompare(_.name));return ke("ul",y.flatMap(g=>{let _=g,R=_.name,T=(E+"/"+R).slice(1);if(u.value&&!u.value.files.has(T)&&!u.value.folders.has(T))return[];for(;_.children?.length===1;)_=_.children[0],R+="/"+_.name;let I=E+"/"+R,F=!!_.children,P=u.value?r[I]!==!1:!!r[I],M=F&&e.page?.options?.truncatedFolders?.includes(I.slice(1)),se=e.page?.fileCounts?.[I.slice(1)]||0,oe=ke("span",{class:F?"tree-icon-folder":"far fa-file tree-icon-file","aria-hidden":"true"},F?ke("svg",{viewBox:"0 0 14 12",focusable:"false"},ke("path",{d:"M1.5 10.5v-9h4l1.5 2h5.5v7z"})):null),S=ke("span",{class:"tree-name"},R),O=Z=>{k(Z.currentTarget),F&&(Z.preventDefault(),r[I]=!P,r[I]&&!_.children.length&&e.page.getFiles(I.slice(1)),nt(()=>k(f().find(te=>te.dataset.path===s))))},Y=ke("a",{"data-path":I,href:F?void 0:`/r/${encodeURIComponent(t.params.repoId)}${encodePathForUrl(I)}`,class:{"tree-focused":s===I},onClick:O},[F?ke("span",{class:"tree-toggle"}):E?ke("span",{class:"tree-spacer"}):null,oe,S,M?ke("span",{class:"truncated-warning",title:e.page.fmt.translate("WARNINGS.folder_truncated")},ke("i",{class:"fas fa-exclamation-triangle"})):null,F&&se?ke("span",{class:"tree-count"},se):null]);return ke("li",{key:I,class:{file:!0,folder:F,open:P,active:a()===I,truncated:M},title:F?"":`Size: ${humanFileSize(_.size||0)}`},[Y,F&&P?w(_.children,I):null])}))}return()=>ke("tree",{ref:n,tabindex:0,onKeydown:h},e.file?.length?u.value?.files.size===0?ke("div",{class:"tree-search-empty"},"No files found"):w(i.value):"Empty repository")}};function ld(){return ze({errors:{},dirty:!1,touched:!1,submitted:!1,get invalid(){return Object.values(this.errors).some(Boolean)},setValidity(e,t){this.errors[e]=!t},setDirty(){this.dirty=!0}})}function dd(e,t){if(!e[t]){let n=ld();Object.defineProperty(n,"invalid",{get(){return Object.values(n.errors).some(Boolean)||Object.keys(n).some(r=>r!=="invalid"&&n[r]&&typeof n[r]=="object"&&n[r].invalid)}}),e[t]=n}return e[t]}var ud={beforeMount(e,{value:t}){e._formState=dd(t,e.name),e.addEventListener("submit",n=>n.preventDefault())}};function K8(e){return e instanceof Date?isNaN(e)?"":`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`:e||""}function ad(e){let t=e._field.binding.value;e.type==="checkbox"?e.checked=!!t:e.type==="radio"?e.checked=t==(e._value??e.value):e._field.timer||(e.value=e.type==="date"?K8(t):t??""),cr(e)}function cr(e){let t=e._field.validation;if(!t)return;let n=e.validity;for(let[r,s]of Object.entries({required:n.valueMissing,pattern:n.patternMismatch,min:n.rangeUnderflow,max:n.rangeOverflow,date:n.badInput,email:n.typeMismatch&&e.type==="email",url:n.typeMismatch&&e.type==="url"}))t.setValidity(r,e.disabled||!s)}var cd={beforeMount(e,{value:t}){var a;let n=t.form&&dd(t.state,t.form),r=n&&e.name?n[a=e.name]||(n[a]=ld()):null;e._field={binding:t,validation:r,timer:null};let s=()=>{clearTimeout(e._field.timer),e._field.timer=null;let u=e._field.binding,f=e.type==="checkbox"?e.checked:e._value??e.value;if(!(e.type==="radio"&&!e.checked)){if((e.type==="number"||e.type==="range")&&(f=e.value===""?null:Number(e.value)),e.type==="date"&&(f=e.value?new Date(e.value+"T00:00:00"):null),r){r.setDirty();for(let k of Object.keys(r.errors))r.setValidity(k,!0)}u.set(f),cr(e),u.change?.()}};e._field.commit=s;let i=u=>{let f=e._field.binding.options?.debounce||0,k=typeof f=="number"?f:f[u.type]??f.default??0;clearTimeout(e._field.timer),k?e._field.timer=setTimeout(s,k):s()};e.addEventListener(e.tagName==="SELECT"||["checkbox","radio","date"].includes(e.type)?"change":"input",i),e.addEventListener("blur",()=>{r&&(r.touched=!0),e._field.timer&&s()})},mounted:ad,updated(e,{value:t}){e._field.binding=t,ad(e)},beforeUnmount(e){clearTimeout(e._field.timer);let{binding:t,validation:n}=e._field,r=t.form&&t.state[t.form];r&&r[e.name]===n&&delete r[e.name]}};function pd(e,t){let n=e.target.closest("form");if(n?._formState&&(n._formState.submitted=!0),n?.querySelectorAll("input, select, textarea").forEach(r=>{r._field?.timer&&r._field.commit(),r._field&&cr(r)}),n&&!n.checkValidity()){let r=n.querySelector(":invalid");r?.scrollIntoView?.({block:"center"}),r?.focus(),n.reportValidity();return}return t()}var fd=Symbol("session"),Y8=/^\/(w|api|github)(\/|$)/;function md(e,t={}){let n=e?.split(".").reduce((r,s)=>r?.[s],ur);return n==null&&e?.startsWith("ERRORS.")&&(n=ur.ERRORS.unknown_error),String(n??e??"").replace(/{{\s*([^}]+?)\s*}}/g,(r,s)=>t[s]??"")}var J8={...dr,translate:md};function Q8(e){if(e==null||e==="")return e;try{let t=new URL(e,window.location.href);return["http:","https:","mailto:","tel:","blob:"].includes(t.protocol)?e:void 0}catch{return}}function X8(e="#app",t={}){let n=!!document.querySelector('meta[name="review-consent-page"][content="1"]'),r=n&&window.location.pathname==="/review-link"?hr(window):null,s=()=>{let m=r;return r=null,m};!t.history&&window.location.pathname==="/"&&/^#!\/r\/[^/?#]+/.test(window.location.hash)&&window.history.replaceState(window.history.state,"",window.location.hash.slice(2));let i=new Map,a=Jl(t.fetch),u,f;function k(){let m=ct(),E={url(g){return g===void 0?f.currentRoute.value.fullPath:(f.push(g),E)},path(){return f.currentRoute.value.path},search(){return f.currentRoute.value.query}},y=new Proxy({},{get(g,_){let R=f.currentRoute.value.params[_];return Array.isArray(R)?R.join("/"):R}});return{takeReviewHandoff:s,http:a,...m,location:E,params:y,window,promises:Ql,html:{trustAsHtml:g=>g},translate:(g,_)=>Promise.resolve(md(g,_)),quotaService:Xl(a)}}function h(m){return{name:m.template,setup(){let E=rr(ut(fd),i);m.setup(E,k()),Yl(m.template,E);let y=[];return()=>as[m.template](E,y)}}}f=ja({history:t.history||za(),routes:yl.map(m=>m.redirect?m:{path:m.path,component:h(m),meta:{title:m.title,preserveExplorer:m.preserveExplorer}})});let w=la({setup(){u=rr(null,i),u.fmt=J8,u.window=window,u.Math=Math,u.sanitize=g=>DOMPurify.sanitize(g??""),u.highlightRedactions=g=>(u.site_options,Ja(g)),u.submitForm=pd,u.safeUrl=Q8;let m=k();Xa(u,m.http,m.location,m.timeout),uo(fd,u),Be(()=>u.title,g=>{document.title=g||"Anonymous GitHub"});let E=[],y=g=>{let _=g.target.closest?.("a[href]");if(g.defaultPrevented||g.button!==0||g.metaKey||g.ctrlKey||g.shiftKey||g.altKey||!_||_.hasAttribute("download")||_.target&&_.target!=="_self"||_.dataset.toggle||_.getAttribute("href").startsWith("#"))return;let T=new URL(_.href,window.location.href);n||/^\/review-link\/?$/i.test(T.pathname)||T.origin!==window.location.origin||Y8.test(T.pathname)||(g.preventDefault(),f.push(T.pathname+T.search+T.hash),$("#navbarSupportedContent.show").collapse("hide"))};return document.addEventListener("click",y),co(()=>document.removeEventListener("click",y)),()=>[Kl(u,[]),n?null:ke("header",{class:"app-header"},as["partials/header.htm"](u,E)),ke("main",{class:"app-view align-items-stretch w-100"},ke(sr,null,{default:({Component:g,route:_})=>g?ke(g,{key:_.meta.preserveExplorer?_.matched[0]?.path:_.path}):null})),ke("div",{class:"position-fixed p-3",style:{zIndex:999999999,right:0,bottom:0}},u.toasts.map((g,_)=>ke("div",{class:"toast show",role:"alert","aria-live":"assertive","aria-atomic":"true",key:_},[ke("div",{class:"toast-header"},[ke("strong",{class:"mr-auto"},g.title),ke("button",{type:"button",class:"ml-2 mb-1 close","aria-label":"Close",onClick:()=>u.removeToast(g)},"\xD7")]),ke("div",{class:"toast-body"},g.body)])))]}});for(let[m,E]of Object.entries(nd))w.component(m,E);return w.component("Tree",id),w.component("PartialView",{props:["name","state"],setup(m){let E=[];return()=>as[m.name](m.state,E)}}),w.directive("field",cd),w.directive("form",ud),w.directive("code-editor",sd),w.directive("paper-scrollspy",rd),w.use(f),f.beforeEach(async m=>{if(m.path==="/review-link"&&!n||n&&m.path!=="/review-link")return window.location.assign(m.fullPath),!1;u?.emit("routeLeave"),/^\/(r|repository|anonymize|pull-request-anonymize|gist-anonymize|pr|gist)(\/|$)/.test(m.path)&&await oo("markdown"),/^\/(r|repository)\//.test(m.path)&&await oo("org")}),f.afterEach(m=>{if(!u)return;u.title=m.meta.title,u.emit("routeChange",{title:m.meta.title}),u.emit("routeUpdate",{title:m.meta.title});let E=document.querySelector(".app-view");!m.meta.preserveExplorer&&E&&(E.scrollTop=0)}),w.mount(e),{app:w,router:f,state:u}}document.querySelector("#app")&&(window.anonymousApp=X8());})(); /*! Bundled license information: @vue/shared/dist/shared.esm-bundler.js: (** - * @vue/shared v3.5.42 + * @vue/shared v3.5.43 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **) @vue/reactivity/dist/reactivity.esm-bundler.js: (** - * @vue/reactivity v3.5.42 + * @vue/reactivity v3.5.43 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **) @vue/runtime-core/dist/runtime-core.esm-bundler.js: (** - * @vue/runtime-core v3.5.42 + * @vue/runtime-core v3.5.43 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **) @vue/runtime-dom/dist/runtime-dom.esm-bundler.js: (** - * @vue/runtime-dom v3.5.42 + * @vue/runtime-dom v3.5.43 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **) vue/dist/vue.runtime.esm-bundler.js: (** - * vue v3.5.42 + * vue v3.5.43 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **) diff --git a/src/config.ts b/src/config.ts index d23a47e..cb171c0 100644 --- a/src/config.ts +++ b/src/config.ts @@ -2,6 +2,8 @@ import { resolve } from "path"; import { randomBytes } from "crypto"; interface Config { + RESEND_API_KEY: string; + EMAIL_FROM: string; GITHUB_APP_ENABLED: boolean; GITHUB_APP_NEW_CONNECTIONS: boolean; GITHUB_OAUTH_ENABLED: boolean; @@ -67,6 +69,8 @@ interface Config { RATE_LIMIT: number; } const config: Config = { + RESEND_API_KEY: "", + EMAIL_FROM: "", GITHUB_APP_ENABLED: false, GITHUB_APP_NEW_CONNECTIONS: true, GITHUB_OAUTH_ENABLED: true, diff --git a/src/core/GitHubUtils.ts b/src/core/GitHubUtils.ts index 84959b7..0a8c79f 100644 --- a/src/core/GitHubUtils.ts +++ b/src/core/GitHubUtils.ts @@ -1,4 +1,5 @@ import { refreshLegacyToken } from "./legacy-token-refresh"; +import { notifyOwnerAccessProblem } from "./owner-notifications"; import AnonymizedRepositoryModel from "./model/anonymizedRepositories/anonymizedRepositories.model"; import { isConnected } from "../server/database"; import { githubQuotaKey, githubTokenContext } from "./github-token-context"; @@ -289,7 +290,7 @@ export function octokit(token: string) { export { waitForTokenGate }; -export async function checkToken(token: string) { +export async function checkToken(token: string, ownerId?: string) { const oct = octokit(token); try { const context = githubTokenContext(token); @@ -304,6 +305,9 @@ export async function checkToken(token: string) { ) { throw err; } + if (ownerId && (err as { status?: number }).status === 401) { + void notifyOwnerAccessProblem(ownerId, "token_expired"); + } return false; } } @@ -311,7 +315,12 @@ export async function checkToken(token: string) { const checkedRepositoryTokens = new WeakMap(); export async function getToken(repository: Repository) { - return measureStage("authorization", () => resolveRepositoryToken(repository)); + try { + return await measureStage("authorization", () => resolveRepositoryToken(repository)); + } catch (error) { + void notifyOwnerAccessProblem(repository.owner.id, error); + throw error; + } } async function resolveRepositoryToken(repository: Repository) { @@ -344,7 +353,7 @@ async function resolveRepositoryToken(repository: Repository) { return refreshed; } } - const check = await checkToken(ownerAccessToken); + const check = await checkToken(ownerAccessToken, repository.owner.id); if (check) { checkedRepositoryTokens.set(repository, ownerAccessToken); return ownerAccessToken; diff --git a/src/core/Repository.ts b/src/core/Repository.ts index b7d37af..969541f 100644 --- a/src/core/Repository.ts +++ b/src/core/Repository.ts @@ -1,3 +1,4 @@ +import { notifyOwnerAccessProblem } from "./owner-notifications"; import AnonymizedPathModel from "./model/anonymized-path"; import storage from "./storage"; import { contentGenerationPrefix, contentRetirementMarker } from "./content-generation"; @@ -223,7 +224,10 @@ export default class Repository { const previousPrefix = contentGenerationPrefix(`${previousGeneration || "legacy"}:${this.model.anonymizeDate?.toISOString() || ""}`); const streamed = this.model.source.type !== "Zip"; const source = this.source; - const files = await source.getFiles(opt.progress); + const files = await source.getFiles(opt.progress).catch(error => { + void notifyOwnerAccessProblem(this.owner.id, error); + throw error; + }); const sourceWithTruncation = source as unknown as { truncatedFolderList?: string[] }; const truncatedFolders = Array.isArray(sourceWithTruncation.truncatedFolderList) ? [...sourceWithTruncation.truncatedFolderList] : []; @@ -654,6 +658,9 @@ export default class Repository { repo: this.source.data.repoName, repositoryID: this.model.source.repositoryId, force: true, + }).catch(error => { + void notifyOwnerAccessProblem(this.owner.id, error); + throw error; }); // update the repository name if it has changed. Persist it diff --git a/src/core/github-app.ts b/src/core/github-app.ts index 83d0bea..1fb72eb 100644 --- a/src/core/github-app.ts +++ b/src/core/github-app.ts @@ -1,3 +1,4 @@ +import { notifyOwnerAccessProblem } from "./owner-notifications"; import { registerGitHubToken } from "./github-token-context"; import { createSign, randomUUID } from "crypto"; import { readFileSync } from "fs"; @@ -87,6 +88,14 @@ export async function saveAppGrant(ownerId: string, data: AppTokenResponse) { } export async function appUserToken(ownerId: string): Promise { + try { return await resolveAppUserToken(ownerId); } + catch (error) { + void notifyOwnerAccessProblem(ownerId, error); + throw error; + } +} + +async function resolveAppUserToken(ownerId: string): Promise { if (!config.GITHUB_APP_ENABLED) throw appError("github_app_disabled", 503); const user = await UserModel.findById(ownerId).select("status externalIDs").lean(); if (!user || user.status === "removed" || user.status === "banned") throw appError(); diff --git a/src/core/model/users/users.schema.ts b/src/core/model/users/users.schema.ts index e8f28fb..2541642 100644 --- a/src/core/model/users/users.schema.ts +++ b/src/core/model/users/users.schema.ts @@ -15,6 +15,8 @@ const UserSchema = new Schema({ type: String, index: { unique: true }, }, + emailPromptNever: { type: Boolean, default: false }, + accessAlertAfter: { type: Date, select: false }, emails: [ { email: { type: String }, diff --git a/src/core/model/users/users.types.ts b/src/core/model/users/users.types.ts index ce18cbe..62b4f0d 100644 --- a/src/core/model/users/users.types.ts +++ b/src/core/model/users/users.types.ts @@ -20,6 +20,7 @@ export interface IUser { createdAt?: Date; lastUsedAt?: Date; }[]; + emailPromptNever?: boolean; emails: { email: string; default: boolean; diff --git a/src/core/owner-notifications.ts b/src/core/owner-notifications.ts new file mode 100644 index 0000000..cf987eb --- /dev/null +++ b/src/core/owner-notifications.ts @@ -0,0 +1,81 @@ +import config from "../config"; +import UserModel from "./model/users/users.model"; +import { createLogger } from "./logger"; + +const logger = createLogger("owner-notifications"); +const DAY = 24 * 60 * 60 * 1000; +const accessErrors = new Set([ + "token_expired", "github_oauth_required", "github_app_reconnect_required", + "github_app_access_required", "repo_not_found", "repository_not_found", + "repo_not_accessible", "repo_access_limited", "repo_saml_enforcement", +]); + +export function normalizeEmail(value: unknown): string | null { + if (typeof value !== "string") return null; + const email = value.trim(); + // Accept one plain mailbox, never a display name or recipient list. + if (email.length > 254 || !/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9.-]*[a-zA-Z0-9])?\.[a-zA-Z]{2,}$/.test(email)) return null; + const local = email.split("@")[0]; + if (local.length > 64 || local.startsWith(".") || local.endsWith(".") || email.includes("..")) return null; + return email; +} + +export function notificationEmail(emails?: { email: string; default: boolean }[]): string { + return normalizeEmail(emails?.find(e => e.default)?.email) || + emails?.map(e => normalizeEmail(e.email)).find(Boolean) || ""; +} + +export function isAccessFailure(error: unknown): boolean { + const code = typeof error === "string" ? error : error instanceof Error ? error.message : ""; + if (!accessErrors.has(code)) return false; + if (error instanceof Error) { + const upstream = (error as Error & { cause?: { status?: number; httpStatus?: number } }).cause; + // Some legacy paths wrap timeouts or 5xx responses as repo_not_found. + // Only a confirmed access failure should prompt the owner to reconnect. + if (upstream && ![401, 403, 404].includes(upstream.status || upstream.httpStatus || 0)) return false; + const status = (error as Error & { httpStatus?: number }).httpStatus; + if (status && (status === 429 || status >= 500)) return false; + } + return true; +} + +/** Best effort; mail and database failures must not change repository behavior. */ +export async function notifyOwnerAccessProblem(ownerId: string, error: unknown): Promise { + if (!config.RESEND_API_KEY || !config.EMAIL_FROM || !isAccessFailure(error)) return; + try { + const now = new Date(); + // The atomic claim limits all repositories and workers to one email per owner + // per day. Claim before sending so concurrent requests cannot flood an inbox. + const owner = await UserModel.findOneAndUpdate({ + _id: ownerId, status: { $nin: ["removed", "banned"] }, + "emails.0": { $exists: true }, + $or: [{ accessAlertAfter: { $exists: false } }, { accessAlertAfter: { $lte: now } }], + }, { $set: { accessAlertAfter: new Date(now.getTime() + DAY) } }, { new: true }).lean(); + if (!owner) return; + const to = notificationEmail(owner.emails); + if (!to) return; + const base = /^https?:\/\//.test(config.APP_HOSTNAME) ? config.APP_HOSTNAME : `https://${config.APP_HOSTNAME}`; + const url = new URL("/connections", base).href; + try { + const response = await fetch("https://api.resend.com/emails", { + method: "POST", + headers: { Authorization: `Bearer ${config.RESEND_API_KEY}`, "Content-Type": "application/json" }, + signal: AbortSignal.timeout(15000), + body: JSON.stringify({ + from: config.EMAIL_FROM, to: [to], + subject: "Your Anonymous GitHub connection needs attention", + text: `Anonymous GitHub could not access GitHub using your connection, or could not read a repository.\n\nOpen your connections page to reconnect your account or restore repository access:\n${url}\n\nYou are receiving this email because you own content on Anonymous GitHub. You can change your alert address on the connections page.\n`, + }), + }); + if (!response.ok) throw new Error("email_delivery_failed"); + } catch { + // Permit retry on a later access failure, with a short backoff for outages. + await UserModel.updateOne({ _id: ownerId, accessAlertAfter: new Date(now.getTime() + DAY) }, + { $set: { accessAlertAfter: new Date(now.getTime() + 10 * 60000) } }); + logger.warn("owner access email delivery failed"); + } + } catch { + // Do not log provider errors, which can contain credentials or addresses. + logger.warn("owner access email unavailable"); + } +} diff --git a/src/core/redact-secrets.ts b/src/core/redact-secrets.ts index 3f2c1fa..556394d 100644 --- a/src/core/redact-secrets.ts +++ b/src/core/redact-secrets.ts @@ -1,4 +1,4 @@ -const sensitive = /^(?:authorization|proxy-authorization|cookie|set-cookie|token|access_?tokens?|refresh_?token|encryptedToken|encryptedRefreshToken|private_?key|GITHUB_APP_PRIVATE_KEY|GITHUB_APP_CLIENT_SECRET|GITHUB_APP_WEBHOOK_SECRET|ciphertext|nonce|tag|password|client_?secret|CREDENTIAL_KEYS)$/i; +const sensitive = /^(?:authorization|proxy-authorization|cookie|set-cookie|token|access_?tokens?|refresh_?token|encryptedToken|encryptedRefreshToken|private_?key|GITHUB_APP_PRIVATE_KEY|GITHUB_APP_CLIENT_SECRET|GITHUB_APP_WEBHOOK_SECRET|ciphertext|nonce|tag|password|client_?secret|CREDENTIAL_KEYS|RESEND_API_KEY)$/i; export function redactSecrets(value: unknown, seen = new WeakSet()): unknown { if (typeof value === "string") return value .replace(/\b(?:gh[pousr]_[A-Za-z0-9_]+|github_pat_[A-Za-z0-9_]+)\b/g, "[REDACTED]") diff --git a/src/queue/processes/downloadRepository.ts b/src/queue/processes/downloadRepository.ts index e807769..ba44600 100644 --- a/src/queue/processes/downloadRepository.ts +++ b/src/queue/processes/downloadRepository.ts @@ -2,6 +2,7 @@ import { githubQuotaKey } from "../../core/github-token-context"; import { SandboxedJob } from "bullmq"; import { config } from "dotenv"; config(); +import { notifyOwnerAccessProblem } from "../../core/owner-notifications"; import { getRepository as getRepositoryImport } from "../../server/database"; import { RepositoryStatus } from "../../core/types"; import { RepoJobData } from "../index"; @@ -142,6 +143,7 @@ export default async function (job: SandboxedJob) { if (error instanceof DelayedError || (error instanceof Error && error.name === "DelayedError")) { throw error; } + await notifyOwnerAccessProblem(repo.owner.id, error); logger.error("finished with error", { ...serializeError(error), repoId: job.data.repoId, diff --git a/src/server/routes/github-app.ts b/src/server/routes/github-app.ts index 30cb582..9e5d89b 100644 --- a/src/server/routes/github-app.ts +++ b/src/server/routes/github-app.ts @@ -1,3 +1,4 @@ +import { notificationEmail, normalizeEmail } from "../../core/owner-notifications"; import * as express from "express"; import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "crypto"; import config from "../../config"; @@ -16,7 +17,7 @@ import { isDisabledAccount, safeAuthReturnTo } from "./auth-utils"; type Flow = { state: string; expires: number; ownerId?: string; returnTo: string; repository?: string; install?: boolean }; declare module "express-session" { - interface SessionData { githubAppFlow?: Flow; githubInstallFlow?: Flow; githubConnectionCSRF?: string; } + interface SessionData { githubAppFlow?: Flow; githubInstallFlow?: Flow; githubConnectionCSRF?: string; emailPromptDismissed?: boolean; } } export function safeReturnTo(value: unknown): string { return safeAuthReturnTo(value, "/connections"); @@ -167,7 +168,8 @@ router.get("/connections", async (req, res) => { const repos = await RepositoryModel.find({ owner: user.id, status: { $ne: "removed" } }).select("repoId source.repositoryName githubAccess status statusDate").lean(); const prs = await PullRequestModel.find({ owner: user.id, status: { $ne: "removed" } }).select("pullRequestId source.repositoryFullName githubAccess status statusDate").lean(); const gistCount = await GistModel.countDocuments({ owner: user.id, status: { $ne: "removed" } }); - res.json({ csrf: req.session.githubConnectionCSRF, appEnabled: config.GITHUB_APP_ENABLED && config.GITHUB_APP_NEW_CONNECTIONS, + res.json({ notificationEmail: notificationEmail(user.model.emails), emailNotificationsEnabled: !!(config.RESEND_API_KEY && config.EMAIL_FROM), + csrf: req.session.githubConnectionCSRF, appEnabled: config.GITHUB_APP_ENABLED && config.GITHUB_APP_NEW_CONNECTIONS, gistConnection: config.GITHUB_APP_ENABLED && credentials.some(c => c.provider === APP_PROVIDER) ? "github-app" : "oauth", oauthEnabled: config.GITHUB_OAUTH_ENABLED, oauthConnected: !!(await getCredentialToken(user.id)), appConnected, appError: appErrorCode, installations, gistCount, resources: [ @@ -184,6 +186,24 @@ router.use("/connections", (req, res, next) => { next(); }); +router.post("/connections/email", async (req, res) => { + try { + const user = await getUser(req); + const action = req.body?.action || "save"; + if (!["save", "later", "never"].includes(action)) return res.status(400).json({ error: "Invalid email preference." }); + if (action === "later" || action === "never") { + if (action === "never") await UserModel.updateOne({ _id: user.id }, { $set: { emailPromptNever: true } }); + req.session.emailPromptDismissed = true; + await saveSession(req); + return res.json({ ok: true }); + } + const email = normalizeEmail(req.body?.email); + if (!email) return res.status(400).json({ error: "Enter a valid email address." }); + await UserModel.updateOne({ _id: user.id }, { $set: { emails: [{ email, default: true }] } }); + res.json({ notificationEmail: email }); + } catch (error) { handleError(error, res, req); } +}); + router.post("/connections/migrate", async (req, res) => { try { const user = await getUser(req); diff --git a/src/server/routes/user.ts b/src/server/routes/user.ts index 1dd96d9..259ffeb 100644 --- a/src/server/routes/user.ts +++ b/src/server/routes/user.ts @@ -1,3 +1,5 @@ +import { randomBytes } from "crypto"; +import { notificationEmail } from "../../core/owner-notifications"; import DashboardName from "../../core/model/dashboard-name"; import { dashboardSummary } from "./dashboard-summary"; import { revokeGrant } from "./github-app"; @@ -40,7 +42,18 @@ router.get("/logout", async (req, res) => { router.get("/", async (req, res) => { try { const user = await getUser(req); + const showEmailPrompt = !!(config.RESEND_API_KEY && config.EMAIL_FROM) && + !notificationEmail(user.model.emails) && !user.model.emailPromptNever && !req.session.emailPromptDismissed; + if (showEmailPrompt) { + req.session.githubConnectionCSRF ||= randomBytes(32).toString("hex"); + await new Promise((resolve, reject) => req.session.save(error => error ? reject(error) : resolve())); + } + res.set("Cache-Control", "no-store"); res.json({ + showEmailPrompt, + emailPromptCSRF: showEmailPrompt ? req.session.githubConnectionCSRF : undefined, + notificationEmail: notificationEmail(user.model.emails), + emailNotificationsEnabled: !!(config.RESEND_API_KEY && config.EMAIL_FROM), username: user.username, photo: user.photo, isAdmin: user.isAdmin, diff --git a/test/owner-notifications.test.js b/test/owner-notifications.test.js new file mode 100644 index 0000000..7c52660 --- /dev/null +++ b/test/owner-notifications.test.js @@ -0,0 +1,201 @@ +const { expect } = require("chai"); +require("ts-node/register/transpile-only"); +const config = require("../src/config").default; +const User = require("../src/core/model/users/users.model").default; +const notifications = require("../src/core/owner-notifications"); +const { normalizeEmail, notificationEmail, notifyOwnerAccessProblem } = notifications; + +describe("owner access notifications", () => { + const restores = []; + const stub = (object, key, value) => { const old = object[key]; restores.push(() => object[key] = old); object[key] = value; }; + let sent, claims, retryWrites, owner, after; + beforeEach(() => { + sent = []; claims = []; retryWrites = []; after = null; + owner = { status: "active", emails: [{ email: "owner@example.com", default: true }] }; + stub(config, "RESEND_API_KEY", "test-resend-key"); + stub(config, "EMAIL_FROM", "alerts@example.com"); + stub(config, "APP_HOSTNAME", "anonymous.example.com"); + stub(User, "findOneAndUpdate", (filter, update) => ({ lean: async () => { + claims.push(filter); + if (!owner || ["removed", "banned"].includes(owner.status) || !owner.emails.length || after > new Date()) return null; + after = update.$set.accessAlertAfter; + return owner; + } })); + stub(User, "updateOne", async (filter, update) => { retryWrites.push({ filter, update }); after = update.$set.accessAlertAfter; }); + stub(global, "fetch", async (url, options) => { sent.push({ url, options, body: JSON.parse(options.body) }); return { ok: true }; }); + }); + afterEach(() => { while (restores.length) restores.pop()(); }); + + it("accepts one mailbox and rejects recipient lists and header injection", () => { + expect(normalizeEmail(" Owner+alerts@example.com ")).to.equal("Owner+alerts@example.com"); + for (const value of [undefined, {}, "a@b.com,b@b.com", "Person ", "a@b.com\r\nBcc: x@y.com", ".a@b.com", "a..b@b.com", "a".repeat(65) + "@example.com"]) { + expect(normalizeEmail(value)).to.equal(null); + } + expect(notificationEmail([{ email: "first@example.com", default: false }, { email: "primary@example.com", default: true }])).to.equal("primary@example.com"); + }); + + it("sends one private Resend message across concurrent failures", async () => { + await Promise.all(Array.from({ length: 10 }, () => notifyOwnerAccessProblem("owner-id", "token_expired"))); + expect(sent).to.have.length(1); + expect(sent[0].url).to.equal("https://api.resend.com/emails"); + expect(sent[0].options.headers.Authorization).to.equal("Bearer test-resend-key"); + expect(sent[0].body.to).to.deep.equal(["owner@example.com"]); + expect(sent[0].body.text).to.include("https://anonymous.example.com/connections"); + expect(JSON.stringify(sent[0].body)).not.to.include("test-resend-key"); + expect(claims[0].status).to.deep.equal({ $nin: ["removed", "banned"] }); + expect(claims[0].$or).to.have.length(2); + }); + + it("ignores disabled delivery, missing recipients and transient failures", async () => { + for (const code of ["github_rate_limit_exceeded", "github_unavailable", "ETIMEDOUT", "quota_exceeded"]) { + await notifyOwnerAccessProblem("owner-id", new Error(code)); + } + await notifyOwnerAccessProblem("owner-id", Object.assign(new Error("repo_not_found"), { cause: { status: 503 } })); + await notifyOwnerAccessProblem("owner-id", Object.assign(new Error("token_expired"), { cause: new Error("network timeout") })); + expect(claims).to.have.length(0); + owner.emails = []; + await notifyOwnerAccessProblem("owner-id", "repo_not_found"); + owner.emails = [{ email: "owner@example.com", default: true }]; + owner.status = "banned"; + await notifyOwnerAccessProblem("owner-id", "repo_not_found"); + config.RESEND_API_KEY = ""; + await notifyOwnerAccessProblem("owner-id", "token_expired"); + expect(sent).to.have.length(0); + }); + + it("backs off after delivery failure without throwing", async () => { + stub(global, "fetch", async () => ({ ok: false })); + await notifyOwnerAccessProblem("owner-id", "repo_not_accessible"); + expect(retryWrites).to.have.length(1); + expect(after.getTime() - Date.now()).to.be.within(590000, 600000); + await notifyOwnerAccessProblem("owner-id", "repo_not_accessible"); + expect(retryWrites).to.have.length(1); + }); + + it("does not let database failures escape", async () => { + stub(User, "findOneAndUpdate", () => { throw new Error("database down"); }); + await notifyOwnerAccessProblem("owner-id", "token_expired"); + expect(sent).to.have.length(0); + }); +}); + + +describe("owner email settings", () => { + const utils = require("../src/server/routes/route-utils"); + const router = require("../src/server/routes/github-app").githubAppRouter; + const endpoint = router.stack.find(layer => layer.route?.path === "/connections/email").route.stack[0].handle; + const csrf = router.stack.find(layer => !layer.route && layer.handle.toString().includes("x-csrf-token")).handle; + let oldUser, oldUpdate, writes; + beforeEach(() => { + writes = []; + oldUser = utils.getUser; oldUpdate = User.updateOne; + utils.getUser = async () => ({ id: "signed-in-owner" }); + User.updateOne = async (...args) => { writes.push(args); }; + }); + afterEach(() => { utils.getUser = oldUser; User.updateOne = oldUpdate; }); + const response = () => ({ statusCode: 200, status(code) { this.statusCode = code; return this; }, json(body) { this.body = body; } }); + it("updates only the signed-in owner's address", async () => { + const res = response(); + await endpoint({ body: { email: " owner@example.com ", ownerId: "someone-else" } }, res); + expect(writes).to.deep.equal([[{ _id: "signed-in-owner" }, { $set: { emails: [{ email: "owner@example.com", default: true }] } }]]); + expect(res.body.notificationEmail).to.equal("owner@example.com"); + }); + it("rejects malformed input without a database write", async () => { + const res = response(); + await endpoint({ body: { email: ["one@example.com", "two@example.com"] } }, res); + expect(res.statusCode).to.equal(400); + expect(writes).to.have.length(0); + }); + for (const action of ["later", "never"]) it(`persists ${action} at the right scope`, async () => { + const req = { body: { action }, session: { save: callback => callback() } }; + const res = response(); + await endpoint(req, res); + expect(req.session.emailPromptDismissed).to.equal(true); + expect(res.body.ok).to.equal(true); + expect(writes).to.deep.equal(action === "never" ? [[{ _id: "signed-in-owner" }, { $set: { emailPromptNever: true } }]] : []); + }); + it("rejects unknown preference actions", async () => { + const res = response(); + await endpoint({ body: { action: "invalid" } }, res); + expect(res.statusCode).to.equal(400); + expect(writes).to.have.length(0); + }); + it("requires the session's CSRF token before changing email", () => { + const res = response(); let next = false; + csrf({ method: "POST", session: { githubConnectionCSRF: "secret" }, headers: {} }, res, () => { next = true; }); + expect(res.statusCode).to.equal(403); expect(next).to.equal(false); + csrf({ method: "POST", session: { githubConnectionCSRF: "secret" }, headers: { "x-csrf-token": "secret" } }, response(), () => { next = true; }); + expect(next).to.equal(true); + }); +}); + +describe("email popup eligibility", () => { + const utils = require("../src/server/routes/route-utils"); + const router = require("../src/server/routes/user").default; + const endpoint = router.stack.find(layer => layer.route?.path === "/" && layer.route.methods.get).route.stack[0].handle; + let oldUser, oldKey, oldFrom; + beforeEach(() => { + oldUser = utils.getUser; oldKey = config.RESEND_API_KEY; oldFrom = config.EMAIL_FROM; + config.RESEND_API_KEY = "test"; config.EMAIL_FROM = "alerts@example.com"; + }); + afterEach(() => { utils.getUser = oldUser; config.RESEND_API_KEY = oldKey; config.EMAIL_FROM = oldFrom; }); + for (const reason of ["eligible", "email", "never", "later", "no-key", "no-sender"]) { + it(`checks ${reason} before showing the form`, async () => { + utils.getUser = async () => ({ username: "owner", model: { + emails: reason === "email" ? [{ email: "owner@example.com", default: true }] : [], + emailPromptNever: reason === "never", + } }); + if (reason === "no-key") config.RESEND_API_KEY = ""; + if (reason === "no-sender") config.EMAIL_FROM = ""; + const req = { session: { emailPromptDismissed: reason === "later", save: cb => cb() } }; + const res = { set() {}, json(body) { this.body = body; } }; + await endpoint(req, res); + expect(res.body.showEmailPrompt).to.equal(reason === "eligible"); + expect(!!res.body.emailPromptCSRF).to.equal(reason === "eligible"); + }); + } +}); + +describe("repository notification hooks", () => { + const Repository = require("../src/core/Repository").default; + const RepositoryModel = require("../src/core/model/anonymizedRepositories/anonymizedRepositories.model").default; + const Files = require("../src/core/model/files/files.model").default; + const github = require("../src/core/source/GitHubRepository"); + const tokens = require("../src/core/GitHubUtils"); + const app = require("../src/core/github-app"); + const restores = []; + const stub = (object, key, value) => { const old = object[key]; restores.push(() => object[key] = old); object[key] = value; }; + let repo, sent; + beforeEach(() => { + sent = []; + repo = new Repository(new RepositoryModel({ repoId: "anonymous-id", owner: "507f1f77bcf86cd799439011", status: "ready", + source: { repositoryName: "private/source", branch: "main" }, options: { expirationMode: "never", update: true } })); + stub(notifications, "notifyOwnerAccessProblem", async (...args) => { sent.push(args); }); + }); + afterEach(() => { while (restores.length) restores.pop()(); }); + async function failsWith(work, error) { + try { await work(); } catch (caught) { expect(caught).to.equal(error); return; } + throw new Error("Expected original failure"); + } + it("notifies the saved owner when an App repository token cannot be resolved", async () => { + repo.model.githubAccess = { kind: "github-app", revision: "test" }; + const error = new Error("github_app_access_required"); + stub(app, "boundAppToken", async () => { throw error; }); + await failsWith(() => tokens.getToken(repo), error); + expect(sent).to.deep.equal([[repo.owner.id, error]]); + }); + it("notifies the saved owner when reading the repository tree fails", async () => { + const error = new Error("repo_not_found"); + stub(Files, "exists", () => ({ exec: async () => null })); + Object.defineProperty(repo, "source", { value: { getFiles: async () => { throw error; } } }); + await failsWith(() => repo.files(), error); + expect(sent).to.deep.equal([[repo.owner.id, error]]); + }); + it("notifies the saved owner when a repository refresh cannot read GitHub", async () => { + const error = new Error("repo_not_found"); + repo.getToken = async () => "token"; + stub(github, "getRepositoryFromGitHub", async () => { throw error; }); + await failsWith(() => repo.updateIfNeeded({ force: true }), error); + expect(sent).to.deep.equal([[repo.owner.id, error]]); + }); +}); diff --git a/test/vue-ui.test.js b/test/vue-ui.test.js index aecb8b4..13187d7 100644 --- a/test/vue-ui.test.js +++ b/test/vue-ui.test.js @@ -80,6 +80,59 @@ describe("Vue 3 UI", function () { let ui; afterEach(() => ui?.close()); + it("prompts owners without email and saves their alert address with CSRF", async () => { + ui = await browser("/dashboard", { + "/api/user": { username: "owner", notificationEmail: "", emailNotificationsEnabled: true, showEmailPrompt: true, emailPromptCSRF: "email-csrf" }, + "/github/connections": { csrf: "email-csrf", emailNotificationsEnabled: true, notificationEmail: "", resources: [] }, + "/github/connections/email": request => ({ notificationEmail: request.payload.email }), + }); + expect(ui.window.document.querySelector("#email-prompt").open).to.equal(true); + await ui.input("#email-prompt-address", "owner@example.com"); + ui.window.document.querySelector("#email-prompt-address").closest("form") + .dispatchEvent(new ui.window.Event("submit", { bubbles: true, cancelable: true })); + await delay(30); + const saved = ui.requests.find(r => r.url.pathname === "/github/connections/email"); + expect(saved.payload).to.deep.equal({ action: "save", email: "owner@example.com" }); + expect(saved.headers["X-CSRF-Token"]).to.equal("email-csrf"); + expect(ui.window.document.querySelector("#email-prompt")).to.equal(null); + await ui.go("/dashboard"); + expect(ui.window.document.querySelector("#email-prompt")).to.equal(null); + expect(ui.errors).to.deep.equal([]); + }); + + for (const action of ["later", "never"]) it(`dismisses the email popup with ${action} without requiring an address`, async () => { + ui = await browser("/dashboard", { + "/api/user": { username: "owner", notificationEmail: "", emailNotificationsEnabled: true, showEmailPrompt: true, emailPromptCSRF: "csrf" }, + "/github/connections/email": { ok: true }, + }); + const text = action === "later" ? "Remind me later" : "Never"; + [...ui.window.document.querySelectorAll("#email-prompt button")].find(b => b.textContent === text).click(); + await delay(30); + expect(ui.requests.find(r => r.url.pathname === "/github/connections/email").payload.action).to.equal(action); + expect(ui.window.document.querySelector("#email-prompt")).to.equal(null); + }); + + for (const user of [ + { emailNotificationsEnabled: false, showEmailPrompt: true }, + { emailNotificationsEnabled: true, showEmailPrompt: false }, + { emailNotificationsEnabled: true, showEmailPrompt: true, notificationEmail: "owner@example.com" }, + ]) it(`does not show the email popup for ${JSON.stringify(user)}`, async () => { + ui = await browser("/dashboard", { "/api/user": { username: "owner", ...user } }); + expect(ui.window.document.querySelector("#email-prompt")).to.equal(null); + }); + + it("keeps the popup open and shows an error if saving fails", async () => { + ui = await browser("/dashboard", { + "/api/user": { username: "owner", emailNotificationsEnabled: true, showEmailPrompt: true, emailPromptCSRF: "csrf" }, + "/github/connections/email": { __status: 500, body: { error: "Unable to save." } }, + }); + await ui.input("#email-prompt-address", "owner@example.com"); + ui.window.document.querySelector("#email-prompt form").dispatchEvent(new ui.window.Event("submit", { bubbles: true, cancelable: true })); + await delay(30); + expect(ui.window.document.querySelector("#email-prompt").textContent).to.include("Unable to save."); + expect(ui.window.document.querySelector("#email-prompt-address").value).to.equal("owner@example.com"); + }); + const repositorySource = { "/api/user": { username: "owner" }, "/api/user/default": { terms: ["Default Author"], options: {} }, From 85b9a50d4ded72daf78e59e446a40668cba1a554 Mon Sep 17 00:00:00 2001 From: Thomas Durieux <5577568+tdurieux@users.noreply.github.com> Date: Fri, 9 Oct 2026 05:42:19 +0000 Subject: [PATCH 2/4] fix: address owner notification review findings --- README.md | 3 +- src/core/Gist.ts | 9 +++ src/core/PullRequest.ts | 9 +++ src/core/model/users/users.schema.ts | 1 + src/core/model/users/users.types.ts | 1 + src/core/owner-notifications.ts | 22 +++++--- src/server/routes/github-app.ts | 12 +++- src/server/routes/user.ts | 12 ++-- test/owner-notifications.test.js | 82 +++++++++++++++++++++++++++- 9 files changed, 130 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 9631a61..03c1e75 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,8 @@ Emails contain no repository names, anonymous URLs, or credentials. An atomic database claim limits alerts to one per owner every 24 hours across workers and repositories. Sending is best effort: delivery failures do not block -repository requests, and a later access error can retry after ten minutes. +repository requests. A definite provider rejection allows a later access error +to retry after ten minutes; ambiguous timeouts retain the daily limit. A process interrupted after claiming an alert may skip that day's email. Leaving either Resend setting empty disables delivery and the email prompt. diff --git a/src/core/Gist.ts b/src/core/Gist.ts index a85d5d2..10e1e6b 100644 --- a/src/core/Gist.ts +++ b/src/core/Gist.ts @@ -1,3 +1,4 @@ +import { notifyOwnerAccessProblem } from "./owner-notifications"; import { registerGitHubToken } from "./github-token-context"; import { isConnected } from "../server/database"; import { expireEmbeddedContent } from "./content-expiration"; @@ -67,6 +68,14 @@ export default class Gist { } async download() { + try { await this.downloadWithAccess(); } + catch (error) { + void notifyOwnerAccessProblem(this.owner.id, error); + throw error; + } + } + + private async downloadWithAccess() { const access = await this.getAccess(); try { await this.downloadContent(access.token); diff --git a/src/core/PullRequest.ts b/src/core/PullRequest.ts index 94e8e02..3b63401 100644 --- a/src/core/PullRequest.ts +++ b/src/core/PullRequest.ts @@ -1,3 +1,4 @@ +import { notifyOwnerAccessProblem } from "./owner-notifications"; import { isConnected } from "../server/database"; import { expireEmbeddedContent } from "./content-expiration"; import { boundAppToken } from "./github-app"; @@ -33,6 +34,14 @@ export default class PullRequest { } async download() { + try { await this.downloadContent(); } + catch (error) { + void notifyOwnerAccessProblem(this.owner.id, error); + throw error; + } + } + + private async downloadContent() { logger.info("downloading pull request", { pullRequestId: this._model.source.pullRequestId, }); diff --git a/src/core/model/users/users.schema.ts b/src/core/model/users/users.schema.ts index 2541642..63c77c3 100644 --- a/src/core/model/users/users.schema.ts +++ b/src/core/model/users/users.schema.ts @@ -15,6 +15,7 @@ const UserSchema = new Schema({ type: String, index: { unique: true }, }, + notificationEmail: { type: String }, emailPromptNever: { type: Boolean, default: false }, accessAlertAfter: { type: Date, select: false }, emails: [ diff --git a/src/core/model/users/users.types.ts b/src/core/model/users/users.types.ts index 62b4f0d..fc0ada6 100644 --- a/src/core/model/users/users.types.ts +++ b/src/core/model/users/users.types.ts @@ -20,6 +20,7 @@ export interface IUser { createdAt?: Date; lastUsedAt?: Date; }[]; + notificationEmail?: string; emailPromptNever?: boolean; emails: { email: string; diff --git a/src/core/owner-notifications.ts b/src/core/owner-notifications.ts index cf987eb..ca91791 100644 --- a/src/core/owner-notifications.ts +++ b/src/core/owner-notifications.ts @@ -7,7 +7,7 @@ const DAY = 24 * 60 * 60 * 1000; const accessErrors = new Set([ "token_expired", "github_oauth_required", "github_app_reconnect_required", "github_app_access_required", "repo_not_found", "repository_not_found", - "repo_not_accessible", "repo_access_limited", "repo_saml_enforcement", + "pull_request_not_found", "gist_not_found", "repo_not_accessible", "repo_access_limited", "repo_saml_enforcement", ]); export function normalizeEmail(value: unknown): string | null { @@ -20,14 +20,15 @@ export function normalizeEmail(value: unknown): string | null { return email; } -export function notificationEmail(emails?: { email: string; default: boolean }[]): string { - return normalizeEmail(emails?.find(e => e.default)?.email) || +export function notificationEmail(emails?: { email: string; default: boolean }[], preferred?: string): string { + return normalizeEmail(preferred) || normalizeEmail(emails?.find(e => e.default)?.email) || emails?.map(e => normalizeEmail(e.email)).find(Boolean) || ""; } export function isAccessFailure(error: unknown): boolean { const code = typeof error === "string" ? error : error instanceof Error ? error.message : ""; - if (!accessErrors.has(code)) return false; + const rawStatus = error instanceof Error ? (error as Error & { status?: number }).status : undefined; + if (!accessErrors.has(code) && ![401, 404].includes(rawStatus || 0)) return false; if (error instanceof Error) { const upstream = (error as Error & { cause?: { status?: number; httpStatus?: number } }).cause; // Some legacy paths wrap timeouts or 5xx responses as repo_not_found. @@ -48,14 +49,15 @@ export async function notifyOwnerAccessProblem(ownerId: string, error: unknown): // per day. Claim before sending so concurrent requests cannot flood an inbox. const owner = await UserModel.findOneAndUpdate({ _id: ownerId, status: { $nin: ["removed", "banned"] }, - "emails.0": { $exists: true }, + $and: [{ $or: [{ "emails.0": { $exists: true } }, { notificationEmail: { $exists: true, $ne: "" } }] }], $or: [{ accessAlertAfter: { $exists: false } }, { accessAlertAfter: { $lte: now } }], }, { $set: { accessAlertAfter: new Date(now.getTime() + DAY) } }, { new: true }).lean(); if (!owner) return; - const to = notificationEmail(owner.emails); + const to = notificationEmail(owner.emails, owner.notificationEmail); if (!to) return; const base = /^https?:\/\//.test(config.APP_HOSTNAME) ? config.APP_HOSTNAME : `https://${config.APP_HOSTNAME}`; const url = new URL("/connections", base).href; + let rejected = false; try { const response = await fetch("https://api.resend.com/emails", { method: "POST", @@ -67,10 +69,12 @@ export async function notifyOwnerAccessProblem(ownerId: string, error: unknown): text: `Anonymous GitHub could not access GitHub using your connection, or could not read a repository.\n\nOpen your connections page to reconnect your account or restore repository access:\n${url}\n\nYou are receiving this email because you own content on Anonymous GitHub. You can change your alert address on the connections page.\n`, }), }); - if (!response.ok) throw new Error("email_delivery_failed"); + rejected = !response.ok; + if (rejected) throw new Error("email_delivery_failed"); } catch { - // Permit retry on a later access failure, with a short backoff for outages. - await UserModel.updateOne({ _id: ownerId, accessAlertAfter: new Date(now.getTime() + DAY) }, + // Only a definite rejection may retry early. A timeout can occur after + // Resend accepted the message, so retain the daily claim in that case. + if (rejected) await UserModel.updateOne({ _id: ownerId, accessAlertAfter: new Date(now.getTime() + DAY) }, { $set: { accessAlertAfter: new Date(now.getTime() + 10 * 60000) } }); logger.warn("owner access email delivery failed"); } diff --git a/src/server/routes/github-app.ts b/src/server/routes/github-app.ts index 9e5d89b..efb3900 100644 --- a/src/server/routes/github-app.ts +++ b/src/server/routes/github-app.ts @@ -29,6 +29,12 @@ export function consumeFlow(flow: Flow | undefined, state: unknown): Flow { function newFlow(ownerId: string | undefined, returnTo: unknown): Flow { return { state: randomBytes(32).toString("hex"), expires: Date.now() + 10 * 60000, ownerId, returnTo: safeReturnTo(returnTo) }; } +// Parallel user/connections reads must initialize the same token even when +// both loaded the session before either request saved it. +export function connectionCSRF(req: express.Request): string { + return req.session.githubConnectionCSRF ||= createHmac("sha256", config.SESSION_SECRET) + .update(`github-connections:${req.sessionID}`).digest("hex"); +} function saveSession(req: express.Request) { return new Promise((resolve, reject) => req.session.save(err => err ? reject(err) : resolve())); } function enabled(req: express.Request, res: express.Response, next: express.NextFunction) { if (!config.GITHUB_APP_ENABLED || !config.GITHUB_APP_NEW_CONNECTIONS) return res.status(503).json({ error: "github_app_disabled" }); @@ -151,7 +157,7 @@ router.get("/app/setup", enabled, async (req, res) => { router.get("/connections", async (req, res) => { try { const user = await getUser(req); - req.session.githubConnectionCSRF ||= randomBytes(32).toString("hex"); + connectionCSRF(req); await saveSession(req); const credentials = await CredentialModel.find({ ownerId: user.id }).select("provider revoked").lean(); const appConnected = credentials.some(c => c.provider === APP_PROVIDER && !c.revoked); @@ -168,7 +174,7 @@ router.get("/connections", async (req, res) => { const repos = await RepositoryModel.find({ owner: user.id, status: { $ne: "removed" } }).select("repoId source.repositoryName githubAccess status statusDate").lean(); const prs = await PullRequestModel.find({ owner: user.id, status: { $ne: "removed" } }).select("pullRequestId source.repositoryFullName githubAccess status statusDate").lean(); const gistCount = await GistModel.countDocuments({ owner: user.id, status: { $ne: "removed" } }); - res.json({ notificationEmail: notificationEmail(user.model.emails), emailNotificationsEnabled: !!(config.RESEND_API_KEY && config.EMAIL_FROM), + res.json({ notificationEmail: notificationEmail(user.model.emails, user.model.notificationEmail), emailNotificationsEnabled: !!(config.RESEND_API_KEY && config.EMAIL_FROM), csrf: req.session.githubConnectionCSRF, appEnabled: config.GITHUB_APP_ENABLED && config.GITHUB_APP_NEW_CONNECTIONS, gistConnection: config.GITHUB_APP_ENABLED && credentials.some(c => c.provider === APP_PROVIDER) ? "github-app" : "oauth", oauthEnabled: config.GITHUB_OAUTH_ENABLED, oauthConnected: !!(await getCredentialToken(user.id)), appConnected, appError: appErrorCode, @@ -199,7 +205,7 @@ router.post("/connections/email", async (req, res) => { } const email = normalizeEmail(req.body?.email); if (!email) return res.status(400).json({ error: "Enter a valid email address." }); - await UserModel.updateOne({ _id: user.id }, { $set: { emails: [{ email, default: true }] } }); + await UserModel.updateOne({ _id: user.id }, { $set: { notificationEmail: email } }); res.json({ notificationEmail: email }); } catch (error) { handleError(error, res, req); } }); diff --git a/src/server/routes/user.ts b/src/server/routes/user.ts index 259ffeb..ca1bc0b 100644 --- a/src/server/routes/user.ts +++ b/src/server/routes/user.ts @@ -1,8 +1,7 @@ -import { randomBytes } from "crypto"; import { notificationEmail } from "../../core/owner-notifications"; import DashboardName from "../../core/model/dashboard-name"; import { dashboardSummary } from "./dashboard-summary"; -import { revokeGrant } from "./github-app"; +import { connectionCSRF, revokeGrant } from "./github-app"; import CredentialModel from "../../core/model/credentials/credentials.model"; import * as express from "express"; import config from "../../config"; @@ -43,16 +42,16 @@ router.get("/", async (req, res) => { try { const user = await getUser(req); const showEmailPrompt = !!(config.RESEND_API_KEY && config.EMAIL_FROM) && - !notificationEmail(user.model.emails) && !user.model.emailPromptNever && !req.session.emailPromptDismissed; + !notificationEmail(user.model.emails, user.model.notificationEmail) && !user.model.emailPromptNever && !req.session.emailPromptDismissed; if (showEmailPrompt) { - req.session.githubConnectionCSRF ||= randomBytes(32).toString("hex"); + connectionCSRF(req); await new Promise((resolve, reject) => req.session.save(error => error ? reject(error) : resolve())); } res.set("Cache-Control", "no-store"); res.json({ showEmailPrompt, emailPromptCSRF: showEmailPrompt ? req.session.githubConnectionCSRF : undefined, - notificationEmail: notificationEmail(user.model.emails), + notificationEmail: notificationEmail(user.model.emails, user.model.notificationEmail), emailNotificationsEnabled: !!(config.RESEND_API_KEY && config.EMAIL_FROM), username: user.username, photo: user.photo, @@ -239,6 +238,9 @@ router.delete("/", async (req, res) => { repositories: [], }, $unset: { + notificationEmail: "", + emailPromptNever: "", + accessAlertAfter: "", accessTokens: "", accessTokenDates: "", externalIDs: "", diff --git a/test/owner-notifications.test.js b/test/owner-notifications.test.js index 7c52660..c180fba 100644 --- a/test/owner-notifications.test.js +++ b/test/owner-notifications.test.js @@ -17,7 +17,7 @@ describe("owner access notifications", () => { stub(config, "APP_HOSTNAME", "anonymous.example.com"); stub(User, "findOneAndUpdate", (filter, update) => ({ lean: async () => { claims.push(filter); - if (!owner || ["removed", "banned"].includes(owner.status) || !owner.emails.length || after > new Date()) return null; + if (!owner || ["removed", "banned"].includes(owner.status) || (!owner.emails.length && !owner.notificationEmail) || after > new Date()) return null; after = update.$set.accessAlertAfter; return owner; } })); @@ -72,6 +72,32 @@ describe("owner access notifications", () => { expect(retryWrites).to.have.length(1); }); + it("retains the daily claim when delivery may already have happened", async () => { + let attempts = 0; + stub(global, "fetch", async () => { attempts++; throw new Error("response timed out after acceptance"); }); + await notifyOwnerAccessProblem("owner-id", "token_expired"); + expect(retryWrites).to.have.length(0); + expect(after.getTime() - Date.now()).to.be.within(86390000, 86400000); + await notifyOwnerAccessProblem("owner-id", "token_expired"); + expect(attempts).to.equal(1); + }); + + it("uses a dedicated alert address without requiring or replacing profile emails", async () => { + owner.notificationEmail = "alerts@example.com"; + const original = JSON.stringify(owner.emails); + await notifyOwnerAccessProblem("owner-id", "token_expired"); + expect(sent[0].body.to).to.deep.equal(["alerts@example.com"]); + expect(JSON.stringify(owner.emails)).to.equal(original); + after = null; owner.emails = []; + await notifyOwnerAccessProblem("owner-id", "token_expired"); + expect(sent).to.have.length(2); + }); + + it("recognizes raw authentication and missing-resource errors without alerting for outages", () => { + for (const status of [401, 404]) expect(notifications.isAccessFailure(Object.assign(new Error("GitHub rejected access"), { status }))).to.equal(true); + for (const status of [429, 500, 503]) expect(notifications.isAccessFailure(Object.assign(new Error("upstream error"), { status }))).to.equal(false); + }); + it("does not let database failures escape", async () => { stub(User, "findOneAndUpdate", () => { throw new Error("database down"); }); await notifyOwnerAccessProblem("owner-id", "token_expired"); @@ -97,7 +123,7 @@ describe("owner email settings", () => { it("updates only the signed-in owner's address", async () => { const res = response(); await endpoint({ body: { email: " owner@example.com ", ownerId: "someone-else" } }, res); - expect(writes).to.deep.equal([[{ _id: "signed-in-owner" }, { $set: { emails: [{ email: "owner@example.com", default: true }] } }]]); + expect(writes).to.deep.equal([[{ _id: "signed-in-owner" }, { $set: { notificationEmail: "owner@example.com" } }]]); expect(res.body.notificationEmail).to.equal("owner@example.com"); }); it("rejects malformed input without a database write", async () => { @@ -120,6 +146,20 @@ describe("owner email settings", () => { expect(res.statusCode).to.equal(400); expect(writes).to.have.length(0); }); + it("initializes the same CSRF token for parallel session snapshots", () => { + const { connectionCSRF } = require("../src/server/routes/github-app"); + const userRequest = { sessionID: "same-login-session", session: {} }; + const connectionsRequest = { sessionID: "same-login-session", session: {} }; + const popupToken = connectionCSRF(userRequest); + const pageToken = connectionCSRF(connectionsRequest); + expect(popupToken).to.equal(pageToken); + expect(connectionCSRF({ sessionID: "another-login", session: {} })).not.to.equal(pageToken); + for (const token of [popupToken, pageToken]) { + let accepted = false; + csrf({ method: "POST", session: connectionsRequest.session, headers: { "x-csrf-token": token } }, response(), () => { accepted = true; }); + expect(accepted).to.equal(true); + } + }); it("requires the session's CSRF token before changing email", () => { const res = response(); let next = false; csrf({ method: "POST", session: { githubConnectionCSRF: "secret" }, headers: {} }, res, () => { next = true; }); @@ -139,10 +179,11 @@ describe("email popup eligibility", () => { config.RESEND_API_KEY = "test"; config.EMAIL_FROM = "alerts@example.com"; }); afterEach(() => { utils.getUser = oldUser; config.RESEND_API_KEY = oldKey; config.EMAIL_FROM = oldFrom; }); - for (const reason of ["eligible", "email", "never", "later", "no-key", "no-sender"]) { + for (const reason of ["eligible", "email", "alert-email", "never", "later", "no-key", "no-sender"]) { it(`checks ${reason} before showing the form`, async () => { utils.getUser = async () => ({ username: "owner", model: { emails: reason === "email" ? [{ email: "owner@example.com", default: true }] : [], + notificationEmail: reason === "alert-email" ? "alerts@example.com" : undefined, emailPromptNever: reason === "never", } }); if (reason === "no-key") config.RESEND_API_KEY = ""; @@ -199,3 +240,38 @@ describe("repository notification hooks", () => { expect(sent).to.deep.equal([[repo.owner.id, error]]); }); }); + +describe("gist and pull-request notification hooks", () => { + const Gist = require("../src/core/Gist").default; + const GistModel = require("../src/core/model/anonymizedGists/anonymizedGists.model").default; + const PullRequest = require("../src/core/PullRequest").default; + const PullRequestModel = require("../src/core/model/anonymizedPullRequests/anonymizedPullRequests.model").default; + const github = require("../src/core/GitHubUtils"); + const restores = []; + const stub = (object, key, value) => { const old = object[key]; restores.push(() => object[key] = old); object[key] = value; }; + let sent; + beforeEach(() => { sent = []; stub(notifications, "notifyOwnerAccessProblem", async (...args) => { sent.push(args); }); }); + afterEach(() => { while (restores.length) restores.pop()(); }); + for (const type of ["gist", "pull-request"]) for (const failure of ["oauth", "app-access"]) { + it(`alerts the owner on ${type} ${failure} failure and preserves the error`, async () => { + const data = { owner: "507f1f77bcf86cd799439011", source: { gistId: "gist", repositoryFullName: "private/source", pullRequestId: 1 }, options: { expirationMode: "never" } }; + const resource = type === "gist" ? new Gist(new GistModel(data)) : new PullRequest(new PullRequestModel(data)); + const error = failure === "oauth" ? Object.assign(new Error("Bad credentials"), { status: 401 }) : new Error("github_app_access_required"); + if (type === "gist") { + resource.getAccess = async () => { + if (failure === "app-access") throw error; + return { token: "token", connection: "oauth" }; + }; + resource.downloadContent = async () => { throw error; }; + } else { + resource.getToken = async () => { if (failure === "app-access") throw error; return "token"; }; + stub(github, "octokit", () => ({ rest: { pulls: { get: async () => { throw error; } } } })); + } + let caught; + try { await resource.download(); } catch (err) { caught = err; } + expect(caught).to.be.instanceOf(Error); + expect(caught.message).to.equal(type === "gist" && failure === "oauth" ? "github_oauth_required" : error.message); + expect(sent).to.deep.equal([[resource.owner.id, caught]]); + }); + } +}); From 2b20abe0a5cdb95ce673045cbc09f6ee0048a334 Mon Sep 17 00:00:00 2001 From: Thomas Durieux <5577568+tdurieux@users.noreply.github.com> Date: Fri, 9 Oct 2026 06:00:16 +0000 Subject: [PATCH 3/4] fix: cover streamed access errors without alerting on outages --- src/core/AnonymizedFile.ts | 15 ++++++- src/core/GitHubUtils.ts | 44 +++--------------- src/core/github-rate-limit.ts | 26 +++++++++++ src/core/owner-notifications.ts | 11 +++-- test/owner-notifications.test.js | 77 +++++++++++++++++++++++++++++++- 5 files changed, 128 insertions(+), 45 deletions(-) create mode 100644 src/core/github-rate-limit.ts diff --git a/src/core/AnonymizedFile.ts b/src/core/AnonymizedFile.ts index 09c684d..da1d92f 100644 --- a/src/core/AnonymizedFile.ts +++ b/src/core/AnonymizedFile.ts @@ -1,3 +1,4 @@ +import { notifyOwnerAccessProblem } from "./owner-notifications"; import { streamResponse } from "./response-stream"; import { join, basename, dirname } from "path"; import { Response } from "express"; @@ -355,7 +356,11 @@ export default class AnonymizedFile { httpStatus: 413, }); } - const content = await this.repository.source?.getFileContent(this); + const content = await this.repository.source?.getFileContent(this).catch(error => { + void notifyOwnerAccessProblem(this.repository.owner.id, error); + throw error; + }); + content.on("error", error => { void notifyOwnerAccessProblem(this.repository.owner.id, error); }); const cacheWasReset = this.repository.model.isReseted; if (cacheWasReset) { await this.repository.markCachePresent(); @@ -378,7 +383,7 @@ export default class AnonymizedFile { } // use the streamer service - return got.stream(join(config.STREAMER_ENTRYPOINT, "api"), { + const content = got.stream(join(config.STREAMER_ENTRYPOINT, "api"), { method: "POST", headers: requestHeaders(), json: { @@ -395,6 +400,11 @@ export default class AnonymizedFile { anonymizerOptions: anonymizer.opt, }, }); + content.on("error", err => { + const { error } = streamerErrorToAnonymous(err, { repoId: this.repository.repoId, filePath: this.anonymizedPath }); + void notifyOwnerAccessProblem(this.repository.owner.id, error); + }); + return content; } get filePath() { @@ -472,6 +482,7 @@ export default class AnonymizedFile { filePath: this.anonymizedPath, } ); + void notifyOwnerAccessProblem(this.repository.owner.id, error); error.value = this; handleError(error, res); if (res.headersSent && !res.writableEnded) res.destroy(); diff --git a/src/core/GitHubUtils.ts b/src/core/GitHubUtils.ts index 0a8c79f..040b3cd 100644 --- a/src/core/GitHubUtils.ts +++ b/src/core/GitHubUtils.ts @@ -1,3 +1,4 @@ +import { isGitHubRateLimitError, OctokitRequestErrorLike } from "./github-rate-limit"; import { refreshLegacyToken } from "./legacy-token-refresh"; import { notifyOwnerAccessProblem } from "./owner-notifications"; import AnonymizedRepositoryModel from "./model/anonymizedRepositories/anonymizedRepositories.model"; @@ -17,35 +18,7 @@ import { measureStage } from "./request-monitoring"; const logger = createLogger("github"); -// Octokit RequestError shape (subset we care about for rate-limit detection). -interface OctokitRequestErrorLike { - status?: number; - message?: string; - response?: { - headers?: Record; - }; -} - -/** - * Detect GitHub rate-limit / abuse responses (primary 5k/h or undocumented - * "secondary" limits) and rewrap them as a translatable AnonymousError so - * the UI can show a friendly message instead of a raw HttpError stack. The - * GitHub `x-github-request-id` header is preserved in `detail` so users can - * cite it if they reach out to GitHub Support. - */ -export function isGitHubRateLimitError(err: unknown): boolean { - if (!err || typeof err !== "object") return false; - const e = err as OctokitRequestErrorLike; - const msg = (e.message ?? "").toLowerCase(); - // Primary limits return 403 with "x-ratelimit-remaining: 0"; secondary - // limits return 403 (sometimes 429) with "secondary rate limit" in the - // body. Match on either signal so we catch both. - const status = e.status ?? 0; - if (status !== 403 && status !== 429) return false; - if (msg.includes("rate limit") || msg.includes("abuse")) return true; - const remaining = e.response?.headers?.["x-ratelimit-remaining"]; - return remaining === "0"; -} +export { isGitHubRateLimitError } from "./github-rate-limit"; function rateLimitDetail(err: OctokitRequestErrorLike): string { const headers = err.response?.headers ?? {}; @@ -299,15 +272,10 @@ export async function checkToken(token: string, ownerId?: string) { else await oct.users.getAuthenticated(); return true; } catch (err) { - if ( - err instanceof AnonymousError && - err.message === "github_rate_limit_exceeded" - ) { - throw err; - } - if (ownerId && (err as { status?: number }).status === 401) { - void notifyOwnerAccessProblem(ownerId, "token_expired"); - } + // Only a confirmed invalid credential permits fallback. Network failures, + // permission failures and rate limits must retain their original meaning. + if ((err as { status?: number })?.status !== 401) throw err; + if (ownerId) void notifyOwnerAccessProblem(ownerId, "token_expired"); return false; } } diff --git a/src/core/github-rate-limit.ts b/src/core/github-rate-limit.ts new file mode 100644 index 0000000..e076a38 --- /dev/null +++ b/src/core/github-rate-limit.ts @@ -0,0 +1,26 @@ +// Octokit RequestError shape (subset we care about for rate-limit detection). +export interface OctokitRequestErrorLike { + status?: number; + httpStatus?: number; + message?: string; + response?: { + statusCode?: number; + headers?: Record; + }; +} + +/** Detect GitHub primary and secondary rate limits in API and stream errors. */ +export function isGitHubRateLimitError(err: unknown): boolean { + if (!err || typeof err !== "object") return false; + const e = err as OctokitRequestErrorLike; + const msg = (e.message ?? "").toLowerCase(); + // Primary limits return 403 with "x-ratelimit-remaining: 0"; secondary + // limits return 403 (sometimes 429) with "secondary rate limit" in the + // body. Match on either signal so we catch both. + const status = e.status ?? e.response?.statusCode ?? e.httpStatus ?? 0; + if (status !== 403 && status !== 429) return false; + if (msg.includes("rate limit") || msg.includes("abuse")) return true; + const remaining = e.response?.headers?.["x-ratelimit-remaining"]; + return remaining === "0"; +} + diff --git a/src/core/owner-notifications.ts b/src/core/owner-notifications.ts index ca91791..5f1b315 100644 --- a/src/core/owner-notifications.ts +++ b/src/core/owner-notifications.ts @@ -1,3 +1,4 @@ +import { isGitHubRateLimitError } from "./github-rate-limit"; import config from "../config"; import UserModel from "./model/users/users.model"; import { createLogger } from "./logger"; @@ -7,7 +8,7 @@ const DAY = 24 * 60 * 60 * 1000; const accessErrors = new Set([ "token_expired", "github_oauth_required", "github_app_reconnect_required", "github_app_access_required", "repo_not_found", "repository_not_found", - "pull_request_not_found", "gist_not_found", "repo_not_accessible", "repo_access_limited", "repo_saml_enforcement", + "file_not_accessible", "file_not_found", "pull_request_not_found", "gist_not_found", "repo_not_accessible", "repo_access_limited", "repo_saml_enforcement", ]); export function normalizeEmail(value: unknown): string | null { @@ -26,14 +27,16 @@ export function notificationEmail(emails?: { email: string; default: boolean }[] } export function isAccessFailure(error: unknown): boolean { + if (isGitHubRateLimitError(error)) return false; const code = typeof error === "string" ? error : error instanceof Error ? error.message : ""; const rawStatus = error instanceof Error ? (error as Error & { status?: number }).status : undefined; - if (!accessErrors.has(code) && ![401, 404].includes(rawStatus || 0)) return false; + if (!accessErrors.has(code) && ![401, 403, 404].includes(rawStatus || 0)) return false; if (error instanceof Error) { - const upstream = (error as Error & { cause?: { status?: number; httpStatus?: number } }).cause; + const upstream = (error as Error & { cause?: { status?: number; httpStatus?: number; response?: { statusCode?: number } } }).cause; // Some legacy paths wrap timeouts or 5xx responses as repo_not_found. // Only a confirmed access failure should prompt the owner to reconnect. - if (upstream && ![401, 403, 404].includes(upstream.status || upstream.httpStatus || 0)) return false; + if (isGitHubRateLimitError(upstream)) return false; + if (upstream && ![401, 403, 404].includes(upstream.status || upstream.response?.statusCode || upstream.httpStatus || 0)) return false; const status = (error as Error & { httpStatus?: number }).httpStatus; if (status && (status === 429 || status >= 500)) return false; } diff --git a/test/owner-notifications.test.js b/test/owner-notifications.test.js index c180fba..ca18a7b 100644 --- a/test/owner-notifications.test.js +++ b/test/owner-notifications.test.js @@ -94,10 +94,25 @@ describe("owner access notifications", () => { }); it("recognizes raw authentication and missing-resource errors without alerting for outages", () => { - for (const status of [401, 404]) expect(notifications.isAccessFailure(Object.assign(new Error("GitHub rejected access"), { status }))).to.equal(true); + for (const status of [401, 403, 404]) expect(notifications.isAccessFailure(Object.assign(new Error("GitHub rejected access"), { status }))).to.equal(true); for (const status of [429, 500, 503]) expect(notifications.isAccessFailure(Object.assign(new Error("upstream error"), { status }))).to.equal(false); }); + it("suppresses primary and secondary rate limits including wrapped streaming errors", () => { + const AnonymousError = require("../src/core/AnonymousError").default; + for (const error of [ + Object.assign(new Error("API rate limit exceeded"), { status: 403 }), + Object.assign(new Error("abuse detection"), { status: 403 }), + Object.assign(new Error("Forbidden"), { status: 403, response: { headers: { "x-ratelimit-remaining": "0" } } }), + Object.assign(new Error("secondary rate limit"), { response: { statusCode: 403 } }), + ]) { + expect(notifications.isAccessFailure(error)).to.equal(false); + expect(notifications.isAccessFailure(new AnonymousError("file_not_accessible", { httpStatus: 403, cause: error }))).to.equal(false); + } + const forbidden = Object.assign(new Error("SAML enforcement"), { response: { statusCode: 403 } }); + expect(notifications.isAccessFailure(new AnonymousError("file_not_accessible", { httpStatus: 403, cause: forbidden }))).to.equal(true); + }); + it("does not let database failures escape", async () => { stub(User, "findOneAndUpdate", () => { throw new Error("database down"); }); await notifyOwnerAccessProblem("owner-id", "token_expired"); @@ -275,3 +290,63 @@ describe("gist and pull-request notification hooks", () => { }); } }); + +describe("streamed file access alerts", () => { + const File = require("../src/core/AnonymizedFile").default; + const AnonymousError = require("../src/core/AnonymousError").default; + const { PassThrough } = require("stream"); + const got = require("got"); + const restores = []; + const stub = (object, key, value) => { const old = object[key]; restores.push(() => object[key] = old); object[key] = value; }; + let sent, repository, file; + beforeEach(() => { + sent = []; + stub(notifications, "notifyOwnerAccessProblem", async (owner, error) => { if (notifications.isAccessFailure(error)) sent.push({ owner, error }); }); + repository = { owner: { id: "saved-owner" }, options: { terms: [] }, model: { source: {} }, repoId: "anon-id", status: "ready", source: {}, + getToken: async () => "token", generateAnonymizeTransformer: () => new PassThrough() }; + file = new File({ repository, anonymizedPath: "README.md" }); + }); + afterEach(() => { while (restores.length) restores.pop()(); }); + for (const status of [403, 404, 503]) it(`handles local file download failure ${status}`, async () => { + const cause = Object.assign(new Error("upstream"), { response: { statusCode: status } }); + const error = new AnonymousError(status === 403 ? "file_not_accessible" : status === 404 ? "file_not_found" : "upstream_error", { httpStatus: status, cause }); + repository.source.getFileContent = async () => { throw error; }; + let caught; + try { await file.content(); } catch (err) { caught = err; } + expect(caught).to.equal(error); + expect(sent).to.have.length(status === 503 ? 0 : 1); + if (sent.length) expect(sent[0].owner).to.equal("saved-owner"); + }); + for (const status of [403, 404, 503]) it(`handles remote streamer error ${status}`, async () => { + stub(config, "STREAMER_ENTRYPOINT", "http://streamer/"); + const stream = new PassThrough(); + stub(got, "stream", () => stream); + file.originalPath = async () => "README.md"; + file.sha = async () => "sha"; + file.size = async () => 10; + const returned = await file.anonymizedContent(); + expect(returned).to.equal(stream); + const error = Object.assign(new Error("streamer failure"), { response: { statusCode: status, body: JSON.stringify({ error: status === 503 ? "upstream_error" : "file_not_accessible" }) } }); + stream.emit("error", error); + expect(sent).to.have.length(status === 503 ? 0 : 1); + stream.destroy(); + }); +}); + +describe("token validation preserves upstream failures", () => { + const tokens = require("../src/core/GitHubUtils"); + const { registerGitHubToken } = require("../src/core/github-token-context"); + for (const status of [undefined, 403, 429, 500, 503]) it(`propagates token-check failure ${status}`, async () => { + const error = Object.assign(new Error("upstream check failed"), { status }); + const token = `test-token-check-${status}`; + registerGitHubToken(token, { quotaKey: token, publicRepository: "owner/repo", renew: async () => { throw error; } }); + let caught; + try { await tokens.checkToken(token); } catch (err) { caught = err; } + expect(caught).to.equal(error); + }); + it("returns false only for a confirmed invalid token", async () => { + const token = "test-token-check-invalid"; + registerGitHubToken(token, { quotaKey: token, publicRepository: "owner/repo", renew: async () => { throw Object.assign(new Error("Bad credentials"), { status: 401 }); } }); + expect(await tokens.checkToken(token)).to.equal(false); + }); +}); From 9a2707d4b8832c885e52d29bf45bdde9b24578f4 Mon Sep 17 00:00:00 2001 From: Thomas Durieux <5577568+tdurieux@users.noreply.github.com> Date: Fri, 9 Oct 2026 06:17:40 +0000 Subject: [PATCH 4/4] fix: preserve probe errors and complete refresh alerts --- src/core/AnonymizedFile.ts | 5 +- src/core/Repository.ts | 11 +++-- src/core/source/GitHubBase.ts | 8 ++- src/core/source/GitHubRepository.ts | 3 +- src/core/source/GitHubStream.ts | 11 +++-- test/owner-notifications.test.js | 75 +++++++++++++++++++++++++++++ 6 files changed, 102 insertions(+), 11 deletions(-) diff --git a/src/core/AnonymizedFile.ts b/src/core/AnonymizedFile.ts index da1d92f..6bdd354 100644 --- a/src/core/AnonymizedFile.ts +++ b/src/core/AnonymizedFile.ts @@ -270,7 +270,10 @@ export default class AnonymizedFile { fetchFileInfoFromPath?: (filePath: string) => Promise; }; if (typeof source.fetchFileInfoFromPath !== "function") return null; - const recovered = await source.fetchFileInfoFromPath(this.anonymizedPath); + const recovered = await source.fetchFileInfoFromPath(this.anonymizedPath).catch(error => { + void notifyOwnerAccessProblem(this.repository.owner.id, error); + throw error; + }); if (!recovered) return null; recovered.repoId = this.repository.repoId; recovered.treeGeneration = this.repository.model.treeGeneration; diff --git a/src/core/Repository.ts b/src/core/Repository.ts index 969541f..0e1ce4a 100644 --- a/src/core/Repository.ts +++ b/src/core/Repository.ts @@ -628,6 +628,14 @@ export default class Repository { /** Update the repository if a new commit exists. */ async updateIfNeeded(opt?: { force: boolean }): Promise { + try { await this.refreshIfNeeded(opt); } + catch (error) { + void notifyOwnerAccessProblem(this.owner.id, error); + throw error; + } + } + + private async refreshIfNeeded(opt?: { force: boolean }): Promise { this.assertNotArchived(); if ( this._model.options.expirationMode !== "never" && @@ -658,9 +666,6 @@ export default class Repository { repo: this.source.data.repoName, repositoryID: this.model.source.repositoryId, force: true, - }).catch(error => { - void notifyOwnerAccessProblem(this.owner.id, error); - throw error; }); // update the repository name if it has changed. Persist it diff --git a/src/core/source/GitHubBase.ts b/src/core/source/GitHubBase.ts index a56c016..c18a6e0 100644 --- a/src/core/source/GitHubBase.ts +++ b/src/core/source/GitHubBase.ts @@ -52,7 +52,9 @@ export async function classifyGitHubMissError( repo: data.repoName, }); return "commit_not_found"; - } catch { + } catch (probeError) { + if ((probeError as { status?: number; httpStatus?: number }).status !== 404 && + (probeError as { httpStatus?: number }).httpStatus !== 404) throw probeError; // Repo no longer exists at owner/repo. Try to recover via the cached // numeric GitHub id — if the repo was renamed, GET /repositories/{id} // resolves to its new full_name. See #409. @@ -87,7 +89,9 @@ export async function classifyGitHubMissError( return "repo_renamed"; } return "repo_not_found"; - } catch { + } catch (probeError) { + if ((probeError as { status?: number; httpStatus?: number }).status !== 404 && + (probeError as { httpStatus?: number }).httpStatus !== 404) throw probeError; return "repo_not_found"; } } diff --git a/src/core/source/GitHubRepository.ts b/src/core/source/GitHubRepository.ts index 9ac67d6..3ed5a9d 100644 --- a/src/core/source/GitHubRepository.ts +++ b/src/core/source/GitHubRepository.ts @@ -77,7 +77,8 @@ export class GitHubRepository { try { await oct.repos.get({ owner: this.owner, repo: this.repo }); repoExists = true; - } catch { + } catch (probeError) { + if ((probeError as { status?: number }).status !== 404) throw probeError; repoExists = false; } throw new AnonymousError( diff --git a/src/core/source/GitHubStream.ts b/src/core/source/GitHubStream.ts index 4d0b36a..0a8a532 100644 --- a/src/core/source/GitHubStream.ts +++ b/src/core/source/GitHubStream.ts @@ -412,10 +412,13 @@ export default class GitHubStream extends GitHubBase { size: data.size, }; } catch (error) { - logger.debug("fetchFileInfoFromPath miss", { - filePath, - error: serializeError(error), - }); + if ((error as { status?: number }).status !== 404) throw error; + // A missing file and lost repository access both return 404. Only + // report a normal miss after the repository probe remains readable. + const code = await classifyGitHubMissError(error, this.data); + if (code === "repo_not_found") { + throw new AnonymousError(code, { httpStatus: 404, cause: error as Error }); + } return null; } } diff --git a/test/owner-notifications.test.js b/test/owner-notifications.test.js index ca18a7b..54c94fa 100644 --- a/test/owner-notifications.test.js +++ b/test/owner-notifications.test.js @@ -247,6 +247,17 @@ describe("repository notification hooks", () => { await failsWith(() => repo.files(), error); expect(sent).to.deep.equal([[repo.owner.id, error]]); }); + for (const step of ["branches", "commit"]) it(`notifies on ${step} access errors during refresh`, async () => { + const error = Object.assign(new Error("Forbidden"), { status: 403 }); + repo.getToken = async () => "token"; + stub(github, "getRepositoryFromGitHub", async () => ({ + fullName: repo.model.source.repositoryName, model: { defaultBranch: "main" }, + branches: async () => { if (step === "branches") throw error; return [{ name: "main", commit: "new-sha" }]; }, + getCommitInfo: async () => { throw error; }, + })); + await failsWith(() => repo.updateIfNeeded({ force: true }), error); + expect(sent).to.deep.equal([[repo.owner.id, error]]); + }); it("notifies the saved owner when a repository refresh cannot read GitHub", async () => { const error = new Error("repo_not_found"); repo.getToken = async () => "token"; @@ -350,3 +361,67 @@ describe("token validation preserves upstream failures", () => { expect(await tokens.checkToken(token)).to.equal(false); }); }); + +describe("repository probes and truncated file recovery", () => { + const github = require("../src/core/GitHubUtils"); + const db = require("../src/server/database"); + const Model = require("../src/core/model/repositories/repositories.model").default; + const Files = require("../src/core/model/files/files.model").default; + const File = require("../src/core/AnonymizedFile").default; + const GitHubStream = require("../src/core/source/GitHubStream").default; + const { classifyGitHubMissError } = require("../src/core/source/GitHubBase"); + const restores = []; + const stub = (object, key, value) => { const old = object[key]; restores.push(() => object[key] = old); object[key] = value; }; + const source = { getToken: async () => "probe-test", repoId: "anon", organization: "owner", repoName: "repo", commit: "sha" }; + const missing = () => Object.assign(new Error("Not found"), { status: 404 }); + afterEach(() => { while (restores.length) restores.pop()(); }); + for (const stage of ["name", "id"]) for (const status of [undefined, 429, 503]) { + it(`propagates inconclusive ${stage} probe ${status}`, async () => { + const error = Object.assign(new Error("probe failed"), { status }); + stub(db, "isConnected", true); + stub(Model, "findOne", async () => ({ name: "owner/repo", externalId: "gh_123" })); + stub(github, "octokit", () => ({ repos: { get: async () => { throw stage === "name" ? error : missing(); } }, request: async () => { throw error; } })); + let caught; + try { await classifyGitHubMissError(missing(), source); } catch (err) { caught = err; } + expect(caught).to.equal(error); + expect(notifications.isAccessFailure(caught)).to.equal(false); + }); + } + it("preserves an inconclusive repository probe during commit refresh", async () => { + const { GitHubRepository } = require("../src/core/source/GitHubRepository"); + const error = Object.assign(new Error("probe unavailable"), { status: 503 }); + stub(github, "octokit", () => ({ repos: { + getCommit: async () => { throw missing(); }, get: async () => { throw error; }, + } })); + let caught; + try { await new GitHubRepository({ name: "owner/repo" }).getCommitInfo("sha", { accessToken: "token" }); } catch (err) { caught = err; } + expect(caught).to.equal(error); + expect(notifications.isAccessFailure(caught)).to.equal(false); + }); + for (const status of [403, 503]) it(`preserves truncated recovery error ${status} before file content is read`, async () => { + const error = Object.assign(new Error("contents lookup failed"), { status }); + stub(github, "octokit", () => ({ repos: { getContent: async () => { throw error; } } })); + stub(Files, "findOne", async () => null); + const sent = []; + stub(notifications, "notifyOwnerAccessProblem", async (owner, err) => { if (notifications.isAccessFailure(err)) sent.push(owner); }); + const file = new File({ anonymizedPath: "large/missing.txt", repository: { + owner: { id: "saved-owner" }, repoId: "anon", options: { terms: [] }, + model: { truncatedFolders: ["large"] }, source: new GitHubStream(source), + } }); + let caught; + try { await file.originalPath(); } catch (err) { caught = err; } + expect(caught).to.equal(error); + expect(sent).to.deep.equal(status === 403 ? ["saved-owner"] : []); + }); + for (const repoMissing of [false, true]) it(`distinguishes a missing truncated file from lost repository access: ${repoMissing}`, async () => { + stub(db, "isConnected", false); + stub(github, "octokit", () => ({ repos: { + getContent: async () => { throw missing(); }, + get: async () => { if (repoMissing) throw missing(); return {}; }, + } })); + let result, caught; + try { result = await new GitHubStream(source).fetchFileInfoFromPath("large/missing.txt"); } catch (err) { caught = err; } + if (repoMissing) expect(caught.message).to.equal("repo_not_found"); + else { expect(caught).to.equal(undefined); expect(result).to.equal(null); } + }); +});