/* Godspeed Digital: section backgrounds, v1 (2026-10-08)

   Twelve backgrounds signed off by Adam on the background board, packaged for
   the website. Pair this file with godspeed-backgrounds.js and give a section
   the attribute, e.g.  <section data-gs-bg="night-sky-meteors">  The script
   adds the classes and draws the layers; this file holds the look.

   How it stacks: the section becomes its own stacking context (isolation).
   The script's layer box sits at z-index -2, the two grain layers at -1, so
   the section's own content paints on top without needing any z-index of its
   own. The section's ::before and ::after are used for the grain, so do not
   put this on an element that already uses them.

   Motion: everything is slow on purpose, pauses when the section is off
   screen (the script sets data-gs-paused), and stops entirely for anyone with
   reduced motion set. The mark shapes are embedded below as data URIs, so the
   kit works on any domain, and even opened from disk. */

/* First paint, before the script has drawn the layers (15 Oct speed pass:
   with the intro no longer covering the hero, a throttled phone showed the
   section's own blue for a second before the night sky arrived). Each section
   starts on its background's ground colour. */
[data-gs-bg]:not(.gs-bg) { --gs-void: #02020a; --gs-sovereign: #02066F; background-color: var(--gs-void); }   /* the colours .gs-bg defines, so the hero's gradient below resolves */
[data-gs-bg="sky"]:not(.gs-bg) { background-color: #0a2a8a; }
[data-gs-bg="deep-water"]:not(.gs-bg) { background-color: #021050; }
[data-gs-bg="sovereign"]:not(.gs-bg), [data-gs-bg="deck-grain"]:not(.gs-bg), [data-gs-bg="horizon"]:not(.gs-bg), [data-gs-bg="gallery-light"]:not(.gs-bg) { background-color: #02066F; }

.gs-bg {
  --gs-grain: .2;             /* grain strength, 0 to 1. Was .55; set to .2 on Adam's call once he saw it rendered, 2026-10-08 */
  --gs-sovereign: #02066F;    /* Sovereign Blue */
  --gs-void: #02020a;         /* Void Black */
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background-color: var(--gs-sovereign);
  /* the mark shapes, embedded once each */
  --gsb-bolt: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKcAAADoCAYAAACKGPRVAAAD2klEQVR42u3dwVLbQBBFUbX+/5+bLRsKhC3rTc+5yyRVccWHNxNs4DgkSZIkSVJW9cvv98U/L72t8wLMn35N+jjOK2ilCJyAKhonoIrGCagew1mAauXlBFTxOAFVNE5A9VGcBaimLCegiscJqKJxAqrbcRagmricgCoeJ6C6DWcBqsnLCajicQKqaJyA6q04C1DtspyAKh4noIrGCahexlmAasflBFTxOAFVNE5A9S+cBah2X05A4VwiQOGMPNoBhdOCCk5ANRYnoHACqnVxFqCynIDCCagm4SxAZTkBhRNQTcJZgMpyAgonoIITUG2OE9DNcRagspyAwgmoJuEsQGU5AYUTUMEJqHy34jF35r/825fltKCpj7/hBDT5cTecgHq8i+AsQD1Oy7n3E98+lQTo6o+r4Zx3tKc+ue2T8EoE0V4hUiKM9vKlEoH0jrBPLwfGP9HtjR9KBNPelaREOL07dDgzn3Bv4/sAzgIUTMs5AyiYcG776Z6Gc7+j/dUn32JazkigYMIZCRRMOCOBrvpS6DicBajFtJy+KhJO/QsomHB6N9OEe+fpO2oITglOTTna4RSc7p2ynIJT7p0TcTraZTkFpwSn9rp3nn44gOCU4NSUox1OWU73TllOwSn3zuk4He2ynIJTglPz752nn3MuyynBKTjl3rkJTvdOWU7BKUc7nLKc7p2ynBKcir93puF0tMtyCk4JTs27dybidO+U5RSccrTDKcvp3inLKTilyHsnnLKc7p2ynIJT7p2743S0W04JTglOrX/vXAGne6fllOCUox1OWU73TllOwSnBKf8pmoKzPBbLqb/BBBTO6PUuRzucCRjKEW85V/ygABTO6LUGFM7oa0S5d+6Ns8L/HgtqOaM/AACFM3qZy9EOZ/KVwYJuiLOOde6ygFrOaECAwjnyf//b3jtPMA/vZrKcPt0DqOVcAQigcEbDKPfO2ThXf+27rKjldJTCCaYFhdNibnDvPIfjKx9IljPxSS1L78jTwJ91nuDKa+uGw7EuQOEEFE4Bevd9GU5ALacAhRNQOAXo3fdOOAG1nAIUTkDhFKB33zvhBNRyClA4NeZLPuBU7L0TTke85RSgcCoRaMOpUQsKJ6BwClA4lQq04dSYBYUTUDgF6NWjHU6V5RSgcGoKUDj1aaANp5ZfUDgVCxROxQKFU08AbTi19ILCqVigcCoWKJx6CmjDqWUXFE7FAoVTTwJtOLXkgsKpWKBwKhYonHoaaMOp5RYUTsUChVN+3roAvXrvhFOxCwqnYoHCqVigcCoWKJyKBVr+vXQ8//06OZQkSZKk730BvyWZtKfF1i4AAAAASUVORK5CYII=");
  --gsb-ring: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhcAAAISCAYAAAB/FO37AAANvklEQVR42u3d0YHbOhIAwSbyz1kOwR/UiiCmKoNbAYMmSL8rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL9z+RPA0T5mEGBjA6eEg3kF4gIQD+YYYFOCkMCMAxsPhIQ/gZkHNhogJMxBwKYCMYG5CDYRCAnMSbBpQExgZgI2CggKzFCwMUBQYJ6CzQBiArMVbAAQFGDOgkUPggIzFyx0EBSYvWCBg6gAMxgsbAQFmMdgMYOoALMZCxiGBMUlpjCjwcJFVEzcD+LDrAYLFn58WF7+hpjbYJEiKqxzwYF1jcUJjx161rXgMMfBooRbB5t1LDSwD7AYQVQIDcx1LELY48CyZsUG9goWH9w+mKxTkYEZj4UHtw8ia1NsYNZjwYGoQGSY+WChISoQGmY/WGCICkQGzgAsLBwg1h4iw1mABQVuKhAazgOwmHBTgcjAuYBFhLAAoeF8wOIBUYHAcEaAhcNPh751hchwVmDBgKhAZGB/Y7HgFQjWI84NLBKEBYgMZwcWCAa39YPAwAzAwkBYYN3iHMGiQFSAwHCeYDEgLEBoYEZgIeD/EwTrG2cLFgDCAkSG8wU/PsICBAZmiB8dQ9bawPrHWcN9y5/AYDUIcMgh6rDR8BoEHHjOHXJzgbAAhxyizuZCWIC9gvMHPy7CAgSGcwg/Ko8OSGsARIaziHxzgbAAB52gwyZCWIBDD3PJD8m5w8/vDgLD2URei2DTwnN7xr4RdDhobD6/Nzj0nFHk5gJhAQ47xJy4wGYDr0kw81DhIzeZ3xkcfM4scnOBsACHHWJOXCAsQGAgMBAXNhLgOwxzEXFhA3maArcY5qM/gbhAWIDAQGDYBAgLwOHnLCM3F4YR4NAzNxEXfG+DGGQgMMxPxAXCAgQGAkNcICwA+1RgIC5sBEBgmKtY6DaA3xDsf8zH3FxgsAAOPnNWXPDiBW84gcBAYIgLhAVgLwsMcYEFDggM8xdxcfjCNohAYCAwxAUGEGB/CwxxgcUMCAwzGXHhdQggMBAY4sLiBRAYZrS44IFFa9CAwEBgiAuLFUBgIC7YMywMFxAYeCAUFwAIDIEhLnBrAQgMMxxxISyAgYFhNiAuhAUA5rm44PmF6MkEMCMEhrgAQGAIDMSFWwtAYCAwxIVFByAwzHpxYbEBCAwzX1zw0CIzIADzA3EBgP8OhgdLxIVbC8AtBgJDXFhUADgLxAUAub1AXPBMqRoCgNniTBAXFhGAwHA2IC5sfMCcAXGhTAEEhjNCXFg0ADgrxAWeJAAzB8SFEgUQGM4McWGR2OCAwHB2iAuLA0Bg4AwRFwAIDMTFrOK0oQGcJeLCYgDI7QXOFHEBgMBAXChMAIHhbBEXfnwbGBAYIC4AEBhuL8SFHx1AYDhrxAU2LADiQkkC4GHImSMu/MgAAgNxAYDA8GArLvy4NigAiAsAPBy5vRAXflQAgeEsEhfYlACwlCIAHpScSeLCjwggMBAXAMCMB9/lxwMgtxeIC5sQwGzzACwu/GgAkJsLAMjthQdhceHWAkBgIC4AEBi5vRAXfiQbDgDcXADgYcqDsbjwrQWAwEBcAABjH5CXHwWA3F4gLgAQGLm9EBcjfwybC4DcXACAByyGx4VvLQAERl6NiAsAIDcX6g6A3F4439xcAADiwq0FQG4vEBcAgIdocQFAbi8QF16JAJDbC3Gh0AEwG3NzoeIAEBjOPTcXAIC4ACC3F4iLXA0BgPPPzQUAub1AXLi1AABxAQC5vRj8kC0uAICRceGVCEBuLxAXAMDAh21xAUBuL5gWF16JAAgMxAUAMPWhW1wAkNsLJsWFVyIAIC4AILcX4iK3FgCQ7y7cXACQ2wvEBQAgLnLdAwDOSjcXAOTVCOICABAXAJDbi7wa2ToufG8BALm5AIDcXiAuAABxAQC09ecEyx8IgLwawc0FACAuACC3Fw24+V/+MACAmwsAcnuBuAAAxAUAgLgAIK9GEBc+5gSAY85SNxcA5PYCcaEgAUBcOIQByO2FuAAAcmsuLgAAcQEAeTUiLgAAxAUAub3g8LjwL0UAQFwAAPkXI+LCzQxAXo0gLgAAcQEAiAsAyKuRvJY/IS58jwAAubkAABAXAIC4AIB8dyEuAADEBQBwRlxM+pci/lUMQF6NiAsAAHEBALTBzbm4AADEBQDkuwtxAQCIC/IvRgBye4G4AADEBQAgLvKKAADYJC4u310A4Mw59+zxWgQA8FoEABAXAJBXI+ICAEBcAADiIl/tApBXI+ICAEBcAADiAgAQF+S7CwDEBQDko07EBQAgLgAAcQEAeTWCuMhHnQAgLgAAcQEAIC4AIK/ixQUA5KPO3Fzgo04AxAUAgLgAAMQFACAuACAfdSIu8lEnAIgLAEBcAACICwBAXOS7CwDyUefG/zvFBQAgLgAAcUFejQAgLgAAxAUAIC7IqxGA/IsRcQEAIC4AAHGRVyMAIC4AAHGRj2cAADcXAOChV1yQ7y4AEBcAAOICABAXAECv/55EXOS7CwAQFwCAuAAAxEX+TXFejQCAmwsAQFwAQP4rneKCvBoBQDCJCwBAXAAA4oK8GgFAXAAAiAsAQFzkn/3k1QgA4gIAyD9DFRe5vQDAjbq4AADEBQCAuMirEQA4Mi683wIAcUFuLwDIh6niAgAQFwCAuMh3F3k1AoC4AADyvYW4yO0FAOTmAgAQFwAA74sLH3Xm1QgAZ5ylbi4AAHFBbi8AEBcAgLggtxcA5HuLF8eFjzoBIDcXAADiIq9GAEBcAEBe0YsLP2puLwDM0XFnp5sLAEBc4PYCwA26uAAAD2hDYmj5QwEAbi7wagTAA664AAAPZzNCaPmD2SAA4OYCgQGAuAAAGnHDv/zhcnsBAG4uAABxQW4vAGjAzf7yBwQA3FyQ2wsAxAUA0IQbfXGR2wsAmBYXvrsAAHFBbi8AzMehD9viAgAYGRdejbi9AMiHnOICAMjNBbm9AIApceHVCAB5JSIuyO0FALm5AAByazEkLrwaye0FAOICABj0QL38scntBYA56OYCGwsgtxbiwh8dAHJzQW4vAPAALS4QGACIC69GAEBckNsLADPPg/NxceH2QmAAIC4AgJMfmMUFub0AQFx4NQJAbi3EhR8ltxcAZlxuLsDmA/CALC4QGACIC+UHQG4txAW5vQCA4+PC7YXAAHBmiQsA8LAkLpSgDQmAs8rNBQAgLhRhbi8AnFHiAoEBYH6NfvhdyhAAEBeofwAPveLCDykwAMwscSEwsFkBnEXiAgAQF4oxtxcAB8+pS1yAwAAQFuLCDywwABAXAkNgADhzxAUAeOhBXChJGxnAWSMuEBgAiAtFicAAcMaMv7kQGAIDMIOcLeICADy0igsLAbcXgNkjLsAmB/CwKi4sCIEB8My8cY6ICwsDAMQFniYAPJyKCwsEgQEcPmOcG+LCQhEYAIgLgSEwAJwV4gIADn9oERbiwsIxCAAQFwJDYAC4tRAXIDAAD52ICwtJYAAgLgSGwAB4YHY4C8QFhgSAsBAXFhYCA9hvXpj/4kJgGBgAiAuBgcAA3FqIC4GBwADMesQFAgMwF4SFuFC0CAzAfBcXFiACAzALxAUCw1ABMNPFhcWIwAA+Zrm4EBgIDMAMFxdYnAIDOHrPm93iAgQGgLjI7QUCA3BrIS6wWAGEBeJCYOD2AjCjxYXFi8AAfruvzWZxITAQGICZLC5gv8AQGeBhQViIC6WMWwxAWIgL/rewLW6BAXjAExdY5AIDsGcRFwIDwwowb8WFBY/AAL68T81ZcSEwEBiAsBAXCAwDDDBX8SM44LAf4OCZaA/n5gIbQuQBwkJcIDAMNkBYIC4EBgIDzE38KA43fwL7A8w9+zM3FzjURB5gryEuBAaGHrxvj5mPDjAcbvYL8JUZZw/m5gIHmtAD7CkHFzYh9g24scCQtBmxf0BYYDgiMuwhML/sr3xzgQMNoQfmHH48Bxv2E7xvZtlLhiEiA3sKhAV5LQJCD4QFnrJwsNlbcOZcsl8MQAQG9hgIC/JaxGGG2ANhgYMIB5v9BsICww6BgT2HmWMPGHTY7Nh7ICww4BAZ9h8ICww3BAb2IcICQw2Bgb0IogIDDZFhT8IOM8RaNsgwILAvwY0FhhgCw/4EtxUYXogM7FGEBQYXBgj2KmaCtYmBhciwX0FYYFghMLBvecv+twYxpBAZ9i+4rcBwQmBgH+O2AkMJwwf7GVEBFg0Cw74GYYEhhMjA/kZUYPggMrDP8cEmhg4IDPsdtxVg2CAysO8RFRgyiAzMAEQFBgsIDLMAUQEGCiIDM0FUgEGCyMB8QFRgeIDIMCfYaB/57TA0MBwxMxAVGBQgMswP9tkffhMMBxAZ5gmiAsMARAZmyz5r398ZAwBEhlnD7TXub4kND0IDs+cr69i8xgYHkYF5dHutmtHYzCA0GDynPmYzWMCIDMyxndaVeYxNCSIDzGGwqBEaYPaCBQ5CAzMXLHQQGWDGYuGD0ABzFWwCEBqYo2BTgNjA7AQbBBAamJdgs4DYwHwEmwfEBmYh2FCA0DD3AJsMRIcZB9h4IDowz8BmBMSGuQU2KfCS8LgOjxBzCWxiwC2ImQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/MY/xIESVjUp/64AAAAASUVORK5CYII=");
  --gsb-mark: url("data:image/png;base64,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");
}

/* Grain. ::before is a fine white speckle so the darkest areas still carry
   texture; ::after is an overlay noise that brightens the lights and deepens
   the darks, which is the deck's photographic grain. */
.gs-bg::before, .gs-bg::after { content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none; }
.gs-bg::before {
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .1 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  opacity: var(--gs-grain);
}
.gs-bg::after {
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.78' numOctaves='3' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/><feComponentTransfer><feFuncR type='linear' slope='2.2' intercept='-.6'/><feFuncG type='linear' slope='2.2' intercept='-.6'/><feFuncB type='linear' slope='2.2' intercept='-.6'/><feFuncA type='linear' slope='0' intercept='1'/></feComponentTransfer></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  background-size: 240px;
  mix-blend-mode: overlay;
  opacity: var(--gs-grain);
}
/* Optional film grain: add data-gs-filmgrain to the section and the noise
   jumps about ten times a second. Off by default. */
.gs-bg[data-gs-filmgrain]::after { animation: gsb-grain .9s steps(1) infinite; }
@keyframes gsb-grain {
  0% { background-position: 0 0; } 11% { background-position: -37px 21px; } 22% { background-position: 53px -64px; }
  33% { background-position: -88px -12px; } 44% { background-position: 19px 97px; } 55% { background-position: 71px 33px; }
  66% { background-position: -45px -79px; } 77% { background-position: 102px -28px; } 88% { background-position: -16px 58px; }
}

/* ------------------------------------------------------------- layer kit */
.gs-bg > .gsb-layers { position: absolute; inset: 0; z-index: -2; pointer-events: none; overflow: hidden; }
.gsb-layers > * { position: absolute; pointer-events: none; }
.gsb-layers > svg { inset: 0; width: 100%; height: 100%; }

/* A blurred mark shape. The blur sits on the wrapper and the mask on the
   child, because a browser masks after it filters: blur and mask on one
   element give a crisp edge. */
.gsb-shape { filter: blur(var(--bl, 28px)); opacity: var(--o, .5); transform: rotate(var(--r, 0deg)); }
.gsb-shape i { display: block; width: 100%; height: 100%; background: var(--c, #3F7BFF); }
.gsb-bolt { aspect-ratio: 167 / 232; }
.gsb-bolt i { -webkit-mask: var(--gsb-bolt) center / contain no-repeat; mask: var(--gsb-bolt) center / contain no-repeat; }
.gsb-ring { aspect-ratio: 535 / 530; }
.gsb-ring i { -webkit-mask: var(--gsb-ring) center / contain no-repeat; mask: var(--gsb-ring) center / contain no-repeat; }
.gsb-mark { aspect-ratio: 535 / 530; }
.gsb-mark i { -webkit-mask: var(--gsb-mark) center / contain no-repeat; mask: var(--gsb-mark) center / contain no-repeat; }

/* The coin turn: two faces back to back so the mark reads the right way round
   from both sides, vanishing edge-on like the token. */
.gsb-coin { position: relative; display: block; width: 100%; height: 100%; transform-style: preserve-3d; animation: gsb-coin 12s linear infinite; }
.gsb-coin i { position: absolute; inset: 0; backface-visibility: hidden; -webkit-backface-visibility: hidden; }
.gsb-coin i.gsb-back { transform: rotateY(180deg); }
@keyframes gsb-coin { from { transform: perspective(3000px) rotateY(0deg); } to { transform: perspective(3000px) rotateY(360deg); } }

/* Drift: a seamless 16:9 tile of stitched noise, two side by side, sliding
   left by exactly one tile and looping. The script sizes the tile to cover
   the section (--gsb-tw, --gsb-th). */
.gsb-drift { left: 0; top: 0; height: var(--gsb-th, 100%); width: calc(var(--gsb-tw, 100%) * 2); display: flex; will-change: transform; animation: gsb-cloud var(--dur, 160s) linear infinite; }
.gsb-drift svg { flex: none; display: block; width: var(--gsb-tw, 50%); height: var(--gsb-th, 100%); }
/* Baked layers (tools/backgrounds/bake.mjs): the same tiles as images. */
.gsb-drift .gsb-baked { flex: none; display: block; width: var(--gsb-tw, 50%); height: var(--gsb-th, 100%); max-width: none; }
.gsb-layers > .gsb-baked { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gsb-starfield .gsb-baked { display: block; width: 100%; height: 100%; max-width: none; }
/* The halo's mark comes already blurred and coloured, so no live blur or mask. */
.gsb-baked-shape { filter: none; }
.gsb-baked-shape .gsb-coin i { background: none; -webkit-mask: none; mask: none; }
.gsb-baked-shape .gsb-baked { position: absolute; left: -18%; top: -18.17%; width: 136%; height: 136.34%; max-width: none; }   /* the bake pads the mark by 18% for its blur */
@keyframes gsb-cloud { to { transform: translateX(calc(var(--gsb-tw, 50%) * -1)); } }
.gsb-wisps { mix-blend-mode: screen; }
.gsb-swell { animation-direction: reverse; mix-blend-mode: lighten; opacity: var(--so, .55); }

/* Stars on a big square disc pinned to a pole just above the top right,
   turning clockwise like the southern sky. The script sizes it (--gsb-sf). */
.gsb-starfield { width: var(--gsb-sf, 300vmax); aspect-ratio: 1; left: calc(78% - var(--gsb-sf, 300vmax) / 2); top: calc(-12% - var(--gsb-sf, 300vmax) / 2); animation: gsb-sky 420s linear infinite; will-change: transform; }
.gsb-starfield svg { display: block; width: 100%; height: 100%; }
@keyframes gsb-sky { to { rotate: 360deg; } }

/* Shooting stars, drawn by the script and removed once burnt out. */
.gsb-meteors { inset: 0; overflow: hidden; }
.gsb-meteor { position: absolute; left: 0; top: 0; height: 1.4px; border-radius: 2px; transform-origin: 100% 50%; background: linear-gradient(90deg, rgba(160, 200, 255, 0), rgba(200, 225, 255, .55) 70%, rgba(235, 245, 255, .9)); }
.gsb-meteor::after { content: ""; position: absolute; right: -2px; top: 50%; width: 3px; height: 3px; margin-top: -1.5px; border-radius: 50%; background: #f4f8ff; box-shadow: 0 0 3px 1px rgba(225, 238, 255, .95), 0 0 9px 3px rgba(180, 212, 255, .55), 0 0 22px 8px rgba(140, 185, 255, .22); }
.gsb-ghost { filter: blur(1.4px); }

/* Light layers that breathe or sway. */
.gsb-dawn { left: -10%; right: -10%; bottom: -8%; height: 70%; transform-origin: 50% 100%; background: radial-gradient(60% 55% at 50% 100%, rgba(150, 205, 255, .55), rgba(60, 130, 255, .3) 45%, transparent 75%); animation: gsb-dawn 16s ease-in-out infinite alternate; }
@keyframes gsb-dawn { from { opacity: .35; transform: scale(.94); } to { opacity: 1; transform: scale(1.06); } }
.gsb-lamp { left: 20%; right: 20%; top: -20%; height: 90%; background: radial-gradient(40% 60% at 50% 0%, rgba(150, 190, 255, .35), transparent 72%); transform-origin: 50% 0; animation: gsb-lamp 22s ease-in-out infinite alternate; }
@keyframes gsb-lamp { from { transform: translateX(-5%) rotate(-3deg); } to { transform: translateX(5%) rotate(3deg); } }
.gsb-fade { inset: 0; }

/* Paused off screen; stopped for reduced motion. */
.gs-bg[data-gs-paused] *, .gs-bg[data-gs-paused]::after { animation-play-state: paused !important; }
@media (prefers-reduced-motion: reduce) {
  .gs-bg *, .gs-bg::after { animation: none !important; }
}

/* ======================================================= the backgrounds */

/* sovereign: what is live on the preview today. Flat Sovereign Blue, fine
   grain, one big blurred mark low on the left. Adam's original. */
.gs-bg--sovereign { background: var(--gs-sovereign); }
.gs-bg--sovereign::after { display: none; }
.gs-bg--sovereign::before { opacity: .7; } /* the live site's fine grain, unchanged */
.gs-bg--sovereign .gsb-m1 { width: clamp(360px, 48vw, 720px); left: -10%; bottom: -30%; --r: -16deg; --c: #3F7BFF; --bl: 30px; --o: .4; }

/* deck-grain: the rebrand deck's slide, rebuilt. Navy core, electric blue at
   every edge, cyan in the corners, two bolts floating through. */
.gs-bg--deck-grain {
  background:
    radial-gradient(42% 52% at 0% 0%, rgba(38, 104, 255, .8), transparent 72%),
    radial-gradient(30% 38% at 78% 0%, rgba(70, 150, 255, .6), transparent 70%),
    radial-gradient(34% 44% at 100% 100%, rgba(30, 176, 255, .9), transparent 70%),
    radial-gradient(28% 40% at 0% 100%, rgba(30, 150, 255, .75), transparent 70%),
    radial-gradient(60% 62% at 52% 46%, #010540 0%, rgba(1, 5, 64, .7) 40%, transparent 78%),
    linear-gradient(160deg, #0a2fd6 0%, #04128f 34%, #02085c 62%, #0626c0 100%);
}
.gs-bg--deck-grain .gsb-b1, .gs-bg--void-deck-grain .gsb-b1 { width: clamp(260px, 30vw, 520px); left: 2%; top: 34%; --r: -32deg; --c: #2f86ff; --bl: 16px; --o: .85; animation: gsb-float-a 34s ease-in-out infinite alternate; }
.gs-bg--deck-grain .gsb-b2, .gs-bg--void-deck-grain .gsb-b2 { width: clamp(90px, 9vw, 150px); right: 7%; top: 6%; --r: 52deg; --c: #3b95ff; --bl: 9px; --o: .9; animation: gsb-float-b 26s ease-in-out infinite alternate; }
@keyframes gsb-float-a { to { translate: 3.5vw -4vh; rotate: 7deg; scale: 1.05; } }
@keyframes gsb-float-b { to { translate: -2.5vw 3vh; rotate: -10deg; } }

/* horizon: dark overhead, first light rising off the bottom edge and slowly
   breathing. The road ahead. */
.gs-bg--horizon {
  background:
    radial-gradient(75% 48% at 50% 104%, rgba(130, 196, 255, .75), rgba(48, 120, 255, .45) 38%, transparent 72%),
    radial-gradient(120% 60% at 50% 100%, rgba(18, 60, 230, .85), transparent 70%),
    linear-gradient(180deg, #000221 0%, #01033f 34%, #02066F 66%, #0a1fb8 100%);
}

/* gallery-light: a wall lit from a picture light above, swaying a little,
   falling away into dark corners. Goes with the painting in the hero. */
.gs-bg--gallery-light {
  background:
    radial-gradient(16% 46% at 50% -6%, rgba(176, 206, 255, .42), transparent 72%),
    radial-gradient(46% 78% at 50% -12%, rgba(70, 120, 255, .55), transparent 72%),
    radial-gradient(130% 110% at 50% 30%, transparent 46%, rgba(0, 1, 26, .78) 100%),
    var(--gs-sovereign);
}

/* deep-water: the mottled pigment wash from the deck's type pages, two
   currents churning against each other. */
.gs-bg--deep-water { background: #021050; }
.gs-bg--deep-water::before { opacity: 0; }

/* sky: the wash opened out into high cloud, drifting, with pale wisps
   crossing faster in front. */
.gs-bg--sky { background: #0a2a8a; }
.gs-bg--sky::before { opacity: 0; }
.gs-bg--sky .gsb-fade { background: linear-gradient(180deg, rgba(1, 4, 50, .72) 0%, rgba(1, 4, 50, .36) 45%, rgba(1, 4, 50, .16) 70%, rgba(1, 4, 50, .3) 100%); }

/* night-sky and night-sky-meteors: the sky after dark on Void Black, cloud
   drifting in front of stars that wheel slowly round the southern pole. The
   meteors version adds shooting stars, one long one per 12 seconds plus a
   shorter one half the time, each with a lingering afterimage. */
.gs-bg--night-sky, .gs-bg--night-sky-meteors { background: var(--gs-void); }
.gs-bg--night-sky::before, .gs-bg--night-sky-meteors::before { opacity: 0; }
.gs-bg--night-sky .gsb-fade, .gs-bg--night-sky-meteors .gsb-fade { background: linear-gradient(180deg, rgba(0, 0, 4, .55) 0%, rgba(0, 0, 4, .15) 45%, transparent 70%, rgba(0, 0, 4, .3) 100%); }

/* void-deck-grain: deck grain on Void Black, the blue only at the edges, the
   bolts glowing out of the dark. */
.gs-bg--void-deck-grain {
  background:
    radial-gradient(40% 50% at 0% 0%, rgba(38, 104, 255, .5), transparent 72%),
    radial-gradient(26% 34% at 78% 0%, rgba(70, 150, 255, .28), transparent 70%),
    radial-gradient(34% 44% at 100% 100%, rgba(30, 176, 255, .55), transparent 70%),
    radial-gradient(30% 40% at 0% 100%, rgba(2, 6, 111, .95), transparent 72%),
    var(--gs-void);
}
.gs-bg--void-deck-grain .gsb-b1 { --c: #2a6dff; --o: .6; }
.gs-bg--void-deck-grain .gsb-b2 { --c: #3b95ff; --o: .7; }

/* void-horizon: black overhead, Sovereign Blue on the bottom edge, pale first
   light breathing out of it. */
.gs-bg--void-horizon {
  background:
    radial-gradient(70% 40% at 50% 106%, rgba(120, 190, 255, .5), rgba(40, 100, 255, .32) 38%, transparent 72%),
    radial-gradient(110% 52% at 50% 100%, rgba(2, 6, 111, .95), transparent 72%),
    linear-gradient(180deg, #000 0%, var(--gs-void) 55%, #03052a 100%);
}
.gs-bg--void-horizon .gsb-dawn { background: radial-gradient(60% 55% at 50% 100%, rgba(120, 180, 255, .4), rgba(30, 80, 240, .25) 45%, transparent 75%); }

/* void-deep-water: the wash taken down to near black, the blue only in the
   lighter patches, two currents. */
.gs-bg--void-deep-water { background: var(--gs-void); }
.gs-bg--void-deep-water::before { opacity: calc(var(--gs-grain) * .4); }

/* void-halo and void-halo-ring: the mark as blue light on black at a big
   scale, half off the right edge, turning on its vertical axis. The logo
   version turns once every 24 s, so it faces you every 12 s; the ring
   version turns at the coin's own rate, 12 s a turn. */
.gs-bg--void-halo, .gs-bg--void-halo-ring {
  background:
    radial-gradient(50% 60% at 82% 50%, rgba(0, 0, 0, .6), transparent 70%),
    radial-gradient(70% 80% at 0% 0%, rgba(2, 6, 111, .55), transparent 70%),
    var(--gs-void);
}
.gs-bg--void-halo .gsb-h1, .gs-bg--void-halo-ring .gsb-h1 { width: clamp(560px, 72vw, 1240px); right: -30%; top: 50%; translate: 0 -50%; --c: #2f6dff; --bl: 22px; --o: .55; }
.gs-bg--void-halo .gsb-coin { animation-duration: 24s; }

/* ======================= added for the website, 2026-10-08 */

/* void-horizon-meteors: void-horizon with the night sky's shooting stars,
   one long one every 12 s and a shorter one half the time. The home page
   hero (Adam: "one or two shooting stars"). */
.gs-bg--void-horizon-meteors {
  background:
    radial-gradient(70% 40% at 50% 106%, rgba(120, 190, 255, .5), rgba(40, 100, 255, .32) 38%, transparent 72%),
    radial-gradient(110% 52% at 50% 100%, rgba(2, 6, 111, .95), transparent 72%),
    linear-gradient(180deg, #000 0%, var(--gs-void) 55%, #03052a 100%);
}
.gs-bg--void-horizon-meteors .gsb-dawn { background: radial-gradient(60% 55% at 50% 100%, rgba(120, 180, 255, .4), rgba(30, 80, 240, .25) 45%, transparent 75%); }

/* surface: just under the water, light shafts coming down and a net of
   caustic light drifting in the top half, deepening to Sovereign Blue at the
   bottom. Adam liked it on the journey preview, without the wave line that
   sat above it there; kept as an option, 2026-10-08. */
.gs-bg--surface { background: linear-gradient(180deg, #2a72d2 0%, #1450b4 30%, #0a3393 68%, #05226f 100%); }
.gs-bg--surface::before { opacity: 0; }
.gsb-caustics { mix-blend-mode: screen; opacity: .15; -webkit-mask-image: linear-gradient(to bottom, #000 0%, transparent 55%); mask-image: linear-gradient(to bottom, #000 0%, transparent 55%); }
.gsb-rays { inset: -10% 0 0; mix-blend-mode: screen; transform-origin: 50% 0; animation: gsb-rays 18s ease-in-out infinite alternate; }
.gsb-rays i { position: absolute; top: 0; height: 95%; transform: skewX(-16deg); filter: blur(16px); background: linear-gradient(to bottom, rgba(196, 228, 255, .3), rgba(160, 205, 255, .1) 45%, transparent 80%); }
.gsb-rays i:nth-child(1) { left: 12%; width: 7%; }
.gsb-rays i:nth-child(2) { left: 27%; width: 3%; opacity: .7; }
.gsb-rays i:nth-child(3) { left: 46%; width: 10%; opacity: .8; }
.gsb-rays i:nth-child(4) { left: 66%; width: 4%; }
.gsb-rays i:nth-child(5) { left: 80%; width: 8%; opacity: .6; }
@keyframes gsb-rays { from { transform: translateX(-2%) skewX(2deg); opacity: .75; } to { transform: translateX(2%) skewX(-2deg); opacity: 1; } }

/* southern-sky: void-horizon with the real sky over Sydney, facing south, as
   it is when the page loads: the bright stars blooming softly, the horizon on
   the bottom edge, the whole sky turning clockwise round the pole (laid out
   by the script). Kept faint on purpose: the Cross should be found, not
   announced. */
.gs-bg--southern-sky, [data-gs-bg="southern-sky"]:not(.gs-bg) {   /* the hero: its exact ground from the first paint */
  background:
    radial-gradient(70% 40% at 50% 106%, rgba(120, 190, 255, .5), rgba(40, 100, 255, .32) 38%, transparent 72%),
    radial-gradient(110% 52% at 50% 100%, rgba(2, 6, 111, .95), transparent 72%),
    linear-gradient(180deg, #000 0%, var(--gs-void) 55%, #03052a 100%);
}
.gs-bg--southern-sky .gsb-dawn { background: radial-gradient(60% 55% at 50% 100%, rgba(120, 180, 255, .4), rgba(30, 80, 240, .25) 45%, transparent 75%); }
.gsb-southsky { inset: 0; opacity: .75; }   /* the page can mask it clear of its own text */
.gsb-southsky__sky { position: absolute; inset: 0; }   /* the horizon mask, set by the script */
.gsb-southsky__turn { position: absolute; inset: 0; transform-origin: var(--gsb-pole, 70% 40%); animation: gsb-sky 240s linear infinite; }   /* 4 minutes a turn; 24 was too slow to read as moving (Adam, 8 Oct) */
.gsb-southsky i {
  position: absolute; left: var(--l, 50%); top: var(--t, 50%);
  width: var(--s); height: var(--s); margin: calc(var(--s) / -2) 0 0 calc(var(--s) / -2); border-radius: 50%;
  background: #f2f6ff;
  box-shadow: 0 0 calc(var(--s) * 2) calc(var(--s) * .5) rgba(215, 230, 255, var(--g)), 0 0 calc(var(--s) * 6) calc(var(--s) * 1.5) rgba(140, 180, 255, calc(var(--g) * .45));
  animation: gsb-bloom var(--bd) ease-in-out var(--dl) infinite alternate;
}
@keyframes gsb-bloom { from { opacity: .55; scale: .85; } to { opacity: 1; scale: 1.1; } }
