/* GemstoneRO "Sapphire Night" design system: core (tokens, fonts, base, layout, shell, shared components).
   Prefix gs-, modifiers gs-x--mod, states .is-* or ARIA. Interactive pieces are faceted (cut corners), surfaces use
   small radii. Rarely used components: gs-kit.css. Legacy FluxCP markup: gs-legacy.css. Per module: mod-<module>.css. */

/* --- fonts (self-hosted, SIL OFL 1.1, see ../fonts/OFL.txt) --- */
@font-face{font-family:"M PLUS Rounded 1c";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/mplusrounded1c-v22-500-latin.woff2") format("woff2")}
@font-face{font-family:"M PLUS Rounded 1c";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/mplusrounded1c-v22-700-latin.woff2") format("woff2")}
@font-face{font-family:"M PLUS Rounded 1c";font-style:normal;font-weight:800;font-display:swap;src:url("../fonts/mplusrounded1c-v22-800-latin.woff2") format("woff2")}
@font-face{font-family:"Figtree";font-style:normal;font-weight:300 900;font-display:swap;src:url("../fonts/figtree-v9-latin.woff2") format("woff2")}
@font-face{font-family:"Figtree";font-style:normal;font-weight:300 900;font-display:swap;src:url("../fonts/figtree-v9-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* local fallbacks fitted to the text the site renders (weight 800: to the page titles): lines keep their breaks while the web fonts load */
@font-face{font-family:"MPR Fallback";src:local("Arial"),local("ArialMT");font-weight:300 599;size-adjust:108.96%;ascent-override:98.66%;descent-override:29.37%;line-gap-override:8.26%}
@font-face{font-family:"MPR Fallback";src:local("Arial Bold"),local("Arial-BoldMT");font-weight:600 749;size-adjust:101.5%;ascent-override:105.91%;descent-override:31.53%;line-gap-override:8.87%}
@font-face{font-family:"MPR Fallback";src:local("Arial Bold"),local("Arial-BoldMT");font-weight:750 900;size-adjust:103.5%;ascent-override:103.86%;descent-override:30.92%;line-gap-override:8.7%}
@font-face{font-family:"MPR Fallback R";src:local("Roboto"),local("Roboto-Regular");font-weight:300 599;size-adjust:108.71%;ascent-override:98.89%;descent-override:29.44%;line-gap-override:8.28%}
@font-face{font-family:"MPR Fallback R";src:local("Roboto Bold"),local("Roboto-Bold");font-weight:600 749;size-adjust:107.75%;ascent-override:99.77%;descent-override:29.7%;line-gap-override:8.35%}
@font-face{font-family:"MPR Fallback R";src:local("Roboto Bold"),local("Roboto-Bold");font-weight:750 900;size-adjust:110.5%;ascent-override:97.29%;descent-override:28.96%;line-gap-override:8.14%}
@font-face{font-family:"Figtree Fallback";src:local("Arial"),local("ArialMT");font-weight:300 599;size-adjust:100.2%;ascent-override:94.81%;descent-override:24.95%;line-gap-override:0%}
@font-face{font-family:"Figtree Fallback";src:local("Arial Bold"),local("Arial-BoldMT");font-weight:600 900;size-adjust:96.5%;ascent-override:98.45%;descent-override:25.91%;line-gap-override:0%}
@font-face{font-family:"Figtree Fallback R";src:local("Roboto"),local("Roboto-Regular");font-weight:300 599;size-adjust:100.84%;ascent-override:94.21%;descent-override:24.79%;line-gap-override:0%}
@font-face{font-family:"Figtree Fallback R";src:local("Roboto Bold"),local("Roboto-Bold");font-weight:600 900;size-adjust:102.29%;ascent-override:92.87%;descent-override:24.44%;line-gap-override:0%}
/* storybook serif for display text (H1, H2, hero and card titles): Fraunces, one static instance (opsz 48, wght 640, SOFT 100,
   WONK 0) that answers every weight from 500 to 900, so headings never get a synthetic bold. Fallbacks fitted to 226 real titles
   (Georgia Bold 92.5%, Noto Serif Bold 94%: the same line count in 99.7% and 99.6% of 301,032 size and width cases) */
@font-face{font-family:"Fraunces";font-style:normal;font-weight:500 900;font-display:swap;src:url("../fonts/fraunces-v1-soft-640-latin.woff2") format("woff2")}
@font-face{font-family:"Fraunces Fallback";src:local("Georgia Bold"),local("Georgia-Bold");font-weight:500 900;size-adjust:92.5%;ascent-override:105.73%;descent-override:27.57%;line-gap-override:0%}
@font-face{font-family:"Fraunces Fallback N";src:local("Noto Serif Bold"),local("NotoSerif-Bold");font-weight:500 900;size-adjust:94%;ascent-override:104.04%;descent-override:27.13%;line-gap-override:0%}

/* --- tokens --- */
:root{
  /* night */
  --gs-night-950:#050a1a;--gs-night-900:#08112a;--gs-night-850:#0b1734;--gs-night-800:#0f1d40;--gs-night-700:#142650;--gs-night-600:#1b3166;
  --gs-line:rgba(140,175,255,.16);--gs-line-strong:rgba(140,175,255,.28);--gs-line-soft:rgba(140,175,255,.09);
  /* sapphire / azure / cyan / amethyst (rare) / gold (rewards only) */
  --gs-sapphire-600:#1f4fd6;--gs-sapphire-500:#2f66f0;--gs-sapphire-400:#4f86ff;--gs-sapphire-300:#7aa6ff;
  --gs-azure-400:#5cb8ff;--gs-azure-300:#8fd0ff;--gs-cyan:#4fe0ff;--gs-amethyst:#9b7bff;
  --gs-gold-400:#ffd166;--gs-gold-500:#f4b83f;
  /* text */
  --gs-text:#eaf1ff;--gs-text-2:#b9c8ea;--gs-text-muted:#8ea2cc;--gs-text-on-gold:#1d1404;
  /* status */
  --gs-success:#3ad29f;--gs-warning:#ffb547;--gs-danger:#ff6b81;--gs-info:var(--gs-azure-400);
  /* semantic */
  --gs-bg:var(--gs-night-900);--gs-surface:var(--gs-night-850);--gs-surface-2:var(--gs-night-800);--gs-surface-3:var(--gs-night-700);
  --gs-input-bg:rgba(5,10,26,.55);--gs-link:var(--gs-sapphire-300);--gs-link-hover:var(--gs-azure-300);--gs-focus:var(--gs-azure-300);
  /* shape: small radii for surfaces, cut corners (facets) for interactive pieces */
  --gs-r-1:4px;--gs-r-2:8px;--gs-r-3:12px;
  --gs-cut:8px;--gs-stars:radial-gradient(1px 1px at 20px 30px,rgba(255,255,255,.75),transparent 60%),radial-gradient(1px 1px at 140px 90px,rgba(143,208,255,.8),transparent 60%),radial-gradient(1.5px 1.5px at 210px 20px,rgba(255,255,255,.6),transparent 60%),radial-gradient(1px 1px at 90px 150px,rgba(255,255,255,.5),transparent 60%),radial-gradient(1px 1px at 260px 120px,rgba(122,166,255,.8),transparent 60%);--gs-oct:polygon(30% 0,70% 0,100% 30%,100% 70%,70% 100%,30% 100%,0 70%,0 30%);--gs-hex:polygon(6px 0,calc(100% - 6px) 0,100% 50%,calc(100% - 6px) 100%,6px 100%,0 50%);--gs-chev:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238fd0ff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  /* spacing */
  --gs-s-1:4px;--gs-s-2:8px;--gs-s-3:12px;--gs-s-4:16px;--gs-s-5:20px;--gs-s-6:24px;--gs-s-7:32px;--gs-s-8:40px;--gs-s-9:56px;--gs-s-10:72px;--gs-s-11:96px;
  /* depth: soft deep navy, never neon */
  --gs-shadow-1:0 1px 2px rgba(2,6,20,.38),0 6px 18px rgba(2,6,20,.3);
  --gs-shadow-2:0 2px 6px rgba(2,6,20,.38),0 16px 38px rgba(2,6,20,.44);
  --gs-shadow-3:0 26px 64px rgba(2,6,20,.6),0 3px 10px rgba(2,6,20,.42);
  /* one card surface (contract design-system.md 3): edge, moonlit top edge, radius scale, section rhythm */
  --gs-edge:var(--gs-line);--gs-edge-strong:var(--gs-line-strong);--gs-moon:#d6e6ff;
  --gs-moonline:linear-gradient(90deg,rgba(214,230,255,0),rgba(214,230,255,.5),rgba(214,230,255,0));
  --gs-r-4:18px;--gs-surface-sunk:rgba(5,10,26,.55);
  --gs-section:clamp(56px,7vw,88px);--gs-section-sm:clamp(36px,4.5vw,56px);
  --gs-ring:0 0 0 3px rgba(92,184,255,.6);
  /* type */
  --gs-font-display:"M PLUS Rounded 1c","MPR Fallback","MPR Fallback R",ui-rounded,system-ui,sans-serif;
  --gs-font-body:"Figtree","Figtree Fallback","Figtree Fallback R",system-ui,-apple-system,"Segoe UI",sans-serif;
  --gs-font-serif:"Fraunces","Fraunces Fallback","Fraunces Fallback N",Georgia,"Noto Serif",serif;
  --gs-fs-xs:.8125rem;
  --gs-fs-sm:clamp(.875rem,.85rem + .1vw,.9375rem);
  --gs-fs-md:clamp(1rem,.97rem + .15vw,1.0625rem);
  --gs-fs-lg:clamp(1.125rem,1.06rem + .3vw,1.3125rem);
  --gs-fs-xl:clamp(1.25rem,1.12rem + .6vw,1.625rem);
  --gs-fs-2xl:clamp(1.5rem,1.27rem + 1.1vw,2.125rem);
  --gs-fs-3xl:clamp(1.75rem,1.4rem + 1.9vw,2.875rem);
  --gs-fs-4xl:clamp(2.125rem,1.6rem + 2.8vw,3.75rem);
  /* layout */
  --gs-container:1240px;--gs-container-wide:1320px;--gs-gutter:clamp(16px,4vw,32px);--gs-header-h:64px;
  /* motion */
  --gs-ease:cubic-bezier(.2,.8,.2,1);--gs-ease-bounce:cubic-bezier(.34,1.56,.64,1);--gs-dur-1:150ms;--gs-dur-2:200ms;--gs-dur-3:250ms;
  /* gem fills: two-tone diagonal facet. White text needs 4.5:1, so no stop of --gs-gem is lighter than #386ef1 (4.55:1) */
  --gs-gem:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,0) 30%),linear-gradient(112deg,#386ef1 0%,#3267ea 47%,#2759e0 47.4%,#1f4fd6 100%);
  --gs-gold:linear-gradient(180deg,rgba(255,255,255,.3),rgba(255,255,255,0) 32%),linear-gradient(112deg,#ffe08a 0%,#ffd166 47%,#f8c552 47.4%,#f4b83f 100%);
  color-scheme:dark;
}
@media (min-width:1120px){:root{--gs-header-h:72px}}

/* --- base --- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:calc(var(--gs-header-h) + 16px);background:var(--gs-night-950);scrollbar-color:var(--gs-night-600) var(--gs-night-950)}
body{margin:0;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;background:none;color:var(--gs-text);font-family:var(--gs-font-body);font-size:var(--gs-fs-md);font-weight:400;line-height:1.6;overflow-wrap:break-word;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
main{display:block;flex:1 0 auto}
main:focus{outline:none}
img,video,canvas{max-width:100%;height:auto}
img{border-style:none;vertical-align:middle}
svg:not(:root){overflow:hidden}
a{color:var(--gs-link);text-decoration-thickness:.075em;text-underline-offset:.2em;transition:color var(--gs-dur-1) var(--gs-ease)}
a:hover{color:var(--gs-link-hover)}
:focus-visible{outline:3px solid var(--gs-focus);outline-offset:2px}
::selection{background:rgba(79,134,255,.4);color:#fff}
h1,h2,h3,h4,h5,h6{font-family:var(--gs-font-display);font-weight:800;line-height:1.2;letter-spacing:0;color:var(--gs-text);margin:0 0 .55em;text-wrap:balance}
h1{font-size:var(--gs-fs-3xl)}h2{font-size:var(--gs-fs-2xl)}h3{font-size:var(--gs-fs-xl);font-weight:700}h4{font-size:var(--gs-fs-lg);font-weight:700}h5{font-size:var(--gs-fs-md);font-weight:700}
/* display text speaks in the storybook serif; h3 and below, navigation, buttons, forms and tables keep the rounded sans */
h1,h2{font-family:var(--gs-font-serif)}
h6{font-size:var(--gs-fs-sm);font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--gs-text-2)}
p,ul,ol,dl,blockquote,pre,table,figure{margin:0 0 1em}
ul,ol{padding-left:1.35em}
:where(ul[class],ol[class]){list-style:none;padding-left:0}
li+li{margin-top:.25em}
dt{font-weight:700}dd{margin:0 0 .5em}
b,strong{font-weight:700}
small{font-size:.875em}
hr{border:0;height:1px;background:var(--gs-line);margin:var(--gs-s-7) 0}
code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace;font-size:.92em}
code{background:rgba(140,175,255,.1);padding:.1em .4em;border-radius:var(--gs-r-1)}
pre{background:var(--gs-night-950);border:1px solid var(--gs-line);border-radius:var(--gs-r-2);padding:var(--gs-s-4);overflow:auto}
blockquote{border-left:3px solid var(--gs-sapphire-400);padding:.25em 0 .25em 1em;color:var(--gs-text-2)}
table{border-collapse:collapse}
th{text-align:left}
abbr[title]{text-decoration:underline dotted;cursor:help}
[hidden]{display:none!important}
:where(button,input,select,textarea){font:inherit;color:inherit;letter-spacing:inherit}
:where(button){cursor:pointer}
fieldset{border:1px solid var(--gs-line);border-radius:var(--gs-r-3);padding:var(--gs-s-4) var(--gs-s-5);margin:0 0 var(--gs-s-5)}
legend{font-family:var(--gs-font-display);font-weight:700;padding:0 .4em}
label{cursor:pointer}
details>summary{cursor:pointer}
details>summary:focus-visible{outline-offset:3px;border-radius:var(--gs-r-1)}

/* base form controls: zero specificity, so unclassed legacy controls look right and any class wins */
:where(input:not([type=checkbox],[type=radio],[type=submit],[type=button],[type=reset],[type=image],[type=range],[type=color],[type=file],[type=hidden]),select,textarea){display:inline-block;max-width:100%;min-height:44px;padding:9px 14px;border:1px solid var(--gs-line-strong);border-radius:var(--gs-r-2);background-color:var(--gs-input-bg);color:var(--gs-text);font-size:max(16px,1rem);line-height:1.4;vertical-align:middle;transition:border-color var(--gs-dur-1) var(--gs-ease),box-shadow var(--gs-dur-1) var(--gs-ease),background-color var(--gs-dur-1)}
:where(input,textarea)::placeholder{color:var(--gs-text-muted);opacity:1}
:where(input:not([type=checkbox],[type=radio],[type=submit],[type=button],[type=reset],[type=image],[type=range],[type=color],[type=file],[type=hidden]),select,textarea):hover{border-color:rgba(122,166,255,.5)}
:where(input:not([type=checkbox],[type=radio],[type=submit],[type=button],[type=reset],[type=image],[type=range],[type=color],[type=file],[type=hidden]),select,textarea):focus{outline:none;border-color:var(--gs-sapphire-400);box-shadow:var(--gs-ring);background-color:rgba(5,10,26,.75)}
:where(input,select,textarea)[aria-invalid=true]{border-color:var(--gs-danger)}
:where(input,select,textarea)[aria-invalid=true]:focus{box-shadow:0 0 0 3px rgba(255,107,129,.35)}
:where(input,select,textarea,button):disabled{opacity:.55;cursor:not-allowed}
:where(select){appearance:none;-webkit-appearance:none;padding-right:40px;background-image:var(--gs-chev);background-repeat:no-repeat;background-position:right 12px center;background-size:16px}
:where(select[multiple],select[size]){background-image:none;padding-right:14px}
:where(select) option{background:var(--gs-night-850);color:var(--gs-text)}
:where(textarea){min-height:120px;resize:vertical}
/* checkboxes and radios: the site's own box (zero specificity; the system control returns in forced colours) */
:where(input[type=checkbox],input[type=radio]){appearance:none;-webkit-appearance:none;width:18px;height:18px;margin:0 .45em 0 0;border:1.5px solid rgba(140,175,255,.6);border-radius:4px;background:var(--gs-input-bg) center/12px 12px no-repeat;vertical-align:-3px;cursor:pointer;transition:border-color var(--gs-dur-1),background-color var(--gs-dur-1)}
:where(input[type=radio]){border-radius:50%}
:where(input[type=checkbox],input[type=radio]):hover{border-color:var(--gs-azure-300)}
:where(input[type=checkbox],input[type=radio]):checked,:where(input[type=checkbox]):indeterminate{border-color:var(--gs-sapphire-400);background-color:var(--gs-sapphire-500)}
:where(input[type=checkbox]):checked{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6.4l2.4 2.4 4.6-5.3'/%3E%3C/svg%3E")}
:where(input[type=checkbox]):indeterminate{background-image:linear-gradient(#fff,#fff);background-size:10px 2px}
:where(input[type=radio]):checked{background-image:radial-gradient(circle,#fff 3px,#0000 3.6px)}
@media (forced-colors:active){:where(input[type=checkbox],input[type=radio]){appearance:auto;-webkit-appearance:auto}}
:where(input[type=file]){font-size:var(--gs-fs-sm);color:var(--gs-text-2)}
:where(input[type=file])::file-selector-button{font:700 var(--gs-fs-sm) var(--gs-font-display);color:var(--gs-text);background:var(--gs-night-700);border:1px solid var(--gs-line-strong);border-radius:var(--gs-r-1);padding:8px 16px;margin-right:12px;cursor:pointer}
/* legacy buttons: every button gets the base look (zero specificity, any class wins) */
:where(button,input[type=submit],input[type=button],input[type=reset]){display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:8px 20px;border:0;border-radius:var(--gs-r-1);background:var(--gs-night-700);box-shadow:inset 0 0 0 1px var(--gs-line-strong);color:var(--gs-text);font-family:var(--gs-font-display);font-weight:700;font-size:var(--gs-fs-sm);line-height:1.2;vertical-align:middle;transition:transform var(--gs-dur-1) var(--gs-ease),background-color var(--gs-dur-1)}
:where(button,input[type=submit],input[type=button],input[type=reset]):hover{background-color:var(--gs-night-600)}
:where(input[type=submit],button[type=submit]){background:var(--gs-gem);box-shadow:none;color:#fff}
:where(input[type=submit],button[type=submit]):hover{background:var(--gs-gem);box-shadow:inset 0 0 0 2px rgba(143,208,255,.6)}
:where(button,input[type=submit],input[type=button],input[type=reset]):active{transform:translateY(1px)}
:where(button:not([class]),input:not([class])[type=submit],input:not([class])[type=button],input:not([class])[type=reset]){--gs-cut:7px;border-radius:0;clip-path:var(--gs-facet)}
:where(button:not([class]),input:not([class])[type=submit],input:not([class])[type=button],input:not([class])[type=reset]):focus-visible{outline:none;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 5px var(--gs-sapphire-600)}

/* --- type helpers --- */
.gs-display{font-family:var(--gs-font-serif);font-size:var(--gs-fs-4xl);font-weight:800;line-height:1.08}
.gs-h1{font-size:var(--gs-fs-3xl)}.gs-h2{font-size:var(--gs-fs-2xl)}.gs-h3{font-size:var(--gs-fs-xl)}.gs-h4{font-size:var(--gs-fs-lg)}
.gs-h1,.gs-h2,.gs-serif{font-family:var(--gs-font-serif);font-weight:800}
.gs-sans{font-family:var(--gs-font-display)}
.gs-lead{font-size:var(--gs-fs-lg);color:var(--gs-text-2);line-height:1.55}
.gs-eyebrow{display:inline-flex;align-items:center;gap:.6em;margin:0 0 .6em;font-family:var(--gs-font-display);font-size:var(--gs-fs-sm);font-weight:700;letter-spacing:.06em;color:var(--gs-azure-300)}
.gs-eyebrow::before{content:"";width:.55em;height:.55em;flex:none;transform:rotate(45deg);background:linear-gradient(135deg,var(--gs-azure-300) 50%,var(--gs-sapphire-500) 50%)}
.gs-muted{color:var(--gs-text-muted)}.gs-text-2{color:var(--gs-text-2)}.gs-gold-text{color:var(--gs-gold-400)}
.gs-small{font-size:var(--gs-fs-sm)}.gs-tiny{font-size:var(--gs-fs-xs)}
.gs-num{font-variant-numeric:tabular-nums;white-space:nowrap}
.gs-prose{max-width:45em}
.gs-prose>*+*{margin-top:1em}
.gs-prose h2,.gs-prose h3{margin-top:1.6em}
.gs-prose ul{list-style:none;padding-left:1.4em}
.gs-prose ul>li{position:relative}
.gs-prose ul>li::before{content:"";position:absolute;left:-1.1em;top:.6em;width:.42em;height:.42em;transform:rotate(45deg);background:var(--gs-sapphire-300)}

/* --- layout primitives --- */
.gs-container{width:100%;max-width:calc(var(--gs-container) + 2*var(--gs-gutter));margin-inline:auto;padding-inline:var(--gs-gutter)}
.gs-container--narrow{--gs-container:780px}.gs-container--wide{--gs-container:var(--gs-container-wide)}
.gs-stack{display:flex;flex-direction:column;gap:var(--gs-stack,var(--gs-s-4))}
.gs-stack>*{margin-block:0}
.gs-stack--xs{--gs-stack:var(--gs-s-2)}.gs-stack--sm{--gs-stack:var(--gs-s-3)}.gs-stack--lg{--gs-stack:var(--gs-s-7)}.gs-stack--xl{--gs-stack:var(--gs-s-9)}
.gs-cluster{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gs-cluster,var(--gs-s-3))}
.gs-cluster>*{margin:0}
.gs-cluster--sm{--gs-cluster:var(--gs-s-2)}.gs-cluster--lg{--gs-cluster:var(--gs-s-5)}
.gs-cluster--between{justify-content:space-between}.gs-cluster--end{justify-content:flex-end}.gs-cluster--center{justify-content:center}.gs-cluster--start{align-items:flex-start}
.gs-grid{display:grid;gap:var(--gs-grid-gap,var(--gs-s-5));grid-template-columns:repeat(auto-fill,minmax(min(var(--gs-grid-min,260px),100%),1fr))}
.gs-grid>*{margin:0;min-width:0}
@media (min-width:640px){.gs-grid--2,.gs-grid--3,.gs-grid--4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:1024px){.gs-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}.gs-grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}}
.gs-split{display:grid;gap:var(--gs-s-6);align-items:start}
@media (min-width:1024px){.gs-split{grid-template-columns:minmax(0,1fr) var(--gs-aside,340px)}.gs-split--reverse{grid-template-columns:var(--gs-aside,340px) minmax(0,1fr)}}
.gs-split>*{min-width:0}
.gs-section{padding-block:var(--gs-section)}.gs-section--sm{padding-block:var(--gs-section-sm)}.gs-section--lg{padding-block:var(--gs-s-11)}
.gs-sr{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.gs-text-center{text-align:center}.gs-text-right{text-align:right}.gs-text-left{text-align:left}.gs-nowrap{white-space:nowrap}
.gs-mt-0{margin-top:0!important}.gs-mb-0{margin-bottom:0!important}.gs-mt{margin-top:var(--gs-s-5)!important}.gs-mb{margin-bottom:var(--gs-s-5)!important}
@media (max-width:767.98px){.gs-hide-mobile{display:none!important}}
@media (min-width:768px){.gs-hide-desktop{display:none!important}}

/* --- icons --- */
.gs-icon{width:1.25em;height:1.25em;flex:none;display:inline-block;vertical-align:-.25em;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
/* the duotone shapes of the sprite fill at --gs-icon-duo (.16); tiny icons drop it */
.gs-icon--xs{--gs-icon-duo:0}
.gs-icon--xs{width:.875em;height:.875em;vertical-align:-.1em}.gs-icon--sm{width:1em;height:1em;vertical-align:-.15em}.gs-icon--lg{width:1.5em;height:1.5em}.gs-icon--xl{width:2em;height:2em}
/* octagonal tile, the same cut as the feature art */
.gs-icon-tile{--gs-cut:10px;display:inline-grid;place-items:center;width:2.25rem;height:2.25rem;flex:none;background:linear-gradient(160deg,rgba(79,134,255,.34),rgba(31,79,214,.16));color:var(--gs-azure-300);clip-path:var(--gs-oct)}
.gs-icon-tile .gs-icon{width:55%;height:55%}
.gs-icon-tile--gold{background:linear-gradient(160deg,rgba(255,209,102,.34),rgba(244,184,63,.14));color:var(--gs-gold-400)}
.gs-icon-tile--danger{background:linear-gradient(160deg,rgba(255,107,129,.3),rgba(255,107,129,.12));color:#ff9aa9}

/* --- facets: cut corners on a pseudo-element, so outlines are never clipped. --gs-facet reads the element's own --gs-cut --- */
.gs-btn,.gs-tab,.gs-chip,.gs-pagination__link,.gs-nav__link,.gs-account__btn,.gs-totop,.gs-socials a,.gs-badge,.pages a,:where(button:not([class]),input:not([class])[type=submit],input:not([class])[type=button],input:not([class])[type=reset]){--gs-facet:polygon(var(--gs-cut) 0,calc(100% - var(--gs-cut)) 0,100% var(--gs-cut),100% calc(100% - var(--gs-cut)),calc(100% - var(--gs-cut)) 100%,var(--gs-cut) 100%,0 calc(100% - var(--gs-cut)),0 var(--gs-cut));--gs-facet-in:polygon(calc(var(--gs-cut) - .4px) 0,calc(100% - var(--gs-cut) + .4px) 0,100% calc(var(--gs-cut) - .4px),100% calc(100% - var(--gs-cut) + .4px),calc(100% - var(--gs-cut) + .4px) 100%,calc(var(--gs-cut) - .4px) 100%,0 calc(100% - var(--gs-cut) + .4px),0 calc(var(--gs-cut) - .4px))}
.gs-btn,.gs-tab,.gs-chip,.gs-pagination__link,.gs-nav__link,.gs-account__btn,.gs-totop,.gs-socials a{position:relative;isolation:isolate;display:inline-flex;align-items:center;text-decoration:none}
.gs-nav__link::before,.gs-tab::before,.gs-totop::before,.gs-socials a::before{content:"";position:absolute;inset:0;z-index:-1;background:rgba(140,175,255,.1);clip-path:var(--gs-facet);transition:opacity var(--gs-dur-1),background-color var(--gs-dur-1)}
.gs-nav__link::before,.gs-tab::before{opacity:0}
.gs-chip::before,.gs-account__btn::before,.gs-pagination__link::before{content:"";position:absolute;inset:0;z-index:-2;background:var(--gs-line-strong);clip-path:var(--gs-facet)}
.gs-chip::after,.gs-account__btn::after,.gs-pagination__link::after{content:"";position:absolute;inset:1px;z-index:-1;background:var(--gs-night-850);clip-path:var(--gs-facet-in);transition:background-color var(--gs-dur-1)}

/* --- skip link --- */
.gs-skip{position:fixed;left:12px;top:12px;z-index:400;padding:10px 18px;border-radius:var(--gs-r-2);background:var(--gs-azure-300);color:var(--gs-night-950);font:700 var(--gs-fs-sm) var(--gs-font-display);text-decoration:none;transform:translateY(-200%);opacity:0;transition:transform var(--gs-dur-2) var(--gs-ease)}
.gs-skip:focus{transform:none;opacity:1;transition:none;color:var(--gs-night-950)}

/* === SHELL: header, nav, drawer === */
.gs-header{position:sticky;top:0;z-index:100;height:var(--gs-header-h);isolation:isolate}
.gs-header::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(5,10,26,.95),rgba(8,17,42,.9));border-bottom:1px solid var(--gs-line);-webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%);transition:opacity var(--gs-dur-3)}
.gs-header::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;z-index:-1;background:linear-gradient(90deg,transparent 0%,rgba(79,134,255,.6) 25%,rgba(143,208,255,.9) 50%,rgba(79,134,255,.6) 75%,transparent 100%);opacity:.55}
.gs-header.is-stuck::after{opacity:1}
.gs-header__inner{height:100%;max-width:calc(var(--gs-container-wide) + 2*var(--gs-gutter));margin-inline:auto;padding-inline:var(--gs-gutter);display:flex;align-items:center;gap:var(--gs-s-3)}
.gs-brand{display:flex;align-items:center;gap:10px;flex:none;margin-right:var(--gs-s-2);border-radius:var(--gs-r-2);color:#fff;text-decoration:none}
.gs-brand:hover{color:#fff}
.gs-brand__logo{display:block;height:48px;width:auto;max-width:none;filter:drop-shadow(0 4px 10px rgba(2,6,20,.55));transition:transform var(--gs-dur-2) var(--gs-ease-bounce)}
.gs-brand:hover .gs-brand__logo{transform:translateY(-1px) rotate(-3deg)}
.gs-brand__name{font:800 1.3125rem/1 var(--gs-font-display);letter-spacing:.005em;white-space:nowrap;text-shadow:0 2px 10px rgba(2,6,20,.6)}
.gs-brand__name span{color:var(--gs-azure-300)}
/* under 356px the wordmark goes (the logo carries the name): the bar always fits the screen */
@media (max-width:599.98px){.gs-brand{margin-right:0}}
@media (max-width:379.98px){.gs-brand__name{font-size:1.0625rem}}
@media (max-width:355.98px){.gs-brand__name{display:none}}
.gs-header__end{margin-left:auto;display:flex;align-items:center;gap:var(--gs-s-2)}
.gs-header__auth{display:flex;align-items:center;gap:var(--gs-s-2)}

/* status pill: full, "250 players" (1120 to 1279px), or dot + people icon + count (under 600px) */
.gs-status-pill{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 12px 0 11px;margin:0;border-radius:var(--gs-r-2);background:rgba(58,210,159,.08);border:1px solid rgba(58,210,159,.28);color:#c8f3e3;font:700 var(--gs-fs-xs)/1 var(--gs-font-display);white-space:nowrap;text-decoration:none}
a.gs-status-pill:hover{color:#fff;border-color:rgba(58,210,159,.55)}
.gs-status-pill strong{font-weight:800;color:#fff;font-size:var(--gs-fs-sm)}
.gs-status-pill__dot{position:relative;width:8px;height:8px;transform:rotate(45deg);background:var(--gs-success);flex:none}
.gs-status-pill__dot::after{content:"";position:absolute;inset:-4px;border:2px solid var(--gs-success);opacity:0;animation:gs-ping 2.4s var(--gs-ease) 4}
.gs-status-pill--offline{background:rgba(255,107,129,.08);border-color:rgba(255,107,129,.3);color:#ffd0d7}
.gs-status-pill--offline .gs-status-pill__dot{background:var(--gs-danger)}
.gs-status-pill--offline .gs-status-pill__dot::after{display:none}
.gs-status-pill__sep{width:1px;height:14px;background:rgba(200,243,227,.25)}
.gs-status-pill__icon{display:none;width:14px;height:14px;margin-right:-2px;opacity:.85}
@keyframes gs-ping{0%{transform:scale(.6);opacity:.7}70%,100%{transform:scale(1.6);opacity:0}}
@media (max-width:599.98px){.gs-status-pill__label,.gs-status-pill__sep,.gs-status-pill__unit{display:none}.gs-status-pill__icon,.gs-status-pill--offline .gs-status-pill__label{display:block}}

/* nav (desktop: inline disclosure menus) */
.gs-nav{min-width:0}
.gs-nav__list{display:flex;align-items:center;gap:2px;list-style:none;margin:0;padding:0}
.gs-nav__item{position:relative;margin:0}
.gs-nav__link{--gs-cut:7px;gap:6px;height:40px;padding:0 12px;border:0;background:none;color:var(--gs-text-2);font:700 .9375rem/1 var(--gs-font-display);white-space:nowrap;cursor:pointer;min-height:0;box-shadow:none;clip-path:none;transition:color var(--gs-dur-1)}
.gs-nav__link:hover,.gs-nav__link[aria-expanded=true]{color:var(--gs-text);background:none}
.gs-nav__link:hover::before,.gs-nav__link[aria-expanded=true]::before{opacity:1}
.gs-nav__link:focus-visible{outline-offset:0;border-radius:var(--gs-r-1)}
.gs-nav__link .gs-nav__chev{width:14px;height:14px;opacity:.75;transition:transform var(--gs-dur-2) var(--gs-ease)}
.gs-nav__link[aria-expanded=true] .gs-nav__chev{transform:rotate(180deg)}
.gs-nav__link.is-current,.gs-nav__link[aria-current=page]{color:#fff}
.gs-nav__link.is-current::after,.gs-nav__link[aria-current=page]::after{content:"";position:absolute;left:50%;bottom:1px;width:6px;height:6px;margin-left:-3px;transform:rotate(45deg);background:linear-gradient(135deg,var(--gs-azure-300) 50%,var(--gs-sapphire-500) 50%)}
.gs-nav__link--donate{color:var(--gs-gold-400)}
.gs-nav__link--donate::before{background:rgba(255,209,102,.12)}
.gs-nav__link--donate:hover{color:#ffe49a}
.gs-nav__lock{width:12px;height:12px;opacity:.85}
.gs-menu{position:absolute;top:calc(100% + 10px);left:-6px;z-index:20;min-width:280px;padding:8px;border-radius:var(--gs-r-3);background:var(--gs-night-850);border:1px solid var(--gs-line-strong);box-shadow:var(--gs-shadow-3);opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity var(--gs-dur-2) var(--gs-ease),transform var(--gs-dur-2) var(--gs-ease),visibility 0s linear var(--gs-dur-2)}
.gs-menu::before{content:"";position:absolute;top:-1px;left:20px;right:20px;height:1px;background:linear-gradient(90deg,transparent,rgba(143,208,255,.6),transparent)}
.gs-menu--end{left:auto;right:-6px}
.is-open>.gs-menu{opacity:1;visibility:visible;transform:none;transition-delay:0s}
.gs-menu__list{list-style:none;margin:0;padding:0;max-height:calc(100vh - var(--gs-header-h) - 40px);overflow-y:auto;scrollbar-width:thin}
.gs-menu__list li{margin:0}
.gs-menu__link{display:flex;align-items:center;justify-content:flex-start;gap:12px;width:100%;min-height:48px;padding:6px 12px 6px 8px;border:0;border-radius:var(--gs-r-2);background:none;box-shadow:none;clip-path:none;color:var(--gs-text);font:700 var(--gs-fs-sm)/1.25 var(--gs-font-display);text-align:left;text-decoration:none;cursor:pointer;transition:background-color var(--gs-dur-1),color var(--gs-dur-1)}
.gs-menu__link:hover,.gs-menu__link:focus-visible{background:rgba(79,134,255,.13);color:#fff}
.gs-menu__link:focus-visible{outline-offset:-3px}
.gs-menu__link[aria-current=page]{background:rgba(79,134,255,.18)}
.gs-menu__link .gs-icon-tile{transition:transform var(--gs-dur-2) var(--gs-ease-bounce)}
.gs-menu__link:hover .gs-icon-tile{transform:translateY(-1px) scale(1.05)}
.gs-menu__text{display:flex;flex-direction:column;gap:2px;min-width:0}
.gs-menu__meta{display:inline-flex;align-items:center;gap:4px;font:500 var(--gs-fs-xs)/1.3 var(--gs-font-body);color:var(--gs-text-muted)}
.gs-menu__ext{margin-left:auto;width:14px;height:14px;color:var(--gs-text-muted)}
.gs-menu__sep{height:1px;margin:6px 8px;background:var(--gs-line)}
.gs-menu__link--danger{color:#ffb3bf}
.gs-menu__link--danger:hover,.gs-menu__link--danger:focus-visible{background:rgba(255,107,129,.13);color:#ffd0d7}
.gs-logout{margin:0}
.gs-menu__link[type=submit]:hover{background:rgba(255,107,129,.13)}

/* account button */
.gs-account{position:relative}
.gs-account__btn{--gs-cut:7px;gap:8px;height:40px;max-width:230px;padding:0 12px 0 6px;border:0;background:none;box-shadow:none;clip-path:none;color:var(--gs-text);font:700 var(--gs-fs-sm)/1 var(--gs-font-display);cursor:pointer}
.gs-account__btn:hover::after,.gs-account__btn[aria-expanded=true]::after{background:var(--gs-night-700)}
.gs-account__btn:focus-visible{border-radius:var(--gs-r-1)}
.gs-account__avatar{display:grid;place-items:center;width:28px;height:28px;background:var(--gs-gem);color:#fff;clip-path:var(--gs-oct)}
.gs-account__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.5}

/* burger + drawer */
.gs-header .gs-burger,.gs-header .gs-burger--nojs{display:none}
.gs-drawer__head,.gs-drawer__foot,.gs-drawer__backdrop{display:none}
@media (min-width:1120px){.gs-drawer{display:contents}}
@media (max-width:1279.98px) and (min-width:1120px){
  .gs-nav__link{padding:0 9px;font-size:.875rem}
  .gs-status-pill__label,.gs-status-pill__sep{display:none}
  @media (max-width:1179.98px){.gs-guest .gs-status-pill__unit{display:none}.gs-guest .gs-status-pill__icon{display:block}}
}
@media (max-width:1119.98px){
  .gs-header__auth,.gs-header .gs-account{display:none}
  .gs-header .gs-burger:not(.gs-burger--nojs){display:inline-flex}
  .gs-drawer{position:fixed;top:0;right:0;bottom:0;z-index:130;width:min(400px,90vw);display:flex;flex-direction:column;background:var(--gs-night-900);border-left:1px solid var(--gs-line-strong);box-shadow:var(--gs-shadow-3);overflow-y:auto;overscroll-behavior:contain;transform:translateX(102%);visibility:hidden;transition:transform var(--gs-dur-3) var(--gs-ease),visibility 0s linear var(--gs-dur-3)}
  .gs-drawer::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(420px 260px at 100% 0,rgba(79,134,255,.18),transparent 70%),radial-gradient(1px 1px at 22% 14%,rgba(255,255,255,.7),transparent 60%),radial-gradient(1px 1px at 72% 34%,rgba(143,208,255,.8),transparent 60%),radial-gradient(1.5px 1.5px at 40% 62%,rgba(255,255,255,.55),transparent 60%),radial-gradient(1px 1px at 86% 78%,rgba(255,255,255,.6),transparent 60%)}
  .gs-drawer.is-open{transform:none;visibility:visible;transition-delay:0s}
  .gs-drawer__head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:var(--gs-header-h);padding:6px var(--gs-s-4) 6px var(--gs-s-5);border-bottom:1px solid var(--gs-line)}
  .gs-drawer__head .gs-brand__logo{height:48px}
  .gs-drawer__foot{display:flex;flex-direction:column;gap:var(--gs-s-3);margin-top:auto;padding:var(--gs-s-5);border-top:1px solid var(--gs-line)}
  .gs-drawer__who{display:flex;align-items:center;gap:8px;margin:0;color:var(--gs-text-2);font-size:var(--gs-fs-sm)}
  .gs-drawer__backdrop{display:block;position:fixed;inset:0;z-index:120;background:rgba(3,7,18,.66);opacity:0;visibility:hidden;transition:opacity var(--gs-dur-3) var(--gs-ease),visibility 0s linear var(--gs-dur-3)}
  .gs-drawer__backdrop.is-open{opacity:1;visibility:visible;transition-delay:0s}
  .gs-nav{padding:var(--gs-s-3) var(--gs-s-4)}
  .gs-nav__list{flex-direction:column;align-items:stretch;gap:2px}
  .gs-nav__link{--gs-cut:9px;width:100%;height:52px;padding:0 var(--gs-s-4);font-size:1.0625rem;color:var(--gs-text);justify-content:flex-start}
  .gs-nav__link .gs-nav__chev{margin-left:auto;width:18px;height:18px}
  .gs-nav__link.is-current::after,.gs-nav__link[aria-current=page]::after{left:auto;right:18px;bottom:auto;top:50%;margin:-3px 0 0}
  .gs-nav__item--menu>.gs-nav__link.is-current::after{right:46px}
  .gs-menu,.gs-menu--end{position:static;min-width:0;padding:2px 0 10px 10px;margin:0;border:0;border-radius:0;background:none;box-shadow:none;opacity:1;visibility:visible;transform:none;transition:none;display:none}
  .gs-menu::before{display:none}
  .is-open>.gs-menu{display:block}
  .gs-menu__link{min-height:50px;font-size:1rem}
  .gs-menu__list{max-height:none;overflow:visible}
  .gs-drawer .gs-btn--block{--gs-btn-h:50px}
}
.gs-scroll-lock,.gs-scroll-lock body{overflow:hidden}
/* without JS: desktop menus open on hover/focus; on small screens the nav stacks under the header */
html:not(.gs-js) .gs-nav__item--menu:hover>.gs-menu,html:not(.gs-js) .gs-nav__item--menu:focus-within>.gs-menu{opacity:1;visibility:visible;transform:none;display:block}
@media (max-width:1119.98px){
  html:not(.gs-js) .gs-header{position:relative;height:auto}
  html:not(.gs-js) .gs-header__inner{flex-wrap:wrap;height:auto;padding-block:8px}
  html:not(.gs-js) .gs-drawer{position:static;transform:none;visibility:visible;width:100%;background:none;border:0;box-shadow:none;order:3;display:none}
  html:not(.gs-js) .gs-drawer:target{display:flex}
  html:not(.gs-js) .gs-header .gs-burger--nojs{display:inline-flex}
  html:not(.gs-js) .gs-menu{display:block}
  html:not(.gs-js) .gs-header .gs-burger:not(.gs-burger--nojs),html:not(.gs-js) .gs-drawer__head{display:none}
  html:not(.gs-js) .gs-drawer__foot{display:flex}
}

/* === SHELL: notices, hero band, content, auth layout, footer === */
.gs-notices{padding-top:var(--gs-s-4)}
/* phones: the sky's moon sits in the top right corner of the first screen (header + 16 to 46 px): a session message starts below it */
@media (max-width:767.98px){.gs-notices{padding-top:52px}}
.gs-notices:empty{display:none}
.gs-notices .gs-alert{margin-bottom:0}
.gs-main--full>.gs-notices{position:relative;z-index:5}
.gs-main--auth>.gs-notices{width:min(100% - 2*var(--gs-gutter),520px);margin-inline:auto}

/* --- page hero v2 (contract design-system.md 1; gsHero() in main/shell-lib.php). The band has no background of its own: the
   global sky (gs-sky.css) shows through. A calm text zone, and the stage: the page's landmark scenery (footer-world kit) along
   the bottom and its cast standing on the scenery's ground line. Desktop (768 px and up): the stage fills the band behind the
   text, the cast stands in the zone beside the text column (its box ends --gs-hero-gap before it). Phones: the stage is its own
   block below or above the text (gs-hero--phone-*), so no character ever stands behind words. The scenery fades into the page at
   its bottom edge: no band edge, no rectangle. Tunable per page (module sheet): --gs-hero-min, --gs-hero-floor, --gs-world-h,
   --gs-center-col, --gs-stage-ph, --gs-hero-top-pull --- */
.gs-hero{--gs-hero-col:calc(var(--gs-fs-3xl) * 17);--gs-hero-share:.6;--gs-hero-gap:32px;--gs-center-col:min(640px,100%);--gs-cl:max(var(--gs-gutter),(100% - var(--gs-container)) / 2);--gs-cw:min(var(--gs-container),100% - 2 * var(--gs-gutter));position:relative;isolation:isolate;display:flex;flex-direction:column;padding:clamp(18px,2.6vw,36px) 0 clamp(22px,2.8vw,40px)}
.gs-hero__inner{position:relative;z-index:1}
.gs-hero__inner>*{max-width:min(var(--gs-hero-col),100%)}
.gs-hero .gs-breadcrumb{margin-bottom:12px}
.gs-hero__eyebrow{display:flex;margin-bottom:.4em}
.gs-hero__title{margin:0;font-size:var(--gs-fs-3xl);font-weight:800;line-height:1.1;text-shadow:0 2px 22px rgba(2,6,20,.55)}
.gs-hero__intro{margin:.6em 0 0;max-width:min(var(--gs-hero-col),34em);font-size:var(--gs-fs-md);line-height:1.55;color:var(--gs-text-2);text-shadow:0 1px 14px rgba(2,6,20,.7)}
.gs-hero__actions{margin-top:var(--gs-s-5)}
.gs-hero__top{margin-bottom:var(--gs-s-4)}
.gs-hero__bottom{margin-top:var(--gs-s-6)}
@media (min-width:880px){.gs-hero__intro{font-size:var(--gs-fs-lg)}.gs-hero__actions{margin-top:var(--gs-s-6)}}
/* full: home and landing pages */
.gs-hero--full{--gs-hero-col:calc(var(--gs-fs-4xl) * 14);padding-block:clamp(24px,4vw,56px) clamp(28px,4vw,56px)}
.gs-hero--full .gs-hero__title{font-size:var(--gs-fs-4xl);line-height:1.05}
/* compact: data and work pages. Smaller H1, the intro for screen readers only (gs-hero--intro keeps one short line) */
.gs-hero--compact{padding-block:12px 18px}
.gs-hero--compact .gs-breadcrumb{margin-bottom:4px}
.gs-hero--compact .gs-hero__title{font-size:var(--gs-fs-2xl)}
.gs-hero--compact .gs-hero__eyebrow{display:none}
.gs-hero--compact .gs-hero__intro{position:absolute;width:1px;height:1px;margin:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.gs-hero--intro .gs-hero__intro{position:static;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;width:auto;height:auto;margin-top:.25em;overflow:hidden;clip:auto;white-space:normal;font-size:var(--gs-fs-sm);line-height:1.45}
.gs-hero--wide{--gs-hero-col:max(calc(var(--gs-fs-3xl) * 17),100vw - 2 * var(--gs-gutter) - 40px);--gs-hero-share:1}
/* centred text (full: the home; standard: the state pages, stage above the text on every width) */
.gs-hero--center .gs-hero__inner{display:flex;flex-direction:column;align-items:center;text-align:center}
.gs-hero--center .gs-hero__inner>*{max-width:var(--gs-center-col)}
.gs-hero--center .gs-eyebrow,.gs-hero--center .gs-hero__actions,.gs-hero--center .gs-breadcrumb ol{justify-content:center}
@media (min-width:880px){
  .gs-hero--compact{padding-block:14px 20px}
  .gs-hero--compact .gs-hero__eyebrow{display:flex;margin-bottom:.1em}
  .gs-hero--intro .gs-hero__intro{-webkit-line-clamp:1;font-size:var(--gs-fs-md)}
  .gs-hero--wide{--gs-hero-col:max(calc(var(--gs-fs-3xl) * 17),min(calc(var(--gs-fs-3xl) * 27),100vw - 2 * max(var(--gs-gutter),50vw - var(--gs-container) / 2) - 220px))}
}

/* the stage (also printed alone by gsHeroStage(): the auth layout). It fills its box; the world layers fill --gs-world-h from
   the bottom; the cast stands on the ground line (--gs-ground of that height). Zones: the end zone runs from --gs-ze-in (from the
   left edge) to --gs-ze-out (from the right edge); the start zone from --gs-zs-in (from the right edge) to --gs-zs-out (from the
   left edge). x: 0 = next to the text, 100 = the outer edge (anchored like background-position, so a figure never leaves its
   zone). Phones (under the split): x across the stage from its left edge (--px), height --ph */
.gs-stage{--gs-world-h:100%;--gs-ze-in:0px;--gs-ze-out:0px;--gs-zs-in:0px;--gs-zs-out:0px;--gs-cast-k:1;--gs-cast-lift:0px;--gs-pad-p:10px;position:relative;overflow:hidden;pointer-events:none}
.gs-stage>.gs-world{position:absolute;left:0;right:0;bottom:0;z-index:1;display:block;height:var(--gs-world-h);-webkit-mask-image:linear-gradient(0deg,transparent,#000 var(--gs-world-fade,44px));mask-image:linear-gradient(0deg,transparent,#000 var(--gs-world-fade,44px))}
.gs-stage>.gs-world img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;object-position:var(--gs-world-x,70%) 100%}
.gs-stage>.gs-world--mid{z-index:2}.gs-stage>.gs-world--near{z-index:4}.gs-stage>.gs-world--front{z-index:6}
.gs-stage>.gs-world--phone{display:none}
/* optional mist between the far and the mid layers ("haze" in world.json, 0 by default: the sets carry their own haze) */
.gs-stage>.gs-world--mid::before{content:"";position:absolute;left:0;right:0;bottom:0;height:45%;z-index:-1;background:linear-gradient(0deg,var(--gs-sky-haze,rgba(70,104,176,.32)),transparent);opacity:var(--gs-haze,0)}
.gs-stage>.gs-actor{position:absolute;z-index:5;display:block;bottom:calc(var(--gs-world-h) * var(--gs-ground,0) + var(--gs-cast-lift) + var(--y,0px));left:calc(var(--gs-ze-in) + (100% - var(--gs-ze-in) - var(--gs-ze-out)) * var(--x,50) / 100);height:min(calc(var(--h,120px) * var(--gs-cast-k)),calc(100% - var(--gs-world-h) * var(--gs-ground,0) - var(--gs-cast-lift) - var(--y,0px) - 8px));aspect-ratio:var(--ar,1);transform:translateX(calc(var(--x,50) * -1%))}
.gs-stage>.gs-actor--start{left:auto;right:calc(var(--gs-zs-in) + (100% - var(--gs-zs-in) - var(--gs-zs-out)) * var(--x,50) / 100);transform:translateX(calc(var(--x,50) * 1%))}
.gs-stage>.gs-actor--mid{z-index:3;filter:saturate(.8) brightness(.86)}
.gs-stage>.gs-actor--front{z-index:7}
.gs-stage>.gs-actor>.gs-art,.gs-stage>.gs-actor img{display:block;width:100%;height:100%;max-width:none}
.gs-stage>.gs-actor img{object-fit:contain;object-position:50% 100%}
.gs-stage>.gs-actor--flip img{transform:scaleX(-1)}
/* contact shadow under figures on the ground (the art has none baked in) */
.gs-stage>.gs-actor--near::before,.gs-stage>.gs-actor--front::before{content:"";position:absolute;left:16%;right:16%;bottom:-3%;z-index:-1;height:9%;border-radius:50%;background:radial-gradient(closest-side,rgba(2,6,20,.62),rgba(2,6,20,0))}
@media (prefers-reduced-motion:no-preference){
  .gs-stage>.gs-actor--bob>.gs-art{animation:gs-bob 5.5s ease-in-out infinite}
  .gs-stage>.gs-actor--hop>.gs-art{transform-origin:50% 100%;animation:gs-hop 3.4s var(--gs-ease) infinite}
  .gs-stage>.gs-actor--sway>.gs-art{transform-origin:50% 100%;animation:gs-sway 6s ease-in-out infinite}
  .gs-stage>.gs-actor--float>.gs-art{animation:gs-float 6s ease-in-out infinite}
}
@keyframes gs-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes gs-hop{0%,58%,100%{transform:none}64%{transform:scale(1.06,.92)}74%{transform:translateY(-14%) scale(.96,1.05)}84%{transform:scale(1.04,.95)}90%{transform:none}}
@keyframes gs-sway{0%,100%{transform:rotate(-1.2deg)}50%{transform:rotate(1.2deg)}}
/* phones: the phone layers of the set, the cast at its phone placement */
@media (max-width:767.98px){
  .gs-stage--split-768.gs-stage--phoneset{--gs-world-x:var(--gs-world-px,50%);--gs-ground:var(--gs-ground-p,.16)}
  .gs-stage--split-768 .gs-world--phone{display:block}
  .gs-stage--split-768 .gs-world--wide{display:none}
  .gs-stage--split-768 .gs-actor{left:calc(var(--gs-pad-p) + (100% - 2 * var(--gs-pad-p)) * var(--px,50) / 100);right:auto;bottom:calc(var(--gs-world-h) * var(--gs-ground,0) + var(--gs-cast-lift) + var(--py,0px));height:min(var(--ph,72px),calc(100% - var(--gs-world-h) * var(--gs-ground,0) - var(--gs-cast-lift) - var(--py,0px) - 6px));transform:translateX(calc(var(--px,50) * -1%))}
  .gs-stage--split-768 .gs-actor--nophone{display:none}
}
@media (max-width:1023.98px){
  .gs-stage--split-1024.gs-stage--phoneset{--gs-world-x:var(--gs-world-px,50%);--gs-ground:var(--gs-ground-p,.16)}
  .gs-stage--split-1024 .gs-world--phone{display:block}
  .gs-stage--split-1024 .gs-world--wide{display:none}
  .gs-stage--split-1024 .gs-actor{left:calc(var(--gs-pad-p) + (100% - 2 * var(--gs-pad-p)) * var(--px,50) / 100);right:auto;bottom:calc(var(--gs-world-h) * var(--gs-ground,0) + var(--gs-cast-lift) + var(--py,0px));height:min(var(--ph,72px),calc(100% - var(--gs-world-h) * var(--gs-ground,0) - var(--gs-cast-lift) - var(--py,0px) - 6px));transform:translateX(calc(var(--px,50) * -1%))}
  .gs-stage--split-1024 .gs-actor--nophone{display:none}
}

/* the stage inside the hero. Phones: a block of its own below (default) or above the text, never behind it */
.gs-hero__stage{--gs-stage-ph:clamp(132px,40vw,240px);height:var(--gs-stage-ph);margin:14px 0 -8px}
.gs-hero--phone-above>.gs-hero__stage{order:-1;margin:-8px 0 8px}
.gs-hero--phone-above .gs-hero__top{position:relative;z-index:2;margin-top:calc(-1 * var(--gs-hero-top-pull,0px))}
.gs-hero--phone-none>.gs-hero__stage,.gs-hero--compact>.gs-hero__stage{display:none}
.gs-hero--full{--gs-stage-ph:clamp(180px,56vw,320px)}
.gs-hero--full>.gs-hero__stage{--gs-stage-ph:clamp(180px,56vw,320px)}
@media (min-width:768px){
  .gs-hero--art{--gs-hero-floor:0px;min-height:var(--gs-hero-min,auto);justify-content:center}
  .gs-hero--art>.gs-hero__inner{padding-bottom:var(--gs-hero-floor)}
  .gs-hero--art>.gs-hero__inner>*{max-width:min(var(--gs-hero-col),100% * var(--gs-hero-share))}
  .gs-hero__stage,.gs-hero--phone-above>.gs-hero__stage,.gs-hero--phone-none>.gs-hero__stage{display:block;position:absolute;inset:0;z-index:-1;height:auto;margin:0}
  /* the zones and the cast scale in a rule of their own (one class): the breakpoints below and every size and plate rule can
     then set them for heroes with 'phone' => 'above' or 'none' too */
  .gs-hero__stage{--gs-ze-in:calc(var(--gs-cl) + min(var(--gs-hero-col),var(--gs-cw) * var(--gs-hero-share)) + var(--gs-hero-gap));--gs-ze-out:var(--gs-cl);--gs-zs-in:var(--gs-ze-in);--gs-zs-out:var(--gs-cl);--gs-cast-k:.78}
  .gs-hero--phone-above .gs-hero__top{margin-top:0}
  /* standard: the scenery along the bottom (the sets keep the left 45 % under 30 % of their height: the floor keeps the text above it) */
  .gs-hero--standard.gs-hero--art{--gs-hero-min:clamp(260px,10vw + 170px,330px)}
  .gs-hero--standard.gs-hero--world{--gs-world-h:clamp(150px,16vw,300px);--gs-hero-floor:calc(var(--gs-world-h) * .43 - 12px);--gs-hero-min:min(clamp(300px,14vw + 150px,420px),max(270px,100vh - var(--gs-header-h) - 300px))}
  .gs-hero--standard.gs-hero--world>.gs-hero__stage{--gs-world-h:clamp(150px,16vw,300px)}
  /* full: a wider scenery band; the cast reaches the screen edge */
  .gs-hero--full.gs-hero--art{--gs-hero-min:min(760px,max(520px,100vh - var(--gs-header-h)))}
  .gs-hero--full.gs-hero--world{--gs-world-h:clamp(220px,30vw,440px);--gs-hero-floor:calc(var(--gs-world-h) * .43)}
  .gs-hero--full>.gs-hero__stage{--gs-world-h:clamp(220px,30vw,440px);--gs-ze-out:0px;--gs-zs-out:0px;--gs-cast-k:1}
  /* the text block sits in the middle of the band; the bottom slot (a fact row) on the floor */
  .gs-hero--full>.gs-hero__inner{flex:1;display:flex;flex-direction:column}
  .gs-hero--full>.gs-hero__inner::before,.gs-hero--full>.gs-hero__inner::after{content:"";flex:1 1 0}
  .gs-hero--full .gs-hero__bottom{order:1}
  /* compact: a thin strip at its natural size along the bottom right, fading in from the left */
  .gs-hero--compact>.gs-hero__stage{display:block}
  .gs-hero--compact>.gs-hero__stage{--gs-world-h:clamp(64px,6.5vw,104px)}
  .gs-hero--compact .gs-stage>.gs-world{left:auto;width:min(100%,var(--gs-world-h) * var(--gs-world-ar,12));-webkit-mask-image:linear-gradient(90deg,transparent,#000 28%),linear-gradient(0deg,transparent,#000 14px);mask-image:linear-gradient(90deg,transparent,#000 28%),linear-gradient(0deg,transparent,#000 14px);-webkit-mask-composite:source-in;mask-composite:intersect}
  .gs-hero--compact .gs-stage>.gs-world img{object-fit:contain;object-position:100% 100%}
  /* the start side (text on the right, cast on the left) */
  .gs-hero--side-start>.gs-hero__inner>*{margin-left:auto}
  /* centred text: the cast stands left and right of the column (both zones) */
  .gs-hero--center>.gs-hero__stage{--gs-ze-in:calc(50% + var(--gs-center-col) / 2 + var(--gs-hero-gap));--gs-zs-in:calc(50% + var(--gs-center-col) / 2 + var(--gs-hero-gap))}
  .gs-hero--center>.gs-hero__inner>*{max-width:var(--gs-center-col)}
}
@media (min-width:1024px){
  .gs-hero{--gs-hero-share:.56}
  .gs-hero__stage{--gs-cast-k:.88}
}
@media (min-width:1280px){.gs-hero__stage{--gs-cast-k:1}}
/* standard + centre (state pages): the scene stands above the centred text on every width, at its natural ratio */
.gs-hero--standard.gs-hero--center>.gs-hero__stage{position:relative;inset:auto;order:-1;z-index:0;height:var(--gs-stage-ph);margin:0 0 4px;--gs-stage-ph:clamp(170px,48vw,240px);--gs-world-h:100%;--gs-ze-in:calc((100% - min(100%,var(--gs-stage-ph) * var(--gs-world-ar,2.2))) / 2);--gs-ze-out:var(--gs-ze-in);--gs-zs-in:var(--gs-ze-in);--gs-zs-out:var(--gs-ze-in)}
.gs-hero--standard.gs-hero--center .gs-stage>.gs-world{left:50%;width:min(100%,var(--gs-stage-ph) * var(--gs-world-ar,2.2));transform:translateX(-50%);-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent),linear-gradient(0deg,transparent,#000 36px);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent),linear-gradient(0deg,transparent,#000 36px);-webkit-mask-composite:source-in;mask-composite:intersect}
.gs-hero--standard.gs-hero--center .gs-stage>.gs-world img{object-fit:contain;object-position:50% 100%}
@media (min-width:768px){.gs-hero--standard.gs-hero--center>.gs-hero__stage{--gs-stage-ph:clamp(240px,24vw,380px);--gs-cast-k:1}.gs-hero--standard.gs-hero--center{--gs-hero-min:auto;--gs-hero-floor:0px}}
/* phones: the sky's moon sits in the top right corner of the first screen; the first text row of the hero wraps before it */
@media (max-width:767.98px){
  .gs-hero>.gs-hero__inner>:first-child{padding-right:52px}
  .gs-hero--center>.gs-hero__inner>:first-child{padding-inline:52px}
}
/* gs-hero--split-1024 ('split' => 1024): tablets in portrait keep the phone composition (the stage as its own block) */
@media (min-width:768px) and (max-width:1023.98px){
  .gs-hero--split-1024{min-height:0;justify-content:flex-start}
  .gs-hero--split-1024>.gs-hero__inner{flex:none;display:block;padding-bottom:0}
  .gs-hero--split-1024.gs-hero--center>.gs-hero__inner{display:flex}
  .gs-hero--split-1024>.gs-hero__inner::before,.gs-hero--split-1024>.gs-hero__inner::after{content:none}
  .gs-hero--split-1024>.gs-hero__inner>*{max-width:min(var(--gs-hero-col),100%)}
  .gs-hero--split-1024.gs-hero--center>.gs-hero__inner>*{max-width:var(--gs-center-col)}
  .gs-hero--split-1024>.gs-hero__stage{position:relative;inset:auto;z-index:0;height:var(--gs-stage-ph);margin:14px 0 -8px;--gs-world-h:100%;--gs-stage-ph:clamp(220px,40vw,360px)}
  .gs-hero--split-1024.gs-hero--phone-above>.gs-hero__stage{order:-1;margin:-8px 0 8px}
  .gs-hero--split-1024.gs-hero--phone-none>.gs-hero__stage{display:none}
  .gs-hero--split-1024.gs-hero--phone-above .gs-hero__top{margin-top:calc(-1 * var(--gs-hero-top-pull,0px))}
}
/* a wide title takes the room the cast would use: the cast shows from 1280 px only */
@media (max-width:1279.98px) and (min-width:768px){.gs-hero--wide .gs-stage>.gs-actor{display:none}}

/* plate mode of hero v2 ("plate": true in the world block: an opaque painted scene with its own sky and moon, FINAL PLAN 17:15).
   Standard: the plate covers the art side from the top to the bottom of the hero (the right 58 % of the band, its edge melting
   toward the text and into the content), the hero is 360 to 460 px tall, the cast stands in front of it. Compact: a bright
   vignette 150 to 180 px tall on the art side. Full: the plate covers the whole hero. Phones: the plate fills the stage block.
   The plate should be the block's first ('far') layer. Tunable: --gs-plate-w (width of the art side) */
.gs-stage--plate>.gs-world img{object-position:var(--gs-world-x,50%) var(--gs-world-y,50%)}
.gs-hero--plate>.gs-hero__stage{--gs-stage-ph:clamp(180px,52vw,280px)}
@media (max-width:767.98px){
  .gs-stage--split-768.gs-stage--plate>.gs-world img{object-position:var(--gs-world-px,var(--gs-world-x,50%)) var(--gs-world-py,var(--gs-world-y,50%))}
  .gs-hero--phone-below:not(.gs-hero--split-1024) .gs-stage--plate>.gs-world{-webkit-mask-image:linear-gradient(180deg,transparent,#000 28px,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(180deg,transparent,#000 28px,#000 calc(100% - 40px),transparent)}
  /* compact: the vignette lies dimly behind the title, as the old compact band's plate did (no extra height, no cast; the veil
     keeps muted text at 4.5:1 over the brightest art); not with 'phone' => 'none' */
  .gs-hero--compact.gs-hero--plate:not(.gs-hero--phone-none)>.gs-hero__stage{display:block;position:absolute;inset:0;z-index:-1;height:auto;margin:0;--gs-world-h:100%;-webkit-mask-image:linear-gradient(0deg,transparent,#000 22px);mask-image:linear-gradient(0deg,transparent,#000 22px)}
  .gs-hero--compact.gs-hero--plate>.gs-hero__stage::after{content:"";position:absolute;inset:0;z-index:8;background:linear-gradient(90deg,rgba(5,10,26,.88),rgba(5,10,26,.82))}
  .gs-hero--compact.gs-hero--plate .gs-stage>.gs-world{-webkit-mask-image:none;mask-image:none}
  .gs-hero--compact .gs-stage>.gs-actor{display:none}
  .gs-hero.gs-hero--compact.gs-hero--plate:not(.gs-hero--phone-none)>.gs-hero__inner>:first-child{padding-right:0}
}
@media (max-width:1023.98px){
  .gs-stage--split-1024.gs-stage--plate>.gs-world img{object-position:var(--gs-world-px,var(--gs-world-x,50%)) var(--gs-world-py,var(--gs-world-y,50%))}
  .gs-hero--split-1024.gs-hero--phone-below .gs-stage--plate>.gs-world{-webkit-mask-image:linear-gradient(180deg,transparent,#000 28px,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(180deg,transparent,#000 28px,#000 calc(100% - 40px),transparent)}
}
@media (min-width:768px){
  .gs-hero--standard.gs-hero--plate:not(.gs-hero--center){--gs-hero-share:.5;--gs-hero-floor:0px;--gs-hero-min:min(clamp(360px,18vw + 120px,460px),max(300px,100vh - var(--gs-header-h) - 240px))}
  /* the cast zone ends at the container edge up to 1440 px and travels with the plate beyond it (12 % of the plate's width
     before the screen edge, which is the container edge at 1440 px): a lead keeps its place in the scene on wide screens */
  .gs-hero--standard.gs-hero--plate:not(.gs-hero--center)>.gs-hero__stage{--gs-world-h:100%;--gs-plate-w:58%;--gs-ze-out:min(var(--gs-cl),calc(var(--gs-plate-w) * .12));--gs-zs-out:min(var(--gs-cl),calc(var(--gs-plate-w) * .12))}
  .gs-hero--standard.gs-hero--plate:not(.gs-hero--center) .gs-stage>.gs-world{left:auto;right:0;top:0;width:var(--gs-plate-w);height:auto;-webkit-mask-image:linear-gradient(90deg,transparent,rgba(0,0,0,.35) 12%,#000 34%),linear-gradient(0deg,transparent,#000 48px);mask-image:linear-gradient(90deg,transparent,rgba(0,0,0,.35) 12%,#000 34%),linear-gradient(0deg,transparent,#000 48px);-webkit-mask-composite:source-in;mask-composite:intersect}
  .gs-hero--side-start.gs-hero--plate .gs-stage>.gs-world{right:auto;left:0;-webkit-mask-image:linear-gradient(270deg,transparent,rgba(0,0,0,.35) 12%,#000 34%),linear-gradient(0deg,transparent,#000 48px);mask-image:linear-gradient(270deg,transparent,rgba(0,0,0,.35) 12%,#000 34%),linear-gradient(0deg,transparent,#000 48px)}
  /* compact: a rich vignette, tables still start high */
  .gs-hero--compact.gs-hero--plate{--gs-hero-share:.5;--gs-hero-min:clamp(150px,12vw,180px)}
  /* the cast stands IN the vignette: x runs across the vignette box, which sits at the screen edge, not across the container
     zone (between 1440 and 1920 px the two move against each other and a lead would slide over the scene's subject) */
  .gs-hero--compact.gs-hero--plate>.gs-hero__stage{--gs-world-h:100%;--gs-plate-w:min(48%,720px);--gs-ze-in:calc(100% - var(--gs-plate-w));--gs-ze-out:0px;--gs-zs-in:calc(100% - var(--gs-plate-w));--gs-zs-out:0px}
  .gs-hero--compact.gs-hero--plate .gs-stage>.gs-world{left:auto;right:0;top:0;width:var(--gs-plate-w);height:auto;-webkit-mask-image:linear-gradient(90deg,transparent,rgba(0,0,0,.4) 14%,#000 36%),linear-gradient(0deg,transparent,#000 24px);mask-image:linear-gradient(90deg,transparent,rgba(0,0,0,.4) 14%,#000 36%),linear-gradient(0deg,transparent,#000 24px);-webkit-mask-composite:source-in;mask-composite:intersect}
  .gs-hero--compact.gs-hero--plate .gs-stage>.gs-world img{object-fit:cover;object-position:var(--gs-world-x,50%) var(--gs-world-y,50%)}
  /* full: the plate covers the hero (the page's sheet adds its own veil under the text if it needs one) */
  .gs-hero--full.gs-hero--plate{--gs-hero-floor:0px}
  .gs-hero--full.gs-hero--plate>.gs-hero__stage{--gs-world-h:100%}
  .gs-hero--full.gs-hero--plate .gs-stage>.gs-world{top:0;height:auto}
  /* text on the left over a full plate: a veil under the text column (above the plate, below the cast) */
  .gs-hero--full.gs-hero--plate:not(.gs-hero--center)>.gs-hero__stage::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(90deg,rgba(5,10,26,.8),rgba(5,10,26,.62) calc(var(--gs-ze-in) - 12%),rgba(5,10,26,0) calc(var(--gs-ze-in) + 8%))}
  .gs-hero--full.gs-hero--plate.gs-hero--side-start:not(.gs-hero--center)>.gs-hero__stage::after{transform:scaleX(-1)}
}
@media (min-width:1024px){.gs-hero--compact.gs-hero--plate>.gs-hero__stage{--gs-cast-k:1}}
/* a plate in a centred state hero: the scene box above the text, every edge melting into the sky */
.gs-hero--standard.gs-hero--center.gs-hero--plate .gs-stage>.gs-world{-webkit-mask-image:linear-gradient(90deg,transparent,#000 14%,#000 86%,transparent),linear-gradient(180deg,transparent,#000 14%,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(90deg,transparent,#000 14%,#000 86%,transparent),linear-gradient(180deg,transparent,#000 14%,#000 calc(100% - 44px),transparent);-webkit-mask-composite:source-in;mask-composite:intersect}

/* --- the painted band ($gsHero['scene'] or the shell's $gsSceneMap; API.md addendum P), as before art direction v2: .gs-scene
   (aria-hidden) holds the plate (its own sky and moon; phone crop under 640px), the scrim, the cut-outs (figure behind the
   foreground strip, bust and peek in front). The title column keeps --gs-safe of the container from 1024px (85% from 640px, all
   of it on phones); a cut-out's box ends 24px before that column and shrinks (object-fit:contain) when the room is short: it
   never covers text or controls. Heights: compact 144/114/97, normal at least 200/230 and clamp(280px..400px) on desktop.
   New in the sky world: the band has no fill of its own and the plate and scrim fade out at the bottom (mask), so the band
   melts into the page instead of ending in the old page colour --- */
.gs-hero--scene{--gs-safe:var(--gs-safe-in,.62);--gs-cl:max(var(--gs-gutter),(100% - var(--gs-container)) / 2);--gs-cw:min(var(--gs-container),100% - 2 * var(--gs-gutter));display:flex;flex-direction:column;justify-content:flex-end;overflow:visible;min-height:200px;padding:56px 0 calc(var(--gs-fg-h,0px) * .8 + 18px);background:none}
.gs-hero--cuts{--gs-safe:.62;--gs-cl:max(var(--gs-gutter),(100% - var(--gs-container)) / 2);--gs-cw:min(var(--gs-container),100% - 2 * var(--gs-gutter))}
.gs-hero--scene .gs-hero__inner{text-shadow:0 1px 2px rgba(2,6,20,.75)}
.gs-hero--scene .gs-hero__inner>*{max-width:none}
/* the old band's type rhythm, so restored pages keep their measured heights */
.gs-hero--scene .gs-breadcrumb{margin-bottom:8px}
.gs-hero--scene .gs-hero__eyebrow{margin-bottom:.2em}
.gs-hero--scene .gs-hero__title{line-height:1.12;text-shadow:0 2px 18px rgba(2,6,20,.6)}
.gs-hero--scene:not(.gs-hero--compact) .gs-hero__intro{margin:.4em 0 0;max-width:min(var(--gs-hero-col),33.5em);font-size:var(--gs-fs-md);line-height:1.5;text-shadow:inherit}
.gs-hero--scene .gs-hero__actions{margin-top:var(--gs-s-4)}
.gs-hero--scene.gs-hero--compact .gs-breadcrumb{margin-bottom:4px}
@media (min-width:880px){
  .gs-hero--scene .gs-breadcrumb{margin-bottom:var(--gs-s-4)}
  .gs-hero--scene .gs-hero__eyebrow{margin-bottom:.45em}
  .gs-hero--scene:not(.gs-hero--compact) .gs-hero__intro{margin-top:.55em;font-size:var(--gs-fs-lg);line-height:1.6}
  .gs-hero--scene .gs-hero__actions{margin-top:var(--gs-s-5)}
  .gs-hero--scene.gs-hero--compact .gs-breadcrumb{margin-bottom:4px}
  .gs-hero--scene.gs-hero--compact .gs-hero__eyebrow{margin-bottom:.1em}
}
/* the plate brings its own moon: the phone hero needs no free corner for the sky's */
@media (max-width:767.98px){.gs-hero.gs-hero--scene>.gs-hero__inner>:first-child{padding-right:0}}
.gs-scene{position:absolute;inset:0;z-index:-1;pointer-events:none}
.gs-scene__plate{position:absolute;inset:0;z-index:0;overflow:hidden}
.gs-scene__plate,.gs-scene__scrim{-webkit-mask-image:linear-gradient(0deg,rgba(0,0,0,0),#000 var(--gs-scene-fade,40px));mask-image:linear-gradient(0deg,rgba(0,0,0,0),#000 var(--gs-scene-fade,40px))}
.gs-hero--compact .gs-scene{--gs-scene-fade:22px}
.gs-scene__plate img{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:cover;object-position:var(--gs-scene-x,50%) var(--gs-scene-y,50%)}
.gs-hero--compact .gs-scene__plate img{object-position:var(--gs-scene-cx,50%) var(--gs-scene-cy,70%)}
.gs-scene__scrim{position:absolute;inset:0;z-index:1;background:radial-gradient(78% 72% at 100% 0,rgba(5,10,26,.24),rgba(5,10,26,.8) 72%),linear-gradient(0deg,var(--gs-bg),rgba(8,17,42,0) 30%)}
.gs-scene__fg{position:absolute;left:0;right:0;bottom:0;z-index:3;height:var(--gs-fg-h,0px)}
.gs-scene__fg img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;object-position:50% 100%}
.gs-hero--compact .gs-scene__fg{height:calc(var(--gs-fg-h,0px) * .5)}
.gs-scene__cut{right:var(--gs-cl);bottom:0;z-index:4;height:min(var(--gs-cut-h),100% - 12px);aspect-ratio:var(--gs-cut-ar,1);max-width:calc(100% - 2 * var(--gs-cl) - var(--gs-cw) * var(--gs-safe) - 24px)}
.gs-scene__cut img{object-position:100% 100%;filter:drop-shadow(0 8px 18px rgba(2,6,20,.5))}
.gs-scene__cut.gs-cut--figure{z-index:2;bottom:calc(-1 * var(--gs-cut-over,0px));height:min(var(--gs-cut-h),100% - 20px + var(--gs-cut-over,0px))}
.gs-hero--text-end .gs-scene__cut{right:auto;left:var(--gs-cl)}
.gs-hero--text-end .gs-scene__cut img{object-position:0 100%}
.gs-hero--scene.gs-hero--compact{min-height:97px;padding:14px 0 calc(var(--gs-fg-h,0px) * .5 + 12px)}
.gs-hero--scene.gs-hero--compact .gs-scene__scrim{background:linear-gradient(90deg,rgba(5,10,26,.84),rgba(5,10,26,.74)),linear-gradient(0deg,var(--gs-bg),rgba(8,17,42,0) 40%)}
.gs-hero--scene.gs-hero--wide{--gs-safe:max(var(--gs-safe-in,.62),.8)}
@media (min-width:640px){
  .gs-hero--scene{min-height:230px;padding-top:40px}
  .gs-hero--scene .gs-hero__inner>*{max-width:85%}
  .gs-scene__scrim{background:linear-gradient(90deg,rgba(5,10,26,calc(var(--gs-scrim,.85) * .96)) 0,rgba(5,10,26,calc(var(--gs-scrim,.85) * .92)) 74%,rgba(5,10,26,calc(var(--gs-scrim,.85) * .4)) 100%),linear-gradient(0deg,var(--gs-bg),rgba(8,17,42,0) 30%)}
  .gs-scene__cut{height:min(var(--gs-cut-h),90px,100% - 12px);max-width:calc(100% - 2 * var(--gs-cl) - var(--gs-cw) * .85 - 8px)}
  .gs-hero--compact .gs-scene__cut{height:min(var(--gs-cut-h),80px,100% - 10px)}
  .gs-hero--scene.gs-hero--compact{min-height:114px}
}
@media (min-width:1024px){
  /* the band never takes more than the first screen can spare: at least 300px of it stay for the page (1366x650: 278px) */
  .gs-hero--scene{justify-content:center;min-height:min(clamp(280px,12vw + 140px,400px),max(200px,100vh - var(--gs-header-h) - 300px));padding:28px 0 calc(var(--gs-fg-h,0px) * .8 + 26px)}
  .gs-hero--scene .gs-hero__inner>*{max-width:min(var(--gs-hero-col),calc(100% * var(--gs-safe)))}
  /* the intro too (its own rule above outranks the line before): a long intro ends with the scene's calm side, never on the art */
  .gs-hero--scene:not(.gs-hero--compact) .gs-hero__intro{max-width:min(var(--gs-hero-col),calc(100% * var(--gs-safe)))}
  .gs-hero--text-end .gs-hero__inner>*{margin-left:auto}
  .gs-scene__scrim{--gs-text-end:calc(var(--gs-cl) + var(--gs-cw) * var(--gs-safe));background:linear-gradient(180deg,rgba(5,10,26,.45),rgba(5,10,26,0) 22%),linear-gradient(0deg,var(--gs-bg),rgba(8,17,42,0) 25%),linear-gradient(var(--gs-scrim-dir,90deg),rgba(5,10,26,var(--gs-scrim,.85)) 0,rgba(5,10,26,calc(var(--gs-scrim,.85) * .65)) calc(var(--gs-text-end) - 5%),rgba(5,10,26,0) calc(var(--gs-text-end) + 10%))}
  .gs-hero--text-end .gs-scene__scrim{--gs-scrim-dir:270deg}
  .gs-scene__cut,.gs-hero--compact .gs-scene__cut{height:min(var(--gs-cut-h),100% - 12px);max-width:calc(100% - 2 * var(--gs-cl) - var(--gs-cw) * var(--gs-safe) - 24px)}
  .gs-scene__cut.gs-cut--figure{height:min(var(--gs-cut-h),100% - 20px + var(--gs-cut-over,0px))}
  .gs-hero--scene.gs-hero--compact{justify-content:center;min-height:144px;padding:14px 0 calc(var(--gs-fg-h,0px) * .5 + 14px)}
  .gs-hero--scene.gs-hero--compact .gs-scene__scrim{background:linear-gradient(180deg,rgba(5,10,26,.4),rgba(5,10,26,0) 40%),linear-gradient(0deg,var(--gs-bg),rgba(8,17,42,0) 30%),linear-gradient(var(--gs-scrim-dir,90deg),rgba(5,10,26,var(--gs-scrim,.85)) 0,rgba(5,10,26,calc(var(--gs-scrim,.85) * .7)) calc(var(--gs-text-end) - 5%),rgba(5,10,26,0) calc(var(--gs-text-end) + 12%))}
}
@media (max-width:639.98px){.gs-scene__plate img,.gs-hero--compact .gs-scene__plate img{object-position:var(--gs-scene-px,50%) var(--gs-scene-py,50%)}}
/* short phones (mobile-fold and smaller): less art above the breadcrumb, so a page's first action stays on the first screen */
@media (max-width:639.98px) and (max-height:700px){.gs-hero--scene{min-height:180px;padding-top:32px}}
/* a first screen with a painted plate brings its own sky and moon: the global sky hides its moon there, at the widths where
   the plate is shown. Body classes (header.php 3d, the standalone shell): gs-own-sky = every width, gs-own-sky-wide = from
   768 px, gs-own-sky-desk = from 1024 px, gs-sky-moon = never (the page keeps the sky's moon; it wins over everything).
   The :has() rules cover a hero that a view sets up after the header was printed, by the same widths: the painted band, an
   auth scene, a plate stage of its own and a plate hero show their plate everywhere (standard and full heroes in the phone
   stage, compact heroes dimly behind the title); a plate hero without a phone stage ('phone' => 'none') only from its split */
.gs-own-sky :is(.gs-sky__moon,.gs-sky__halo){display:none}
@media (min-width:768px){.gs-own-sky-wide :is(.gs-sky__moon,.gs-sky__halo){display:none}}
@media (min-width:1024px){.gs-own-sky-desk :is(.gs-sky__moon,.gs-sky__halo){display:none}}
body:not(.gs-sky-moon):has(.gs-hero--scene,.gs-auth--scene,.gs-hero--plate:not(.gs-hero--phone-none),.gs-stage--plate:not(.gs-hero__stage)) :is(.gs-sky__moon,.gs-sky__halo){display:none}
@media (min-width:768px){body:not(.gs-sky-moon):has(.gs-hero--plate.gs-hero--phone-none:not(.gs-hero--split-1024),.gs-hero--compact.gs-hero--plate.gs-hero--phone-none) :is(.gs-sky__moon,.gs-sky__halo){display:none}}
@media (min-width:1024px){body:not(.gs-sky-moon):has(.gs-hero--plate.gs-hero--phone-none) :is(.gs-sky__moon,.gs-sky__halo){display:none}}

/* cut-outs of the painted scenes (gsSceneCutPicture(): the auth card peek, page heads of their own): shown inside their
   gs-cut--from-N / gs-cut--to-N range only (the <picture> fetches nothing outside it) */
.gs-cut{position:absolute;display:none;pointer-events:none}
.gs-cut img{display:block;width:100%;height:100%;max-width:none;object-fit:contain}
.gs-cut--from-0{display:block}
@media (min-width:640px){.gs-cut--from-640{display:block}}
@media (min-width:768px){.gs-cut--from-768{display:block}}
@media (min-width:820px){.gs-cut--from-820{display:block}}
@media (min-width:880px){.gs-cut--from-880{display:block}}
@media (min-width:1024px){.gs-cut--from-1024{display:block}}
@media (min-width:1120px){.gs-cut--from-1120{display:block}}
@media (min-width:1280px){.gs-cut--from-1280{display:block}}
@media (min-width:1440px){.gs-cut--from-1440{display:block}}
@media (min-width:1600px){.gs-cut--from-1600{display:block}}
@media (min-width:640px){.gs-cut--to-640{display:none}}
@media (min-width:768px){.gs-cut--to-768{display:none}}
@media (min-width:820px){.gs-cut--to-820{display:none}}
@media (min-width:880px){.gs-cut--to-880{display:none}}
@media (min-width:1024px){.gs-cut--to-1024{display:none}}
@media (min-width:1120px){.gs-cut--to-1120{display:none}}
@media (min-width:1280px){.gs-cut--to-1280{display:none}}
@media (min-width:1440px){.gs-cut--to-1440{display:none}}
@media (min-width:1600px){.gs-cut--to-1600{display:none}}

/* content */
.gs-content{padding-top:var(--gs-s-6);padding-bottom:var(--gs-s-10)}
.gs-content--no-hero{padding-top:var(--gs-s-8)}
.gs-content>:first-child{margin-top:0}

/* footer */
.gs-footer{position:relative;color:var(--gs-text-2);font-size:var(--gs-fs-sm);background:var(--gs-night-950)}
.gs-footer__body{position:relative;z-index:2;padding:var(--gs-s-6) 0 var(--gs-s-6)}
.gs-footer__top{display:grid;gap:var(--gs-s-7)}
@media (min-width:1024px){.gs-footer__top{grid-template-columns:minmax(0,1.1fr) minmax(0,3fr)}}
.gs-footer__brand .gs-brand{height:auto;width:fit-content}
.gs-footer__brand .gs-brand__logo{height:96px}
.gs-footer__about{margin:var(--gs-s-3) 0 var(--gs-s-4);max-width:25.5em;color:var(--gs-text-2)}
.gs-footer__cols{display:grid;gap:var(--gs-s-6) var(--gs-s-5);grid-template-columns:repeat(2,minmax(0,1fr))}
@media (min-width:640px){.gs-footer__cols{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (min-width:1024px){.gs-footer__cols{grid-template-columns:repeat(5,minmax(0,1fr))}}
.gs-footer__title{margin:0 0 var(--gs-s-3);font:800 var(--gs-fs-sm)/1.3 var(--gs-font-display);letter-spacing:.04em;color:var(--gs-text)}
.gs-footer__list{list-style:none;margin:0;padding:0}
.gs-footer__list li{margin:0}
.gs-footer__list a{display:inline-flex;align-items:center;gap:6px;min-height:34px;color:var(--gs-text-2);text-decoration:none}
.gs-footer__list a:hover{color:#fff;text-decoration:underline}
.gs-footer__list .gs-icon{width:13px;height:13px;color:var(--gs-text-muted)}
.gs-footer__note{display:flex;align-items:flex-start;gap:8px;margin:var(--gs-s-6) 0 0;color:var(--gs-text-muted);font-size:var(--gs-fs-xs)}
.gs-footer__note .gs-icon{flex:none;width:14px;height:14px;margin-top:2px}
.gs-footer__note a,.gs-footer__legal a{color:var(--gs-text-2)}
.gs-socials{display:flex;flex-wrap:wrap;gap:var(--gs-s-2);margin:0;padding:0;list-style:none}
.gs-socials li{margin:0}
.gs-totop,.gs-socials a{--gs-cut:7px;gap:8px;min-height:44px;padding:0 16px;color:var(--gs-text);font:700 var(--gs-fs-sm)/1 var(--gs-font-display)}
.gs-socials a{padding-left:12px;transition:transform var(--gs-dur-2) var(--gs-ease-bounce)}
.gs-socials .gs-icon{color:var(--gs-azure-300)}
.gs-socials a:hover{transform:translateY(-2px)}
.gs-totop:hover,.gs-socials a:hover{color:#fff}
.gs-totop:hover::before,.gs-socials a:hover::before{background:rgba(79,134,255,.24)}
.gs-footer__legal{margin-top:var(--gs-s-7);padding-top:var(--gs-s-5);border-top:1px solid var(--gs-line);display:grid;gap:var(--gs-s-3);color:var(--gs-text-muted);font-size:var(--gs-fs-xs);line-height:1.6}
.gs-footer--slim .gs-footer__legal{margin-top:0;padding-top:0;border-top:0}
.gs-footer__bottom{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--gs-s-3)}
.gs-footer__links{display:flex;flex-wrap:wrap;gap:0 var(--gs-s-5);margin:0;padding:0;list-style:none}
.gs-footer__links li{margin:0}
.gs-footer__links a{display:inline-flex;align-items:center;min-height:32px}
.gs-totop .gs-icon{transition:transform var(--gs-dur-2) var(--gs-ease-bounce)}
.gs-totop:hover .gs-icon{transform:translateY(-2px)}

/* === COMPONENTS === */
/* --- buttons: ::before = edge, ::after = fill. Gem and gold: ::before = fill, ::after = glow (hover, focus) --- */
.gs-btn{--gs-btn-h:44px;--gs-cut:9px;--gs-btn-edge:var(--gs-line-strong);--gs-btn-fill:var(--gs-night-700);justify-content:center;gap:8px;min-height:var(--gs-btn-h);padding:0 22px;border:0;border-radius:var(--gs-r-1);background:none;box-shadow:none;clip-path:none;color:var(--gs-text);font:700 1rem/1.15 var(--gs-font-display);text-align:center;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;transition:transform var(--gs-dur-2) var(--gs-ease),color var(--gs-dur-1)}
.gs-btn::before,.gs-btn::after{content:"";position:absolute;pointer-events:none;transition:opacity var(--gs-dur-2) var(--gs-ease)}
.gs-btn::before{inset:0;z-index:-2;background:var(--gs-btn-edge);clip-path:var(--gs-facet)}
.gs-btn::after{inset:1px;z-index:-1;background:var(--gs-btn-fill);clip-path:var(--gs-facet-in)}
.gs-btn:hover{color:#fff;transform:translateY(-1px);--gs-btn-edge:rgba(122,166,255,.55);--gs-btn-fill:var(--gs-night-600);background:none}
.gs-btn:active{transform:translateY(1px)}
.gs-btn:focus-visible{outline:3px solid var(--gs-focus);outline-offset:3px}
.gs-btn .gs-icon{width:1.15em;height:1.15em}
.gs-btn--primary,.gs-btn--gold{--gs-btn-gem:var(--gs-gem);--gs-btn-glow:rgba(79,134,255,.95);color:#fff;text-shadow:0 1px 1px rgba(5,10,26,.3)}
.gs-btn--gold{--gs-btn-gem:var(--gs-gold);--gs-btn-glow:rgba(255,196,77,.85);color:var(--gs-text-on-gold);text-shadow:0 1px 0 rgba(255,255,255,.35)}
.gs-btn--primary::before,.gs-btn--gold::before{z-index:-1;background:var(--gs-btn-gem)}
.gs-btn--primary::after,.gs-btn--gold::after{inset:0 -1px -6px;z-index:-2;clip-path:none;background:var(--gs-btn-glow);filter:blur(12px);opacity:0}
.gs-btn--primary:hover,.gs-btn--gold:hover{color:#fff;transform:translateY(-2px)}
.gs-btn--gold:hover{color:var(--gs-text-on-gold)}
.gs-btn--primary:hover::before,.gs-btn--gold:hover::before{background:linear-gradient(180deg,rgba(255,255,255,.44),rgba(255,255,255,0) 27%),var(--gs-btn-gem)}
.gs-btn--primary:hover::after,.gs-btn--gold:hover::after,.gs-btn--primary:focus-visible::after,.gs-btn--gold:focus-visible::after{opacity:1}
.gs-btn--primary:active,.gs-btn--gold:active{transform:translateY(1px)}
.gs-btn--primary:active::before,.gs-btn--gold:active::before{filter:brightness(.92)}
.gs-btn--primary:active::after,.gs-btn--gold:active::after{opacity:.35}
.gs-btn--ghost{--gs-btn-fill:var(--gs-bg);color:var(--gs-text)}
.gs-btn--ghost:hover{--gs-btn-fill:#101f45}
.gs-btn--outline{--gs-btn-edge:rgba(122,166,255,.6);--gs-btn-fill:var(--gs-bg);color:var(--gs-sapphire-300)}
.gs-btn--outline:hover{--gs-btn-edge:var(--gs-azure-300);--gs-btn-fill:#0f2050;color:#fff}
.gs-btn--gold-outline{--gs-btn-edge:rgba(255,209,102,.72);--gs-btn-fill:var(--gs-bg);color:var(--gs-gold-400)}
.gs-btn--gold-outline:hover{--gs-btn-edge:var(--gs-gold-400);--gs-btn-fill:#1d1a20;color:#ffe49a}
.gs-btn--subtle{--gs-btn-edge:transparent;--gs-btn-fill:rgba(140,175,255,.09);color:var(--gs-text-2)}
.gs-btn--subtle:hover{--gs-btn-edge:transparent;--gs-btn-fill:rgba(140,175,255,.17)}
.gs-btn--danger{--gs-btn-edge:rgba(255,107,129,.5);--gs-btn-fill:#2a1a3a;color:#ffc2cb}
.gs-btn--danger:hover{--gs-btn-edge:rgba(255,107,129,.8);--gs-btn-fill:#3a1f45;color:#fff}
.gs-btn--link{min-height:0;padding:0;color:var(--gs-link);font-weight:700;text-decoration:underline;text-underline-offset:.2em}
.gs-btn--link::before,.gs-btn--link::after{display:none}
.gs-btn--link:hover{color:var(--gs-link-hover);transform:none}
.gs-btn--sm{--gs-btn-h:36px;--gs-cut:7px;padding:0 15px;font-size:var(--gs-fs-sm)}
.gs-btn--lg{--gs-btn-h:54px;--gs-cut:12px;padding:0 30px;font-size:var(--gs-fs-lg)}
.gs-btn--block{display:flex;width:100%}
.gs-btn--icon{width:var(--gs-btn-h);padding:0}
.gs-btn--icon .gs-icon{width:20px;height:20px}
.gs-btn:disabled,.gs-btn.is-disabled,.gs-btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;transform:none;filter:saturate(.5);pointer-events:none}
.gs-btn.is-loading{color:transparent!important;text-shadow:none;pointer-events:none;cursor:progress}
.gs-btn.is-loading .gs-icon{opacity:0}
.gs-btn.is-loading::before{border:1px solid transparent;background:linear-gradient(var(--gs-btn-fill),var(--gs-btn-fill)) padding-box,var(--gs-btn-edge) border-box}
.gs-btn--primary.is-loading::before,.gs-btn--gold.is-loading::before{background:var(--gs-btn-gem)}
.gs-btn.is-loading::after{inset:auto;left:50%;top:50%;z-index:1;width:15px;height:15px;margin:-7.5px 0 0 -7.5px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-left-color:#fff;background:none;clip-path:none;filter:none;opacity:1;animation:gs-gem-spin .8s linear infinite}
.gs-btn--gold.is-loading::after{border-color:rgba(29,20,4,.3);border-top-color:var(--gs-text-on-gold);border-left-color:var(--gs-text-on-gold)}
@keyframes gs-gem-spin{from{transform:rotate(45deg)}to{transform:rotate(405deg)}}
.gs-btn-group{display:inline-flex;flex-wrap:wrap;gap:var(--gs-s-2)}

/* --- panels / cards --- */
:where(.gs-panel){margin:0 0 var(--gs-s-5)}
.gs-panel{position:relative;padding:var(--gs-panel-pad,clamp(18px,2.4vw,28px));border-radius:var(--gs-r-3);background:linear-gradient(180deg,rgba(122,166,255,.055),rgba(122,166,255,0) 140px),var(--gs-surface);border:1px solid var(--gs-edge);box-shadow:var(--gs-shadow-1)}
.gs-panel::before{content:"";position:absolute;left:14%;right:14%;top:-1px;height:1px;background:var(--gs-moonline);pointer-events:none}
.gs-panel>:last-child{margin-bottom:0}
.gs-panel__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--gs-s-3);margin:0 0 var(--gs-s-4)}
.gs-panel__title{display:flex;align-items:center;gap:12px;margin:0;font-family:var(--gs-font-serif);font-size:var(--gs-fs-xl);font-weight:800}
.gs-panel__sub{margin:.25em 0 0;color:var(--gs-text-muted);font-size:var(--gs-fs-sm)}
.gs-panel__foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--gs-s-3);margin-top:var(--gs-s-5);padding-top:var(--gs-s-4);border-top:1px solid var(--gs-line)}
.gs-panel--flush{--gs-panel-pad:0;overflow:hidden}
.gs-panel--flush>.gs-panel__head{padding:var(--gs-s-5) var(--gs-s-5) 0}
.gs-panel--flush>.gs-panel__foot{margin:0;padding:var(--gs-s-4) var(--gs-s-5)}
.gs-panel--flush>.gs-table-wrap{border:0;border-radius:0;margin:0;box-shadow:none}
:is(.gs-panel,.gs-frame,.gs-card,.gs-dialog) :is(.gs-table-wrap,.gs-filterbar,.gs-kv){box-shadow:none}
.gs-panel--raised{background:linear-gradient(180deg,rgba(122,166,255,.07),rgba(122,166,255,0) 140px),var(--gs-surface-2);box-shadow:var(--gs-shadow-2)}
.gs-panel--inset{background:rgba(5,10,26,.45);box-shadow:none}
.gs-panel--inset::before{display:none}
.gs-panel--facet{border-top-right-radius:0}
.gs-panel--facet::after{content:"";position:absolute;top:-1px;right:-1px;width:28px;height:28px;background:linear-gradient(225deg,var(--gs-facet-bg,var(--gs-bg)) calc(50% - .5px),var(--gs-line-strong) calc(50% - .5px),var(--gs-line-strong) calc(50% + .5px),transparent calc(50% + .5px));pointer-events:none}
/* the occasional faceted corner: one cut at the top right, drawn on the panel's ow */
.gs-panel--reward{border-color:rgba(255,209,102,.32)}
.gs-panel--reward::before{background:linear-gradient(90deg,transparent,rgba(255,209,102,.65),transparent)}
.gs-card{position:relative;display:flex;flex-direction:column;gap:var(--gs-s-2);padding:var(--gs-s-5);border-radius:var(--gs-r-3);background:linear-gradient(180deg,rgba(122,166,255,.05),rgba(122,166,255,0) 120px),var(--gs-surface);border:1px solid var(--gs-edge);box-shadow:var(--gs-shadow-1);color:var(--gs-text);text-decoration:none;transition:transform var(--gs-dur-2) var(--gs-ease),border-color var(--gs-dur-2),background-color var(--gs-dur-2)}
.gs-card>*{margin:0}
.gs-card__title{font:800 var(--gs-fs-lg)/1.25 var(--gs-font-serif);color:var(--gs-text)}
.gs-card__text{color:var(--gs-text-2);font-size:var(--gs-fs-sm)}
.gs-card__media{margin:calc(-1 * var(--gs-s-5)) calc(-1 * var(--gs-s-5)) var(--gs-s-2);border-radius:var(--gs-r-3) var(--gs-r-3) 0 0;overflow:hidden;aspect-ratio:16/9;background:var(--gs-night-800)}
.gs-card__media img{width:100%;height:100%;object-fit:cover}
a.gs-card:hover,.gs-card--link:hover{transform:translateY(-3px);border-color:rgba(122,166,255,.45);background:linear-gradient(180deg,rgba(122,166,255,.08),rgba(122,166,255,0) 120px),var(--gs-night-800);color:var(--gs-text)}
.gs-card__arrow{margin-top:auto;color:var(--gs-sapphire-300);transition:transform var(--gs-dur-2) var(--gs-ease)}
a.gs-card:hover .gs-card__arrow{transform:translateX(3px)}
/* illustrated pictures (gsArt(): creatures, items, illustrated icons; zero specificity, any class wins). The card slot holds one
   before the title: the art stands on the card surface with its own soft shadow, never on a tile */
:where(.gs-art){display:inline-block;line-height:0;vertical-align:middle}
:where(.gs-art) img{display:block;max-width:100%;height:auto}
.gs-card__art{display:block;width:56px;height:56px;flex:none;filter:drop-shadow(0 6px 10px rgba(2,6,20,.45))}
.gs-card__art .gs-art,.gs-card__art img{width:100%;height:100%;object-fit:contain}
/* gs-band: a full-bleed calm backdrop for a section whose text sits directly on the page (not around card grids: cards already
   give the calm); it fades in and out (no edges) and stays light enough that the sky reads through */
.gs-band{position:relative;isolation:isolate;padding-block:var(--gs-section)}
.gs-band::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,rgba(8,17,42,0),rgba(8,17,42,.45) 16%,rgba(8,17,42,.45) 84%,rgba(8,17,42,0))}
.gs-band--deep::before{background:linear-gradient(180deg,rgba(5,10,26,0),rgba(5,10,26,.6) 14%,rgba(5,10,26,.6) 86%,rgba(5,10,26,0))}

/* foreground strip of a scene in your own markup (gsSceneStrip()): along the bottom of the nearest positioned box (in a frame:
   gs-frame--fg, kit section frame) */
.gs-fg{position:absolute;left:0;right:0;bottom:0;z-index:1;height:var(--gs-fg-h,96px);pointer-events:none}
.gs-fg img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;object-position:50% 100%}
@media (max-width:639.98px){.gs-fg{height:var(--gs-fg-hp,var(--gs-fg-h,64px))}}

/* --- section header --- */
.gs-section-head{margin:0 0 var(--gs-s-6);max-width:70ch}
.gs-section-head__title{margin:0;font-size:var(--gs-fs-2xl)}
.gs-section-head__lead{margin:.5em 0 0;color:var(--gs-text-2);font-size:var(--gs-fs-md)}
.gs-section-head--center{margin-inline:auto;text-align:center}
.gs-section-head--center .gs-eyebrow{justify-content:center}
.gs-section-head--row{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--gs-s-4);max-width:none}

/* --- tables --- */
.gs-table-wrap,.gs-table-frame{position:relative;margin:0 0 var(--gs-s-5)}
.gs-table-wrap{align-self:start;border:1px solid var(--gs-edge);border-radius:var(--gs-r-3);background:var(--gs-surface);box-shadow:var(--gs-shadow-1);overflow:hidden}
.gs-table-wrap:has(>table){overflow-x:auto}
.gs-table-wrap--wide{max-width:var(--gs-container-wide)}
.gs-table-scroll{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}
.gs-table-scroll:focus-visible{outline-offset:-3px}
.gs-table-frame>.gs-table-scroll{margin:0}
.gs-table-wrap::before,.gs-table-wrap::after,.gs-table-frame::before,.gs-table-frame::after{content:"";position:absolute;top:0;bottom:0;z-index:3;width:28px;pointer-events:none;opacity:0;transition:opacity var(--gs-dur-2)}
.gs-table-wrap::before,.gs-table-frame::before{left:0;background:linear-gradient(90deg,rgba(3,7,18,.8),transparent)}
.gs-table-wrap::after,.gs-table-frame::after{right:0;background:linear-gradient(270deg,rgba(3,7,18,.8),transparent)}
.is-scroll-start::before,.is-scroll-end::after{opacity:1}
.gs-table-wrap--tall .gs-table-scroll{max-height:min(75vh,900px);overflow:auto}
.gs-table-wrap--tall .gs-table thead th{position:sticky;top:0;z-index:2}
/* gs-table-wrap--sticky: from 960px the header row sticks under the site header while the table fits its frame (is-overflowing: gs.js) */
@media (min-width:960px){
  .gs-table-wrap--sticky:not(.is-overflowing){overflow:clip}
  .gs-panel--flush:has(.gs-table-wrap--sticky:not(.is-overflowing)){overflow:clip}
  .gs-table-wrap--sticky:not(.is-overflowing)>.gs-table-scroll{overflow:visible}
  .gs-table-wrap--sticky:not(.is-overflowing) .gs-table thead th{position:sticky;top:var(--gs-header-h);z-index:2}
  .gs-table-wrap--sticky tbody :focus-visible{scroll-margin-top:calc(var(--gs-header-h) + 64px)}
}
.gs-table{width:100%;margin:0;border-collapse:separate;border-spacing:0;font-size:var(--gs-fs-sm);font-variant-numeric:tabular-nums;line-height:1.45}
.gs-table caption{caption-side:top;padding:var(--gs-s-4) var(--gs-s-4) var(--gs-s-2);text-align:left;font:800 var(--gs-fs-lg) var(--gs-font-display);color:var(--gs-text)}
.gs-table th{padding:12px 16px;background:var(--gs-night-800);border-bottom:1px solid var(--gs-line-strong);color:var(--gs-text-2);font:700 var(--gs-fs-xs)/1.3 var(--gs-font-display);letter-spacing:.05em;text-transform:uppercase;text-align:left;white-space:nowrap;vertical-align:bottom}
.gs-table td{padding:12px 16px;border-bottom:1px solid var(--gs-line-soft);vertical-align:middle;color:var(--gs-text)}
/* row tints: the row sets --gs-row-tint, its cells paint it; gs-sticky-cell = an opaque base under the tint (sticky column) */
.gs-table tbody tr:nth-child(even){--gs-row-tint:rgba(122,166,255,.03)}
.gs-table tbody tr:hover{--gs-row-tint:rgba(79,134,255,.085)}
.gs-table tbody tr:nth-child(even)>*,.gs-table tbody tr:hover>*{background:var(--gs-row-tint)}
.gs-table tbody tr:last-child>*{border-bottom:0}
.gs-table tbody th{background:transparent;border-bottom:1px solid var(--gs-line-soft);font:700 var(--gs-fs-sm)/1.45 var(--gs-font-body);letter-spacing:0;text-transform:none;color:var(--gs-text);white-space:normal;vertical-align:middle}
.gs-table .is-num,.gs-table .gs-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.gs-table .is-center{text-align:center}
.gs-table .is-muted{color:var(--gs-text-muted)}
.gs-table .is-shrink{width:1%;white-space:nowrap}
/* sort controls of the header row only (:where keeps the old specificity): row header links stay links */
.gs-table :where(thead) th a,.gs-table :where(thead) th button{display:inline-flex;align-items:center;gap:4px;min-height:0;padding:0;border:0;background:none;box-shadow:none;clip-path:none;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;text-decoration:none}
.gs-table :where(thead) th a:hover,.gs-table :where(thead) th button:hover{color:#fff;background:none}
.gs-table th[aria-sort]{color:var(--gs-azure-300)}
.gs-table--dense th{padding:9px 12px}.gs-table--dense td{padding:7px 12px}
.gs-table--plain tbody tr:nth-child(even){--gs-row-tint:#0000}
.gs-table--plain tbody tr:nth-child(even)>*{background:none}
.gs-table tbody tr.is-top-1{--gs-row-tint:rgba(255,209,102,.14)}
.gs-table tbody tr.is-top-2{--gs-row-tint:rgba(200,215,240,.09)}
.gs-table tbody tr.is-top-3{--gs-row-tint:rgba(225,150,95,.11)}
.gs-table tbody tr.is-top-1>:first-child{box-shadow:inset 3px 0 0 var(--gs-gold-400)}
.gs-table tbody tr.is-top-2>:first-child{box-shadow:inset 3px 0 0 #d5e0f2}
.gs-table tbody tr.is-top-3>:first-child{box-shadow:inset 3px 0 0 #e2a06f}
.gs-table tbody tr.is-self{--gs-row-tint:rgba(92,184,255,.13)}
.gs-table tbody tr.is-top-1>*,.gs-table tbody tr.is-top-2>*,.gs-table tbody tr.is-top-3>*,.gs-table tbody tr.is-self>*{background:var(--gs-row-tint)}
.gs-table tbody tr.is-top-1:hover,.gs-table tbody tr.is-top-2:hover,.gs-table tbody tr.is-top-3:hover,.gs-table tbody tr.is-self:hover{--gs-row-tint:rgba(79,134,255,.16)}
.gs-table tbody tr.is-top-1:hover>*,.gs-table tbody tr.is-top-2:hover>*,.gs-table tbody tr.is-top-3:hover>*,.gs-table tbody tr.is-self:hover>*{background:var(--gs-row-tint)}
.gs-table tbody tr:nth-child(n)>.gs-sticky-cell{position:sticky;left:0;z-index:1;background:linear-gradient(var(--gs-row-tint,#0000),var(--gs-row-tint,#0000)) var(--gs-surface)}
.gs-table thead .gs-sticky-cell{position:sticky;left:0;z-index:3}
.gs-table__empty>td{padding:var(--gs-s-8) var(--gs-s-4)!important;text-align:center;background:none!important}
.gs-cell-main{display:flex;align-items:center;gap:10px;min-width:0}
.gs-cell-main img{flex:none}
.gs-cell-sub{display:block;color:var(--gs-text-muted);font-size:var(--gs-fs-xs)}
@media (max-width:639.98px){
  .gs-table--cards thead{display:none}
  .gs-table--cards,.gs-table--cards tbody,.gs-table--cards tr,.gs-table--cards td,.gs-table--cards tbody th{display:block;width:100%}
  .gs-table--cards tr{margin:0 0 10px;padding:6px 0;border:1px solid var(--gs-line);border-radius:var(--gs-r-3);background:var(--gs-night-850)}
  .gs-table--cards tbody tr>*{background:none!important;box-shadow:none}
  .gs-table--cards td,.gs-table--cards tbody th{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:7px 14px;border:0;text-align:right}
  .gs-table--cards td::before,.gs-table--cards tbody th::before{content:attr(data-label);flex:none;color:var(--gs-text-muted);font:700 var(--gs-fs-xs) var(--gs-font-display);letter-spacing:.05em;text-transform:uppercase;text-align:left}
  .gs-table--cards td[data-label=""]::before{display:none}
  .gs-table-wrap:has(.gs-table--cards){border:0;background:none;box-shadow:none;overflow:visible}
  .gs-table-wrap:has(.gs-table--cards) .gs-table-scroll{overflow:visible}
}

/* rank medals (1 to 3): faceted gems; plain ranks */
.gs-medal{--m1:#fff3c4;--m2:#ffd166;--m3:#c98a14;display:inline-grid;place-items:center;width:32px;height:32px;flex:none;background:linear-gradient(135deg,var(--m1) 0%,var(--m2) 48%,var(--m3) 52%,var(--m2) 100%);color:#2a1a00;font:800 .875rem/1 var(--gs-font-display);clip-path:var(--gs-oct)}
.gs-medal--2{--m1:#ffffff;--m2:#d5e0f2;--m3:#8a9bb8;color:#1b2740}
.gs-medal--3{--m1:#ffe2c6;--m2:#e2a06f;--m3:#be7b44;color:#2b1405}
.gs-rank{display:inline-grid;place-items:center;min-width:32px;height:28px;padding:0 6px;background:rgba(140,175,255,.1);color:var(--gs-text-2);font:800 .8125rem/1 var(--gs-font-display);clip-path:var(--gs-hex)}
/* guild cell: emblem (24px pixel art) + name; gs-board__* = the ranking helpers' names for it */
.gs-emblem{flex:none;width:24px;height:24px;image-rendering:pixelated;border-radius:2px}
.gs-emblem--none,.gs-board__noemblem{display:inline-block;flex:none;width:24px;height:24px;background:linear-gradient(135deg,rgba(140,175,255,.16),rgba(140,175,255,.05));clip-path:var(--gs-oct)}
.gs-guildcell,.gs-board__guild{display:inline-flex;align-items:center;gap:9px;min-width:0;max-width:100%;vertical-align:middle}
.gs-guildcell__name,.gs-board__guildname{min-width:0;overflow-wrap:anywhere}
.gs-guildcell--lg{gap:14px}
.gs-guildcell--lg>.gs-emblem{width:48px;height:48px}

/* --- forms --- */
.gs-form{display:flex;flex-direction:column;gap:var(--gs-s-5)}
.gs-form>*{margin:0}
.gs-form__row{display:grid;gap:var(--gs-s-5)}
@media (min-width:640px){.gs-form__row{grid-template-columns:repeat(2,minmax(0,1fr))}}
.gs-form__actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gs-s-3);margin-top:var(--gs-s-2)}
.gs-field{display:flex;flex-direction:column;gap:6px;min-width:0;margin:0}
.gs-field>*{margin:0}
.gs-label{display:flex;align-items:baseline;justify-content:space-between;gap:8px;font:700 var(--gs-fs-sm)/1.3 var(--gs-font-display);color:var(--gs-text)}
.gs-label__req{color:var(--gs-gold-400);margin-right:auto}
.gs-label__opt,.gs-label__aside{font:500 var(--gs-fs-xs) var(--gs-font-body);color:var(--gs-text-muted)}
.gs-label__aside a{font-weight:700}
.gs-input,.gs-select,.gs-textarea{display:block;width:100%;min-height:46px;padding:10px 14px;border:1px solid var(--gs-line-strong);border-radius:var(--gs-r-2);background-color:var(--gs-input-bg);color:var(--gs-text);font:400 max(16px,1rem)/1.4 var(--gs-font-body);transition:border-color var(--gs-dur-1),box-shadow var(--gs-dur-1),background-color var(--gs-dur-1)}
.gs-input:hover,.gs-select:hover,.gs-textarea:hover{border-color:rgba(122,166,255,.5)}
.gs-input:focus,.gs-select:focus,.gs-textarea:focus{outline:none;border-color:var(--gs-sapphire-400);box-shadow:var(--gs-ring);background-color:rgba(5,10,26,.75)}
.gs-input:disabled,.gs-select:disabled,.gs-textarea:disabled{opacity:.55;cursor:not-allowed}
.gs-input[readonly]{background-color:rgba(140,175,255,.05);border-style:dashed}
.gs-select{appearance:none;-webkit-appearance:none;padding-right:42px;background-image:var(--gs-chev);background-repeat:no-repeat;background-position:right 14px center;background-size:16px}
.gs-textarea{min-height:130px;resize:vertical}
.gs-input--sm,.gs-select--sm{min-height:38px;padding-block:6px;font-size:var(--gs-fs-sm)}
.gs-textarea--sm{min-height:84px;padding-block:8px;font-size:var(--gs-fs-sm)}
.gs-help{color:var(--gs-text-muted);font-size:var(--gs-fs-xs);line-height:1.5}
.gs-field__error,.gs-field__ok{display:none;align-items:flex-start;gap:6px;font-size:var(--gs-fs-xs);font-weight:700;line-height:1.45}
.gs-field__error{color:#ff9aa9}
.gs-field__ok{color:var(--gs-success)}
.gs-field__error::before,.gs-field__ok::before{content:"";flex:none;width:14px;height:14px;margin-top:1px;background:currentColor;mask:var(--gs-mask) center/contain no-repeat}
.gs-field__error::before{--gs-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.7 0h6.6L16 4.7v6.6L11.3 16H4.7L0 11.3V4.7zm2.4 3.5l.25 6h1.3l.25-6zM8 10.8a1.1 1.1 0 1 0 0 2.2 1.1 1.1 0 0 0 0-2.2z'/%3E%3C/svg%3E")}
.gs-field__ok::before{--gs-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.7 0h6.6L16 4.7v6.6L11.3 16H4.7L0 11.3V4.7zm6.9 5.2L7.1 11 4.4 8.3l1.1-1.1 1.6 1.6 3.4-4.6z'/%3E%3C/svg%3E")}
.gs-field--error .gs-field__error,.gs-field__error.is-visible{display:flex}
.gs-field--success .gs-field__ok{display:flex}
.gs-field--error .gs-input,.gs-field--error .gs-select,.gs-field--error .gs-textarea,.gs-input[aria-invalid=true],.gs-select[aria-invalid=true],.gs-textarea[aria-invalid=true]{border-color:var(--gs-danger);background-color:rgba(255,107,129,.06)}
.gs-field--error .gs-input:focus,.gs-input[aria-invalid=true]:focus{box-shadow:0 0 0 3px rgba(255,107,129,.32)}
.gs-field--success .gs-input,.gs-field--success .gs-select{border-color:rgba(58,210,159,.7)}
.gs-check{display:inline-flex;align-items:flex-start;gap:10px;min-height:24px;color:var(--gs-text);font-size:var(--gs-fs-sm);line-height:1.45;cursor:pointer}
.gs-check input{flex:none;width:20px;height:20px;margin:0}
.gs-input-icon{position:relative;display:block}
.gs-input-icon>.gs-icon{position:absolute;left:14px;top:50%;width:18px;height:18px;margin-top:-9px;color:var(--gs-text-muted);pointer-events:none}
.gs-input-icon>.gs-input{padding-left:42px}
.gs-input-group{display:flex;align-items:stretch;gap:8px}
.gs-input-group>.gs-input{min-width:0}
.gs-input-group>.gs-btn{--gs-btn-h:46px;flex:none}
.gs-input-group__addon{display:flex;align-items:center;padding:0 14px;border:1px solid var(--gs-line-strong);border-radius:var(--gs-r-2);background:rgba(140,175,255,.08);color:var(--gs-text-2);font-weight:700}

/* --- filter / search bar --- */
.gs-filterbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--gs-s-4);margin:0 0 var(--gs-s-5);padding:var(--gs-s-4) var(--gs-s-5);border-radius:var(--gs-r-3);background:var(--gs-surface);border:1px solid var(--gs-edge);box-shadow:var(--gs-shadow-1)}
.gs-filterbar__fields{flex:1 1 520px;display:grid;gap:var(--gs-s-3) var(--gs-s-4);grid-template-columns:repeat(auto-fit,minmax(min(170px,100%),1fr))}
.gs-filterbar__fields>*{margin:0}
.gs-filterbar .gs-label{font-size:var(--gs-fs-xs);letter-spacing:.04em;color:var(--gs-text-2)}
.gs-filterbar .gs-input,.gs-filterbar .gs-select{min-height:42px;padding-block:8px}
.gs-filterbar__actions{display:flex;flex-wrap:wrap;gap:var(--gs-s-2);margin-left:auto}
.gs-filterbar__actions .gs-btn{--gs-btn-h:42px}
/* <details class="gs-filterbar-fold"> folds a filter bar on phones; data-gs-fold-below="1024" on tablets too */
.gs-filterbar-fold>summary{display:flex;align-items:center;gap:8px;list-style:none;margin:0 0 var(--gs-s-3);font:700 var(--gs-fs-sm) var(--gs-font-display);color:var(--gs-text)}
.gs-filterbar-fold>summary::-webkit-details-marker{display:none}
@media (min-width:768px){.gs-filterbar-fold:where(:not([data-gs-fold-below="1024"]))>summary{display:none}}
@media (min-width:1024px){.gs-filterbar-fold>summary{display:none}}
.gs-search{position:relative;display:flex;align-items:center;flex:1 1 280px;min-width:0}
.gs-search>.gs-icon{position:absolute;left:16px;width:18px;height:18px;color:var(--gs-text-muted);pointer-events:none}
.gs-search>.gs-input{padding-left:46px;padding-right:112px}
.gs-search>.gs-btn{position:absolute;right:4px;--gs-btn-h:38px;--gs-cut:7px;padding:0 18px}
@media (max-width:639.98px){.gs-filterbar{padding:var(--gs-s-4)}.gs-filterbar__actions{width:100%}.gs-filterbar__actions .gs-btn{flex:1}}

/* --- pagination --- */
.gs-pagination{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px;margin:var(--gs-s-6) 0}
.gs-pagination__list{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0;padding:0}
.gs-pagination__list li{margin:0}
.gs-pagination__link{--gs-cut:8px;justify-content:center;gap:6px;min-width:42px;height:42px;padding:0 12px;color:var(--gs-text-2);font:700 var(--gs-fs-sm)/1 var(--gs-font-display);font-variant-numeric:tabular-nums;transition:transform var(--gs-dur-1) var(--gs-ease),color var(--gs-dur-1)}
.gs-pagination__link::before{background:var(--gs-line)}
a.gs-pagination__link:hover{color:#fff;transform:translateY(-1px)}
a.gs-pagination__link:hover::after{background:var(--gs-night-700)}
.gs-pagination__link:focus-visible{border-radius:var(--gs-r-1)}
.gs-pagination__link[aria-current=page]{color:#fff}
.gs-pagination__link[aria-current=page]::before{background:var(--gs-gem)}
.gs-pagination__link[aria-current=page]::after{display:none}
.gs-pagination__link[aria-disabled=true]{opacity:.45;pointer-events:none}
.gs-pagination__gap{display:inline-grid;place-items:center;min-width:24px;height:42px;color:var(--gs-text-muted)}
.gs-pagination__info{width:100%;text-align:center;color:var(--gs-text-muted);font-size:var(--gs-fs-xs)}

/* --- FluxCP library markup (Flux_Paginator, sortableColumn, infoText, dateField) --- */
.pages a{--gs-cut:7px}
.pages a:focus-visible{outline:none;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 5px var(--gs-sapphire-600)}
.pages{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin:var(--gs-s-6) 0 var(--gs-s-3);padding:0;border:0;font-size:0;color:transparent;text-align:center}
.pages a{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;padding:0 12px;background:var(--gs-surface);box-shadow:inset 0 0 0 1px var(--gs-line);clip-path:var(--gs-facet);color:var(--gs-text-2);font:700 var(--gs-fs-sm)/1 var(--gs-font-display);font-variant-numeric:tabular-nums;text-decoration:none;transition:background-color var(--gs-dur-1),color var(--gs-dur-1)}
.pages a[href]:hover{color:#fff;background:var(--gs-night-700)}
.pages .current-page{background:var(--gs-gem);box-shadow:none;color:#fff}
.jump-to-page{display:none}

.not-applicable{color:var(--gs-text-muted);font-style:italic}
.info-text{margin:0 0 var(--gs-s-3);color:var(--gs-text-muted);font-size:var(--gs-fs-xs)}
.info-text-total,.info-text-results{color:var(--gs-text);font-weight:700}
.sortable{color:inherit;text-decoration:none}
.sortable:hover{color:#fff}
.sortable .gs-icon{width:.9em;height:.9em;margin-left:.25em;vertical-align:-.1em;color:var(--gs-azure-300)}
.date-field,.date-time-field{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px;color:var(--gs-text-muted)}
.date-field select,.date-time-field select{min-height:38px;padding:4px 30px 4px 10px;background-position:right 8px center;font-size:var(--gs-fs-sm)}

/* --- tabs --- */
.gs-tabs{display:flex;gap:4px;max-width:100%;width:fit-content;margin:0 0 var(--gs-s-5);padding:4px;border-radius:var(--gs-r-2);background:rgba(5,10,26,.5);border:1px solid var(--gs-line);overflow-x:auto;scrollbar-width:none}
.gs-tabs::-webkit-scrollbar{display:none}
[data-gs-scrollfade].is-fade-end{mask-image:linear-gradient(90deg,#000 calc(100% - 40px),transparent)}
[data-gs-scrollfade].is-fade-start{mask-image:linear-gradient(90deg,transparent,#000 40px)}
[data-gs-scrollfade].is-fade-start.is-fade-end{mask-image:linear-gradient(90deg,transparent,#000 40px,#000 calc(100% - 40px),transparent)}
.gs-tab{--gs-cut:7px;gap:7px;flex:none;height:38px;padding:0 16px;border:0;background:none;box-shadow:none;clip-path:none;color:var(--gs-text-2);font:700 var(--gs-fs-sm)/1 var(--gs-font-display);white-space:nowrap;cursor:pointer;min-height:0;transition:color var(--gs-dur-1)}
.gs-tab:hover{color:#fff;background:none}
.gs-tab:hover::before{opacity:1}
.gs-tab:focus-visible{outline-offset:-1px;border-radius:var(--gs-r-1)}
.gs-tab[aria-current=page],.gs-tab[aria-current=true],.gs-tab[aria-selected=true],.gs-tab.is-active{color:#fff}
.gs-tab[aria-current=page]::before,.gs-tab[aria-current=true]::before,.gs-tab[aria-selected=true]::before,.gs-tab.is-active::before{background:var(--gs-gem);opacity:1}
.gs-tab .gs-badge{height:20px;padding:0 8px;font-size:11px}
.gs-tab:is([aria-current=page],[aria-current=true],[aria-selected=true],.is-active) .gs-badge{background:rgba(5,10,26,.42);color:#fff}
.gs-tabs--sm .gs-tab{height:32px;padding:0 12px;font-size:var(--gs-fs-xs)}
.gs-tabs--block{width:100%}
.gs-tabs--block .gs-tab{flex:1 0 auto;justify-content:center}
.gs-tabpanel:focus-visible{outline-offset:4px;border-radius:var(--gs-r-2)}
.gs-subnav{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gs-s-3);margin:0 0 var(--gs-s-6)}
.gs-subnav .gs-tabs{margin:0}
.gs-subnav__label{font:700 var(--gs-fs-xs)/1 var(--gs-font-display);letter-spacing:.06em;color:var(--gs-text-muted)}
.gs-pagemenu{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:calc(-1 * var(--gs-s-3)) 0 var(--gs-s-6)}

/* --- generic dropdown (disclosure) --- */
.gs-dropdown{position:relative;display:inline-block}
.gs-dropdown>.gs-menu{top:calc(100% + 8px);left:0}
.gs-dropdown>.gs-menu--end{left:auto;right:0}
.gs-dropdown .gs-dropdown__chev{transition:transform var(--gs-dur-2) var(--gs-ease)}
.gs-dropdown.is-open .gs-dropdown__chev{transform:rotate(180deg)}

/* --- alerts + toasts --- */
.gs-alert{--gs-a:var(--gs-info);position:relative;display:flex;align-items:flex-start;gap:12px;margin:0 0 var(--gs-s-5);padding:14px 16px 14px 14px;border-radius:var(--gs-r-2);background:color-mix(in srgb,var(--gs-a) 10%,var(--gs-night-850));border:1px solid color-mix(in srgb,var(--gs-a) 38%,transparent);color:var(--gs-text);font-size:var(--gs-fs-sm);line-height:1.55;overflow:hidden}
.gs-alert::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--gs-a)}
.gs-alert__icon{flex:none;width:22px;height:22px;margin:1px 0 0 2px;color:var(--gs-a)}
.gs-alert__body{flex:1;min-width:0;margin:0}
.gs-alert__body>*{margin:0}
.gs-alert__body>*+*{margin-top:.3em}
.gs-alert__title{font:800 var(--gs-fs-md)/1.3 var(--gs-font-display);color:var(--gs-a)}
.gs-alert a{color:var(--gs-text);font-weight:700}
.gs-alert__actions{display:flex;flex-wrap:wrap;gap:4px 18px;margin-top:.5em}
.gs-alert__actions a{display:inline-flex;align-items:center;gap:6px}
.gs-alert--info{--gs-a:var(--gs-azure-400)}.gs-alert--success{--gs-a:var(--gs-success)}.gs-alert--warning{--gs-a:var(--gs-warning)}.gs-alert--danger{--gs-a:var(--gs-danger)}
.gs-alert--reward{--gs-a:var(--gs-gold-400)}
.gs-alert__close{flex:none;display:grid;place-items:center;width:34px;height:34px;min-height:0;margin:-6px -8px -6px 0;padding:0;border:0;border-radius:var(--gs-r-1);background:transparent;box-shadow:none;clip-path:none;color:var(--gs-text-2);cursor:pointer}
.gs-alert__close:hover{background:rgba(140,175,255,.14);color:#fff}
.gs-alert__close:focus-visible{outline:3px solid var(--gs-focus);outline-offset:-2px;box-shadow:none}
html:not(.gs-js) .gs-alert__close{display:none}
.gs-alert__timer{position:absolute;left:0;right:0;bottom:0;height:2px;pointer-events:none}
.gs-alert__timer::after{content:"";position:absolute;inset:0;background:var(--gs-a);opacity:.7;transform-origin:left center;animation:gs-timer var(--gs-toast-ms,8000ms) linear forwards}
.gs-alert:hover .gs-alert__timer::after,.gs-alert:focus-within .gs-alert__timer::after{animation-play-state:paused}
[data-gs-toast=stay] .gs-alert__timer{display:none}
html:not(.gs-js) .gs-alert__timer{display:none}
.gs-toast{box-shadow:var(--gs-shadow-2);animation:gs-drop var(--gs-dur-3) var(--gs-ease)}
.gs-toast.is-leaving{opacity:0;transform:translateY(-6px);transition:opacity var(--gs-dur-2) var(--gs-ease),transform var(--gs-dur-2) var(--gs-ease)}
.gs-toast-stack{position:fixed;z-index:300;right:16px;bottom:16px;left:16px;display:flex;flex-direction:column;align-items:flex-end;gap:10px;pointer-events:none}
.gs-toast-stack .gs-alert{pointer-events:auto;width:min(420px,100%);margin:0;align-items:center}
@keyframes gs-timer{from{transform:scaleX(1)}to{transform:scaleX(0)}}
@keyframes gs-timer-still{from{opacity:.7}to{opacity:.69}}
@keyframes gs-drop{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

/* --- badges / chips / status --- */
.gs-badge{--gs-b:var(--gs-sapphire-300);--gs-cut:5px;display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 10px;background:color-mix(in srgb,var(--gs-b) 17%,transparent);color:var(--gs-b);font:700 .75rem/1 var(--gs-font-body);letter-spacing:.02em;white-space:nowrap;vertical-align:middle;clip-path:var(--gs-facet)}
.gs-badge .gs-icon{width:12px;height:12px}
.gs-badge--azure{--gs-b:var(--gs-azure-300)}.gs-badge--gold{--gs-b:var(--gs-gold-400)}.gs-badge--amethyst{--gs-b:#b9a4ff}.gs-badge--success{--gs-b:var(--gs-success)}.gs-badge--warning{--gs-b:var(--gs-warning)}.gs-badge--danger{--gs-b:#ff8fa0}.gs-badge--neutral{--gs-b:var(--gs-text-2)}
.gs-badge--solid{background:var(--gs-b);color:var(--gs-night-950)}
.gs-badge--dot::before{content:"";width:6px;height:6px;transform:rotate(45deg);background:currentColor}
.gs-badge--job{--gs-b:var(--gs-text-2);background:rgba(140,175,255,.1);color:var(--gs-text);font-weight:600}
.gs-badge--lg{height:30px;padding:0 13px;font-size:.8125rem;--gs-cut:7px}
.gs-chip{--gs-cut:7px;gap:6px;min-height:36px;padding:0 14px;border:0;background:none;box-shadow:none;clip-path:none;color:var(--gs-text-2);font:700 var(--gs-fs-sm)/1 var(--gs-font-display);cursor:pointer;transition:color var(--gs-dur-1)}
.gs-chip:hover{color:#fff;background:none}
.gs-chip:hover::after{background:var(--gs-night-700)}
.gs-chip:focus-visible{border-radius:var(--gs-r-1)}
.gs-chip[aria-pressed=true],.gs-chip.is-selected,.gs-chip[aria-current=page]{color:#fff}
.gs-chip[aria-pressed=true]::before,.gs-chip.is-selected::before,.gs-chip[aria-current=page]::before{background:var(--gs-sapphire-400)}
.gs-chip[aria-pressed=true]::after,.gs-chip.is-selected::after,.gs-chip[aria-current=page]::after{background:#15306e}
.gs-chip--danger{color:var(--gs-danger)}
.gs-chip--danger::before{background:color-mix(in srgb,var(--gs-danger) 60%,var(--gs-night-850))}
.gs-chip--danger:hover{color:#fff}
.gs-chip--danger:hover::after{background:color-mix(in srgb,var(--gs-danger) 26%,var(--gs-night-850))}
.gs-chip__x{width:14px;height:14px;opacity:.7}
.gs-status{display:inline-flex;align-items:center;gap:8px;font-size:var(--gs-fs-sm);font-weight:700;white-space:nowrap}
.gs-status::before{content:"";width:8px;height:8px;transform:rotate(45deg);background:var(--gs-text-muted)}
.gs-status--online{color:var(--gs-success)}.gs-status--online::before{background:var(--gs-success)}
.gs-status--offline{color:var(--gs-text-muted)}
.gs-status--busy{color:var(--gs-warning)}.gs-status--busy::before{background:var(--gs-warning)}
.gs-status--danger{color:#ff8fa0}.gs-status--danger::before{background:var(--gs-danger)}

/* --- empty state --- */
.gs-empty{display:flex;flex-direction:column;align-items:center;gap:var(--gs-s-2);max-width:480px;margin:0 auto;padding:var(--gs-s-8) var(--gs-s-4);text-align:center}
.gs-empty>*{margin:0}
.gs-empty__art{display:block;width:160px;height:128px;margin-bottom:var(--gs-s-2);animation:gs-float 6s ease-in-out infinite}
picture.gs-empty__art{margin-inline:auto}
.gs-empty__art>img{display:block;width:100%;height:100%;max-width:none;object-fit:contain}
.gs-empty__title{font:800 var(--gs-fs-xl)/1.25 var(--gs-font-serif);color:var(--gs-text)}
.gs-empty__text{color:var(--gs-text-2);font-size:var(--gs-fs-sm)}
.gs-empty__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--gs-s-2);margin-top:var(--gs-s-3)}
.gs-empty--compact{padding:var(--gs-s-6) var(--gs-s-4)}
.gs-empty--compact .gs-empty__art{width:110px;height:88px}

/* --- loading: gem spinner --- */
.gs-spinner{display:inline-block;position:relative;width:22px;height:22px;flex:none;vertical-align:middle}
.gs-spinner::before,.gs-spinner::after{content:"";position:absolute;inset:3px;transform:rotate(45deg)}
.gs-spinner::before{background:linear-gradient(135deg,var(--gs-azure-300) 50%,var(--gs-sapphire-600) 50%);animation:gs-gem 1.2s var(--gs-ease) infinite}
.gs-spinner::after{inset:8px;background:rgba(255,255,255,.8);animation:gs-gem-core 1.2s var(--gs-ease) infinite}
.gs-spinner--lg{width:40px;height:40px}
.gs-spinner--lg::before{inset:6px}.gs-spinner--lg::after{inset:15px}
.gs-loading{display:inline-flex;align-items:center;gap:10px;color:var(--gs-text-2);font-size:var(--gs-fs-sm)}
@keyframes gs-gem{0%{transform:rotate(45deg) scale(1)}50%{transform:rotate(225deg) scale(.8)}100%{transform:rotate(405deg) scale(1)}}
@keyframes gs-gem-core{0%,100%{opacity:.9;transform:rotate(45deg) scale(1)}50%{opacity:.3;transform:rotate(45deg) scale(.6)}}

/* --- breadcrumbs --- */
.gs-breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:0;padding:0;list-style:none;font-size:var(--gs-fs-xs);font-weight:700;color:var(--gs-text-muted)}
.gs-breadcrumb li{display:inline-flex;align-items:center;gap:8px;margin:0}
.gs-breadcrumb li+li::before{content:"";width:5px;height:5px;transform:rotate(45deg);background:var(--gs-sapphire-400);opacity:.8}
.gs-breadcrumb a{display:inline-flex;align-items:center;min-height:24px;color:var(--gs-azure-300);text-decoration:none}
.gs-breadcrumb a:hover{color:#fff;text-decoration:underline}
.gs-breadcrumb [aria-current=page]{color:var(--gs-text)}

/* --- stat ribbon --- */
.gs-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));margin:0 0 var(--gs-s-6);padding:var(--gs-s-2);border-radius:var(--gs-r-3);background:linear-gradient(180deg,rgba(122,166,255,.08),rgba(122,166,255,.02)),var(--gs-night-850);border:1px solid var(--gs-line);box-shadow:var(--gs-shadow-1)}
.gs-stat{position:relative;display:flex;flex-direction:column-reverse;align-items:center;justify-content:center;gap:4px;margin:0;padding:var(--gs-s-4) var(--gs-s-3);text-align:center}
.gs-stat+.gs-stat::before{content:"";position:absolute;left:-4px;top:50%;width:8px;height:8px;margin-top:-4px;transform:rotate(45deg);background:var(--gs-sapphire-400);box-shadow:0 0 0 3px var(--gs-night-850)}
.gs-stat__value{margin:0;font:800 var(--gs-fs-2xl)/1 var(--gs-font-display);color:#fff;white-space:nowrap}
.gs-stat__value small{font-size:.55em;color:var(--gs-text-2);margin-left:2px}
.gs-stat__label{margin:0;font:700 var(--gs-fs-xs)/1.3 var(--gs-font-body);letter-spacing:.05em;text-transform:uppercase;color:var(--gs-text-muted)}
.gs-stat--reward .gs-stat__value,.gs-stat--gold .gs-stat__value{color:var(--gs-gold-400)}
.gs-stat--azure .gs-stat__value{color:var(--gs-azure-300)}
@media (max-width:519.98px){.gs-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.gs-stat+.gs-stat::before{display:none}}

/* --- key/value list --- */
.gs-kv{display:grid;grid-template-columns:minmax(120px,auto) 1fr;margin:0;border:1px solid var(--gs-edge);border-radius:var(--gs-r-3);overflow:hidden;background:var(--gs-surface);box-shadow:var(--gs-shadow-1)}
.gs-kv>div{display:contents}
.gs-kv dt,.gs-kv dd{margin:0;padding:11px 16px;border-bottom:1px solid var(--gs-line-soft)}
.gs-kv dt{color:var(--gs-text-muted);font:700 var(--gs-fs-xs)/1.5 var(--gs-font-display);letter-spacing:.04em;background:rgba(140,175,255,.035);display:flex;align-items:center}
.gs-kv dd{color:var(--gs-text);font-size:var(--gs-fs-sm)}
.gs-kv>div:last-child>dt,.gs-kv>div:last-child>dd{border-bottom:0}
@media (max-width:519.98px){.gs-kv{grid-template-columns:1fr}.gs-kv dt{border-bottom:0;padding-bottom:2px;background:none}.gs-kv dd{padding-top:0}}

/* --- touch layouts (coarse pointer, or any screen under 768px): controls are at least 44px tall --- */
@media (pointer:coarse),(max-width:767.98px){
  .gs-btn--sm,.gs-input-group>.gs-btn,.gs-search>.gs-btn,.gs-filterbar__actions .gs-btn{--gs-btn-h:44px}
  .gs-chip,.gs-check,.gs-footer__list a,.gs-footer__links a,.gs-input--sm,.gs-select--sm,.gs-filterbar .gs-input,.gs-filterbar .gs-select{min-height:44px}
  .gs-check{align-items:center}
  .gs-filterbar-fold>summary{min-height:44px}
  .gs-input--sm,.gs-select--sm,.gs-textarea--sm{font-size:max(16px,1rem)}
  .gs-tab,.gs-tabs--sm .gs-tab,.gs-pagination__link,.pages a{min-width:44px;height:44px}
  .gs-pagination__gap{height:44px}
  .gs-alert__close{width:44px;height:44px}
  .gs-alert__actions{gap:0 18px}
  .gs-alert__actions a{min-height:44px}
  .gs-table :where(thead) th{height:44px;vertical-align:middle}
  .gs-table :where(thead th){position:relative}
  .gs-table :where(thead) th>:is(a,button):only-child::after{content:"";position:absolute;inset:0 0 -1px}
  .gs-breadcrumb a,.gs-footer__note a{position:relative}
  .gs-breadcrumb a::after,.gs-footer__note a::after{content:"";position:absolute;inset:-10px -4px}
  .gs-footer__note a::after{inset:-15px -4px}
  .gs-hero--compact .gs-breadcrumb a::after{inset:-8px -4px -12px}
}

/* --- motion --- */
.gs-float{animation:gs-float 6s ease-in-out infinite}
@keyframes gs-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.gs-js .gs-reveal:not(.is-in){opacity:0;transform:translateY(14px);animation:gs-reveal-failsafe 0s linear 2.5s forwards}
.gs-js .gs-reveal{transition:opacity 500ms var(--gs-ease),transform 500ms var(--gs-ease)}
@keyframes gs-reveal-failsafe{to{opacity:1;transform:none}}
@media (prefers-reduced-motion:no-preference){html.gs-smooth{scroll-behavior:smooth}}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0s!important;scroll-behavior:auto!important}
  .gs-menu,.gs-drawer,.gs-drawer__backdrop{transition:none!important}
  .gs-alert__timer::after{animation-name:gs-timer-still!important;animation-duration:var(--gs-toast-ms,8000ms)!important}
  .gs-js .gs-reveal:not(.is-in){opacity:1;transform:none}
  .gs-status-pill__dot::after,.gs-float,.gs-empty__art,.gs-stage>.gs-actor>.gs-art,.gs-spinner::before,.gs-spinner::after{animation:none!important}
  .gs-btn.is-loading::after{animation:none!important;transform:rotate(45deg)}
}
@media (forced-colors:active){
  .gs-btn,.gs-tab,.gs-pagination__link,.gs-chip,.gs-nav__link{border:1px solid ButtonText}
  .gs-btn::before,.gs-btn::after,.gs-tab::before,.gs-chip::before,.gs-chip::after,.gs-pagination__link::before,.gs-pagination__link::after{display:none}
  .gs-tab[aria-current=page],.gs-pagination__link[aria-current=page]{outline:2px solid Highlight}
}
@media print{.gs-header,.gs-footer,.gs-skip,.gs-subnav,.gs-stage{display:none!important}body{background:#fff;color:#000}}
