:root{--rh-ink:#070a06;--rh-lime:#c3ff00;--rh-quiet:#a4b386}
.rh-loader,.rh-intro,.rh-intro *{box-sizing:border-box}
.rh-intro{position:fixed;inset:0;z-index:10000;display:grid;place-items:center;background:var(--rh-ink);color:var(--rh-lime);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;isolation:isolate;transition:opacity 240ms ease-out}
.rh-intro[hidden]{display:none}
.rh-skip-intro .rh-intro{display:none}
.rh-intro[data-leaving]{opacity:0;pointer-events:none}
.rh-intro-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.rh-intro-copy{position:absolute;left:24px;right:24px;top:var(--rh-logo-bottom,72%);text-align:center;pointer-events:none}
.rh-intro-kicker{font-size:12px;letter-spacing:.28em;color:var(--rh-quiet);margin:0 0 12px;text-transform:uppercase}
.rh-intro-status{font-size:12px;letter-spacing:.035em;color:#dce6c9;min-height:20px;margin:0}
.rh-intro-actions{position:absolute;bottom:max(28px,env(safe-area-inset-bottom));left:24px;right:24px;display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}
.rh-intro button{min-height:44px;padding:10px 16px;font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.02em;color:#d6dfc1;border:1px solid #354324;background:#0d1209;border-radius:3px;cursor:pointer;transition:background-color 160ms,color 160ms,border-color 160ms,transform 160ms}
.rh-intro button:hover{background:#1b2810;border-color:#7b9d30;color:var(--rh-lime)}
.rh-intro button:active{transform:scale(.96)}
.rh-intro button:focus-visible{outline:2px solid var(--rh-lime);outline-offset:5px}
.rh-intro [data-rh-skip]{border-color:transparent;background:transparent;color:var(--rh-quiet)}
.rh-intro .rh-loader-track{display:none}
.rh-loader{position:fixed;inset:0;z-index:9000;min-height:0;width:auto;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 16px;text-align:center;color:var(--rh-quiet);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;pointer-events:none}
.rh-loader-canvas{width:min(340px,80vw,60vh);height:auto;aspect-ratio:844/656;display:block;margin:0 auto 12px;pointer-events:none}
.rh-loader .rh-loader-message{font-size:12px;line-height:1.65;max-width:45ch;margin:0;color:#bac8a1;text-wrap:balance}
.rh-loader-track{position:relative;display:block;width:90px;height:1px;margin-top:18px;overflow:hidden;background:#253016}
.rh-loader-track:after{content:"";display:block;width:100%;height:100%;background:var(--rh-lime);opacity:.5}
.rh-loader[data-rh-enhanced]{font-size:12px}
/* Loaders nested inside a dialog stay in flow. The dialog is in the top layer and already frames them; a viewport-fixed overlay would float the frog and caption over the record's rendered content. */
dialog .rh-loader{position:relative;inset:auto;z-index:auto;width:100%;min-height:min(300px,45vh);margin:0;padding:28px 16px 24px}
dialog .rh-loader-canvas{width:min(240px,70vw,34vh)}
/* The archive boot screen covers the whole app, including before enhancement. */
#main > :is(.loading,.rh-loader){position:fixed;inset:0;z-index:9000;width:auto;min-height:0;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000;pointer-events:auto}
html:has(#main > :is(.loading,.rh-loader)){overflow:hidden}
body:has(#main > :is(.loading,.rh-loader)) > :not(.workspace,.rh-intro,script,noscript),
body:has(#main > :is(.loading,.rh-loader)) .workspace > .site-footer{visibility:hidden}
.rh-intro-active{overflow:hidden}
@media(max-width:600px){.rh-intro-actions{gap:2px;left:12px;right:12px}.rh-intro-kicker{font-size:12px}.rh-loader{padding:0 12px}.rh-loader-canvas{width:min(300px,78vw,60vh)}}
@media(max-height:620px) and (min-width:600px){.rh-intro-actions{bottom:12px}}
@media(prefers-reduced-motion:reduce){.rh-intro,.rh-intro button{transition:none}}
