summaryrefslogtreecommitdiff
path: root/css/style.css
diff options
context:
space:
mode:
authorConstantijn Bicker Caarten <git@bickercaarten.com>2026-09-28 20:47:23 +0200
committerConstantijn Bicker Caarten <git@bickercaarten.com>2026-09-28 20:47:23 +0200
commit88efb4dfdca2fb68d016b9cb9838046b09270d6c (patch)
tree48f95b889f4d902a413581867c17bf727f44982b /css/style.css
Initial commit
Diffstat (limited to 'css/style.css')
-rw-r--r--css/style.css1089
1 files changed, 1089 insertions, 0 deletions
diff --git a/css/style.css b/css/style.css
new file mode 100644
index 0000000..b7a163c
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,1089 @@
+:root {
+ --main-bg-color: #222;
+ --main-color: #c8c8c8;
+ --secondary-color: #969696;
+ --highlight-color: #fff;
+ --toggle-label: "light";
+ color-scheme: dark;
+}
+
+:root:has(#theme-toggle:checked) {
+ --main-bg-color: #f0efe9;
+ --main-color: #333;
+ --secondary-color: #666;
+ --highlight-color: #000;
+ --toggle-label: "dark";
+ color-scheme: light;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ --main-bg-color: #f0efe9;
+ --main-color: #333;
+ --secondary-color: #666;
+ --highlight-color: #000;
+ --toggle-label: "dark";
+ color-scheme: light;
+ }
+
+ :root:has(#theme-toggle:checked) {
+ --main-bg-color: #222;
+ --main-color: #c8c8c8;
+ --secondary-color: #969696;
+ --highlight-color: #fff;
+ --toggle-label: "light";
+ color-scheme: dark;
+ }
+}
+
+@media (prefers-contrast: more) {
+ :root {
+ --secondary-color: #b0b0b0;
+ }
+
+ :root:has(#theme-toggle:checked) {
+ --secondary-color: #4d4d4d;
+ }
+
+ @media (prefers-color-scheme: light) {
+ :root {
+ --secondary-color: #4d4d4d;
+ }
+
+ :root:has(#theme-toggle:checked) {
+ --secondary-color: #b0b0b0;
+ }
+ }
+
+ :root .grid-item-header::before {
+ color: var(--main-bg-color);
+ }
+}
+
+@font-face {
+ font-family: m6x11;
+ src: url(../fonts/m6x11.woff2) format("woff2");
+ font-display: swap;
+}
+
+html {
+ scrollbar-color: var(--main-color) var(--main-bg-color);
+}
+
+body {
+ cursor: crosshair;
+ font-family: 'm6x11';
+ font-size: 18px;
+ color: var(--main-color);
+ background: var(--main-bg-color);
+ margin: 0;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
+
+a {
+ color: var(--highlight-color);
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a:focus-visible {
+ outline: 2px solid var(--main-color);
+ outline-offset: 2px;
+}
+
+code {
+ font-family: 'm6x11';
+}
+
+::selection {
+ background: var(--main-color);
+ color: var(--main-bg-color);
+}
+
+.grid-item-header::selection,
+.grid-item-header ::selection,
+footer::selection,
+footer ::selection {
+ background: var(--main-bg-color);
+ color: var(--main-color);
+}
+
+[aria-hidden="true"] {
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+#header,
+.title,
+.grid-item,
+.secret,
+footer {
+ cursor: auto;
+}
+
+#header {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 8px 4px;
+ padding: 24px;
+ margin-bottom: 16px;
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background:
+ linear-gradient(90deg, var(--main-color) 8px, transparent 8px) left bottom / 12px 2px repeat-x,
+ var(--main-bg-color);
+}
+
+#header a,
+#header .nav-toggle {
+ color: var(--main-color);
+ text-decoration: none;
+ padding: 8px 16px;
+}
+
+#header a:not(.nav-home)::before {
+ content: "[";
+ content: "[" / "";
+}
+
+#header a:not(.nav-home)::after {
+ content: "]";
+ content: "]" / "";
+}
+
+#header .nav-home {
+ margin-right: 8px;
+}
+
+#header a:hover,
+#header a:focus-visible,
+#header .nav-toggle:hover,
+#theme-toggle:focus-visible + .nav-toggle,
+body:has(#about:target) #header a[href="#about"],
+body:has(#projects:target) #header a[href="#projects"],
+body:has(#files:target) #header a[href="#files"],
+body:has(#contact:target) #header a[href="#contact"],
+body:has(#credits:target) #header a[href="#credits"] {
+ background: var(--main-color);
+ color: var(--main-bg-color);
+}
+
+#header a:not(.nav-action) + .nav-action {
+ margin-left: auto;
+}
+
+.nav-toggle {
+ cursor: pointer;
+}
+
+.theme-toggle::before {
+ content: "[" var(--toggle-label) "]";
+ content: "[" var(--toggle-label) "]" / "";
+}
+
+#theme-toggle:focus-visible + .nav-toggle {
+ outline: 2px solid var(--main-color);
+ outline-offset: 2px;
+}
+
+.nav-action {
+ display: inline-flex;
+ align-items: center;
+}
+
+.nav-action .arrow {
+ order: 1;
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ margin-left: 4px;
+ background: currentColor;
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7 7' shape-rendering='crispEdges'%3E%3Cpath d='M2 0h5v5h-1v-4h-4zM5 1h1v1h-1zM4 2h1v1h-1zM3 3h1v1h-1zM2 4h1v1h-1zM1 5h1v1h-1zM0 6h1v1h-1z'/%3E%3C/svg%3E") no-repeat center / contain;
+}
+
+.title {
+ width: fit-content;
+ max-width: 100%;
+ box-sizing: border-box;
+ margin: 40px auto;
+ padding: 0 24px;
+}
+
+.title h1 {
+ text-transform: uppercase;
+ font-size: 64px;
+ margin: 0;
+}
+
+.grid-container {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(min(512px, 100%), 1fr));
+ gap: 48px;
+ align-content: start;
+ align-items: start;
+ justify-items: center;
+ padding: 0 40px 48px 24px;
+ flex: 1 0 auto;
+}
+
+@media (min-width: 1300px) {
+ .grid-container:not(.grid-single) {
+ --channel: 80px;
+ grid-template-columns: repeat(2, minmax(0, 620px));
+ column-gap: calc(2 * var(--channel));
+ justify-content: center;
+ align-items: start;
+ --side: clamp(36px, 7.5vw, 144px);
+ padding-left: var(--side);
+ padding-right: calc(var(--side) + 16px);
+ position: relative;
+ padding-bottom: 72px;
+ flex: none;
+ }
+
+ .grid-container:not(.grid-single) + .secret {
+ margin-top: auto;
+ }
+
+ .grid-container:not(.grid-single)::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ bottom: 48px;
+ left: calc(50% - 8px - 2px);
+ width: 4px;
+ background: repeating-linear-gradient(to bottom, var(--secondary-color) 0 8px, transparent 8px 12px);
+ pointer-events: none;
+ }
+
+ .grid-container:not(.grid-single)::after {
+ content: "EOF" / "";
+ position: absolute;
+ bottom: 12px;
+ left: calc(50% - 8px);
+ translate: -50% 0;
+ font-size: 16px;
+ line-height: 16px;
+ letter-spacing: 2px;
+ color: var(--secondary-color);
+ pointer-events: none;
+ }
+
+ .grid-container:not(.grid-single)::before {
+ bottom: 32px;
+ }
+
+ .grid-container .zz-col {
+ display: flex;
+ flex-direction: column;
+ gap: 56px;
+ justify-self: stretch;
+ }
+
+ .zz-left {
+ align-items: flex-end;
+ }
+
+ .zz-right {
+ align-items: flex-start;
+ margin-top: 96px;
+ }
+
+ .grid-container:not(.grid-single) .grid-item:is(#about, #projects, #files, #contact, #credits) {
+ max-width: min(520px, 100%);
+ translate: none;
+ }
+
+ #about { --addr: "0x00"; }
+ #projects { --addr: "0x20"; }
+ #files { --addr: "0x40"; }
+ #contact { --addr: "0x60"; }
+ #credits { --addr: "0x80"; }
+
+ .zz-col > .grid-item::before {
+ content: var(--addr, "") / "";
+ position: absolute;
+ top: -8px;
+ box-sizing: border-box;
+ width: var(--channel);
+ height: 20px;
+ font-size: 16px;
+ line-height: 16px;
+ color: var(--secondary-color);
+ background: linear-gradient(var(--secondary-color), var(--secondary-color)) left bottom / 100% 2px no-repeat;
+ pointer-events: none;
+ }
+
+ .zz-col > .grid-item:is(:hover, :focus-within)::before {
+ color: var(--main-color);
+ }
+
+ .zz-col > .grid-item:target::before {
+ color: var(--highlight-color);
+ }
+
+ .zz-left > .grid-item::before {
+ left: calc(100% + 4px);
+ text-align: right;
+ padding-right: 6px;
+ }
+
+ .zz-right > .grid-item::before {
+ right: calc(100% + 4px);
+ text-align: left;
+ padding-left: 6px;
+ }
+
+ @media (hover: hover) {
+ .zz-col > .grid-item:hover::before {
+ translate: 0 -8px;
+ }
+
+ .zz-left > .grid-item:hover::before {
+ width: calc(var(--channel) - 8px);
+ }
+
+ .zz-right > .grid-item:hover::before {
+ width: calc(var(--channel) + 8px);
+ }
+ }
+}
+
+.grid-single {
+ width: 100%;
+ max-width: 720px;
+ margin: 0 auto;
+ box-sizing: border-box;
+}
+
+.grid-item {
+ position: relative;
+ background: var(--main-bg-color);
+ scroll-margin-top: 104px;
+ border: 4px solid var(--main-color);
+ --shadow: 16px;
+ box-shadow: var(--shadow) var(--shadow) 0px var(--secondary-color);
+ --mark-color: var(--secondary-color);
+ --mark-gap: 14px;
+ max-width: 90%;
+}
+
+.grid-item::after {
+ content: "";
+ position: absolute;
+ top: calc(-1 * var(--mark-gap));
+ left: calc(-1 * var(--mark-gap));
+ right: calc(-1 * var(--mark-gap) - var(--shadow));
+ bottom: calc(-1 * var(--mark-gap) - var(--shadow));
+ --arm: 10px;
+ --w: 2px;
+ background:
+ linear-gradient(var(--mark-color), var(--mark-color)) left top / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) left top / var(--w) var(--arm),
+ linear-gradient(var(--mark-color), var(--mark-color)) right top / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) right top / var(--w) var(--arm),
+ linear-gradient(var(--mark-color), var(--mark-color)) left bottom / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) left bottom / var(--w) var(--arm),
+ linear-gradient(var(--mark-color), var(--mark-color)) right bottom / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) right bottom / var(--w) var(--arm);
+ background-repeat: no-repeat;
+ pointer-events: none;
+}
+
+#about { translate: -8px 6px; }
+#projects { translate: 10px -8px; }
+#files { translate: 6px 12px; }
+#contact { translate: -10px -4px; }
+#credits { translate: 8px 4px; }
+
+.zz-col {
+ display: contents;
+}
+
+#about { order: 1; }
+#projects { order: 2; }
+#files { order: 3; }
+#contact { order: 4; }
+#credits { order: 5; }
+
+.grid-item:target {
+ border-color: var(--highlight-color);
+ --mark-color: var(--highlight-color);
+}
+
+@media (hover: hover) {
+ .grid-item:hover {
+ transform: translate(8px, 8px);
+ box-shadow: 8px 8px 0px var(--secondary-color);
+ }
+}
+
+.grid-item-header {
+ display: flex;
+ cursor: pointer;
+ list-style: none;
+ justify-content: space-between;
+ text-transform: uppercase;
+ color: var(--main-bg-color);
+ background-color: var(--main-color);
+}
+
+.grid-item { --window-id: "0x3f"; }
+#projects { --window-id: "0xa7"; }
+#files { --window-id: "0x1c"; }
+#contact { --window-id: "0xe2"; }
+#credits { --window-id: "0x5b"; }
+
+.grid-item-header::before {
+ content: var(--window-id) / "";
+ flex-shrink: 0;
+ text-transform: none;
+ margin-left: 4px;
+ font-size: 16px;
+ letter-spacing: 2px;
+ color: var(--secondary-color);
+}
+
+.grid-item-header::-webkit-details-marker {
+ display: none;
+}
+
+.grid-item-header:focus-visible {
+ outline: 2px dashed var(--main-bg-color);
+ outline-offset: -4px;
+}
+
+.grid-item:target .grid-item-header {
+ background-color: var(--highlight-color);
+}
+
+.window-title::after {
+ content: attr(data-cmd) / "";
+ position: absolute;
+ inset: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ background: var(--main-color);
+ visibility: hidden;
+}
+
+.grid-item:target .window-title::after {
+ background: var(--highlight-color);
+}
+
+.window-title {
+ position: relative;
+ flex: 1;
+ margin-left: 10px;
+ font-size: 16px;
+ letter-spacing: 2px;
+ margin-right: 8px;
+ text-transform: none;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.close {
+ flex-shrink: 0;
+}
+
+.close::after {
+ content: "[+]";
+ content: "[+]" / "";
+ margin-right: 4px;
+ font-size: 16px;
+ letter-spacing: 2px;
+}
+
+.grid-item[open] .close::after {
+ content: "[-]";
+ content: "[-]" / "";
+}
+
+.grid-item-content {
+ padding: 16px;
+ position: relative;
+}
+
+.grid-item-content > .command::after {
+ content: attr(data-took) " 0" / "";
+ white-space: pre;
+ position: absolute;
+ right: 16px;
+ color: var(--secondary-color);
+}
+
+.grid-item-content a:hover,
+.grid-item-content a:focus-visible {
+ background: var(--highlight-color);
+ color: var(--main-bg-color);
+ text-decoration: none;
+}
+
+.command-result {
+ color: var(--secondary-color);
+}
+
+#projects > .grid-item-content { --ghost: ghost-projects 37s step-end calc(var(--cursor-delay) + 1s) infinite; }
+#contact > .grid-item-content { --ghost: ghost-contact 43s step-end calc(var(--cursor-delay) + 1s) infinite; }
+
+.grid-item-content::after {
+ content: ">";
+ content: ">" / "";
+ display: block;
+ width: fit-content;
+ margin-top: 3px;
+ padding-right: 12px;
+ background: linear-gradient(var(--main-color), var(--main-color)) right bottom 4px / 6px 2px no-repeat;
+}
+
+.listing {
+ margin-top: 3px;
+ line-height: 24px;
+ border-spacing: 0;
+}
+
+.listing td {
+ padding: 0 14px 0 0;
+ vertical-align: top;
+ white-space: nowrap;
+}
+
+.listing td:nth-child(2) {
+ text-align: right;
+}
+
+.ls-total {
+ display: block;
+ margin-top: 3px;
+ color: var(--secondary-color);
+}
+
+.ls-total + .listing {
+ margin-top: 0;
+}
+
+.listing .ice {
+ color: var(--secondary-color);
+}
+
+.link-target {
+ color: var(--secondary-color);
+ white-space: pre;
+}
+
+.listing td:nth-child(3) {
+ white-space: pre;
+}
+
+.listing a {
+ text-decoration: none;
+}
+
+.redacted {
+ background: var(--main-color);
+ color: transparent;
+ white-space: nowrap;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+.contact-list {
+ margin-top: 3px;
+ line-height: 24px;
+ border-spacing: 0;
+}
+
+.contact-list td {
+ padding: 0 16px 0 0;
+ white-space: nowrap;
+}
+
+.contact-list td:first-child {
+ color: var(--secondary-color);
+}
+
+.contact-list a {
+ text-decoration: none;
+}
+
+.secret {
+ margin: 0 0 16px;
+ text-align: center;
+ color: var(--main-bg-color);
+}
+
+footer {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ background: var(--main-color);
+ color: var(--main-bg-color);
+ font-size: 16px;
+ padding: 4px 8px;
+ margin-top: 10px;
+}
+
+.status-left,
+.status-right {
+ white-space: nowrap;
+}
+
+.status-message {
+ flex: 1;
+ text-align: center;
+}
+
+.glitch {
+ position: relative;
+ --glitch-shift: 6px;
+ --glitch-delay: 2s;
+}
+
+span.glitch {
+ display: inline-block;
+}
+
+.glitch::before,
+.glitch::after {
+ content: attr(data-text);
+ content: attr(data-text) / "";
+ position: absolute;
+ inset: 0;
+ background: var(--main-bg-color);
+ clip-path: inset(100% 0 0 0);
+ pointer-events: none;
+}
+
+.glitch::after {
+ color: var(--secondary-color);
+}
+
+.command-result .glitch {
+ --glitch-shift: 3px;
+ --glitch-delay: 5.5s;
+}
+
+.command-result .glitch::after {
+ color: var(--main-color);
+}
+
+.typed {
+ -webkit-user-select: text;
+ user-select: text;
+}
+
+.visually-hidden {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ clip-path: inset(50%);
+ white-space: nowrap;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+@media (min-width: 601px) and (max-width: 999px) {
+ #header {
+ font-size: 16px;
+ }
+
+ #header .nav-action {
+ display: none;
+ }
+
+ #header a,
+ #header .nav-toggle {
+ padding: 8px 10px;
+ }
+}
+
+@media (max-width: 600px) {
+ #header {
+ position: static;
+ justify-content: center;
+ gap: 8px 0;
+ padding: 16px 4px;
+ font-size: 16px;
+ }
+
+ #header a,
+ #header .nav-toggle {
+ padding: 8px 2px;
+ }
+
+ #header .nav-action {
+ display: none;
+ }
+
+ #header .nav-home {
+ display: none;
+ }
+
+ .title {
+ margin: 24px auto;
+ padding: 0 12px;
+ }
+
+ .title h1 {
+ font-size: 36px;
+ }
+
+ .grid-container {
+ gap: 48px;
+ padding: 0 24px 32px 16px;
+ }
+
+ #about { translate: -3px 4px; }
+ #projects { translate: 4px -3px; }
+ #files { translate: 3px 5px; }
+ #contact { translate: -4px -2px; }
+ #credits { translate: 3px 3px; }
+
+ .grid-item {
+ max-width: 100%;
+ scroll-margin-top: 16px;
+ --shadow: 8px;
+ --mark-gap: 8px;
+ }
+
+ @media (hover: hover) {
+ .grid-item:hover {
+ transform: translate(4px, 4px);
+ box-shadow: 4px 4px 0px var(--secondary-color);
+ }
+ }
+
+ .listing td:first-child,
+ .listing td:nth-child(3) {
+ display: none;
+ }
+
+ .redacted {
+ white-space: normal;
+ }
+
+ footer {
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+
+ .status-message {
+ order: 1;
+ flex-basis: 100%;
+ }
+}
+
+.grid-item { --boot-delay: 0.25s; }
+#projects { --boot-delay: 0.4s; }
+#files { --boot-delay: 0.55s; }
+#contact { --boot-delay: 0.7s; }
+#credits { --boot-delay: 0.85s; }
+
+:root {
+ --type-speed: 28ms;
+ --type-pause: 80ms;
+ --type-gap: 0.1s;
+ --jitter: 0.6ms;
+ --typo-cost: 0.4s;
+ --tab-pause: 0.15s;
+}
+
+.title {
+ --type-start: 0.1s;
+ --out1: calc(var(--type-start) + var(--n1, 0) * var(--type-speed) + var(--s1, 0) * var(--type-pause) + var(--type-gap));
+}
+
+.grid-item-content {
+ --out1: calc(var(--boot-delay) + var(--n1, 0) * var(--type-speed) + var(--s1, 0) * var(--type-pause) + var(--x1, 0s) + var(--type-gap));
+ --cmd2: calc(var(--out1) + 0.15s);
+ --out2: calc(var(--cmd2) + var(--n2, 0) * var(--type-speed) + var(--s2, 0) * var(--type-pause) + var(--type-gap));
+ --cursor-delay: calc(var(--out1) + 0.1s);
+}
+
+.grid-item-content:has(.command ~ .command) {
+ --cursor-delay: calc(var(--out2) + 0.1s);
+}
+
+.grid-item-content > .command {
+ --type-start: var(--boot-delay);
+}
+
+.grid-item-content > .command ~ .command {
+ --type-start: var(--cmd2);
+}
+
+.typed > span:nth-child(1) { --i: 0; --j: 0; --jn: 14; }
+.typed > span:nth-child(2) { --i: 1; --j: 14; --jn: -6; }
+.typed > span:nth-child(3) { --i: 2; --j: -6; --jn: 20; }
+.typed > span:nth-child(4) { --i: 3; --j: 20; --jn: -10; }
+.typed > span:nth-child(5) { --i: 4; --j: -10; --jn: 8; }
+.typed > span:nth-child(6) { --i: 5; --j: 8; --jn: -4; }
+.typed > span:nth-child(7) { --i: 6; --j: -4; --jn: 16; }
+.typed > span:nth-child(8) { --i: 7; --j: 16; --jn: -12; }
+.typed > span:nth-child(9) { --i: 8; --j: -12; --jn: 6; }
+.typed > span:nth-child(10) { --i: 9; --j: 6; --jn: 18; }
+.typed > span:nth-child(11) { --i: 10; --j: 18; --jn: -8; }
+.typed > span:nth-child(12) { --i: 11; --j: -8; --jn: 10; }
+.typed > span:nth-child(13) { --i: 12; --j: 10; --jn: -14; }
+.typed > span:nth-child(14) { --i: 13; --j: -14; --jn: 4; }
+.typed > span:nth-child(15) { --i: 14; --j: 4; --jn: 12; }
+.typed > span:nth-child(16) { --i: 15; --j: 12; --jn: -6; }
+.typed > span:nth-child(17) { --i: 16; --j: -6; --jn: 16; }
+.typed > span:nth-child(18) { --i: 17; --j: 16; --jn: -10; }
+.typed > span:nth-child(19) { --i: 18; --j: -10; --jn: 2; }
+.typed > span:nth-child(20) { --i: 19; --j: 2; --jn: 14; }
+.typed > span:nth-child(21) { --i: 20; --j: 14; --jn: -8; }
+.typed > span:nth-child(22) { --i: 21; --j: -8; --jn: 10; }
+.typed > span:nth-child(23) { --i: 22; --j: 10; --jn: 0; }
+.typed > span:nth-child(24) { --i: 23; --j: 0; --jn: 0; }
+
+.typed > span {
+ --p: 0;
+ --dp: 0;
+ position: relative;
+ --type-at: calc(var(--type-start) + var(--i) * var(--type-speed) + var(--j) * var(--jitter) + var(--p) * var(--type-pause) + var(--t, 0s));
+}
+
+.typed > .tab.tab {
+ --i: var(--tab-i);
+ --j: 0;
+ --t: var(--tab-pause);
+}
+
+.typed > .typo {
+ font-size: 0;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+.typed > .typo ~ span {
+ --t: var(--typo-cost);
+}
+
+.typed > .sp ~ span { --p: 1; }
+.typed > .sp ~ .sp ~ span { --p: 2; }
+.typed > .sp { --dp: 1; }
+
+.typed > span::after {
+ content: "";
+ position: absolute;
+ left: calc(100% + 1px);
+ bottom: 3px;
+ width: 8px;
+ height: 14px;
+ background: var(--main-color);
+ visibility: hidden;
+ --cursor-for: calc(var(--type-speed) + (var(--jn) - var(--j)) * var(--jitter) + var(--dp) * var(--type-pause));
+}
+
+.typed > span:last-child::after {
+ --cursor-for: calc(var(--type-speed) + var(--type-gap));
+}
+
+.typed > .typo::after {
+ --cursor-for: calc(var(--type-speed) + var(--typo-cost));
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ #header a,
+ #header .nav-toggle,
+ .grid-item-content a {
+ transition: background-color 0.5s, color 0.5s;
+ }
+
+ #header a:hover,
+ #header .nav-toggle:hover,
+ .grid-item-content a:hover {
+ transition: none;
+ }
+
+ .grid-item::before {
+ transition: color 0.5s;
+ }
+
+ .grid-item:is(:hover, :focus-within)::before {
+ transition: color 0s;
+ }
+
+ .typed > span {
+ animation: boot 1ms var(--type-at) backwards;
+ }
+
+ .typed > span::after {
+ animation: type-cursor var(--cursor-for) steps(1) var(--type-at);
+ }
+
+ .typed > .tab:not(:last-child)::after {
+ animation: none;
+ }
+
+ .typed > .typo {
+ animation: typo-flash calc(var(--typo-cost) - var(--type-speed)) step-end var(--type-at);
+ }
+
+ .window-title::after {
+ animation: title-cmd calc(var(--n1, 0) * var(--type-speed) + var(--s1, 0) * var(--type-pause) + var(--x1, 0s) + var(--type-gap)) step-end var(--boot-delay);
+ }
+
+ .title h1 {
+ animation: boot 1ms var(--out1) backwards;
+ }
+
+ .glitch::before {
+ animation: glitch-a 7s steps(1) var(--glitch-delay) infinite;
+ }
+
+ .glitch::after {
+ animation: glitch-b 7s steps(1) var(--glitch-delay) infinite;
+ }
+
+ .grid-item-content > :not(.command, br) {
+ animation: boot 1ms var(--out1) backwards;
+ }
+
+ .command ~ .command {
+ animation: boot 1ms var(--cmd2) backwards;
+ }
+
+ .grid-item-content > .command::after {
+ animation: boot 1ms var(--out1) backwards;
+ }
+
+ .grid-item-content > .command ~ .command::after {
+ animation: boot 1ms var(--out2) backwards;
+ }
+
+ .grid-item-content > .command ~ .command ~ :not(br) {
+ animation: boot 1ms var(--out2) backwards;
+ }
+
+ .grid-item-content::after {
+ animation:
+ boot 1ms var(--cursor-delay) backwards,
+ var(--ghost, none);
+ }
+
+ .grid-item:is(:hover, :focus-within, :target) .grid-item-content::after {
+ animation:
+ boot 1ms var(--cursor-delay) backwards,
+ var(--ghost, none),
+ blink 1.06s steps(1) infinite;
+ }
+}
+
+@keyframes boot {
+ from {
+ visibility: hidden;
+ }
+}
+
+@keyframes blink {
+ 50% {
+ background-size: 0 0;
+ }
+}
+
+@keyframes glitch-a {
+ 0%, 94%, 100% { clip-path: inset(100% 0 0 0); translate: 0; }
+ 95% { clip-path: inset(15% 0 60% 0); translate: calc(var(--glitch-shift) * -1) 0; }
+ 96% { clip-path: inset(55% 0 20% 0); translate: calc(var(--glitch-shift) * 0.83) 0; }
+ 97% { clip-path: inset(35% 0 45% 0); translate: calc(var(--glitch-shift) * -0.5) 0; }
+ 98% { clip-path: inset(70% 0 5% 0); translate: calc(var(--glitch-shift) * 0.67) 0; }
+}
+
+@keyframes glitch-b {
+ 0%, 94%, 100% { clip-path: inset(100% 0 0 0); translate: 0; }
+ 95% { clip-path: inset(65% 0 10% 0); translate: calc(var(--glitch-shift) * 0.83) 0; }
+ 96% { clip-path: inset(10% 0 70% 0); translate: calc(var(--glitch-shift) * -0.67) 0; }
+ 97.5% { clip-path: inset(45% 0 30% 0); translate: var(--glitch-shift) 0; }
+}
+
+@keyframes type-cursor {
+ from, to {
+ visibility: visible;
+ }
+}
+
+@keyframes ghost-projects {
+ 0.000% { content: ">" / ""; background-size: 6px 2px; }
+ 10.811% { content: "> m" / ""; background-size: 8px 14px; }
+ 11.243% { content: "> mk" / ""; background-size: 8px 14px; }
+ 11.568% { content: "> mkd" / ""; background-size: 8px 14px; }
+ 12.108% { content: "> mkdi" / ""; background-size: 8px 14px; }
+ 12.486% { content: "> mkdir" / ""; background-size: 8px 14px; }
+ 12.973% { content: "> mkdir " / ""; background-size: 8px 14px; }
+ 13.270% { content: "> mkdir d" / ""; background-size: 8px 14px; }
+ 13.730% { content: "> mkdir da" / ""; background-size: 8px 14px; }
+ 14.162% { content: "> mkdir dae" / ""; background-size: 8px 14px; }
+ 14.486% { content: "> mkdir daed" / ""; background-size: 8px 14px; }
+ 15.027% { content: "> mkdir daeda" / ""; background-size: 8px 14px; }
+ 15.405% { content: "> mkdir daedal" / ""; background-size: 8px 14px; }
+ 15.892% { content: "> mkdir daedalu" / ""; background-size: 8px 14px; }
+ 16.189% { content: "> mkdir daedalus" / ""; background-size: 8px 14px; }
+ 18.865% { content: "> mkdir daedalu" / ""; background-size: 8px 14px; }
+ 19.108% { content: "> mkdir daedal" / ""; background-size: 8px 14px; }
+ 19.351% { content: "> mkdir daeda" / ""; background-size: 8px 14px; }
+ 19.595% { content: "> mkdir daed" / ""; background-size: 8px 14px; }
+ 19.838% { content: "> mkdir dae" / ""; background-size: 8px 14px; }
+ 20.081% { content: "> mkdir da" / ""; background-size: 8px 14px; }
+ 20.324% { content: "> mkdir d" / ""; background-size: 8px 14px; }
+ 20.568% { content: "> mkdir " / ""; background-size: 8px 14px; }
+ 20.811% { content: "> mkdir" / ""; background-size: 8px 14px; }
+ 21.054% { content: "> mkdi" / ""; background-size: 8px 14px; }
+ 21.297% { content: "> mkd" / ""; background-size: 8px 14px; }
+ 21.541% { content: "> mk" / ""; background-size: 8px 14px; }
+ 21.784% { content: "> m" / ""; background-size: 8px 14px; }
+ 22.027% { content: ">" / ""; background-size: 6px 2px; }
+ 100% { content: ">" / ""; background-size: 6px 2px; }
+}
+
+@keyframes ghost-contact {
+ 0.000% { content: ">" / ""; background-size: 6px 2px; }
+ 32.558% { content: "> g" / ""; background-size: 8px 14px; }
+ 32.930% { content: "> gp" / ""; background-size: 8px 14px; }
+ 33.209% { content: "> gpg" / ""; background-size: 8px 14px; }
+ 33.674% { content: "> gpg " / ""; background-size: 8px 14px; }
+ 34.000% { content: "> gpg -" / ""; background-size: 8px 14px; }
+ 34.419% { content: "> gpg --" / ""; background-size: 8px 14px; }
+ 34.674% { content: "> gpg --f" / ""; background-size: 8px 14px; }
+ 35.070% { content: "> gpg --fu" / ""; background-size: 8px 14px; }
+ 35.442% { content: "> gpg --ful" / ""; background-size: 8px 14px; }
+ 35.721% { content: "> gpg --full" / ""; background-size: 8px 14px; }
+ 36.186% { content: "> gpg --full-" / ""; background-size: 8px 14px; }
+ 36.512% { content: "> gpg --full-g" / ""; background-size: 8px 14px; }
+ 36.930% { content: "> gpg --full-ge" / ""; background-size: 8px 14px; }
+ 37.186% { content: "> gpg --full-gen" / ""; background-size: 8px 14px; }
+ 37.581% { content: "> gpg --full-gene" / ""; background-size: 8px 14px; }
+ 37.953% { content: "> gpg --full-gener" / ""; background-size: 8px 14px; }
+ 38.233% { content: "> gpg --full-genera" / ""; background-size: 8px 14px; }
+ 38.698% { content: "> gpg --full-generat" / ""; background-size: 8px 14px; }
+ 39.023% { content: "> gpg --full-generate" / ""; background-size: 8px 14px; }
+ 39.442% { content: "> gpg --full-generate-" / ""; background-size: 8px 14px; }
+ 39.698% { content: "> gpg --full-generate-k" / ""; background-size: 8px 14px; }
+ 40.093% { content: "> gpg --full-generate-ke" / ""; background-size: 8px 14px; }
+ 40.465% { content: "> gpg --full-generate-key" / ""; background-size: 8px 14px; }
+ 42.326% { content: "> gpg --full-generate-key^C" / ""; background-size: 8px 14px; }
+ 43.488% { content: ">" / ""; background-size: 6px 2px; }
+ 100% { content: ">" / ""; background-size: 6px 2px; }
+}
+
+@keyframes typo-flash {
+ from, to {
+ font-size: 1em;
+ }
+}
+
+@keyframes title-cmd {
+ from, to {
+ visibility: visible;
+ }
+}