.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;
	}
}