<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
    <meta name="color-scheme" content="dark" />
    <meta name="theme-color" content="#08070a" />
    <!--head:start-->
    <title>Cybersoul · A cyberpunk dystopian tabletop RPG</title>
    <meta name="description" content="A cyberpunk dystopian tabletop RPG with horror elements, set in the city of Lucinica, where magic is driven from science and not a miracle. Closed playtest, invite only." />
    <meta name="robots" content="noindex, nofollow" />
    <link rel="canonical" href="https://cybersoul.invalid/" />
    <meta property="og:type" content="website" />
    <meta property="og:site_name" content="Cybersoul" />
    <meta property="og:title" content="Cybersoul · A cyberpunk dystopian tabletop RPG" />
    <meta property="og:description" content="A cyberpunk dystopian tabletop RPG with horror elements, set in the city of Lucinica, where magic is driven from science and not a miracle. Closed playtest, invite only." />
    <meta property="og:url" content="https://cybersoul.invalid/" />
    <meta property="og:image" content="https://cybersoul.invalid/og/og-default.png" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image:alt" content="The Cybersoul wordmark glowing cyan to pink on a dark background." />
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:title" content="Cybersoul · A cyberpunk dystopian tabletop RPG" />
    <meta name="twitter:description" content="A cyberpunk dystopian tabletop RPG with horror elements, set in the city of Lucinica, where magic is driven from science and not a miracle. Closed playtest, invite only." />
    <meta name="twitter:image" content="https://cybersoul.invalid/og/og-default.png" />
    <link rel="preload" as="font" type="font/woff2" href="/_immutable/chakra-petch-latin-700-normal-j6a7b2m6.woff2" crossorigin />
    <link rel="modulepreload" crossorigin href="/_immutable/Home-opzyj41x.js" />
    <script>
      (function () {
        var S = {"start":["/posters/hero-start-16x9-768.webp 768w, /posters/hero-start-16x9-1280.webp 1280w, /posters/hero-start-16x9-1920.webp 1920w","/posters/hero-start-9x16-540.webp 540w, /posters/hero-start-9x16-810.webp 810w, /posters/hero-start-9x16-1080.webp 1080w"],"hold":["/posters/hero-hold-16x9-768.webp 768w, /posters/hero-hold-16x9-1280.webp 1280w, /posters/hero-hold-16x9-1920.webp 1920w","/posters/hero-hold-9x16-540.webp 540w, /posters/hero-hold-9x16-810.webp 810w, /posters/hero-hold-9x16-1080.webp 1080w"]}, k = "start";
        try { if (localStorage.getItem("cs-motion") === "reduced") k = "hold"; } catch (e) {}
        var q = location.search, c = navigator.connection, f = /[?&]intro=(1|true|yes|on)(&|$)/.test(q);
        if (k === "start" && !(c && c.saveData) && !/[?&](nointro(=(1|true|yes|on))?|still)(&|=|$)/.test(q) && true && (f || (true && !navigator.webdriver))) {
          try { if (f || !localStorage.getItem("cs-intro")) k = "hold"; } catch (e) { k = "hold"; }
          if (k === "hold") [["(min-aspect-ratio: 3/4)", "/film/gate-16x9.webp"], ["(max-aspect-ratio: 3/4)", "/film/gate-9x16.webp"]].forEach(function (p) {
            var l = document.createElement("link");
            l.rel = "preload"; l.as = "image"; l.media = p[0]; l.href = p[1];
            document.head.appendChild(l);
          });
        }
        [["(min-aspect-ratio: 3/4)", S[k][0]], ["(max-aspect-ratio: 3/4)", S[k][1]]].forEach(function (p) {
          var l = document.createElement("link");
          l.rel = "preload"; l.as = "image"; l.media = p[0]; l.setAttribute("imagesrcset", p[1]);
          l.setAttribute("imagesizes", "100vw"); l.setAttribute("fetchpriority", "high");
          document.head.appendChild(l);
        });
      })();
    </script>
    <!--head:end-->
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <script>
      // Reduce motion: the in-site toggle is the only switch (house motion-forward rule; the OS
      // setting is never read). Stamped before first paint so nothing animates for a frame.
      try {
        if (localStorage.getItem("cs-motion") === "reduced") document.documentElement.classList.add("reduce-motion");
      } catch (e) {}
    </script>
    <script type="module" crossorigin src="/_immutable/index-hl7x5h7j.js"></script>
    <link rel="modulepreload" crossorigin href="/_immutable/react-fq96aiqn.js">
    <link rel="modulepreload" crossorigin href="/_immutable/motion-kzsns83w.js">
    <link rel="stylesheet" crossorigin href="/_immutable/index-kcl3wsng.css">
  </head>
  <body>
    <div id="root"></div>
    <noscript>
      <div style="padding:48px 24px;font-family:system-ui,sans-serif;color:#f5f1ea;background:#08070a;min-height:100vh">
        <p style="letter-spacing:0.32em;font-size:12px;text-transform:uppercase;color:#67e8f9">Cybersoul · closed playtest</p>
        <p style="font-size:18px;max-width:40ch;line-height:1.6">This site needs JavaScript to run. Cybersoul is a cyberpunk tabletop RPG and the browser platform that runs it.</p>
      </div>
    </noscript>
  </body>
</html>
