.RDView{ --column: 8; --row: 4; --scale: 1; } .event{ --event-width: 1; --event-height: 1; --event-beat: 0; --event-y: 0; --hue: 0; --brightness: 100; --grayscale: 0; --opacity: 100; --offset-beat: 0; --offset-y: 0; --offset-hue: 0; --offset-brightness: 100; --offset-grayscale: 0; --offset-opacity: 100; --tick: 1; --swing: 1; --loop: 0; --interval: 2; --delay: 0; --pulse: 1; } .event.group{ --group-width: 1; --group-height: 1; --group-beat: 0; --group-y: 0; --group-hue: 0; --group-brightness: 100; --group-grayscale: 0; --group-opacity: 100; --group-offset-hue: 0; --group-offset-brightness: 100; --group-offset-grayscale: 0; --group-offset-opacity: 100; --group-outline: red; --group-offset-outline: red; } .RDRooms { width: 352px; height: 198px; border-color: #7A7A7A; border-width: calc(2px / var(--scale)); border-style: solid; background-color: black; margin: calc((1 - var(--scale)) * -99px) calc((1 - var(--scale)) * -176px); transform: scale(var(--scale)); background-image: var(--background); perspective: 1000px; transition: border-color 0.5s, background-color 0.5s; z-index: 0; &:hover { border-color: transparent; &>.room { border-color: #7A7A7A; transform: translateX(calc(var(--index) * 15px)) rotate3d(0, 1, 0, calc(var(--index) * 5deg)); opacity: 80%; &>* { border-color: #7A7A7A88; background-color: #7A7A7A22; } } } &>.room { image-rendering: pixelated; position: absolute; transition: transform 0.5s, border-color 0.5s, opacity 0.5s; border-color: transparent; border-width: calc(1px / var(--scale)); border-style: solid; width: 352px; height: 198px; transform-origin: 140%; &>* { transition: background-color 0.5s; border-color: transparent; border-width: calc(1px / var(--scale)); border-style: dotted; image-rendering: pixelated; position: absolute; transform-origin: top left; transform: translate(calc(var(--position-x, 0px)), calc(var(--position-y, 0px))) rotate(calc(var(--angle) * 1deg)); background-image: var(--image); } } } .RDViewContent { width: 100%; height: calc((var(--row) * var(--scale) * 28 + 8) * 1px); margin-bottom: 0; overflow-x: auto; overflow-y: hidden; display: flex; justify-self: center; justify-content: center; &>.RDView { transform: translate(0, calc(var(--scale) * 6px)) scale(var(--scale));; background: url(./assets/grid.png) repeat; background-size: 28px; position: relative; &>.lines { display: grid; position: absolute; grid-template-columns: repeat(calc(var(--line-count)), calc(var(--cpb) * 28px)); height: min-content; transform: translate(calc(var(--beat) * 28px), -10px); &>* { position: relative; width: max-content; height: min-content; margin: 0 auto; font-size: 12px; transform: translate(calc(var(--cpb) * -14px), 0); bottom: 50%; } } &>.playhead { position: absolute; width: 10px; height: 4px; transform: translate(calc(var(--beat) * 28px - 4px), -6px); background-image: url(./assets/playhead.png); z-index: 1; &::before { position: absolute; content: ''; width: 14px; height: 10px; background-color: #E3E3E3; transform: translate(-2px, -10px); } &::after { position: absolute; content: ''; width: 2px; height: calc(var(--row) * 28px + 2px); background-color: #E3E3E3; transform: translate(4px, 4px); } } &::before { content: ''; image-rendering: pixelated; position: absolute; width: calc(var(--column) * 28px); height: 6px; background-size: 28px; background-image: url(./assets/grid-top.png); transform: translate(0, -6px); } } } .RDView{ width: calc(var(--column) * 28px); height: calc(var(--row) * 28px); margin: calc(var(--row) * (1 - var(--scale)) * -14px) calc(var(--column) * (1 - var(--scale)) * -14px); image-rendering: pixelated; transform: scale(var(--scale)); &.center { display: table; margin: 0 auto; } &.transparent { background-image: none; &::before { background-image: none; } } &.inline { display: inline-block; vertical-align: -2px; } &>.event, >.beat { position: absolute; image-rendering: pixelated; cursor: pointer; filter: hue-rotate(calc(var(--hue) * 1deg)) brightness(calc(var(--brightness) * 1%)) grayscale(calc(var(--grayscale) * 1%)) opacity(calc(var(--opacity) * 1%)); transition: transform 0.3s, opacity 0.3s, visibility 0.3s, filter 0.3s; &:hover { z-index: 1; &>.description { visibility: visible; opacity: 100%; transform: translate(-4px, -4px); } } &:active { filter: hue-rotate(calc(var(--offset-hue) * 1deg)) brightness(calc(var(--offset-brightness) * 1%)) grayscale(calc(var(--offset-grayscale) * 1%)); } &>.description { width: max-content; height: min-content; visibility: hidden; background-color: #2B2B2BEE; border-radius: 4px; border-color: #1B1B1B; border-width: 4px; border-style: solid; opacity: 0%; position: absolute; overflow: none; transition: width, height, opacity, 0.15s; z-index: 999; margin-top: calc(var(--event-height) * 28px); &>.line { height: 28px; margin: 7px 5px; font-size: 16px; min-width: 200px; font-weight: bold; display: grid; align-items: baseline; grid-template-columns: repeat(var(--box-count), 1fr); width: calc(var(--width) * 28px); &:has(.icon:last-child) { grid-template-columns: repeat(var(--box-count), 1fr) repeat(var(--icon-count), 32px); } &:has(.text:first-child) { grid-template-columns: 40% repeat(var(--box-count), 1fr); &:has(.icon:last-child) { grid-template-columns: 40% repeat(var(--box-count), 1fr) repeat(var(--icon-count), 32px); } } &.disable-grid { grid-template: none; } &>.text { color: white; transition: color, 0.15s; display: inline-block; line-height: 14px; font-weight: 800; text-shadow: 2px 0 0 var(--stroke-color, black), 2px 1px 0 var(--stroke-color, black), 2px 2px 0 var(--stroke-color, black), 1px 2px 0 var(--stroke-color, black), 0 2px 0 var(--stroke-color, black), -1px 2px 0 var(--stroke-color, black), -2px 2px 0 var(--stroke-color, black), -2px 1px 0 var(--stroke-color, black), -2px 0 0 var(--stroke-color, black), -2px -1px 0 var(--stroke-color, black), -2px -2px 0 var(--stroke-color, black), -1px -2px 0 var(--stroke-color, black), 0 -2px 0 var(--stroke-color, black), 1px -2px 0 var(--stroke-color, black), 2px -2px 0 var(--stroke-color, black), 2px -1px 0 var(--stroke-color, black); &.f-gray { color: #808080; } } &>.icon { &.file { width: 24px; height: 22px; background-image: url(./assets/contents/file.png); } &.wrench { width: 26px; height: 26px; background-image: url(./assets/contents/wrench.png); } } &>.scroll { width: 100%; height: 7px; background-color: #B2B2B2; border-radius: 4px; padding-right: 0%; &>.point { content: ''; position: relative; width: 16px; height: 16px; border-radius: 40%; background-color: #D2D2D2; box-shadow: 2px 2px 0 var(--stroke-color, #0008); transform: translate(calc(var(--scroll) / 100 * -16px), -4px); left: calc(var(--scroll) * 1%); } } &>.box { display: inline-block; background-color: #FFFFFF; border-radius: 4px; text-align: right; margin: 5px; padding: 0 5px; transition: background-color 0.2s; &::before { content: var(--tips); display: block; text-align: left; height: 0; color: #B2B2B2; } &.middle { text-align: center; } &.button { color: white; background-color: #C9C9C9; font-weight: 800; text-shadow: 2px 0 0 var(--stroke-color, black), 2px 1px 0 var(--stroke-color, black), 2px 2px 0 var(--stroke-color, black), 1px 2px 0 var(--stroke-color, black), 0 2px 0 var(--stroke-color, black), -1px 2px 0 var(--stroke-color, black), -2px 2px 0 var(--stroke-color, black), -2px 1px 0 var(--stroke-color, black), -2px 0 0 var(--stroke-color, black), -2px -1px 0 var(--stroke-color, black), -2px -2px 0 var(--stroke-color, black), -1px -2px 0 var(--stroke-color, black), 0 -2px 0 var(--stroke-color, black), 1px -2px 0 var(--stroke-color, black), 2px -2px 0 var(--stroke-color, black), 2px -1px 0 var(--stroke-color, black); &:not(.active):hover { background-color: #F5F5F5; } &.b-gray { background-color: #636363; } } &.input { box-shadow: inset 3px 2px #D1D1D1; color: #323232; overflow: hidden; &.foreground-gray { color: #9C9C9C; } &.b-black { box-shadow: inset 3px 2px #191919; background-color: #1F1F1F; color: white; } &.f-gray { color: #808080; } } &.select { text-align: left; background-color: #EEEEEE; color: #323232; overflow: hidden; &::after { content: ''; display: block; background-image: url(./assets/contents/list.png); float: right; margin-top: 9px; width: 14px; height: 10px; } &>.list { width: 250px; height: 140px; max-height: 200px; overflow: scroll; visibility: hidden; padding: 0px 4px; background-color: #EEEEEE; border-radius: 4px; opacity: 0%; position: absolute; overflow: scroll; display: grid; grid-template-rows: repeat(5, 20%); transition: opacity 0.3s, visibility 0.3s; z-index: 999; &>p { margin: 2px 0px; padding: 0px 20px; border-radius: 4px; &.selected::before { content: ''; position: absolute; background-image: url(./assets/contents/selected.png); width: 14px; height: 14px; transform: translate(-20px, 6px); } } } &:hover { background-color: #BBBBBB; &>.list { visibility: visible; opacity: 100%; &>p { &:hover { background-color: #82EAF3; } } } } } } } } } &>.event { width: calc(var(--event-width) * 28px); height: calc(var(--event-height) * 28px); transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-size: auto calc(28px * 8); background-position: calc(var(--event-x) * -28px) calc((var(--event-y) + 4) * -28px); transition: transform 0.3s, opacity 0.3s, visibility 0.3s, filter 0.3s, outline-color 0.3s; &:active { transform: translate(calc((var(--beat) + var(--offset-beat)) * 28px), calc(((var(--y) + var(--offset-y)) * 28 + 2) * 1px)); background-position: calc(var(--event-x) * -28px) calc(var(--event-y) * -28px); } &.sounds { background-image: var(--img, url(./assets/events/sounds.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #D12433; } &>.box.button.active { background-color: #D92433; } } } &.rooms { background-image: var(--img, url(./assets/events/rooms.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #D0B110; } &>.box.button.active { background-color: #D8B811; } } } &.decorations { background-image: var(--img, url(./assets/events/decorations.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #00BC56; } &>.box.button.active { background-color: #00C459; } } } &.actions { background-image: var(--img, url(./assets/events/actions.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #BA40A9; } &>.box.button.active { background-color: #C544B3; } } } &.rows { background-image: var(--img, url(./assets/events/rows.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #2C4EDB; } >.box.button { text-shadow: 2px 0 0 var(--stroke-color, #2D2D2D), 2px 1px 0 var(--stroke-color, #2D2D2D), 2px 2px 0 var(--stroke-color, #2D2D2D), 1px 2px 0 var(--stroke-color, #2D2D2D), 0 2px 0 var(--stroke-color, #2D2D2D), -1px 2px 0 var(--stroke-color, #2D2D2D), -2px 2px 0 var(--stroke-color, #2D2D2D), -2px 1px 0 var(--stroke-color, #2D2D2D), -2px 0 0 var(--stroke-color, #2D2D2D), -2px -1px 0 var(--stroke-color, #2D2D2D), -2px -2px 0 var(--stroke-color, #2D2D2D), -1px -2px 0 var(--stroke-color, #2D2D2D), 0 -2px 0 var(--stroke-color, #2D2D2D), 1px -2px 0 var(--stroke-color, #2D2D2D), 2px -2px 0 var(--stroke-color, #2D2D2D), 2px -1px 0 var(--stroke-color, #2D2D2D); &.active { background-color: #1C53D4; } } } } &.custom { background-image: var(--img, url(./assets/events/custom.png)); } &.group { width: calc(var(--group-width) * 28px); height: calc(var(--group-height) * 28px); transform: translate(calc((var(--group-beat) - (var(--scale) - 1) * var(--column) / 2) * 28px), calc((var(--group-y) - (var(--scale) - 1) * var(--row) / 2) * 28px)); outline-style: solid; outline-color: var(--group-outline, red); outline-width: 2px; &>.description { margin-top: calc(var(--group-height) * 28px); } &>* { filter: hue-rotate(calc(var(--group-hue) * 1deg)) brightness(calc(var(--group-brightness) * 1%)) grayscale(calc(var(--group-grayscale) * 1%)) opacity(calc(var(--group-opacity) * 1%)); } &:active { transform: translate(calc((var(--group-beat) + var(--group-offset-beat) - (var(--scale) - 1) * var(--column) / 2) * 28px), calc((var(--group-y) + var(--group-offset-y) - (var(--scale) - 1) * var(--row) / 2) * 28px)); outline-color: var(--group-offset-outline, red); &>* { filter: hue-rotate(calc(var(--group-offset-hue) * 1deg)) brightness(calc(var(--group-offset-brightness) * 1%)) grayscale(calc(var(--group-offset-grayscale) * 1%)) opacity(calc(var(--group-offset-opacity) * 1%)); } } } &>*.condition-true { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-true.png); } &>*.condition-false { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-false.png); } &>*.condition-both { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-both.png); } &>*.tag { position: absolute; width: 12px; height: 12px; transform: translate(0, calc(var(--event-height) *28px - 12px)); background-image: url(./assets/tag.png); } } &>.beat { position: absolute; &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #2C4EDB; } >.box.button { text-shadow: 2px 0 0 var(--stroke-color, #2D2D2D), 2px 1px 0 var(--stroke-color, #2D2D2D), 2px 2px 0 var(--stroke-color, #2D2D2D), 1px 2px 0 var(--stroke-color, #2D2D2D), 0 2px 0 var(--stroke-color, #2D2D2D), -1px 2px 0 var(--stroke-color, #2D2D2D), -2px 2px 0 var(--stroke-color, #2D2D2D), -2px 1px 0 var(--stroke-color, #2D2D2D), -2px 0 0 var(--stroke-color, #2D2D2D), -2px -1px 0 var(--stroke-color, #2D2D2D), -2px -2px 0 var(--stroke-color, #2D2D2D), -1px -2px 0 var(--stroke-color, #2D2D2D), 0 -2px 0 var(--stroke-color, #2D2D2D), 1px -2px 0 var(--stroke-color, #2D2D2D), 2px -2px 0 var(--stroke-color, #2D2D2D), 2px -1px 0 var(--stroke-color, #2D2D2D); &.active { background-color: #1C53D4; } } } } &>.beat:has(.pulse.freetime) { width: 14px; height: 24px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/beats/rows.png); background-position: calc((var(--pulse) - 1) * -14px) calc(2 * 28px); &:active>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 16) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-narrow-hover-area.png); transform: translate(14px, 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 24px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 16) * 1px), 0); background-image: url(./assets/beats/hold-narrow-hover-right.png); } } &>.pulse::before { content: ''; position: absolute; width: 10px; height: 24px; background-image: url(./assets/beats/hit-narrow.png); transform: translate(-4px, 0); opacity: calc(clamp(0, var(--pulse) - 6, 1) * clamp(0, 8 - var(--pulse), 1) * 100%); } &:active { transform: translate(calc((var(--beat) + var(--offset-beat)) * 28px), calc(((var(--y) + var(--offset-y)) * 28 + 2) * 1px)); background-position: calc((var(--pulse) - 1) * -14px) calc(6 * 28px); } } &>.beat:has(.add.freetime) { width: 14px; height: 28px; background-image: url(./assets/beats/rows.png); background-position: calc((var(--pulse) - 1) * -14px) calc(3 * 28px); &:active>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 16) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-hover-area.png); transform: translate(14px, 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 16) * 1px), 0); background-image: url(./assets/beats/hold-hover-right.png); } } &>.add::before { content: ''; position: absolute; width: 10px; height: 28px; background-image: url(./assets/beats/hit.png); transform: translate(-4px, 0); opacity: calc(clamp(0, var(--pulse) - 6, 1) * clamp(0, 8 - var(--pulse), 1) * 100%); } &:active { background-position: calc((var(--pulse) - 1) * -14px) calc(7 * 28px); } &>.condition-true { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-true.png); z-index: 1; } &>.condition-false { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-false.png); z-index: 1; } &>.condition-both { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-both.png); z-index: 1; } } &>.beat:has(.wave) { width: 28px; height: 28px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/events/rows.png); background-position: calc(1 * -28px) calc(4 * 28px); &:active { position: absolute; background-position: calc(1 * -28px) 0; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px + 2px)); z-index: -2; } } &>.beat:not(:has(.freetime)):not(:has(.row-xs)):not(:has(.wave)) { width: calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay)) * 28 - 4) * 1px); height: 28px; transform: translate(calc((var(--beat) * 28 + 4) * 1px), calc(var(--y) * 28px)); background-image: url(./assets/beats/beat-middle.png); background-size: auto 28px; &::before { content: ''; position: absolute; background-image: url(./assets/beats/beat-left.png); background-size: auto 28px; transform: translate(-4px, 0); width: 4px; height: inherit; } &::after { content: ''; position: absolute; background-image: url(./assets/beats/beat-right.png); background-size: auto 28px; transform: translate(calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay)) * 28 - 8) * 1px), 0); width: 10px; height: inherit; } &>.condition-true { position: absolute; width: 12px; height: 12px; transform: translate(-4px, 0); background-image: url(./assets/condition-true.png); z-index: 1; } &>.condition-false { position: absolute; width: 12px; height: 12px; transform: translate(-4px, 0); background-image: url(./assets/condition-false.png); z-index: 1; } &>.condition-both { position: absolute; width: 12px; height: 12px; transform: translate(-4px, 0); background-image: url(./assets/condition-both.png); z-index: 1; } &>.tag { position: absolute; width: 12px; height: 12px; transform: translate(-4px, calc((var(--event-height)* 28 - 12) * 1px)); background-image: url(./assets/tag.png); z-index: 1; } &>.loop{ position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop)), auto); width: calc(var(--loop) * var(--interval) * 28px); height: inherit; transform: translate(calc(var(--tick) * 28px - 8px), 0); &>div{ width: 10px; height: inherit; background-image: url(./assets/beats/hit.png); &::after{ content: ''; position: absolute; width: 6px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--interval) - var(--tick)) * 28px + 2px), 0); background-image: url(./assets/beats/pulse.png); opacity: 0%; } } } &:hover { &::before { transform: translate(-6px, 0); width: 6px; background-image: url(./assets/beats/beat-pulse-start.png); } &>.loop{ &>div::after{ opacity: 100%; } } &>div.subdivisions>div.subdivision>div::before { opacity: 100%; } &>div.burnshot { transform: translate(calc((var(--tick) * 28 - 13) * 1px), -8px); width: 18px; height: 36px; background-image: url(./assets/beats/burnshot-hover-right.png); &::before { transform: translate(calc(((var(--tick) + var(--interval)) * -28 + 7) * 1px), 19px); } &::after { transform: translate(calc(((var(--interval)) * -28 + 7) * 1px), 19px); } } &>div.classicbeat>div { opacity: 100%; } &:not(:has(.classicbeat)) { &::after { transform: translate(calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay)) * 28 - 13) * 1px), -8px); width: 18px; height: 36px; background-size: auto 100%; z-index: 1; background-image: url(./assets/beats/oneshot-hover-right.png); } } } &:active { transform: translate(calc(((var(--beat) + var(--offset-beat)) * 28 + 4) * 1px), calc(((var(--y) + var(--offset-y)) * 28 + 2) * 1px)); background-image: url(./assets/beats/beat-hover-middle.png); &::before { background-image: url(./assets/beats/beat-hover-pulse-start.png); } } &>div.burnshots { position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop) + 1), auto); transform: translate(-4px, 0); width: calc((((var(--loop) + 1) * var(--interval)) * 28) * 1px); height: 28px; &>div { background-image: url(./assets/beats/burnshot-right.png); transform: translate(calc((var(--tick) * 28 - 6) * 1px), 0); width: 14px; height: inherit; &::before { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--tick) + var(--interval)) * -28 + 4) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 2; } &::after { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--interval)) * -28 + 4) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 2; } } } &>div.freezeshots { position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop) + 1), auto); transform: translate(-4px, 0); width: calc((((var(--loop) + 1) * var(--interval)) * 28) * 1px); height: 28px; &>div{ background-image: url(./assets/beats/freeze-hit.png); transform: translate(calc((var(--tick) * 28 - 4) * 1px), 0); width: 10px; background-size: 100%; height: inherit; &::before { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--interval)) * -28 + 2) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 4; } &::after { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--interval) - var(--delay)) * -28 + 2) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 4; } } } &>div.skipshot { position: absolute; width: calc(((var(--interval, var(--tick) * 2) - var(--delay) - (var(--tick) * ((var(--subdivision) - 1) / var(--subdivision)))) * 28) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/skip-area.png); transform: translate(calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay) + (var(--tick) * ((var(--subdivision) - 1) / var(--subdivision)))) * 28 - 4) * 1px), 0); z-index: -2; &::after { content: ''; position: absolute; width: 10px; height: 28px; background-size: auto 100%; transform: translate(calc(((var(--interval, var(--tick) * 2) - var(--delay) - (var(--tick) * ((var(--subdivision) - 1) / var(--subdivision)))) * 28 - 6) * 1px), 0); background-image: url(./assets/beats/skip-right.png); } } &>div.subdivisions { position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop) + 1), auto); transform: translate(-4px, 0); width: calc((((var(--loop) + 1) * var(--interval)) * 28) * 1px); height: 28px; &>div.subdivision{ display: grid; grid-template-columns: repeat(calc(var(--subdivision)), calc(var(--interval) / var(--subdivision) / 2 * 28px)); width: calc(((var(--tick)) * 28 + 1) * 1px); height: inherit; background-size: auto 100%; transform: translate(calc(((var(--tick) + var(--delay)) * 28) * 1px), 0); &>div { background-image: url(./assets/beats/hit.png); width: 10px; background-size: auto 100%; transform: translate(calc((0 * 28 - 4) * 1px), 0); z-index: 1; &::before { content: ''; position: absolute; width: 6px; height: 28px; background-size: auto 100%; opacity: 0%; transform: translate(calc(((var(--tick) + var(--delay)) * -28 + 2) * 1px), 0); background-image: url(./assets/beats/pulse.png); z-index: 0; } } } &::after{ content: ''; position: absolute; width: calc(((var(--interval) / 2) * (var(--subdivision) - 1) / var(--subdivision) * 28 + 1) * 1px); height: inherit; background-image: url(./assets/beats/subdivision-area.png); transform: translate(calc(((var(--interval) * var(--loop) + var(--tick) + var(--delay)) * 28) * 1px), 0); z-index: -1; } } &>div.classicbeat { display: grid; grid-template-columns: repeat(3, calc((var(--tick) / 3 - var(--swing)) * 28px) calc((var(--swing) * 28px))); position: absolute; width: calc(var(--tick) * 28px); height: inherit; &>div { width: 6px; height: inherit; transform: translate(-6px, 0); background-size: auto 100%; opacity: 0%; background-image: url(./assets/beats/pulse.png); z-index: 1; } } } &>.beat:has(.classicbeat) { &>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 2) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-area.png); transform: translate(calc(((var(--tick) + var(--delay)) * 28 - 4) * 1px), 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 2) * 1px), 0); background-image: url(./assets/beats/hold-right.png); } } &:active>div.holdbeat { background-image: url(./assets/beats/hold-hover-area.png); &::after { background-image: url(./assets/beats/hold-hover-right.png); } } } &>.beat:not(:has(.classicbeat)) { &>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 2) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-area.png); transform: translate(calc(((var(--tick) + var(--delay) + var(--loop) * var(--interval)) * 28 - 4) * 1px), 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 2) * 1px), 0); background-image: url(./assets/beats/hold-right.png); } } &:active>div.holdbeat { background-image: url(./assets/beats/hold-hover-area.png); &::after { background-image: url(./assets/beats/hold-hover-right.png); } } } &>.beat:has(.row-xs) { width: 56px; height: 28px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/events/rows.png); background-position: -56px calc(4 * -28px); &:active { background-position: -56px 0; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px + 2px)); } &>.row-xs { display: grid; grid-template-columns: repeat(6, 9px); transform: translate(2px, 11px); width: inherit; height: inherit; &>.x { width: 7px; height: 7px; background-image: url(./assets/beats/row-x.png); } } } &>.pulse { width: 6px; height: 28px; position: absolute; transform: translate(calc(var(--beat) * 28px - 2px), calc(var(--y) * 28px)); background-image: url(./assets/beats/pulse.png); z-index: 1; } &>.hit { width: 10px; height: 28px; position: absolute; transform: translate(calc(var(--beat) * 28px - 4px), calc(var(--y) * 28px)); background-image: url(./assets/beats/hit.png); z-index: 1; } &>.cross { width: 6px; height: 6px; position: absolute; transform: translate(calc(var(--beat) * 28px - 2px), calc(var(--y) * 28px + 11px)); background-image: url(./assets/beats/cross.png); z-index: 1; } } .event.group { width: calc(var(--column) * 28px); height: calc(var(--row) * 28px); margin: calc(var(--row) * (1 - var(--scale)) * -14px) calc(var(--column) * (1 - var(--scale)) * -14px); image-rendering: pixelated; transform: scale(var(--scale)); &.center { display: table; margin: 0 auto; } &.transparent { background-image: none; &::before { background-image: none; } } &.inline { display: inline-block; vertical-align: -2px; } &>.event, >.beat { position: absolute; image-rendering: pixelated; cursor: pointer; filter: hue-rotate(calc(var(--hue) * 1deg)) brightness(calc(var(--brightness) * 1%)) grayscale(calc(var(--grayscale) * 1%)) opacity(calc(var(--opacity) * 1%)); transition: transform 0.3s, opacity 0.3s, visibility 0.3s, filter 0.3s; &:hover { z-index: 1; &>.description { visibility: visible; opacity: 100%; transform: translate(-4px, -4px); } } &:active { filter: hue-rotate(calc(var(--offset-hue) * 1deg)) brightness(calc(var(--offset-brightness) * 1%)) grayscale(calc(var(--offset-grayscale) * 1%)) opacity(calc(var(--offset-opacity) * 1%)); } &>.description { width: max-content; height: min-content; visibility: hidden; background-color: #2B2B2BEE; border-radius: 4px; border-color: #1B1B1B; border-width: 4px; border-style: solid; opacity: 0%; position: absolute; overflow: none; transition: width, height, opacity, 0.15s; z-index: 999; margin-top: calc(var(--event-height) * 28px); &>.line { height: 28px; margin: 7px 5px; font-size: 16px; min-width: 200px; font-weight: bold; display: grid; align-items: baseline; grid-template-columns: repeat(var(--box-count), 1fr); width: calc(var(--width) * 28px); &:has(.icon:last-child) { grid-template-columns: repeat(var(--box-count), 1fr) repeat(var(--icon-count), 32px); } &:has(.text:first-child) { grid-template-columns: 40% repeat(var(--box-count), 1fr); &:has(.icon:last-child) { grid-template-columns: 40% repeat(var(--box-count), 1fr) repeat(var(--icon-count), 32px); } } &.disable-grid { grid-template: none; } &>.text { color: white; transition: color, 0.15s; display: inline-block; line-height: 14px; font-weight: 800; text-shadow: 2px 0 0 var(--stroke-color, black), 2px 1px 0 var(--stroke-color, black), 2px 2px 0 var(--stroke-color, black), 1px 2px 0 var(--stroke-color, black), 0 2px 0 var(--stroke-color, black), -1px 2px 0 var(--stroke-color, black), -2px 2px 0 var(--stroke-color, black), -2px 1px 0 var(--stroke-color, black), -2px 0 0 var(--stroke-color, black), -2px -1px 0 var(--stroke-color, black), -2px -2px 0 var(--stroke-color, black), -1px -2px 0 var(--stroke-color, black), 0 -2px 0 var(--stroke-color, black), 1px -2px 0 var(--stroke-color, black), 2px -2px 0 var(--stroke-color, black), 2px -1px 0 var(--stroke-color, black); &.f-gray { color: #808080; } } &>.icon { &.file { width: 24px; height: 22px; background-image: url(./assets/contents/file.png); } &.wrench { width: 26px; height: 26px; background-image: url(./assets/contents/wrench.png); } } &>.scroll { width: 100%; height: 7px; background-color: #B2B2B2; border-radius: 4px; padding-right: 0%; &>.point { content: ''; position: relative; width: 16px; height: 16px; border-radius: 40%; background-color: #D2D2D2; box-shadow: 2px 2px 0 var(--stroke-color, #0008); transform: translate(calc(var(--scroll) / 100 * -16px), -4px); left: calc(var(--scroll) * 1%); } } &>.box { display: inline-block; background-color: #FFFFFF; border-radius: 4px; text-align: right; margin: 5px; padding: 0 5px; transition: background-color 0.2s; &::before { content: var(--tips); display: block; text-align: left; height: 0; color: #B2B2B2; } &.middle { text-align: center; } &.button { color: white; background-color: #C9C9C9; font-weight: 800; text-shadow: 2px 0 0 var(--stroke-color, black), 2px 1px 0 var(--stroke-color, black), 2px 2px 0 var(--stroke-color, black), 1px 2px 0 var(--stroke-color, black), 0 2px 0 var(--stroke-color, black), -1px 2px 0 var(--stroke-color, black), -2px 2px 0 var(--stroke-color, black), -2px 1px 0 var(--stroke-color, black), -2px 0 0 var(--stroke-color, black), -2px -1px 0 var(--stroke-color, black), -2px -2px 0 var(--stroke-color, black), -1px -2px 0 var(--stroke-color, black), 0 -2px 0 var(--stroke-color, black), 1px -2px 0 var(--stroke-color, black), 2px -2px 0 var(--stroke-color, black), 2px -1px 0 var(--stroke-color, black); &:not(.active):hover { background-color: #F5F5F5; } &.b-gray { background-color: #636363; } } &.input { box-shadow: inset 3px 2px #D1D1D1; color: #323232; overflow: hidden; &.foreground-gray { color: #9C9C9C; } &.b-black { box-shadow: inset 3px 2px #191919; background-color: #1F1F1F; color: white; } &.f-gray { color: #808080; } } &.select { text-align: left; background-color: #EEEEEE; color: #323232; overflow: hidden; &::after { content: ''; display: block; background-image: url(./assets/contents/list.png); float: right; margin-top: 9px; width: 14px; height: 10px; } &>.list { width: 250px; height: 140px; max-height: 200px; overflow: scroll; visibility: hidden; padding: 0px 4px; background-color: #EEEEEE; border-radius: 4px; opacity: 0%; position: absolute; overflow: scroll; display: grid; grid-template-rows: repeat(5, 20%); transition: opacity 0.3s, visibility 0.3s; z-index: 999; &>p { margin: 2px 0px; padding: 0px 20px; border-radius: 4px; &.selected::before { content: ''; position: absolute; background-image: url(./assets/contents/selected.png); width: 14px; height: 14px; transform: translate(-20px, 6px); } } } &:hover { background-color: #BBBBBB; &>.list { visibility: visible; opacity: 100%; &>p { &:hover { background-color: #82EAF3; } } } } } } } } } &>.event { width: calc(var(--event-width) * 28px); height: calc(var(--event-height) * 28px); transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-size: auto calc(28px * 8); background-position: calc(var(--event-x) * -28px) calc((var(--event-y) + 4) * -28px); transition: transform 0.3s, opacity 0.3s, visibility 0.3s, filter 0.3s, outline-color 0.3s; &:active { transform: translate(calc((var(--beat) + var(--offset-beat)) * 28px), calc(((var(--y) + var(--offset-y)) * 28 + 2) * 1px)); background-position: calc(var(--event-x) * -28px) calc(var(--event-y) * -28px); } &.sounds { background-image: var(--img, url(./assets/events/sounds.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #D12433; } &>.box.button.active { background-color: #D92433; } } } &.rooms { background-image: var(--img, url(./assets/events/rooms.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #D0B110; } &>.box.button.active { background-color: #D8B811; } } } &.decorations { background-image: var(--img, url(./assets/events/decorations.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #00BC56; } &>.box.button.active { background-color: #00C459; } } } &.actions { background-image: var(--img, url(./assets/events/actions.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #BA40A9; } &>.box.button.active { background-color: #C544B3; } } } &.rows { background-image: var(--img, url(./assets/events/rows.png)); &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #2C4EDB; } >.box.button { text-shadow: 2px 0 0 var(--stroke-color, #2D2D2D), 2px 1px 0 var(--stroke-color, #2D2D2D), 2px 2px 0 var(--stroke-color, #2D2D2D), 1px 2px 0 var(--stroke-color, #2D2D2D), 0 2px 0 var(--stroke-color, #2D2D2D), -1px 2px 0 var(--stroke-color, #2D2D2D), -2px 2px 0 var(--stroke-color, #2D2D2D), -2px 1px 0 var(--stroke-color, #2D2D2D), -2px 0 0 var(--stroke-color, #2D2D2D), -2px -1px 0 var(--stroke-color, #2D2D2D), -2px -2px 0 var(--stroke-color, #2D2D2D), -1px -2px 0 var(--stroke-color, #2D2D2D), 0 -2px 0 var(--stroke-color, #2D2D2D), 1px -2px 0 var(--stroke-color, #2D2D2D), 2px -2px 0 var(--stroke-color, #2D2D2D), 2px -1px 0 var(--stroke-color, #2D2D2D); &.active { background-color: #1C53D4; } } } } &.custom { background-image: var(--img, url(./assets/events/custom.png)); } &:not(.group){ pointer-events: auto; } &.group { width: calc(var(--group-width) * 28px); height: calc(var(--group-height) * 28px); transform: translate(calc((var(--group-beat) - (var(--scale) - 1) * var(--column) / 2) * 28px), calc((var(--group-y) - (var(--scale) - 1) * var(--row) / 2) * 28px)); outline-style: solid; outline-color: var(--group-outline, red); outline-width: 2px; filter: hue-rotate(calc(var(--group-hue) * 1deg)) brightness(calc(var(--group-brightness) * 1%)) grayscale(calc(var(--group-grayscale) * 1%)) opacity(calc(var(--group-opacity) * 1%)); &>.description { margin-top: calc(var(--group-height) * 28px); } &:active { transform: translate(calc((var(--group-beat) + var(--group-offset-beat) - (var(--scale) - 1) * var(--column) / 2) * 28px), calc((var(--group-y) + var(--group-offset-y) - (var(--scale) - 1) * var(--row) / 2) * 28px)); outline-color: var(--group-offset-outline, red); filter: hue-rotate(calc(var(--group-offset-hue) * 1deg)) brightness(calc(var(--group-offset-brightness) * 1%)) grayscale(calc(var(--group-offset-grayscale) * 1%)) opacity(calc(var(--group-offset-opacity) * 1%)); } } &>*.condition-true { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-true.png); } &>*.condition-false { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-false.png); } &>*.condition-both { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-both.png); } &>*.tag { position: absolute; width: 12px; height: 12px; transform: translate(0, calc(var(--event-height) *28px - 12px)); background-image: url(./assets/tag.png); } } &>.beat { position: absolute; &>.description>.line { &>.text.hoverable:hover, >*>.highlight { color: #2C4EDB; } >.box.button { text-shadow: 2px 0 0 var(--stroke-color, #2D2D2D), 2px 1px 0 var(--stroke-color, #2D2D2D), 2px 2px 0 var(--stroke-color, #2D2D2D), 1px 2px 0 var(--stroke-color, #2D2D2D), 0 2px 0 var(--stroke-color, #2D2D2D), -1px 2px 0 var(--stroke-color, #2D2D2D), -2px 2px 0 var(--stroke-color, #2D2D2D), -2px 1px 0 var(--stroke-color, #2D2D2D), -2px 0 0 var(--stroke-color, #2D2D2D), -2px -1px 0 var(--stroke-color, #2D2D2D), -2px -2px 0 var(--stroke-color, #2D2D2D), -1px -2px 0 var(--stroke-color, #2D2D2D), 0 -2px 0 var(--stroke-color, #2D2D2D), 1px -2px 0 var(--stroke-color, #2D2D2D), 2px -2px 0 var(--stroke-color, #2D2D2D), 2px -1px 0 var(--stroke-color, #2D2D2D); &.active { background-color: #1C53D4; } } } } &>.beat:has(.pulse.freetime) { width: 14px; height: 24px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/beats/rows.png); background-position: calc((var(--pulse) - 1) * -14px) calc(2 * 28px); &:active>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 16) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-narrow-hover-area.png); transform: translate(14px, 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 24px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 16) * 1px), 0); background-image: url(./assets/beats/hold-narrow-hover-right.png); } } &>.pulse::before { content: ''; position: absolute; width: 10px; height: 24px; background-image: url(./assets/beats/hit-narrow.png); transform: translate(-4px, 0); opacity: calc(clamp(0, var(--pulse) - 6, 1) * clamp(0, 8 - var(--pulse), 1) * 100%); } &:active { transform: translate(calc((var(--beat) + var(--offset-beat)) * 28px), calc(((var(--y) + var(--offset-y)) * 28 + 2) * 1px)); background-position: calc((var(--pulse) - 1) * -14px) calc(6 * 28px); } } &>.beat:has(.add.freetime) { width: 14px; height: 28px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/beats/rows.png); background-position: calc((var(--pulse) - 1) * -14px) calc(3 * 28px); &:active>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 16) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-hover-area.png); transform: translate(14px, 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 16) * 1px), 0); background-image: url(./assets/beats/hold-hover-right.png); } } &>.add::before { content: ''; position: absolute; width: 10px; height: 28px; background-image: url(./assets/beats/hit.png); transform: translate(-4px, 0); opacity: calc(clamp(0, var(--pulse) - 6, 1) * clamp(0, 8 - var(--pulse), 1) * 100%); } &:active { transform: translate(calc(var(--beat) * 28px), calc((var(--y) * 28 + 2) * 1px)); background-position: calc((var(--pulse) - 1) * -14px) calc(7 * 28px); } &>.condition-true { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-true.png); z-index: 1; } &>.condition-false { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-false.png); z-index: 1; } &>.condition-both { position: absolute; width: 12px; height: 12px; background-image: url(./assets/condition-both.png); z-index: 1; } } &>.beat:has(.wave) { width: 28px; height: 28px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/events/rows.png); background-position: calc(1 * -28px) calc(4 * 28px); &:active { position: absolute; background-position: calc(1 * -28px) 0; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px + 2px)); z-index: -2; } } &>.beat:not(:has(.freetime)):not(:has(.row-xs)):not(:has(.wave)) { width: calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay)) * 28 - 4) * 1px); height: 28px; transform: translate(calc((var(--beat) * 28 + 4) * 1px), calc(var(--y) * 28px)); background-image: url(./assets/beats/beat-middle.png); background-size: auto 28px; &::before { content: ''; position: absolute; background-image: url(./assets/beats/beat-left.png); background-size: auto 28px; transform: translate(-4px, 0); width: 4px; height: inherit; } &::after { content: ''; position: absolute; background-image: url(./assets/beats/beat-right.png); background-size: auto 28px; transform: translate(calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay)) * 28 - 8) * 1px), 0); width: 10px; height: inherit; } &>.condition-true { position: absolute; width: 12px; height: 12px; transform: translate(-4px, 0); background-image: url(./assets/condition-true.png); z-index: 1; } &>.condition-false { position: absolute; width: 12px; height: 12px; transform: translate(-4px, 0); background-image: url(./assets/condition-false.png); z-index: 1; } &>.condition-both { position: absolute; width: 12px; height: 12px; transform: translate(-4px, 0); background-image: url(./assets/condition-both.png); z-index: 1; } &>.tag { position: absolute; width: 12px; height: 12px; transform: translate(-4px, calc((var(--event-height)* 28 - 12) * 1px)); background-image: url(./assets/tag.png); z-index: 1; } &>.loop{ position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop)), auto); width: calc(var(--loop) * var(--interval) * 28px); height: inherit; transform: translate(calc(var(--tick) * 28px - 8px), 0); &>div{ width: 10px; height: inherit; background-image: url(./assets/beats/hit.png); &::after{ content: ''; position: absolute; width: 6px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--interval) - var(--tick)) * 28px + 2px), 0); background-image: url(./assets/beats/pulse.png); opacity: 0%; } } } &:hover { &::before { transform: translate(-6px, 0); width: 6px; background-image: url(./assets/beats/beat-pulse-start.png); } &>.loop{ &>div::after{ opacity: 100%; } } &>div.subdivisions>div.subdivision>div::before { opacity: 100%; } &>div.burnshot { transform: translate(calc((var(--tick) * 28 - 13) * 1px), -8px); width: 18px; height: 36px; background-image: url(./assets/beats/burnshot-hover-right.png); &::before { transform: translate(calc(((var(--tick) + var(--interval)) * -28 + 7) * 1px), 19px); } &::after { transform: translate(calc(((var(--interval)) * -28 + 7) * 1px), 19px); } } &>div.classicbeat>div { opacity: 100%; } &:not(:has(.classicbeat)) { &::after { transform: translate(calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay)) * 28 - 13) * 1px), -8px); width: 18px; height: 36px; background-size: auto 100%; z-index: 1; background-image: url(./assets/beats/oneshot-hover-right.png); } } } &:active { transform: translate(calc(((var(--beat) + var(--offset-beat)) * 28 + 4) * 1px), calc(((var(--y) + var(--offset-y)) * 28 + 2) * 1px)); background-image: url(./assets/beats/beat-hover-middle.png); &::before { background-image: url(./assets/beats/beat-hover-pulse-start.png); } } &>div.burnshots { position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop) + 1), auto); transform: translate(-4px, 0); width: calc((((var(--loop) + 1) * var(--interval)) * 28) * 1px); height: 28px; &>div { background-image: url(./assets/beats/burnshot-right.png); transform: translate(calc((var(--tick) * 28 - 6) * 1px), 0); width: 14px; height: inherit; &::before { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--tick) + var(--interval)) * -28 + 4) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 2; } &::after { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--interval)) * -28 + 4) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 2; } } } &>div.freezeshots { position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop) + 1), auto); transform: translate(-4px, 0); width: calc((((var(--loop) + 1) * var(--interval)) * 28) * 1px); height: 28px; &>div{ background-image: url(./assets/beats/freeze-hit.png); transform: translate(calc((var(--tick) * 28 - 4) * 1px), 0); width: 10px; background-size: 100%; height: inherit; &::before { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--interval)) * -28 + 2) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 4; } &::after { content: ''; position: absolute; width: 6px; height: 6px; background-size: auto 100%; transform: translate(calc(((var(--interval) - var(--delay)) * -28 + 2) * 1px), 11px); background-image: url(./assets/beats/cross.png); z-index: 4; } } } &>div.skipshot { position: absolute; width: calc(((var(--interval, var(--tick) * 2) - var(--delay) - (var(--tick) * ((var(--subdivision) - 1) / var(--subdivision)))) * 28) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/skip-area.png); transform: translate(calc(((var(--tick) + var(--loop) * var(--interval) + var(--delay) + (var(--tick) * ((var(--subdivision) - 1) / var(--subdivision)))) * 28 - 4) * 1px), 0); z-index: -2; &::after { content: ''; position: absolute; width: 10px; height: 28px; background-size: auto 100%; transform: translate(calc(((var(--interval, var(--tick) * 2) - var(--delay) - (var(--tick) * ((var(--subdivision) - 1) / var(--subdivision)))) * 28 - 6) * 1px), 0); background-image: url(./assets/beats/skip-right.png); } } &>div.subdivisions { position: absolute; display: grid; grid-template-columns: repeat(calc(var(--loop) + 1), auto); transform: translate(-4px, 0); width: calc((((var(--loop) + 1) * var(--interval)) * 28) * 1px); height: 28px; &>div.subdivision{ display: grid; grid-template-columns: repeat(calc(var(--subdivision)), calc(var(--interval) / var(--subdivision) / 2 * 28px)); width: calc(((var(--tick)) * 28 + 1) * 1px); height: inherit; background-size: auto 100%; transform: translate(calc(((var(--tick) + var(--delay)) * 28) * 1px), 0); &>div { background-image: url(./assets/beats/hit.png); width: 10px; background-size: auto 100%; transform: translate(calc((0 * 28 - 4) * 1px), 0); z-index: 1; &::before { content: ''; position: absolute; width: 6px; height: 28px; background-size: auto 100%; opacity: 0%; transform: translate(calc(((var(--tick) + var(--delay)) * -28 + 2) * 1px), 0); background-image: url(./assets/beats/pulse.png); z-index: 0; } } } &::after{ content: ''; position: absolute; width: calc(((var(--interval) / 2) * (var(--subdivision) - 1) / var(--subdivision) * 28 + 1) * 1px); height: inherit; background-image: url(./assets/beats/subdivision-area.png); transform: translate(calc(((var(--interval) * var(--loop) + var(--tick) + var(--delay)) * 28) * 1px), 0); z-index: -1; } } &>div.classicbeat { display: grid; grid-template-columns: repeat(6, calc((var(--tick) / 3 - var(--swing, var(--tick) / 6)) * 28px) calc((var(--swing, var(--tick) / 6)) * 28px)); position: absolute; width: calc(var(--tick) * 28px); height: inherit; &>div { width: 6px; height: inherit; transform: translate(-6px, 0); background-size: auto 100%; opacity: 0%; background-image: url(./assets/beats/pulse.png); z-index: 1; } } } &>.beat:has(.classicbeat) { &>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 2) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-area.png); transform: translate(calc(((var(--tick) + var(--delay)) * 28 - 4) * 1px), 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 2) * 1px), 0); background-image: url(./assets/beats/hold-right.png); } } &:active>div.holdbeat { background-image: url(./assets/beats/hold-hover-area.png); &::after { background-image: url(./assets/beats/hold-hover-right.png); } } } &>.beat:not(:has(.classicbeat)) { &>div.holdbeat { position: absolute; width: calc((var(--hold) * 28 - 2) * 1px); height: inherit; background-size: auto 100%; background-image: url(./assets/beats/hold-area.png); transform: translate(calc(((var(--tick) + var(--delay) + var(--loop) * var(--interval)) * 28 - 4) * 1px), 0); z-index: -2; &::after { content: ''; position: absolute; width: 2px; height: 28px; background-size: auto 100%; transform: translate(calc((var(--hold) * 28 - 2) * 1px), 0); background-image: url(./assets/beats/hold-right.png); } } &:active>div.holdbeat { background-image: url(./assets/beats/hold-hover-area.png); &::after { background-image: url(./assets/beats/hold-hover-right.png); } } } &>.beat:has(.row-xs) { width: 56px; height: 28px; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px)); background-image: url(./assets/events/rows.png); background-position: -56px calc(4 * -28px); &:active { background-position: -56px 0; transform: translate(calc(var(--beat) * 28px), calc(var(--y) * 28px + 2px)); } &>.row-xs { display: grid; grid-template-columns: repeat(6, 9px); transform: translate(2px, 11px); width: inherit; height: inherit; &>.x { width: 7px; height: 7px; background-image: url(./assets/beats/row-x.png); } } } &>.pulse { width: 6px; height: 28px; position: absolute; transform: translate(calc(var(--beat) * 28px - 2px), calc(var(--y) * 28px)); background-image: url(./assets/beats/pulse.png); z-index: 1; } &>.hit { width: 10px; height: 28px; position: absolute; transform: translate(calc(var(--beat) * 28px - 4px), calc(var(--y) * 28px)); background-image: url(./assets/beats/hit.png); z-index: 1; } &>.cross { width: 6px; height: 6px; position: absolute; transform: translate(calc(var(--beat) * 28px - 2px), calc(var(--y) * 28px + 11px)); background-image: url(./assets/beats/cross.png); z-index: 1; } }