:root {
  --bg: #fff;
  --bg-1: rgba(255,255,255,0.067);
  --bg-4: rgba(255,255,255,0.267);
  --color: #000;
  --color-c: rgba(0,0,0,0.8);
  --color-4: rgba(0,0,0,0.267);
  --color-1: rgba(0,0,0,0.067);
  --size: 2;
  --offset: 0;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #000;
    --bg-1: rgba(0,0,0,0.067);
    --bg-4: rgba(0,0,0,0.267);
    --color: #fff;
    --color-c: rgba(255,255,255,0.8);
    --color-4: rgba(255,255,255,0.267);
    --color-1: rgba(255,255,255,0.067);
  }
}
* {
  box-sizing: border-box;
}
body {
  margin: 32px;
  background: var(--bg);
  color: var(--color);
  user-select: none;
}
h1,
h2 {
  margin: 0;
  font-weight: 100;
  font-size: 64px;
}
h2 {
  font-size: 32px;
}
a {
  color: var(--color-c);
  text-decoration: none;
}
a:hover {
  color: var(--color);
}
body {
  margin: 0;
  user-select: none;
}
::selection {
  background: var(--color-c);
  color: var(--bg);
}
input {
  all: unset;
  box-sizing: border-box;
  -moz-appearance: textfield;
}
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  appearance: none;
}
button {
  all: unset;
  position: relative;
  z-index: 1;
  box-sizing: border-box;
  padding: 8px 12px;
  border-radius: 10px;
  background: var(--color-c);
  color: var(--bg);
  transition: 0.1s background, 0.1s scale;
  transform: skew(-20deg);
}
button>* {
  transform: skew(20deg);
}
button:not(:disabled):active {
  scale: 0.9;
}
@media (pointer: fine) {
  button:not(:disabled):hover:not(:disabled) {
    background: var(--color);
  }
}
button:disabled {
  opacity: 0.5;
}
.flex {
  flex: auto;
}
.dialog {
  position: fixed;
  top: 50%;
  left: 0;
  overflow: hidden;
  width: 100%;
  height: 0px;
  border: 1px solid var(--color-4);
  border-right: none;
  border-left: none;
  transition: 1s height cubic-bezier(0.25, 0.1, 0.25, 1.5);
  translate: 0 -50%;
  backdrop-filter: blur(20px);
}
.dialog-inner {
  position: absolute;
  left: var(--left);
  padding: 32px 0;
  width: calc(100% - var(--left) * 2);
  animation: dialog-in 1s cubic-bezier(0.25, 0.1, 0, 1.35);
  --left: max(10px, calc(50% - 300px));
}
.dialog-inner>button {
  width: 100%;
}
.dialog-bg {
  position: absolute;
  top: -32px;
  left: -64px;
  font-size: 256px;
  line-height: 1;
  opacity: 0.1;
  filter: grayscale(0.5);
}
.dialog-title {
  font-weight: lighter;
  font-size: 64px;
}
.dialog-content {
  margin-bottom: 8px;
}
.dialog-closing {
  transition: 1s height cubic-bezier(1, 0, 1, 0.5);
}
.dialog-closing .dialog-inner {
  animation: dialog-out 1s cubic-bezier(0.8, -0.32, 1, 0.15);
}
.control {
  position: relative;
  z-index: 100;
  display: flex;
  padding: 4px 8px;
  gap: 2px;
  backdrop-filter: blur(3px);
}
.size-input {
  padding: 4px 12px;
  width: 100%;
  text-align: center;
}
.size-input-box {
  position: relative;
  overflow: hidden;
  margin: 0 -16px;
}
.size-effect {
  position: absolute;
  top: 50%;
  z-index: -1;
  width: 10px;
  height: 10px;
  background: radial-gradient(closest-side, rgba(0,0,0,0), rgba(0,0,0,0) 30%, var(--color) 60%, rgba(0,0,0,0) 80%);
  animation: size-effect 0.2s cubic-bezier(0.6, 0, 1, 0.45);
  translate: 0% -50%;
}
.size-add {
  right: 0;
}
.size-reduce {
  left: 0;
}
.factor {
  position: fixed;
  top: 50%;
  left: 50%;
  font-weight: bolder;
  font-size: 50vmin;
  line-height: 1;
  opacity: 0.1;
  translate: -50% -50%;
}
.matrix {
  position: fixed;
  top: 50%;
  left: 50%;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  width: calc(var(--size) * 32px + 1px);
  height: calc(var(--size) * 32px);
  border: 1px solid var(--color-c);
  border-top: none;
  border-bottom: none;
  transition: 1s translate cubic-bezier(0.25, 0.1, 0.25, 1.5), 0.5s width ease, 0.5s height ease;
  translate: calc((var(--size) + var(--offset)) * -16px) calc((var(--size) + var(--offset)) * -16px);
}
.matrix-cleaning {
  animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
}
.matrix-effect {
  position: fixed;
  top: 50%;
  left: 50%;
  width: calc(var(--size) * 32px + 1px);
  height: calc(var(--size) * 32px);
  transition: 1s translate cubic-bezier(0.25, 0.1, 0.25, 1.5), 0.5s width ease, 0.5s height ease;
  pointer-events: none;
  translate: calc((var(--size) + var(--offset)) * -16px) calc((var(--size) + var(--offset)) * -16px);
}
.line {
  position: absolute;
  top: calc(var(--i) * 32px);
  left: 0;
  display: flex;
  transition: 0.3s top ease, 0.3s opacity;
}
.cell {
  position: absolute;
  top: 0;
  left: calc(var(--i) * 32px);
  width: 32px;
  height: 32px;
  text-align: center;
  line-height: 32px;
  transition: 0.3s left ease, 0.3s opacity;
}
.row {
  position: absolute;
  top: calc(var(--i) * 32px);
  left: 0;
  width: calc(var(--size) * 32px);
  height: 32px;
  border: 1px solid var(--color-c);
  transition: 0.3s top ease;
  animation: row-in 0.1s ease;
}
.row-removing {
  animation: row-out 0.1s ease;
  scale: 1 0;
}
.row-scaler {
  display: flex;
  width: calc(var(--size) * 32px + 32px);
  background: var(--bg);
  animation: row-in 0.1s ease;
}
.row-scaler>* {
  width: 32px;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.row-scaler-removing {
  width: calc(var(--size) * 32px);
  background: var(--color);
  color: var(--color);
  opacity: 0;
  animation: scaler-out 0.2s ease-out;
}
.row-scaler-removing>:last-child {
  display: none;
}
.column {
  position: absolute;
  top: 0;
  left: calc(var(--i) * 32px);
  width: 32px;
  height: calc(var(--size) * 32px);
  border: 1px solid var(--color-c);
  transition: 0.3s left ease;
  animation: column-in 0.1s ease;
}
.column-removing {
  animation: column-out 0.1s ease;
  scale: 1;
}
.column-scaler {
  display: flex;
  flex-direction: column;
  height: calc(var(--size) * 32px + 32px);
  background: var(--bg);
  animation: column-in 0.1s ease;
}
.column-scaler>* {
  width: 32px;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.column-scaler-removing {
  height: calc(var(--size) * 32px);
  background: var(--color);
  color: var(--color);
  opacity: 0;
  animation: scaler-out 0.2s ease-out;
}
.column-scaler-removing>:last-child {
  display: none;
}
.offseted {
  opacity: 0.5;
}
@-moz-keyframes dialog-in {
  0% {
    left: calc(var(--left) * 2);
  }
}
@-webkit-keyframes dialog-in {
  0% {
    left: calc(var(--left) * 2);
  }
}
@-o-keyframes dialog-in {
  0% {
    left: calc(var(--left) * 2);
  }
}
@keyframes dialog-in {
  0% {
    left: calc(var(--left) * 2);
  }
}
@-moz-keyframes dialog-out {
  100% {
    left: 0;
  }
}
@-webkit-keyframes dialog-out {
  100% {
    left: 0;
  }
}
@-o-keyframes dialog-out {
  100% {
    left: 0;
  }
}
@keyframes dialog-out {
  100% {
    left: 0;
  }
}
@-moz-keyframes size-effect {
  0% {
    opacity: 1;
    scale: 1;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    scale: 150;
  }
}
@-webkit-keyframes size-effect {
  0% {
    opacity: 1;
    scale: 1;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    scale: 150;
  }
}
@-o-keyframes size-effect {
  0% {
    opacity: 1;
    scale: 1;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    scale: 150;
  }
}
@keyframes size-effect {
  0% {
    opacity: 1;
    scale: 1;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    scale: 150;
  }
}
@-moz-keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-20px) rotate(-10deg);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(20px) rotate(10deg);
  }
}
@-webkit-keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-20px) rotate(-10deg);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(20px) rotate(10deg);
  }
}
@-o-keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-20px) rotate(-10deg);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(20px) rotate(10deg);
  }
}
@keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-20px) rotate(-10deg);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(20px) rotate(10deg);
  }
}
@-moz-keyframes row-in {
  0% {
    scale: 1 0;
  }
}
@-webkit-keyframes row-in {
  0% {
    scale: 1 0;
  }
}
@-o-keyframes row-in {
  0% {
    scale: 1 0;
  }
}
@keyframes row-in {
  0% {
    scale: 1 0;
  }
}
@-moz-keyframes row-out {
  0% {
    scale: 1 1;
  }
}
@-webkit-keyframes row-out {
  0% {
    scale: 1 1;
  }
}
@-o-keyframes row-out {
  0% {
    scale: 1 1;
  }
}
@keyframes row-out {
  0% {
    scale: 1 1;
  }
}
@-moz-keyframes scaler-out {
  0% {
    opacity: 1;
  }
}
@-webkit-keyframes scaler-out {
  0% {
    opacity: 1;
  }
}
@-o-keyframes scaler-out {
  0% {
    opacity: 1;
  }
}
@keyframes scaler-out {
  0% {
    opacity: 1;
  }
}
@-moz-keyframes column-in {
  0% {
    scale: 0 1;
  }
}
@-webkit-keyframes column-in {
  0% {
    scale: 0 1;
  }
}
@-o-keyframes column-in {
  0% {
    scale: 0 1;
  }
}
@keyframes column-in {
  0% {
    scale: 0 1;
  }
}
@-moz-keyframes column-out {
  0% {
    scale: 1 1;
  }
}
@-webkit-keyframes column-out {
  0% {
    scale: 1 1;
  }
}
@-o-keyframes column-out {
  0% {
    scale: 1 1;
  }
}
@keyframes column-out {
  0% {
    scale: 1 1;
  }
}
