Home To log in, use the button in gomuks web settings.

Cyberpunk 2077

Commit info

Committed at 2026-09-04 17:38:50.791217 +0000 +0000 by @soliprem:soliprem.eu
Initial commit

Description

a Cyberpunk theme

Previews

Preview image #1

Code

To use this theme, paste this into your custom CSS:

@import url("https://css.gomuks.app/theme/cyberpunk-2077.css");

Full CSS:


@font-face {
  font-family: "Oxanium";
  font-style: normal;
  font-weight: 200 500;
  font-display: swap;
  src: url("https://raw.githubusercontent.com/SableClient/themes/main/fonts/Oxanium/Oxanium-Variable.ttf")
    format("truetype");
}

:root {
  color-scheme: dark;

  /* Original Cyberpunk 77 palette. */
  --cp77-red-bg: hsl(0deg 45% 8%);
  --cp77-red-surface: hsl(0deg 44% 10% / 67%);
  --cp77-red-raised: hsl(0deg 44% 12%);
  --cp77-red-hover: hsl(0deg 47% 28%);
  --cp77-red-line: hsl(0deg 47% 33%);
  --cp77-red-bright: hsl(0deg 70% 66%);
  --cp77-blue-bg: hsl(200deg 44% 12%);
  --cp77-blue-line: hsl(200deg 47% 33%);
  --cp77-blue-bright: hsl(200deg 90% 73%);
  --cp77-yellow: hsl(50deg 100% 65%);
  --cp77-overlay: hsl(180deg 20% 6% / 87%);

  /* Gomuks theme API. */
  --font-stack: "Oxanium", "Tektur", "Rajdhani", system-ui, sans-serif;
  --monospace-font-stack: "FiraCode Nerd Font", "Fira Code", monospace;
  --background-color: var(--cp77-red-bg);
  --login-background-color: hsl(180deg 20% 5%);
  --text-color: hsl(200deg 90% 79%);
  --inverted-text-color: hsl(0deg 45% 8%);
  --secondary-text-color: hsl(200deg 35% 63%);
  --semisecondary-text-color: var(--cp77-blue-bright);
  --link-text-color: var(--cp77-blue-bright);
  --visited-link-text-color: hsl(200deg 70% 66%);
  --primary-color: hsl(0deg 55% 44%);
  --primary-color-dark: hsl(0deg 51.56% 24%);
  --error-color: var(--cp77-yellow);
  --border-color: var(--cp77-red-line);
  --pill-background-color: var(--cp77-blue-bg);
  --disabled-input-background-color: hsl(0deg 27% 10%);
  --url-preview-background-color: var(--cp77-blue-bg);
  --highlight-pill-background-color: var(--cp77-yellow);
  --highlight-pill-text-color: hsl(50deg 63.12% 18.52%);
  --button-hover-color: var(--cp77-red-hover);
  --light-hover-color: hsl(0deg 47% 28% / 55%);
  --composer-background-color: hsl(0deg 25% 6.6%);
  --timeline-hover-bg-color: hsl(0deg 27% 10% / 75%);
  --timeline-highlight-bg-color: hsl(50deg 100% 65% / 12%);
  --timeline-highlight-hover-bg-color: hsl(50deg 100% 65% / 18%);
  --timeline-jump-bg-color: hsl(200deg 90% 73% / 12%);
  --timeline-jump-hover-bg-color: hsl(200deg 90% 73% / 18%);
  --timeline-soft-failed-bg-color: hsl(0deg 100% 65% / 24%);
  --timeline-policy-server-spammy-bg-color: hsl(50deg 100% 65% / 16%);
  --room-list-background: linear-gradient(
    160deg,
    hsl(0deg 45% 8%) 0%,
    hsl(0deg 44% 12%) 54%,
    hsl(200deg 44% 12%) 100%
  );
  --room-list-background-overlay: hsl(0deg 44% 10% / 82%);
  --room-list-search-background-overlay: hsl(0deg 44% 8% / 90%);
  --space-list-background-overlay: hsl(180deg 20% 6% / 87%);
  --room-list-scrollbar-color: var(--cp77-red-bright) hsl(0deg 44% 10%);
  --room-list-entry-hover-color: var(--cp77-red-hover);
  --room-list-entry-selected-color: hsl(0deg 53.14% 34.01%);
  --dimmed-overlay-background-color: var(--cp77-overlay);
  --modal-box-shadow-color: hsl(0deg 70% 60% / 32%);
  --popout-widget-box-shadow-color: hsl(200deg 90% 73% / 25%);
  --emoji-selected-border-color: var(--cp77-blue-bright);
  --image-pack-editor-selected-color: var(--cp77-blue-bg);
  --poll-vote-bar-background-color: hsl(0deg 44% 22%);
  --poll-vote-bar-highlight-color: var(--cp77-yellow);
  --unread-counter-text-color: hsl(0deg 45% 8%);
  --unread-counter-message-bg: var(--cp77-blue-bright);
  --unread-counter-notification-bg: var(--cp77-yellow);
  --unread-counter-marked-unread-bg: var(--cp77-red-bright);
  --unread-counter-highlight-bg: var(--cp77-yellow);
  --space-unread-counter-message-bg: hsl(200deg 70% 66%);
  --space-unread-counter-notification-bg: var(--cp77-yellow);
  --space-unread-counter-highlight-bg: var(--cp77-red-bright);
  --sent-ok-color: var(--cp77-blue-line);
  --sent-error-color: var(--cp77-yellow);
  --blockquote-border-color: var(--cp77-red-bright);
  --lightbox-button-color: var(--cp77-blue-bright);
}

body {
  background:
    radial-gradient(circle at 75% 0%, hsl(0deg 47% 22% / 35%), transparent 35%),
    hsl(180deg 20% 5%);
  font-size: 15px;
  text-shadow: 0 0 3px rgb(200 255 255 / 25%);
}

main.matrix-main,
div.room-view,
div.timeline-view {
  background: linear-gradient(to top, hsl(180deg 20% 5%) 40%, hsl(0deg 50% 14%))
    fixed;
}

/* Architectural panels: red navigation, blue utility surfaces. */
div.room-list-wrapper,
div.room-header,
div.settings-view,
div.settings-view-box,
div.right-panel,
div.right-panel-header,
div.context-menu,
.modal > .modal-box,
div.emoji-picker,
div.sticker-picker,
div.gif-picker,
div.sync-status,
div.connection-error-inner {
  border-radius: 0 !important;
  border-color: var(--cp77-red-line) !important;
  box-shadow:
    inset 2px 0 0 hsl(0deg 70% 60% / 18%),
    0 0 12px hsl(0deg 70% 60% / 12%);
}

div.room-header,
div.right-panel-header {
  background: hsl(0deg 44% 10% / 84%);
  border-bottom: 1px solid var(--cp77-red-line);
}

div.room-header::after,
div.right-panel-header::after {
  align-self: stretch;
  width: 3rem;
  margin-left: auto;
  background: linear-gradient(
    135deg,
    transparent 48%,
    var(--cp77-red-line) 50% 52%,
    transparent 54%
  );
  content: "";
  opacity: 0.7;
  pointer-events: none;
}

div.room-search-wrapper {
  border-bottom: 1px solid var(--cp77-red-line);
}

div.room-entry {
  --cp77-room-frame: hsl(0deg 55% 42% / 88%);
  --cp77-room-fill: hsl(0deg 38% 9% / 88%);
  --cp77-room-rail-width: 2px;
  --cp77-room-shape: polygon(
    0 0,
    100% 0,
    100% calc(100% - 10px),
    calc(100% - 10px) 100%,
    0 100%
  );

  position: relative;
  box-sizing: border-box;
  width: calc(100% - 0.5rem);
  margin: 2px 0.25rem;
  background: var(--cp77-room-frame);
  clip-path: var(--cp77-room-shape);
}

div.room-entry::before {
  position: absolute;
  z-index: 0;
  inset: 1px;
  background: var(--cp77-room-fill);
  clip-path: var(--cp77-room-shape);
  content: "";
  pointer-events: none;
}

div.room-entry::after {
  position: absolute;
  z-index: 1;
  top: 1px;
  bottom: 1px;
  left: 1px;
  width: var(--cp77-room-rail-width);
  background: var(--cp77-room-frame);
  content: "";
  pointer-events: none;
}

div.room-entry > * {
  z-index: 2;
}

div.room-entry:hover,
div.room-entry:focus {
  --cp77-room-frame: hsl(0deg 70% 60% / 92%);
  --cp77-room-fill: linear-gradient(
    100deg,
    hsl(0deg 42% 16% / 94%),
    hsl(0deg 30% 10% / 92%)
  );
}

div.room-entry:has(div.unread-count) {
  --cp77-room-frame: hsl(0deg 70% 60% / 92%);
}

div.room-entry:has(div.unread-count.highlighted) {
  --cp77-room-frame: var(--cp77-yellow);
}

div.room-entry.active {
  --cp77-room-frame: var(--cp77-blue-bright);
  --cp77-room-fill: linear-gradient(
    100deg,
    hsl(188deg 34% 28% / 94%),
    hsl(205deg 25% 15% / 92%)
  );
  --cp77-room-rail-width: 3px;
}

div.space-bar > div.space-entry {
  border: 1px solid transparent;
  border-radius: 0;
}

div.space-bar > div.space-entry:hover,
div.space-bar > div.space-entry:focus,
div.space-bar > div.space-entry.active {
  border-color: var(--cp77-blue-line);
  box-shadow: 0 0 6px hsl(200deg 90% 73% / 25%);
}

/* Angular controls reproduce the original theme's clipped cyber borders. */
button,
a.button,
span.button,
input,
textarea,
select,
div.url-preview,
div.poll-answers > label.poll-answer {
  border-radius: 0 !important;
}

button.thin-button,
a.button.thin-button,
button.primary-color-button,
main.matrix-login button {
  border-top: 1px solid var(--cp77-red-line);
  border-left: 1px solid var(--cp77-red-line);
  clip-path: polygon(
    0 0,
    100% 0,
    100% calc(100% - 8px),
    calc(100% - 8px) 100%,
    0 100%
  );
}

button:focus-visible,
a.button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible {
  outline: 2px solid var(--cp77-blue-bright) !important;
  outline-offset: 2px;
}

input,
textarea,
select {
  border-color: var(--cp77-blue-line) !important;
}

div.message-composer {
  border-top: 1px solid var(--cp77-blue-line);
  border-right: 1px solid var(--cp77-blue-line);
  border-radius: 0 !important;
  box-shadow: 0 -4px 14px hsl(200deg 90% 73% / 8%);
  clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 0 100%);
}

div.timeline-event {
  --cp77-message-fill: linear-gradient(
    105deg,
    hsl(210deg 12% 13% / 96%),
    hsl(195deg 15% 18% / 96%)
  );
  --cp77-message-border: hsl(188deg 34% 42%);
  --cp77-message-separator: hsl(188deg 34% 52% / 48%);
  --cp77-message-outer-top: 0;
  --cp77-message-inner-top: 1px;
  --cp77-message-outer-bottom: -6px;
  --cp77-message-inner-bottom: -5px;
  --cp77-message-shape: polygon(
    10px 0,
    100% 0,
    100% calc(100% - 16px),
    calc(100% - 10px) calc(100% - 6px),
    8px calc(100% - 6px),
    0 100%,
    0 10px
  );
  --cp77-message-inner-shape: polygon(
    10px 0,
    100% 0,
    100% calc(100% - 16px),
    calc(100% - 10px) calc(100% - 6px),
    9px calc(100% - 6px),
    8px calc(100% - 7px),
    0 calc(100% - 1px),
    0 10px
  );

  position: relative;
  isolation: isolate;
  width: calc(66.6667% - 0.75rem);
  margin-top: 0.55rem;
  margin-right: auto;
  margin-bottom: 0.45rem;
  margin-left: 0.5rem;
  padding-top: 0.45rem;
  padding-bottom: 0.45rem;
  background-color: transparent !important;
}

div.timeline-event.same-sender,
div.timeline-event.same-thread,
div.timeline-event.small-event {
  margin-top: 0.4rem;
}

div.timeline-event.own-event {
  --cp77-message-fill: linear-gradient(
    255deg,
    hsl(163deg 34% 34% / 97%),
    hsl(156deg 38% 26% / 97%)
  );
  --cp77-message-border: hsl(164deg 55% 58%);
  --cp77-message-separator: hsl(164deg 55% 68% / 48%);
  --cp77-message-outer-top: 0;
  --cp77-message-inner-top: 1px;
  --cp77-message-outer-bottom: -6px;
  --cp77-message-inner-bottom: -5px;
  --cp77-message-shape: polygon(
    0 0,
    calc(100% - 10px) 0,
    100% 10px,
    100% 100%,
    calc(100% - 8px) calc(100% - 6px),
    10px calc(100% - 6px),
    0 calc(100% - 16px)
  );
  --cp77-message-inner-shape: polygon(
    0 0,
    calc(100% - 10px) 0,
    100% 10px,
    100% calc(100% - 1px),
    calc(100% - 8px) calc(100% - 7px),
    calc(100% - 9px) calc(100% - 6px),
    10px calc(100% - 6px),
    0 calc(100% - 16px)
  );

  margin-right: 0.5rem;
  margin-left: auto;
}

/* Join sequential events from one sender into a single conversation panel. */
div.timeline-event:has(+ div.timeline-event.same-sender) {
  --cp77-message-shape: polygon(10px 0, 100% 0, 100% 100%, 0 100%, 0 10px);
  --cp77-message-inner-shape: var(--cp77-message-shape);
  --cp77-message-outer-bottom: 0;
  --cp77-message-inner-bottom: 0;

  margin-bottom: 0;
  padding-bottom: 0.2rem;
}

div.timeline-event.own-event:has(+ div.timeline-event.same-sender) {
  --cp77-message-shape: polygon(
    0 0,
    calc(100% - 10px) 0,
    100% 10px,
    100% 100%,
    0 100%
  );
}

div.timeline-event.same-sender {
  --cp77-message-outer-top: 0;
  --cp77-message-inner-top: 0;
  --cp77-message-shape: polygon(
    0 0,
    100% 0,
    100% calc(100% - 16px),
    calc(100% - 10px) calc(100% - 6px),
    8px calc(100% - 6px),
    0 100%
  );
  --cp77-message-inner-shape: polygon(
    0 0,
    100% 0,
    100% calc(100% - 16px),
    calc(100% - 10px) calc(100% - 6px),
    9px calc(100% - 6px),
    8px calc(100% - 7px),
    0 calc(100% - 1px)
  );

  margin-top: 0;
  padding-top: 0.2rem;
}

div.timeline-event.own-event.same-sender {
  --cp77-message-shape: polygon(
    0 0,
    100% 0,
    100% 100%,
    calc(100% - 8px) calc(100% - 6px),
    10px calc(100% - 6px),
    0 calc(100% - 16px)
  );
  --cp77-message-inner-shape: polygon(
    0 0,
    100% 0,
    100% calc(100% - 1px),
    calc(100% - 8px) calc(100% - 7px),
    calc(100% - 9px) calc(100% - 6px),
    10px calc(100% - 6px),
    0 calc(100% - 16px)
  );
}

div.timeline-event.same-sender:has(+ div.timeline-event.same-sender) {
  --cp77-message-shape: polygon(0 0, 100% 0, 100% 100%, 0 100%);
  --cp77-message-inner-shape: var(--cp77-message-shape);
  --cp77-message-outer-bottom: 0;
  --cp77-message-inner-bottom: 0;

  margin-bottom: 0;
}

div.timeline-event::before,
div.timeline-event::after {
  position: absolute;
  z-index: 0;
  inset: var(--cp77-message-outer-top) 0 var(--cp77-message-outer-bottom);
  clip-path: var(--cp77-message-shape);
  content: "";
  pointer-events: none;
}

div.timeline-event::before {
  background: var(--cp77-message-border);
}

div.timeline-event::after {
  inset: var(--cp77-message-inner-top) 1px var(--cp77-message-inner-bottom);
  clip-path: var(--cp77-message-inner-shape, var(--cp77-message-shape));
  background: var(--cp77-message-fill);
}

div.timeline-event.same-sender::after {
  background:
    linear-gradient(
        to right,
        transparent,
        var(--cp77-message-separator) 12% 88%,
        transparent
      )
      top center / calc(100% - 1.5rem) 1px no-repeat,
    var(--cp77-message-fill);
}

div.timeline-event > * {
  z-index: 1;
}

div.timeline-event:hover:not(.no-hover),
div.timeline-event.focused-event {
  --cp77-message-fill: linear-gradient(
    105deg,
    hsl(210deg 14% 17% / 98%),
    hsl(190deg 19% 23% / 98%)
  );
}

div.timeline-event.own-event:hover:not(.no-hover),
div.timeline-event.own-event.focused-event {
  --cp77-message-fill: linear-gradient(
    255deg,
    hsl(163deg 38% 39% / 98%),
    hsl(156deg 42% 30% / 98%)
  );
}

div.timeline-event.highlight,
div.timeline-event.jump-highlight,
div.timeline-event.soft-failed,
div.timeline-event.policy-server-spammy {
  background-color: transparent;
}

div.timeline-event.highlight {
  --cp77-message-fill: linear-gradient(
    105deg,
    hsl(50deg 100% 25% / 45%),
    hsl(0deg 44% 12% / 62%)
  );
}

div.timeline-event.jump-highlight {
  --cp77-message-fill: linear-gradient(
    105deg,
    hsl(200deg 44% 22% / 58%),
    hsl(0deg 44% 12% / 58%)
  );
}

div.event-hover-menu,
div.event-fixed-menu,
div.url-preview,
div.html-body code.hicli-inline-code,
div.html-body pre {
  border-radius: 0 !important;
  box-shadow: inset 2px 0 0 var(--cp77-blue-line);
}

div.event-sender,
div.room-name,
div.settings-view h1,
div.settings-view h2,
div.settings-view h3,
main.matrix-login h1,
main.matrix-login h2 {
  letter-spacing: 0.035em;
}

a,
div.room-header svg,
div.right-panel svg,
div.space-bar svg {
  filter: drop-shadow(0 0 4px hsl(0deg 65% 60% / 50%));
}

div.html-body a,
div.url-preview a {
  filter: drop-shadow(0 0 3px hsl(200deg 90% 73% / 35%));
}

::selection {
  color: hsl(0deg 45% 8%);
  background: var(--cp77-blue-bright);
}

/* Panel-local scanlines let visual media rise above the CRT layer. */
div.room-list-wrapper,
div.room-view,
div.right-panel {
  position: relative;
}

div.room-view {
  container-type: inline-size;
}

div.room-list-wrapper::after,
div.room-view::after,
div.right-panel::after {
  position: absolute;
  z-index: 10;
  inset: 0;
  background: repeating-linear-gradient(
    to bottom,
    transparent 0,
    transparent 3px,
    rgb(0 0 0 / 7%) 3px,
    rgb(0 0 0 / 7%) 4px
  );
  content: "";
  pointer-events: none;
}

div.lightbox,
div.timeline-event:has(video:playing),
div.timeline-event:has(video:fullscreen) {
  z-index: 11;
}

@container (width <= 45rem) {
  div.timeline-event,
  div.timeline-event.own-event {
    width: calc(100% - 1rem);
  }

  div.timeline-event:not(.own-event) {
    --cp77-message-outer-top: -6px;
    --cp77-message-inner-top: -5px;
    --cp77-message-outer-bottom: 0;
    --cp77-message-inner-bottom: 1px;
    --cp77-message-shape: polygon(
      0 0,
      8px 6px,
      calc(100% - 10px) 6px,
      100% 16px,
      100% 100%,
      10px 100%,
      0 calc(100% - 10px)
    );
    /* A plain 1px inset runs nearly tangent to this rising edge. */
    --cp77-message-inner-shape: polygon(
      0 1px,
      8px 7px,
      9px 6px,
      calc(100% - 10px) 6px,
      100% 16px,
      100% 100%,
      10px 100%,
      0 calc(100% - 10px)
    );
  }

  div.timeline-event:not(.own-event):has(+ div.timeline-event.same-sender) {
    --cp77-message-shape: polygon(
      0 0,
      8px 6px,
      calc(100% - 10px) 6px,
      100% 16px,
      100% 100%,
      0 100%
    );
    --cp77-message-inner-shape: polygon(
      0 1px,
      8px 7px,
      9px 6px,
      calc(100% - 10px) 6px,
      100% 16px,
      100% 100%,
      0 100%
    );
    --cp77-message-outer-bottom: 0;
    --cp77-message-inner-bottom: 0;
  }

  div.timeline-event.same-sender:not(.own-event) {
    --cp77-message-outer-top: 0;
    --cp77-message-inner-top: 0;
    --cp77-message-shape: polygon(
      0 0,
      100% 0,
      100% 100%,
      10px 100%,
      0 calc(100% - 10px)
    );
    --cp77-message-inner-shape: var(--cp77-message-shape);
  }

  div.timeline-event.same-sender:not(.own-event):has(
      + div.timeline-event.same-sender
    ) {
    --cp77-message-shape: polygon(0 0, 100% 0, 100% 100%, 0 100%);
    --cp77-message-outer-bottom: 0;
    --cp77-message-inner-bottom: 0;
  }
}