From 61728e20610868f943367262467c3ba95b1ee621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=B7=F0=9F=90=A2=20S=2E=20P=2E=20O=2E=20Clayton?= Date: Fri, 16 Sep 2022 22:32:57 -0400 Subject: [PATCH] Initial commit Nowhere near complete, just wanted to get this somewhere in VCS online --- .gitignore | 2 + README.adoc | 17 + _attachments/logo-bw.svg | 21 + doc.css | 2327 +++++++++++++++++++++++++++++++++++++ justfile | 5 + preview.css | 2 + shared.css | 90 ++ the-cyberdark-future.adoc | 609 ++++++++++ 8 files changed, 3073 insertions(+) create mode 100644 .gitignore create mode 100644 README.adoc create mode 100644 _attachments/logo-bw.svg create mode 100644 doc.css create mode 100644 justfile create mode 100644 preview.css create mode 100644 shared.css create mode 100644 the-cyberdark-future.adoc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4ad4161 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.html +*.pdf \ No newline at end of file diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..d6a5440 --- /dev/null +++ b/README.adoc @@ -0,0 +1,17 @@ += The Cyberdark Future +:stylesheet: doc.css +:source-highlighter: highlight.js + +== Building + +.Build HTML from asciidoc +[source,sh] +-- +just +-- + +.Clean up build artifacts +[source, sh] +-- +just clean +-- \ No newline at end of file diff --git a/_attachments/logo-bw.svg b/_attachments/logo-bw.svg new file mode 100644 index 0000000..08bcec5 --- /dev/null +++ b/_attachments/logo-bw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/doc.css b/doc.css new file mode 100644 index 0000000..be12d48 --- /dev/null +++ b/doc.css @@ -0,0 +1,2327 @@ +@import url("https://fonts.googleapis.com/css2?family=Rowdies:wght@300;400;700&family=Source+Serif+Pro:wght@200;300;400;600;700;900&family=Barlow:wght@100;200;300;400;500;600;700;800;900&family=Barlow+Condensed:wght@100;200;300;400;500;600;700;800;900&family=Barlow+Semi+Condensed:wght@100;200;300;400;500;600;700;800;900"); + +/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ +/* Uncomment the following line when using as a custom stylesheet */ +/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */ +*, +::before, +::after { + box-sizing: border-box; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + background: #fff; + color: rgb(0 0 0 / 0.8); + padding: 0; + margin: 0; + font-family: "Noto Serif", "DejaVu Serif", serif; + font-size: inherit; + line-height: 1; + position: relative; + cursor: auto; + tab-size: 4; + word-wrap: anywhere; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} + +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; +} + +a { + background: none; + color: #2156a5; + text-decoration: underline; + line-height: inherit; +} + +a:active, +a:hover { + cursor: pointer; + outline: 0; +} + +a:focus { + outline: thin dotted; +} + +a:hover, +a:focus { + color: #1d4b8f; +} + +abbr { + font-size: 0.9em; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #dddddf; + text-decoration: none; +} + +b, +strong { + font-weight: bold; + line-height: inherit; +} + +strong strong { + font-weight: 400; +} + +code, +kbd, +pre { + font-family: "Droid Sans Mono", "DejaVu Sans Mono", monospace; + font-size: 1em; +} + +code { + font-weight: 400; + color: rgb(0 0 0 / 0.9); +} + +pre { + color: rgb(0 0 0 / 0.9); + line-height: 1.45; + text-rendering: optimizeSpeed; + white-space: pre-wrap; +} + +dfn { + font-style: italic; +} + +em, +i { + font-style: italic; + line-height: inherit; +} + +em em { + font-style: normal; +} + +hr { + border: solid #dddddf; + border-width: 1px 0 0; + clear: both; + height: 0; + margin: 1.25em 0 1.1875em; +} + +mark { + background: #ff0; + color: #000; +} + +p { + line-height: 1.6; + margin-bottom: 1.25rem; + text-rendering: optimizeLegibility; +} + +q { + quotes: "\201C""\201D""\2018""\2019"; +} + +small { + font-size: 60%; + line-height: inherit; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img, +object[type^="image/"], +svg { + display: inline-block; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +object { + max-width: 100%; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +audio, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +.left { + float: left !important; +} + +.right { + float: right !important; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-justify { + text-align: justify !important; +} + +.hide { + display: none; +} + +.subheader, +.admonitionblock td.content > .title, +.audioblock > .title, +.exampleblock > .title, +.imageblock > .title, +.listingblock > .title, +.literalblock > .title, +.stemblock > .title, +.openblock > .title, +.paragraph > .title, +.quoteblock > .title, +table.tableblock > .title, +.verseblock > .title, +.videoblock > .title, +.dlist > .title, +.olist > .title, +.ulist > .title, +.qlist > .title, +.hdlist > .title { + line-height: 1.45; + color: #7a2518; + font-weight: 400; + margin-top: 0; + margin-bottom: 0.25em; +} + +p aside { + font-size: 0.875em; + line-height: 1.35; + font-style: italic; +} + +h1, +h2, +h3, +#toctitle, +.sidebarblock > .content > .title, +h4, +h5, +h6 { + font-family: "Open Sans", "DejaVu Sans", sans-serif; + font-weight: 300; + font-style: normal; + color: #ba3925; + text-rendering: optimizeLegibility; + margin-top: 1em; + margin-bottom: 0.5em; + line-height: 1.2; + word-spacing: -0.05em; +} + +h1 small, +h2 small, +h3 small, +#toctitle small, +.sidebarblock > .content > .title small, +h4 small, +h5 small, +h6 small { + color: #e99b8f; + line-height: 0; +} + +h1 { + font-size: 2.125em; +} + +h2 { + font-size: 1.6875em; +} + +h3, +#toctitle, +.sidebarblock > .content > .title { + font-size: 1.375em; +} + +h4, +h5 { + font-size: 1.125em; +} + +h6 { + font-size: 1em; +} + +ul, +ol, +dl { + line-height: 1.6; + margin-bottom: 1.25em; + list-style-position: outside; + font-family: inherit; +} + +ul, +ol { + margin-left: 1.5em; +} + +ul li ul, +ul li ol { + margin-left: 1.25em; + margin-bottom: 0; +} + +ul.square li ul, +ul.circle li ul, +ul.disc li ul { + list-style: inherit; +} + +ul.square { + list-style-type: square; +} + +ul.circle { + list-style-type: circle; +} + +ul.disc { + list-style-type: disc; +} + +ol li ul, +ol li ol { + margin-left: 1.25em; + margin-bottom: 0; +} + +dl dt { + margin-bottom: 0.3125em; + font-weight: bold; +} + +dl dd { + margin-bottom: 1.25em; + margin-left: 1.125em; +} + +blockquote { + margin: 0 0 1.25em; + padding: 0.5625em 1.25em 0 1.1875em; + border-left: 1px solid #ddd; +} + +blockquote, +blockquote p { + line-height: 1.6; + color: rgb(0 0 0 / 0.85); +} + +@media screen and (min-width: 768px) { + h1 { + font-size: 2.75em; + } + + h2 { + font-size: 2.3125em; + } + + h3, + #toctitle, + .sidebarblock > .content > .title { + font-size: 1.6875em; + } + + h4 { + font-size: 1.4375em; + } +} + +table { + background: #fff; + border: 1px solid #dedede; + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 1.25em; + word-wrap: normal; +} + +table thead, +table tfoot { + background: #f7f8f7; +} + +table thead tr th, +table thead tr td, +table tfoot tr th, +table tfoot tr td { + padding: 0.5em 0.625em 0.625em; + font-size: inherit; + color: rgb(0 0 0 / 0.8); + text-align: left; +} + +table tr th, +table tr td { + padding: 0.5625em 0.625em; + font-size: inherit; + color: rgb(0 0 0 / 0.8); +} + +table tr.even, +table tr.alt { + background: #f8f8f7; +} + +table thead tr th, +table tfoot tr th, +table tbody tr td, +table tr td, +table tfoot tr td { + line-height: 1.6; +} + +h1 strong, +h2 strong, +h3 strong, +#toctitle strong, +.sidebarblock > .content > .title strong, +h4 strong, +h5 strong, +h6 strong { + font-weight: 400; +} + +.center { + margin-left: auto; + margin-right: auto; +} + +.stretch { + width: 100%; +} + +.clearfix::before, +.clearfix::after, +.float-group::before, +.float-group::after { + content: ""; + display: table; +} + +.clearfix::after, +.float-group::after { + clear: both; +} + +:not(pre).nobreak { + word-wrap: normal; +} + +:not(pre).nowrap { + white-space: nowrap; +} + +:not(pre).pre-wrap { + white-space: pre-wrap; +} + +:not(pre):not([class^="L"]) > code { + font-size: 0.9375em; + font-style: normal !important; + letter-spacing: 0; + padding: 0.1em 0.5ex; + word-spacing: -0.15em; + background: #f7f7f8; + border-radius: 4px; + line-height: 1.45; + text-rendering: optimizeSpeed; +} + +pre code, +pre pre { + color: inherit; + font-size: inherit; + line-height: inherit; +} + +pre > code { + display: block; +} + +pre.nowrap, +pre.nowrap pre { + white-space: pre; + word-wrap: normal; +} + +.keyseq { + color: rgb(51 51 51 / 0.8); +} + +kbd { + display: inline-block; + color: rgb(0 0 0 / 0.8); + font-size: 0.65em; + line-height: 1.45; + background: #f7f7f7; + border: 1px solid #ccc; + border-radius: 3px; + box-shadow: 0 1px 0 rgb(0 0 0 / 0.2), 0 0 0 0.1em #fff inset; + margin: 0 0.15em; + padding: 0.2em 0.5em; + vertical-align: middle; + position: relative; + top: -0.1em; + white-space: nowrap; +} + +.keyseq kbd:first-child { + margin-left: 0; +} + +.keyseq kbd:last-child { + margin-right: 0; +} + +.menuseq, +.menuref { + color: #000; +} + +.menuseq b:not(.caret), +.menuref { + font-weight: inherit; +} + +.menuseq { + word-spacing: -0.02em; +} + +.menuseq b.caret { + font-size: 1.25em; + line-height: 0.8; +} + +.menuseq i.caret { + font-weight: bold; + text-align: center; + width: 0.45em; +} + +b.button::before, +b.button::after { + position: relative; + top: -1px; + font-weight: 400; +} + +b.button::before { + content: "["; + padding: 0 3px 0 2px; +} + +b.button::after { + content: "]"; + padding: 0 2px 0 3px; +} + +p a > code:hover { + color: rgb(0 0 0 / 0.9); +} + +body > div[id] { + margin: 0 auto; + max-width: 62.5em; + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + width: 100%; +} + +body > div[id]::before, +body > div[id]::after, +#content #footnotes::before { + content: ""; + display: table; + clear: both; +} + +#content { + margin-top: 1.25em; + margin-bottom: 0.625em; +} + +#content::before { + content: none; +} + +#header > h1:first-child { + color: rgb(0 0 0 / 0.85); + margin-top: 2.25rem; + margin-bottom: 0; +} + +#header > h1:first-child + #toc { + margin-top: 8px; + border-top: 1px solid #dddddf; +} + +#header > h1:only-child, +body.toc2 #header > h1:nth-last-child(2) { + border-bottom: 1px solid #dddddf; + padding-bottom: 8px; +} + +#header .details { + border-bottom: 1px solid #dddddf; + line-height: 1.45; + padding-top: 0.25em; + padding-bottom: 0.25em; + padding-left: 0.25em; + color: rgb(0 0 0 / 0.6); + display: flex; + flex-flow: row wrap; +} + +#header .details span:first-child { + margin-left: -0.125em; +} + +#header .details span.email a { + color: rgb(0 0 0 / 0.85); +} + +#header .details br { + display: none; +} + +#header .details br + span::before { + content: "\00a0\2013\00a0"; +} + +#header .details br + span.author::before { + content: "\00a0\22c5\00a0"; + color: rgb(0 0 0 / 0.85); +} + +#header .details br + span#revremark::before { + content: "\00a0|\00a0"; +} + +#header #revnumber { + text-transform: capitalize; +} + +#header #revnumber::after { + content: "\00a0"; +} + +#content > h1:first-child:not([class]) { + color: rgb(0 0 0 / 0.85); + border-bottom: 1px solid #dddddf; + padding-bottom: 8px; + margin-top: 0; + padding-top: 1rem; + margin-bottom: 1.25rem; +} + +#toc { + border-bottom: 1px solid #e7e7e9; + padding-bottom: 0.5em; +} + +#toc > ul { + margin-left: 0.125em; +} + +#toc ul.sectlevel0 > li > a { + font-style: italic; +} + +#toc ul.sectlevel0 ul.sectlevel1 { + margin: 0.5em 0; +} + +#toc ul { + font-family: "Open Sans", "DejaVu Sans", sans-serif; + list-style-type: none; +} + +#toc li { + line-height: 1.3334; + margin-top: 0.3334em; +} + +#toc a { + text-decoration: none; +} + +#toc a:active { + text-decoration: underline; +} + +#toctitle { + color: #7a2518; + font-size: 1.2em; +} + +@media screen and (min-width: 768px) { + #toctitle { + font-size: 1.375em; + } + + body.toc2 { + padding-left: 15em; + padding-right: 0; + } + + #toc.toc2 { + margin-top: 0 !important; + background: #f8f8f7; + position: fixed; + width: 15em; + left: 0; + top: 0; + border-right: 1px solid #e7e7e9; + border-top-width: 0 !important; + border-bottom-width: 0 !important; + z-index: 1000; + padding: 1.25em 1em; + height: 100%; + overflow: auto; + } + + #toc.toc2 #toctitle { + margin-top: 0; + margin-bottom: 0.8rem; + font-size: 1.2em; + } + + #toc.toc2 > ul { + font-size: 0.9em; + margin-bottom: 0; + } + + #toc.toc2 ul ul { + margin-left: 0; + padding-left: 1em; + } + + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { + padding-left: 0; + margin-top: 0.5em; + margin-bottom: 0.5em; + } + + body.toc2.toc-right { + padding-left: 0; + padding-right: 15em; + } + + body.toc2.toc-right #toc.toc2 { + border-right-width: 0; + border-left: 1px solid #e7e7e9; + left: auto; + right: 0; + } +} + +@media screen and (min-width: 1280px) { + body.toc2 { + padding-left: 20em; + padding-right: 0; + } + + #toc.toc2 { + width: 20em; + } + + #toc.toc2 #toctitle { + font-size: 1.375em; + } + + #toc.toc2 > ul { + font-size: 0.95em; + } + + #toc.toc2 ul ul { + padding-left: 1.25em; + } + + body.toc2.toc-right { + padding-left: 0; + padding-right: 20em; + } +} + +#content #toc { + border: 1px solid #e0e0dc; + margin-bottom: 1.25em; + padding: 1.25em; + background: #f8f8f7; + border-radius: 4px; +} + +#content #toc > :first-child { + margin-top: 0; +} + +#content #toc > :last-child { + margin-bottom: 0; +} + +#footer { + max-width: none; + background: rgb(0 0 0 / 0.8); + padding: 1.25em; +} + +#footer-text { + color: rgb(255 255 255 / 0.8); + line-height: 1.44; +} + +.sect1 { + padding-bottom: 0.625em; +} + +@media screen and (min-width: 768px) { + #content { + margin-bottom: 1.25em; + } + + .sect1 { + padding-bottom: 1.25em; + } +} + +.sect1:last-child { + padding-bottom: 0; +} + +.sect1 + .sect1 { + border-top: 1px solid #e7e7e9; +} + +#content h1 > a.anchor, +h2 > a.anchor, +h3 > a.anchor, +#toctitle > a.anchor, +.sidebarblock > .content > .title > a.anchor, +h4 > a.anchor, +h5 > a.anchor, +h6 > a.anchor { + position: absolute; + z-index: 1001; + width: 1.5ex; + margin-left: -1.5ex; + display: block; + text-decoration: none !important; + visibility: hidden; + text-align: center; + font-weight: 400; +} + +#content h1 > a.anchor::before, +h2 > a.anchor::before, +h3 > a.anchor::before, +#toctitle > a.anchor::before, +.sidebarblock > .content > .title > a.anchor::before, +h4 > a.anchor::before, +h5 > a.anchor::before, +h6 > a.anchor::before { + content: "\00A7"; + font-size: 0.85em; + display: block; + padding-top: 0.1em; +} + +#content h1:hover > a.anchor, +#content h1 > a.anchor:hover, +h2:hover > a.anchor, +h2 > a.anchor:hover, +h3:hover > a.anchor, +#toctitle:hover > a.anchor, +.sidebarblock > .content > .title:hover > a.anchor, +h3 > a.anchor:hover, +#toctitle > a.anchor:hover, +.sidebarblock > .content > .title > a.anchor:hover, +h4:hover > a.anchor, +h4 > a.anchor:hover, +h5:hover > a.anchor, +h5 > a.anchor:hover, +h6:hover > a.anchor, +h6 > a.anchor:hover { + visibility: visible; +} + +#content h1 > a.link, +h2 > a.link, +h3 > a.link, +#toctitle > a.link, +.sidebarblock > .content > .title > a.link, +h4 > a.link, +h5 > a.link, +h6 > a.link { + color: #ba3925; + text-decoration: none; +} + +#content h1 > a.link:hover, +h2 > a.link:hover, +h3 > a.link:hover, +#toctitle > a.link:hover, +.sidebarblock > .content > .title > a.link:hover, +h4 > a.link:hover, +h5 > a.link:hover, +h6 > a.link:hover { + color: #a53221; +} + +details, +.audioblock, +.imageblock, +.literalblock, +.listingblock, +.stemblock, +.videoblock { + margin-bottom: 1.25em; +} + +details { + margin-left: 1.25rem; +} + +details > summary { + cursor: pointer; + display: block; + position: relative; + line-height: 1.6; + margin-bottom: 0.625rem; + outline: none; + -webkit-tap-highlight-color: transparent; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details > summary::before { + content: ""; + border: solid transparent; + border-left-color: currentColor; + border-width: 0.3em 0 0.3em 0.5em; + position: absolute; + top: 0.5em; + left: -1.25rem; + transform: translateX(15%); +} + +details[open] > summary::before { + border: solid transparent; + border-top-color: currentColor; + border-width: 0.5em 0.3em 0; + transform: translateY(15%); +} + +details > summary::after { + content: ""; + width: 1.25rem; + height: 1em; + position: absolute; + top: 0.3em; + left: -1.25rem; +} + +.admonitionblock td.content > .title, +.audioblock > .title, +.exampleblock > .title, +.imageblock > .title, +.listingblock > .title, +.literalblock > .title, +.stemblock > .title, +.openblock > .title, +.paragraph > .title, +.quoteblock > .title, +table.tableblock > .title, +.verseblock > .title, +.videoblock > .title, +.dlist > .title, +.olist > .title, +.ulist > .title, +.qlist > .title, +.hdlist > .title { + text-rendering: optimizeLegibility; + text-align: left; + font-family: "Noto Serif", "DejaVu Serif", serif; + font-size: 1rem; + font-style: italic; +} + +table.tableblock.fit-content > caption.title { + white-space: nowrap; + width: 0; +} + +.paragraph.lead > p, +#preamble > .sectionbody > [class="paragraph"]:first-of-type p { + font-size: 1.21875em; + line-height: 1.6; + color: rgb(0 0 0 / 0.85); +} + +.admonitionblock > table { + border-collapse: separate; + border: 0; + background: none; + width: 100%; +} + +.admonitionblock > table td.icon { + text-align: center; + width: 80px; +} + +.admonitionblock > table td.icon img { + max-width: none; +} + +.admonitionblock > table td.icon .title { + font-weight: bold; + font-family: "Open Sans", "DejaVu Sans", sans-serif; + text-transform: uppercase; +} + +.admonitionblock > table td.content { + padding-left: 1.125em; + padding-right: 1.25em; + border-left: 1px solid #dddddf; + color: rgb(0 0 0 / 0.6); + word-wrap: anywhere; +} + +.admonitionblock > table td.content > :last-child > :last-child { + margin-bottom: 0; +} + +.exampleblock > .content { + border: 1px solid #e0e0dc; + margin-bottom: 1.25em; + padding: 1.25em; + background: #fffef7; + border-radius: 4px; + box-shadow: 0 1px 4px #e0e0dc; +} + +.exampleblock > .content > :first-child { + margin-top: 0; +} + +.exampleblock > .content > :last-child { + margin-bottom: 0; +} + +.sidebarblock { + border: 1px solid #dbdbd6; + margin-bottom: 1.25em; + padding: 1.25em; + background: #f3f3f2; + border-radius: 4px; +} + +.sidebarblock > :first-child { + margin-top: 0; +} + +.sidebarblock > :last-child { + margin-bottom: 0; +} + +.sidebarblock > .content > .title { + color: #7a2518; + margin-top: 0; + text-align: center; +} + +.exampleblock > .content > :last-child > :last-child, +.exampleblock > .content .olist > ol > li:last-child > :last-child, +.exampleblock > .content .ulist > ul > li:last-child > :last-child, +.exampleblock > .content .qlist > ol > li:last-child > :last-child, +.sidebarblock > .content > :last-child > :last-child, +.sidebarblock > .content .olist > ol > li:last-child > :last-child, +.sidebarblock > .content .ulist > ul > li:last-child > :last-child, +.sidebarblock > .content .qlist > ol > li:last-child > :last-child { + margin-bottom: 0; +} + +.literalblock pre, +.listingblock > .content > pre { + border-radius: 4px; + overflow-x: auto; + padding: 1em; + font-size: 0.8125em; +} + +@media screen and (min-width: 768px) { + .literalblock pre, + .listingblock > .content > pre { + font-size: 0.90625em; + } +} + +@media screen and (min-width: 1280px) { + .literalblock pre, + .listingblock > .content > pre { + font-size: 1em; + } +} + +.literalblock pre, +.listingblock > .content > pre:not(.highlight), +.listingblock > .content > pre[class="highlight"], +.listingblock > .content > pre[class^="highlight "] { + background: #f7f7f8; +} + +.literalblock.output pre { + color: #f7f7f8; + background: rgb(0 0 0 / 0.9); +} + +.listingblock > .content { + position: relative; +} + +.listingblock code[data-lang]::before { + display: none; + content: attr(data-lang); + position: absolute; + font-size: 0.75em; + top: 0.425rem; + right: 0.5rem; + line-height: 1; + text-transform: uppercase; + color: inherit; + opacity: 0.5; +} + +.listingblock:hover code[data-lang]::before { + display: block; +} + +.listingblock.terminal pre .command::before { + content: attr(data-prompt); + padding-right: 0.5em; + color: inherit; + opacity: 0.5; +} + +.listingblock.terminal pre .command:not([data-prompt])::before { + content: "$"; +} + +.listingblock pre.highlightjs { + padding: 0; +} + +.listingblock pre.highlightjs > code { + padding: 1em; + border-radius: 4px; +} + +.listingblock pre.prettyprint { + border-width: 0; +} + +.prettyprint { + background: #f7f7f8; +} + +pre.prettyprint .linenums { + line-height: 1.45; + margin-left: 2em; +} + +pre.prettyprint li { + background: none; + list-style-type: inherit; + padding-left: 0; +} + +pre.prettyprint li code[data-lang]::before { + opacity: 1; +} + +pre.prettyprint li:not(:first-child) code[data-lang]::before { + display: none; +} + +table.linenotable { + border-collapse: separate; + border: 0; + margin-bottom: 0; + background: none; +} + +table.linenotable td[class] { + color: inherit; + vertical-align: top; + padding: 0; + line-height: inherit; + white-space: normal; +} + +table.linenotable td.code { + padding-left: 0.75em; +} + +table.linenotable td.linenos { + width: 0.01%; +} + +table.linenotable td.linenos, +pre.pygments .linenos, +pre.rouge .linenos { + border-right: 1px solid; + opacity: 0.35; + padding-right: 0.5em; + user-select: none; +} + +pre.pygments span.linenos, +pre.rouge span.linenos { + display: inline-block; + margin-right: 0.75em; +} + +.quoteblock { + margin: 0 1em 1.25em 1.5em; + display: table; +} + +.quoteblock:not(.excerpt) > .title { + margin-left: -1.5em; + margin-bottom: 0.75em; +} + +.quoteblock blockquote, +.quoteblock p { + color: rgb(0 0 0 / 0.85); + font-size: 1.15rem; + line-height: 1.75; + word-spacing: 0.1em; + letter-spacing: 0; + font-style: italic; + text-align: justify; +} + +.quoteblock blockquote { + margin: 0; + padding: 0; + border: 0; +} + +.quoteblock blockquote::before { + content: "\201c"; + float: left; + font-size: 2.75em; + font-weight: bold; + line-height: 0.6em; + margin-left: -0.6em; + color: #7a2518; + text-shadow: 0 1px 2px rgb(0 0 0 / 0.1); +} + +.quoteblock blockquote > .paragraph:last-child p { + margin-bottom: 0; +} + +.quoteblock .attribution { + margin-top: 0.75em; + margin-right: 0.5ex; + text-align: right; +} + +.verseblock { + margin: 0 1em 1.25em; +} + +.verseblock pre { + font-family: "Open Sans", "DejaVu Sans", sans-serif; + font-size: 1.15rem; + color: rgb(0 0 0 / 0.85); + font-weight: 300; + text-rendering: optimizeLegibility; +} + +.verseblock pre strong { + font-weight: 400; +} + +.verseblock .attribution { + margin-top: 1.25rem; + margin-left: 0.5ex; +} + +.quoteblock .attribution, +.verseblock .attribution { + font-size: 0.9375em; + line-height: 1.45; + font-style: italic; +} + +.quoteblock .attribution br, +.verseblock .attribution br { + display: none; +} + +.quoteblock .attribution cite, +.verseblock .attribution cite { + display: block; + letter-spacing: -0.025em; + color: rgb(0 0 0 / 0.6); +} + +.quoteblock.abstract blockquote::before, +.quoteblock.excerpt blockquote::before, +.quoteblock .quoteblock blockquote::before { + display: none; +} + +.quoteblock.abstract blockquote, +.quoteblock.abstract p, +.quoteblock.excerpt blockquote, +.quoteblock.excerpt p, +.quoteblock .quoteblock blockquote, +.quoteblock .quoteblock p { + line-height: 1.6; + word-spacing: 0; +} + +.quoteblock.abstract { + margin: 0 1em 1.25em; + display: block; +} + +.quoteblock.abstract > .title { + margin: 0 0 0.375em; + font-size: 1.15em; + text-align: center; +} + +.quoteblock.excerpt > blockquote, +.quoteblock .quoteblock { + padding: 0 0 0.25em 1em; + border-left: 0.25em solid #dddddf; +} + +.quoteblock.excerpt, +.quoteblock .quoteblock { + margin-left: 0; +} + +.quoteblock.excerpt blockquote, +.quoteblock.excerpt p, +.quoteblock .quoteblock blockquote, +.quoteblock .quoteblock p { + color: inherit; + font-size: 1.0625rem; +} + +.quoteblock.excerpt .attribution, +.quoteblock .quoteblock .attribution { + color: inherit; + font-size: 0.85rem; + text-align: left; + margin-right: 0; +} + +p.tableblock:last-child { + margin-bottom: 0; +} + +td.tableblock > .content { + margin-bottom: 1.25em; + word-wrap: anywhere; +} + +td.tableblock > .content > :last-child { + margin-bottom: -1.25em; +} + +table.tableblock, +th.tableblock, +td.tableblock { + border: 0 solid #dedede; +} + +table.grid-all > * > tr > * { + border-width: 1px; +} + +table.grid-cols > * > tr > * { + border-width: 0 1px; +} + +table.grid-rows > * > tr > * { + border-width: 1px 0; +} + +table.frame-all { + border-width: 1px; +} + +table.frame-ends { + border-width: 1px 0; +} + +table.frame-sides { + border-width: 0 1px; +} + +table.frame-none > colgroup + * > :first-child > *, +table.frame-sides > colgroup + * > :first-child > * { + border-top-width: 0; +} + +table.frame-none > :last-child > :last-child > *, +table.frame-sides > :last-child > :last-child > * { + border-bottom-width: 0; +} + +table.frame-none > * > tr > :first-child, +table.frame-ends > * > tr > :first-child { + border-left-width: 0; +} + +table.frame-none > * > tr > :last-child, +table.frame-ends > * > tr > :last-child { + border-right-width: 0; +} + +table.stripes-all > * > tr, +table.stripes-odd > * > tr:nth-of-type(odd), +table.stripes-even > * > tr:nth-of-type(even), +table.stripes-hover > * > tr:hover { + background: #f8f8f7; +} + +th.halign-left, +td.halign-left { + text-align: left; +} + +th.halign-right, +td.halign-right { + text-align: right; +} + +th.halign-center, +td.halign-center { + text-align: center; +} + +th.valign-top, +td.valign-top { + vertical-align: top; +} + +th.valign-bottom, +td.valign-bottom { + vertical-align: bottom; +} + +th.valign-middle, +td.valign-middle { + vertical-align: middle; +} + +table thead th, +table tfoot th { + font-weight: bold; +} + +tbody tr th { + background: #f7f8f7; +} + +tbody tr th, +tbody tr th p, +tfoot tr th, +tfoot tr th p { + color: rgb(0 0 0 / 0.8); + font-weight: bold; +} + +p.tableblock > code:only-child { + background: none; + padding: 0; +} + +p.tableblock { + font-size: 1em; +} + +ol { + margin-left: 1.75em; +} + +ul li ol { + margin-left: 1.5em; +} + +dl dd:last-child, +dl dd:last-child > :last-child { + margin-bottom: 0; +} + +li p, +ul dd, +ol dd, +.olist .olist, +.ulist .ulist, +.ulist .olist, +.olist .ulist { + margin-bottom: 0.625em; +} + +ul.checklist, +ul.none, +ol.none, +ul.no-bullet, +ol.no-bullet, +ol.unnumbered, +ul.unstyled, +ol.unstyled { + list-style-type: none; +} + +ul.no-bullet, +ol.no-bullet, +ol.unnumbered { + margin-left: 0.625em; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; +} + +li > p:empty:only-child::before { + content: ""; + display: inline-block; +} + +ul.checklist > li > p:first-child { + margin-left: -1em; +} + +ul.checklist > li > p:first-child > .fa-square-o:first-child, +ul.checklist > li > p:first-child > .fa-check-square-o:first-child { + width: 1.25em; + font-size: 0.8em; + position: relative; + bottom: 0.125em; +} + +ul.checklist > li > p:first-child > input[type="checkbox"]:first-child { + font: inherit; + margin: 0 0.25em 0 0; + padding: 0; +} + +ul.inline { + display: flex; + flex-flow: row wrap; + list-style: none; + margin: 0 0 0.625em -1.25em; +} + +ul.inline > li { + margin-left: 1.25em; +} + +.unstyled dl dt { + font-weight: 400; + font-style: normal; +} + +ol.arabic { + list-style-type: decimal; +} + +ol.decimal { + list-style-type: decimal-leading-zero; +} + +ol.loweralpha { + list-style-type: lower-alpha; +} + +ol.upperalpha { + list-style-type: upper-alpha; +} + +ol.lowerroman { + list-style-type: lower-roman; +} + +ol.upperroman { + list-style-type: upper-roman; +} + +ol.lowergreek { + list-style-type: lower-greek; +} + +.hdlist > table, +.colist > table { + border: 0; + background: none; +} + +.hdlist > table > tbody > tr, +.colist > table > tbody > tr { + background: none; +} + +td.hdlist1, +td.hdlist2 { + vertical-align: top; + padding: 0 0.625em; +} + +td.hdlist1 { + font-weight: bold; + padding-bottom: 1.25em; +} + +td.hdlist2 { + word-wrap: anywhere; +} + +.literalblock + .colist, +.listingblock + .colist { + margin-top: -0.5em; +} + +.colist td:not([class]):first-child { + padding: 0.4em 0.75em 0; + line-height: 1; + vertical-align: top; +} + +.colist td:not([class]):first-child img { + max-width: none; +} + +.colist td:not([class]):last-child { + padding: 0.25em 0; +} + +.thumb, +.th { + line-height: 0; + display: inline-block; + border: 4px solid #fff; + box-shadow: 0 0 0 1px #ddd; +} + +.imageblock.left { + margin: 0.25em 0.625em 1.25em 0; +} + +.imageblock.right { + margin: 0.25em 0 1.25em 0.625em; +} + +.imageblock > .title { + margin-bottom: 0; +} + +.imageblock.thumb, +.imageblock.th { + border-width: 6px; +} + +.imageblock.thumb > .title, +.imageblock.th > .title { + padding: 0 0.125em; +} + +.image.left, +.image.right { + margin-top: 0.25em; + margin-bottom: 0.25em; + display: inline-block; + line-height: 0; +} + +.image.left { + margin-right: 0.625em; +} + +.image.right { + margin-left: 0.625em; +} + +a.image { + text-decoration: none; + display: inline-block; +} + +a.image object { + pointer-events: none; +} + +sup.footnote, +sup.footnoteref { + font-size: 0.875em; + position: static; + vertical-align: super; +} + +sup.footnote a, +sup.footnoteref a { + text-decoration: none; +} + +sup.footnote a:active, +sup.footnoteref a:active { + text-decoration: underline; +} + +#footnotes { + padding-top: 0.75em; + padding-bottom: 0.75em; + margin-bottom: 0.625em; +} + +#footnotes hr { + width: 20%; + min-width: 6.25em; + margin: -0.25em 0 0.75em; + border-width: 1px 0 0; +} + +#footnotes .footnote { + padding: 0 0.375em 0 0.225em; + line-height: 1.3334; + font-size: 0.875em; + margin-left: 1.2em; + margin-bottom: 0.2em; +} + +#footnotes .footnote a:first-of-type { + font-weight: bold; + text-decoration: none; + margin-left: -1.05em; +} + +#footnotes .footnote:last-of-type { + margin-bottom: 0; +} + +#content #footnotes { + margin-top: -0.625em; + margin-bottom: 0; + padding: 0.75em 0; +} + +div.page-break { + display: none; +} + +div.unbreakable { + page-break-inside: avoid; +} + +.big { + font-size: larger; +} + +.small { + font-size: smaller; +} + +.underline { + text-decoration: underline; +} + +.overline { + text-decoration: overline; +} + +.line-through { + text-decoration: line-through; +} + +.aqua { + color: #00bfbf; +} + +.aqua-background { + background: #00fafa; +} + +.black { + color: #000; +} + +.black-background { + background: #000; +} + +.blue { + color: #0000bf; +} + +.blue-background { + background: #0000fa; +} + +.fuchsia { + color: #bf00bf; +} + +.fuchsia-background { + background: #fa00fa; +} + +.gray { + color: #606060; +} + +.gray-background { + background: #7d7d7d; +} + +.green { + color: #006000; +} + +.green-background { + background: #007d00; +} + +.lime { + color: #00bf00; +} + +.lime-background { + background: #00fa00; +} + +.maroon { + color: #600000; +} + +.maroon-background { + background: #7d0000; +} + +.navy { + color: #000060; +} + +.navy-background { + background: #00007d; +} + +.olive { + color: #606000; +} + +.olive-background { + background: #7d7d00; +} + +.purple { + color: #600060; +} + +.purple-background { + background: #7d007d; +} + +.red { + color: #bf0000; +} + +.red-background { + background: #fa0000; +} + +.silver { + color: #909090; +} + +.silver-background { + background: #bcbcbc; +} + +.teal { + color: #006060; +} + +.teal-background { + background: #007d7d; +} + +.white { + color: #bfbfbf; +} + +.white-background { + background: #fafafa; +} + +.yellow { + color: #bfbf00; +} + +.yellow-background { + background: #fafa00; +} + +span.icon > .fa { + cursor: default; +} + +a span.icon > .fa { + cursor: inherit; +} + +.admonitionblock td.icon [class^="fa icon-"] { + font-size: 2.5em; + text-shadow: 1px 1px 2px rgb(0 0 0 / 0.5); + cursor: default; +} + +.admonitionblock td.icon .icon-note::before { + content: "\f05a"; + color: #19407c; +} + +.admonitionblock td.icon .icon-tip::before { + content: "\f0eb"; + text-shadow: 1px 1px 2px rgb(155 155 0 / 0.8); + color: #111; +} + +.admonitionblock td.icon .icon-warning::before { + content: "\f071"; + color: #bf6900; +} + +.admonitionblock td.icon .icon-caution::before { + content: "\f06d"; + color: #bf3400; +} + +.admonitionblock td.icon .icon-important::before { + content: "\f06a"; + color: #bf0000; +} + +.conum[data-value] { + display: inline-block; + color: #fff !important; + background: rgb(0 0 0 / 0.8); + border-radius: 50%; + text-align: center; + font-size: 0.75em; + width: 1.67em; + height: 1.67em; + line-height: 1.67em; + font-family: "Open Sans", "DejaVu Sans", sans-serif; + font-style: normal; + font-weight: bold; +} + +.conum[data-value] * { + color: #fff !important; +} + +.conum[data-value] + b { + display: none; +} + +.conum[data-value]::after { + content: attr(data-value); +} + +pre .conum[data-value] { + position: relative; + top: -0.125em; +} + +b.conum * { + color: inherit !important; +} + +.conum:not([data-value]):empty { + display: none; +} + +dt, +th.tableblock, +td.content, +div.footnote { + text-rendering: optimizeLegibility; +} + +h1, +h2, +p, +td.content, +span.alt, +summary { + letter-spacing: -0.01em; +} + +p strong, +td.content strong, +div.footnote strong { + letter-spacing: -0.005em; +} + +p, +blockquote, +dt, +td.content, +span.alt, +summary { + font-size: 1.0625rem; +} + +.sidebarblock p, +.sidebarblock dt, +.sidebarblock td.content, +p.tableblock { + font-size: 1em; +} + +.print-only { + display: none !important; +} + +@page { + margin: 1.25cm 0.75cm; +} + +@media print { + * { + box-shadow: none !important; + text-shadow: none !important; + } + + html { + font-size: 80%; + } + + a { + color: inherit !important; + text-decoration: underline !important; + } + + a.bare, + a[href^="#"], + a[href^="mailto:"] { + text-decoration: none !important; + } + + a[href^="http:"]:not(.bare)::after, + a[href^="https:"]:not(.bare)::after { + content: "(" attr(href) ")"; + display: inline-block; + font-size: 0.875em; + padding-left: 0.25em; + } + + abbr[title] { + border-bottom: 1px dotted; + } + + abbr[title]::after { + content: " (" attr(title) ")"; + } + + pre, + blockquote, + tr, + img, + object, + svg { + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + p, + blockquote, + dt, + td.content { + font-size: 1em; + orphans: 3; + widows: 3; + } + + h2, + h3, + #toctitle, + .sidebarblock > .content > .title { + page-break-after: avoid; + } + + body > div[id] { + max-width: none; + } + + #toc, + .sidebarblock, + .exampleblock > .content { + background: none !important; + } + + #toc { + border-bottom: 1px solid #dddddf !important; + padding-bottom: 0 !important; + } + + body.book #header { + text-align: center; + } + + body.book #header > h1:first-child { + border: 0 !important; + margin: 2.5em 0 1em; + } + + body.book #header .details { + border: 0 !important; + display: block; + padding: 0 !important; + } + + body.book #header .details span:first-child { + margin-left: 0 !important; + } + + body.book #header .details br { + display: block; + } + + body.book #header .details br + span::before { + content: none !important; + } + + body.book #toc { + border: 0 !important; + text-align: left !important; + padding: 0 !important; + margin: 0 !important; + } + + body.book #toc, + body.book #preamble, + body.book h1.sect0, + body.book .sect1 > h2 { + page-break-before: always; + } + + .listingblock code[data-lang]::before { + display: block; + } + + div.page-break { + display: block; + page-break-after: always; + } + + #footer { + padding: 0 0.9375em; + } + + .hide-on-print { + display: none !important; + } + + .print-only { + display: block !important; + } + + .hide-for-print { + display: none !important; + } + + .show-for-print { + display: inherit !important; + } +} + +@media amzn-kf8, print { + #header > h1:first-child { + margin-top: 1.25rem; + } + + .sect1 { + padding: 0 !important; + } + + .sect1 + .sect1 { + border: 0; + } + + #footer { + background: none; + } + + #footer-text { + color: rgb(0 0 0 / 0.6); + font-size: 0.9em; + } +} + +@media amzn-kf8 { + body > div[id] { + padding: 0; + } +} + +:root { + --font-family: "Source Serif Pro"; + --font-family-display: "Rowdies"; + --font-family-display-inner: "Barlow Semi Condensed"; + --font-family-highlight: "Barlow"; + --font-family-lead: "Barlow"; + + font-size: 14px; +} + +body { + font-size: 100%; +} + +body, +#toc a { + font-family: var(--font-family); +} + +h1, +h2, +h3, +h4, +h5, +h6, +#toctitle, +.sidebarblock > .content > .title { + color: black; + text-transform: uppercase; +} + +h1, +h2 { + font-family: var(--font-family-display); + font-weight: 400; +} + +h3, +h4, +h5, +h6, +#toctitle, +.sidebarblock > .content > .title { + font-family: var(--font-family-display-inner); + font-weight: 500; +} + +.rules-el { + font-family: var(--font-family-highlight); + font-weight: 600; +} + +.lead { + font-family: var(--font-family-lead); + font-style: italic; +} + +.game-name { + text-transform: uppercase; +} + +.game-name-display { + font-weight: bold; +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..8c73e58 --- /dev/null +++ b/justfile @@ -0,0 +1,5 @@ +default: + asciidoctor the-cyberdark-future.adoc + +@clean: + rm -rf ./the-cyberdark-future.html \ No newline at end of file diff --git a/preview.css b/preview.css new file mode 100644 index 0000000..c2f2a29 --- /dev/null +++ b/preview.css @@ -0,0 +1,2 @@ +@import url("https://cdn.jsdelivr.net/gh/asciidoctor/asciidoctor@2.0/data/stylesheets/asciidoctor-default.css"); +@import url(shared.css); diff --git a/shared.css b/shared.css new file mode 100644 index 0000000..7e4b232 --- /dev/null +++ b/shared.css @@ -0,0 +1,90 @@ +@import url("https://fonts.googleapis.com/css2?family=Rowdies:wght@300;400;700&family=Source+Serif+Pro:wght@200;300;400;600;700;900&family=Barlow:wght@100;200;300;400;500;600;700;800;900&family=Barlow+Condensed:wght@100;200;300;400;500;600;700;800;900&family=Barlow+Semi+Condensed:wght@100;200;300;400;500;600;700;800;900"); + +:root { + --font-family: "Source Serif Pro"; + --font-family-display: "Rowdies"; + --font-family-display-inner: "Barlow Semi Condensed"; + --font-family-display-deep: "Barlow Condensed"; + --font-family-highlight: "Barlow"; + --font-family-lead: "Barlow Semi Condensed"; + --black: #333333; + --base-font-size: 18px; + --font-family-blockquote: "Barlow Semi Condensed"; +} + +html { + font-size: var(--base-font-size); +} + +body { + font-size: 100%; + color: var(--black); +} + +body, +#toc a { + font-family: var(--font-family); +} + +h1, +h2, +h3, +h4, +h5, +h6, +#toctitle, +.sidebarblock > .content > .title { + color: var(--black); + text-transform: uppercase; +} + +h1, +h2 { + font-family: var(--font-family-display); + font-weight: 400; +} + +h3, +h4, +h5, +h6, +#toctitle, +.sidebarblock > .content > .title { + font-family: var(--font-family-display-inner); + font-weight: 500; +} + +h5, +h6 { + font-family: var(--font-family-display-deep); + font-weight: 600; + font-style: italic; +} + +.rules-el { + font-family: var(--font-family-highlight); + font-weight: 600; +} + +.lead { + font-family: var(--font-family-lead); + font-style: italic; +} + +.game-name { + text-transform: uppercase; +} + +.game-name-display { + font-weight: bold; +} + +.exampleblock.example-of-play p { + margin: 0; +} + +.quoteblock blockquote { + line-height: 1.5; + padding: 0.25rem; + font-family: var(--font-family-blockquote); +} diff --git a/the-cyberdark-future.adoc b/the-cyberdark-future.adoc new file mode 100644 index 0000000..9fdc220 --- /dev/null +++ b/the-cyberdark-future.adoc @@ -0,0 +1,609 @@ += The Cyberdark Future +Sean-Patrick Ortencio Clayton +:description: Rules for The Cyberdark Future Tabletop RPG. +:sectanchors: +:sectnums: +:toclevels: 3 +:url-repo: https://codeberg.org/sean/the-cyberdark-future +:imagesdir: _attachments +:toc: right +:stylesheet: doc.css + +:game-name-plain: pass:quotes[[.game-name]#The Cyberdark Future#] +:game-name: pass:quotes[[.game-name.game-name-display]#The Cyberdark Future#] +:city-name: Cardinal +:character-type: Cyberpunk +:character-type-plural: Cyberpunks + +image:logo-bw.svg[] + +<<< + +Anyone found copying the content in this document without permission will be a real good friend of mine. +Please do it--fuck asking for permission! +Holding intellectual property hostage and threatening legal action over it is something only the villains do in cyberpunk fiction, +and I ain't trynna be a hypocrite in the first page of the damn game! + +Attribution is always cool and appreciated, but I wouldn't sue you if you didn't, even if I could. +You don't owe me shit. +Paying for the game is _also_ always cool and appreciated, but eh, times certainly can be tough and I won't blame ya if you didn't. +If you see this on a shelf in a bookstore for sale, feel free to steal it if you don't feel like paying for it! +I probably can't do anything if you get caught, though, so be careful! + +{game-name-plain} + +🄯 2022 Sean-Patrick Ortencio Clayton. All rights reversed. + +*THIS MACHINE KILLS CAPITALISTS.* + +*** + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +[start=0] +. You just DO WHAT THE FUCK YOU WANT TO. + +*** + +There, that's about as much as I can do to help you out here. +Now go on and have fun! + +<<< + +[discrete] +== Acknowledgements + +Based on https://www.bladesinthedark.com/[*Blades in the Dark*] by John Harper, +licensed for our use under the https://creativecommons.org/licenses/by/3.0/[Creative Commons Attribution 3.0 Unported license]. + +*Sean-Patrick Ortencio Clayton* + +All-around cool guy · The dude who made this game. + +*Veronika, Aiedal, and Caleb* + +My players who had to put up with my shit for far too long. + +*Mom* + +For making me as cool as I am. + +<<< + +== Introduction + +[.lead] +{game-name} is a cyberpunk tabletop roleplaying game (RPG) in which you and other players come together to discover a cybernetic-fueled punk narrative of daring criminals facing a world oppressed by massive governments and corporations, filled with violent gangs, rogue AI, and other dangerous and deadly threats on the streets of the neon-bleeding {city-name}. +{game-name-plain} is, more importantly, a narrative-driven game where the players tell a story through risk-taking choices and actions. + +=== This is a Roleplaying Game + +{game-name} is an interactive narrative where one of the players, the Game Master (GM), +describes the situation and surroundings as well as keeping things dramatic and fast-paced, +while the other players take on the roles of the player characters (PCs) take the form of a [.rules-el]#Crew# who drive the story and act to overcome challenges. +Lurking around every corner in {game-name-plain} could be a corporate agent looking to blackmail you, +a rogue artificial intelligence virus wanting to take over your cyberdeck, +a gang of ripperjax figuring out how hard it'd be to take off your cybernetic arm mods, +or even a lost android looking for the meaning of life, +amongst many, many other dangerous and even deadly possibilities. + +This game is best played with 3–5 players, with one of the players taking the role of the group's GM. +The GM is responsible for portraying a vivid and living world, keeping a dramatic pace, determining what threats and dangers are present, introducing challenges for the players to attempt to overcome, and ask provoking questions to the players which keep the narrative rich and flowing. +The GM also will play the role of all the non-player characters (NPCs) that the PCs interact with--friends, rivals, and nemeses alike. +The PCs take in the situation described by the GM and describe what they are doing and add to the narrative by answering the questions posed by the GM. +When a PC wants to do something that has no certain outcome, they'll roll some six-sided dice (d6) to determine the outcome. + +==== The Game + +{game-name} is played in sessions that typically last 2–5 hours--Sometimes even more! +In these sessions the players will perform a [.rules-el]#Gig# where the PCs are given the opportunity to take on a task such as smuggling illicit goods, +extracting a character from location and bringing them to another, +or destroying corporate property and getting away before security forces arrive. +After they complete the [.rules-el]#Gig#, success or failure, they will take part in [.rules-el]#Downtime#. +In [.rules-el]#Downtime#, the PCs do activities like spending the earnings of their [.rules-el]#Gigs#, [.rules-el]#Craft# items, expand their [.rules-el]#Crew's# influence, and make decisions when faced with the consequences of the [.rules-el]#Gig# they just finished. + +The story the players tell can be told in as little as a single session, often called a "`one-shot,`" over a handful sessions, or it can even take many sessions, known as a "`campaign,`" to complete. +A good rule-of-thumb for campaign lengths in {game-name-plain} is that you shouldn't exceed (roughly) 20 [.rules-el]#Gigs#. +The final few [.rules-el]#Gigs# the Crew performs should give them an opportunity to leave their mark on {city-name} in a climactic finish. + +==== The Players + +In a game of {game-name-plain}, all of the people involved is a player, including the Game Master. +Typically, though, people make the distinction between the GM and the others, calling them the players. +The players will work together to create their crew and then individually create their Player Characters. +A PC in {game-name-plain} is a {character-type}. +A {character-type} is a criminal who undertakes dangerous and deadly jobs. +Players give life to their PC, giving them interesting traits and pushing their luck to the limit. +*This is the task given to each player.* +It's their primary focus to interact with the world as their PC would--to take risks, +to accept the dangerous opportunities in front of them, +and describe the narrative around them. + +Together with the GM, the players establish a tone and feel of their game. +The players are not passive observers who let the GM control the narrative of the game--they are co-authors, +all working together to create a story. + +==== The Game Master + +Initiating the narrative is what the GM does. +What do the Player Characters see, smell, hear, and notice as they are running down dark alleys, escaping from blood-thirsty corpo security? +The GM is responsible for keeping the pacing and tension interesting. +What the PCs do is up to them, but how the world reacts is up to you. + +The story and narrative isn't dictated by the GM. +The GM asks questions to let the Players decide narrative truths. +Give them opportunities to fill in the blanks--it's not solely your job. + +The GM also keeps the game interesting by offering enticing and risky opportunities for the PCs to interact with. +That shady character in the corner of the bar the PCs just walked into probably has something to offer them later on down the road. +Have the individual stand up, bump into them on the way out, and slip their card into a pocket. + +==== The Characters + +The characters are {character-type-plural}--people who ride a fine edge between an exciting life and the dark of death. +They get their jobs from fixers mostly, but many will set up their own operations if the job is personal. + +No matter who gives these {character-type-plural} their task, one thing is for sure: Don't get in their way! + +Each player will create a Character Sheet for their PC. +The main choice they'll make during character creation is picking their Playbook--a character type that represents the style of play they'll want to use. Here are the available Playbooks found in this document. + +- *Cyber Ninja* A stealthy hacker who steals data from computer systems. Use this Playbook if you want to make electronics bend to your will and quietly take down foes. +- *Patch* A makeshift doctor and cybernetic tweaker. Use this Playbook if you want to play as a character who can help teammates overcome deadly consequences and make changes to cybernetics. +- *Shooter* +- *Shredder* A rocker who rallies their +- *Street Samurai* +- *Tech* + +==== The Crew + + + +==== Touchstones + +{game-name-plain} makes no claim to invent the cyberpunk setting. +There is a long and rich history of cyberpunk media that you and others can enjoy which should give an idea of the themes, aesthetic, and philosophy this game builds upon. + +To Watch:: + _Blade Runner_ by Ridley Scott · + _Blade Runner 2049_ by Denis Villeneuve · + _Ghost in the Shell (1995) (Subs)_ by Mamoru Oshii · + _Akira_ by Katsuhiro Otomo · + _The Matrix_ by the Wachowskis · + _Cyberpunk: Edgerunners_ by CD Projekt Red and Studio Trigger +To Read:: + _The Sprawl_ series, especially _Neuromancer_, by William Gibson · + _Battle Angel Alita_ by Yukito Kishiro +To Play:: + _Cyberpunk 2020_ and _Cyberpunk RED_ by Mike Pondsmith · + _Cyberpunk 2077_ by CD Projekt Red · + _Android: Shadow of the Beanstalk_ by Fantasy Flight Games +To Listen to:: + _Clockwork_ by Hyper · + _BREAK LAW_ by Boys Noize and Skrillex · + _Takyon_ by Death Grips · + +=== Playing the Game + +==== What You Need to Play + +- Two to four players and one game master. +- At least six d6s. +- Printed character sheets and crew sheets, reference sheets, and neighborhood sheets. +- The core rules (what you're reading right now). +- Paper, index cards, and note-taking materials, while not absolutely necessary, are useful. + +==== It's Your Game + +==== The Gig + +==== Downtime + +==== Key Terms + +[horizontal] +Coin:: + Money +Stash:: + Backup money +Resistance:: + To negate a consequence +Armor:: + To limited-use negation of consequence +Action Roll:: + To make a move +Stress:: + A limited resource to spend on turning the fiction in your favor +Trauma:: + The consequence of spending too much Stress + +=== Example of Play + +[.example-of-play] +[example] +-- +*GM*: So, what's the plan? + +*Alice*: I'm not sure, what do you all think? + +*Tim*: What about this? +-- + +=== Using this Document + +This document is organized to make finding the rules as easiest as possible. +The rules are grouped in chapters, and are ordered in a way that makes it convenient for first-time players, +while also making an effort to keep it easy as a rules reference during play, no matter how experienced you are with the game. + +The early chapters are all about understanding what the game is, creating a crew, and then creating characters--players will get the most out of these. +The final chapters are meant to be useful for the Game Master. +They bring into detail the setting of the game, as well as a dedicated chapter to game mastery tips and philosphy for {game-name-plain}. +Here is a summary of the chapters you will find in this document. + +[discrete] +==== Chapter 1: Introduction + +[discrete] +==== Chapter 2: Heritages & Backgrounds + +[discrete] +==== Chapter 3: Crews + +[discrete] +==== Chapter 4: Playbooks + +[discrete] +==== Chapter 5: Equipment + +[discrete] +==== Chapter 6: The Cyberdark Future + +The world is a much different place in the year 2141. +In this chapter + +[discrete] +==== Chapter 7: {city-name} + +[discrete] +==== Chapter 8: Playing the Game + +[discrete] +==== Chapter 9: Game Master + +=== Format of Rules Elements + +A rule element will look like this: [.rules-el]#Example# + +=== Crew Creation + +[discrete] +==== Step 1: Choose Your Mindset + +Your crew's mindset determines how your crew gains Crew EXP. +It also acts as an indicator of what the feel of your game will be like. + +There are three to choose from. + +Become Legends:: + Gotta make it to the big leagues. +Fight Back:: + This all needs to mean something. +Pure Chaos:: + You just want to see the world burn. + +_What happened to your crew that solidified their mindset?_ + +[discrete] +===== To Become Legends + +[.lead] +[quote] +{city-name}'s different things to different people. To us, it's all ours for the taking. + +If your crew is in it For the Thrill, they are granted Crew EXP when they take jobs to + +[discrete] +===== To Fight Back + +[.lead] +[quote] +We can't sit idly seeing the world around us. We have to rise up. + +If your crew is in it To Fight Back, they are granted Crew EXP when they fight against oppressive forces, +when they fight for those that need help, +or when they act in a selfless manor. + +[discrete] +===== For Pure Chaos + +[.lead] +[quote] +asdf + +[discrete] +==== Step 2: Choose a Hangout + +[discrete] +==== Step 3: Choose an Initial Reputation + +[discrete] +==== Step 4: Establish Your Neighborhood + +[discrete] +==== Step 5: Choose a Special Ability + +[discrete] +==== Step 6: Assign Upgrades + +[discrete] +==== Step 7: Choose a Favorite Contact + +=== Sample Crew + +=== Cohorts + +=== Character Creation + +==== Actions + +[quote, Stef] +-- +Jesus Flick, get your head together. +Just because you and I go back doesn't give you the fuckin' right to go low. +I promise we'll go get her--just don't mess this all up for everyone. +-- + +When characters {game-name} + +=== Sample Character + +<<< + +== Archetypes & Backgrounds + +=== Archetypes + +=== Backgrounds + +== Crew Types + +=== BlakHax + +=== Hitters + +=== Tagz + +<<< + +== Playbooks + +=== Cyber Ninja + +=== Runner + +=== Shredder + +=== Street Samurai + +=== Tech + +<<< + +== Equipment + +=== Standard Equipment + +=== Cybernetics + +[discrete] +==== Tier I + +[unstyled] +* **Clayware (optics) (1 Cred)** + You can easily assess if someone is lying to you by sensing common physical attributes such as elevated heartbeat and raised blood pressure. + Someone who is an expert and preventing such physical responses while lying can easily avoid your detection. +* **Clayware (optics)** You have hyper-sensitive gyroscopes that can easily tell if there is movement around you and the general location of it. +* **Roscoe's Sight (nasal)** Your nose can detect smells from distant places, and close by you can smell nearly exactly where the source is coming from. +* Sensory Recording Device +* Low-light Vision +* Darkvision +* Thermal Vision +* Voice Emulation +* Phsyical Lockpicking / Skeleton Key +* finger lighter + +<<< + +== The Cyberdark Future + +[.lead] +It's the year 2141. + +.Slang in the 22nd Century +**** +[horizontal] +Bob:: A term of endearment. +**** + +== {city-name} + +=== Factions of {city-name} + +=== Ground-Level Neighborhoods + +==== Downtown + +==== Big Four + +==== Beatdown + +==== Toonerville + +The oldest neighborhood of {city-name}, Toonerville was the downtown area hundreds of years ago when {city-name} was first founded. +After the first flooding, a new downtown district was created and Toonerville grew to become what it is today. + +==== Hillcrest + +==== Slaughtertown + +==== Portland + +==== Molotov + +==== Old Water Tower District + +==== Ali Skyport + +=== Lower Unit Blocks + +Just called "the units" by most of the people in {city-name}, the lower units were first constructed at the turn of the 21st century. +Expanding the ground-level metro area was difficult to do, so in the years since the units have expanded massively, sprawling out underneath much of the metro area. +The units go as deep as 3000 feet below ground, especially around the entry zones from street level. +At these entry zones are winding 10-lane highways spiraling down. +Traditional automobiles occupy these highways while gravcraft have ample room to move in and out of the grid-like streets down in the units. + +Down here is where {city-name}'s lower class mostly resides. +Sure there's a lot of people struggling up top, but down here there's nothing but that. +Above are the people who can afford a ground-level living and lifestyle--called "uppers" by those down in the units. +In the units are people just scraping by, where even seeing sunlight in your house is considered a luxury. +Despite the units being where most of {city-name}'s lower class lives, many people who live here go to ground-level to work. + +At the entrances are where most of the commerce takes place in the units. +The further away you get typically is where more crime is prevalent. +There are many smaller entrances restricted only to police and privileged corporate security companies to make it easier for them to respond to crime in the units. + +In even greater number are the secret, hidden entrances found throughout {city-name}. +Authorities don't know about a vast majority of these as they are too numerous to keep track of, +but they are incredibly well-kept secrets because of the value they provide to those who need to quickly move between the ground-level and the units. + +==== Block 022 + +==== Block 067 + +==== Block 032 + +==== Block 143 + +==== Block 212 + +==== Block 289 + +<<< + +== The Darknet + +[discrete] +=== The First Netquake + +// Why 2038? Because of the Year 2038 problem. +// https://en.wikipedia.org/wiki/Year_2038_problem +In 2038 the first netquake was released by the hacker group known as dreadbeef. +At 03:14:08 on Jan 19, 1938, dreadbeef released the first netquake virus. + + 10000000 + 00000000 + 00000000 + 00000000 + +[discrete] +=== Netquake Centura + +<<< + +== Playing the Game + +=== Actions & Attributes + +==== Actions + +==== Attributes + +=== Teamwork + +=== Free Play + +=== The Gig + +=== Downtime + +=== Death + +[quote, Flick] +-- +I can't believe it... She's gone. +I'm gonna murder all of you fucks if it's the last thing I do! +-- + +=== Player Best Practices + +<<< + +== Game Mastery + +=== Depicting Life in {city-name} + +=== Goals + +=== Principles + +=== Best Practices + +=== Bad Habits + +=== Preparing a Session + +=== Position and Effect + +=== Alternative Rules + +=== Building your own Setting + +=== Planning and Finishing Your Campaign + +<<< + +== Appendix + +=== Changelog + +=== Colophon + +{game-name} is built with nothing but Free and Open Source software and assets. + +The typefaces you have seen are: + +* *Rowdies* used mostly for the main headings and {game-name-plain} logo. +* *Barlow* used for headings and leading text. +* *Source Serif Pro* used for most of the text in read-heavy scenarios. + +These are all free and open source fonts. + +This rendered document is also built from several pieces of free and open source software. +AsciiDoc is used to create the single-page document. +The multi-page, interactive document website is built with Phoenix and Elixir. + +The logo for {game-name-plain} is created with Inkscape. + +<<< + +[discrete] +== Thank You + +I wanted to take the space here to thank you, the reader, for taking time out of your day to read about this game. +It was a long time in the making and something I've never done before. +I'm excited--albeit a bit nervous--to hear what everyone has to say about it. +Hopefully you and some friends enjoy it and have some great, neon-infused memories to reminisce about together. + +This game is yours to do with as you please. +Hack it, mix it, change it, sell it--whatever! +I'd love to hear about the cyberdark future that you all have come up with. +If the fate of a certain faction or NPC had a dramatic tale, I wanna read all about it. +If you made a hack, I'd much like to read it. +If it's for sale, I wanna buy it! + +Let me know whatever you have to say. +I'm all ears. + +Email me at yo@sean.wtf + +Toot at me at @sc@kolektiva.social + +Tweet at me at @yoseanwtf + +{empty} + +{empty} + +– Sean \ No newline at end of file