455 lines
6.5 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@font-face {
font-family: "Rajdhani";
font-display: swap;
font-weight: 600;
src: url("fonts/rajdhani-semibold-webfont.woff") format("woff");
}
@font-face {
font-family: "Rajdhani";
font-display: swap;
font-weight: 700;
src: url("fonts/rajdhani-bold-webfont.woff") format("woff");
}
* {
box-sizing: border-box;
}
html {
font-size: calc(var(--scale, 1) * 10px);
}
body {
display: flex;
flex-direction: column;
gap: 0.5rem;
height: 100vh;
margin: 0;
padding: 1.4rem 1.6rem;
overflow: hidden;
font-family: "Rajdhani", sans-serif;
font-size: 1.6rem;
font-weight: 600;
line-height: 1.2;
white-space: nowrap;
background: rgba(0, 0, 0, 0);
color: white;
filter: drop-shadow(0 0 0.1rem black) drop-shadow(0 0 0.1rem black);
}
#overlayStack {
position: relative;
flex: 1 1 auto;
min-height: 0;
width: 100%;
display: flex;
flex-direction: column;
}
#songOverlay {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.5rem;
min-height: 0;
opacity: 1;
transition-property: opacity;
transition-timing-function: ease-out;
transition-duration: calc(var(--fade, 300) * 1ms);
}
#requestOverlay {
position: absolute;
left: 0;
right: 0;
top: 0;
max-height: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
gap: 0.45rem;
white-space: normal;
opacity: 1;
transition-property: opacity;
transition-timing-function: ease-out;
transition-duration: calc(var(--fade, 300) * 1ms);
}
/* Song panel: hide when not Playing (or loading map meta). Use body.preview to show placeholders (click). */
body.loading #songOverlay,
body:not([data-game-state="Playing"], .preview) #songOverlay {
opacity: 0;
pointer-events: none;
}
/* Request queue: show when idle (Menu); hide while Playing, preview, or loading map meta */
body[data-game-state="Playing"] #requestOverlay,
body.preview #requestOverlay,
body.loading #requestOverlay {
opacity: 0;
pointer-events: none;
}
#requestHeader {
font-size: 2.2rem;
font-weight: 700;
line-height: 1.1;
}
#requestList {
margin: 0;
padding-left: 2.2rem;
font-size: 1.5rem;
line-height: 1.25;
}
#requestList:empty {
display: none;
}
#requestList .request-item + .request-item {
margin-top: 0.35rem;
}
#requestEmpty {
font-size: 1.45rem;
opacity: 0.88;
}
#requestOverlay.has-items #requestEmpty {
display: none;
}
.request-item {
display: list-item;
}
.request-title {
font-weight: 700;
}
.request-meta {
opacity: 0.92;
font-size: 1.45rem;
}
.request-meta::before {
content: "· ";
}
span {
align-self: baseline;
}
span:empty {
display: none;
}
.row {
display: flex;
gap: 1.6rem;
}
/* Map info */
#coverImg {
width: 6.8rem;
height: 6.8rem;
margin-bottom: 0.2rem;
border-radius: 0.6rem;
flex-shrink: 0;
filter: url(#gamma);
}
#mapInfo {
display: flex;
flex-direction: column;
flex-grow: 1;
gap: 0.35rem;
margin-top: -0.4rem;
overflow: hidden;
}
#mapInfo .row {
gap: 0.9rem;
}
#mapInfo * {
overflow: hidden;
text-overflow: ellipsis;
}
#title {
font-size: 2.4rem;
font-weight: 700;
}
#subTitle,
#difficultyLabel {
flex-shrink: 99999;
}
#mapper::before {
content: "";
}
#mapper::after {
content: "";
}
#difficulty {
font-size: 1.5rem;
}
#characteristicImg {
width: 1.7rem;
height: 1.7rem;
flex-shrink: 0;
align-self: center;
}
#difficultyLabel {
font-size: 1.4rem;
}
#type,
#bsrKey {
font-weight: 700;
flex-shrink: 0;
}
#bsrKey {
letter-spacing: 0.2rem;
}
#bsrKey::before {
content: "!bsr ";
letter-spacing: normal;
}
#type:not(:empty) + #bsrKey {
display: none;
}
/* Song time */
#time {
display: flex;
flex-direction: column;
width: 6.8rem;
font-size: 1.35rem;
text-align: right;
line-height: 1.7;
letter-spacing: -0.05em;
}
#timeBar {
max-width: 100%;
height: 0.2rem;
margin-top: -0.2rem;
background: currentColor;
border-radius: 0.6rem;
}
#time,
#accuracy,
#mistakes {
font-feature-settings: "tnum";
font-variant-numeric: tabular-nums;
}
/* Score */
#score {
display: contents;
}
#accuracy {
font-size: 2.4rem;
font-weight: 700;
}
#accuracy::after {
display: inline-block;
content: "%";
font-size: 1.8rem;
}
#accuracy.failed {
text-decoration: line-through red;
}
#mistakes {
display: inline;
font-size: 1.8rem;
}
#mistakes::after {
content: "";
}
#mistakes:empty::after {
content: "FC";
}
/* Mutual friend scores */
#friendScores {
display: flex;
flex-direction: column;
gap: 0.3rem;
margin-top: 0.1rem;
max-width: 44rem;
}
#friendScoresHeader {
font-size: 1.3rem;
font-weight: 700;
opacity: 0.92;
display: flex;
align-items: center;
gap: 0.45rem;
}
#friendScoresPlayerAvatar {
width: 2rem;
height: 2rem;
border-radius: 50%;
object-fit: cover;
flex-shrink: 0;
}
#friendScoresHeaderImg {
width: 2.5rem;
height: 2.5rem;
object-fit: contain;
}
#friendScoresList {
margin: 0;
padding-inline-start: 2rem;
font-size: 1.35rem;
line-height: 1.2;
}
#friendScoresList:empty {
display: none;
}
#friendScoresEmpty {
font-size: 1.2rem;
opacity: 0.82;
}
#friendScores.has-items #friendScoresEmpty {
display: none;
}
#friendScores.is-loading #friendScoresEmpty {
opacity: 1;
}
.friend-score-item {
display: flex;
align-items: center;
gap: 0.55rem;
}
.friend-avatar {
width: 1.5rem;
height: 1.5rem;
border-radius: 50%;
object-fit: cover;
flex-shrink: 0;
}
.friend-name {
flex: 1;
min-width: 0;
}
.friend-acc {
font-weight: 700;
flex-shrink: 0;
}
/* Settings */
body:not(.cover) #coverImg,
body:not(.mapInfo) #mapInfo,
body:not(.time) #time,
body:not(.score) #score,
body:not(.friends) #friendScores,
body:not(.bsr) #bsrKey {
display: none;
}
body.right #songOverlay > .row {
flex-direction: row-reverse;
}
body.right #mapInfo .row {
justify-content: flex-end;
}
body.bottom {
flex-direction: column-reverse;
}
body.bottom #time {
flex-direction: column-reverse;
}
#settings {
display: none;
position: absolute;
top: 50%;
transform: translateY(-50%);
flex-direction: column;
gap: 2px;
font-family: system-ui;
font-size: 16px;
}
.preview #settings {
display: flex;
}
#settings label * {
float: right;
margin-left: 1em;
}
#settings .beatLeaderPlayerRow,
#settings .debugSongIdRow {
display: flex;
align-items: baseline;
gap: 0.5em;
}
#debugSongIdInput {
flex: 0 0 10rem;
width: 10rem;
max-width: 50%;
}
/* One wrapper sets weight; inner <button> uses font: inherit (avoids UA bold + body 600). */
.debugSongIdHint {
font-weight: normal;
}
.debugSongIdHint button {
font: inherit;
padding: 0;
border: none;
background: none;
color: #a8d4ff;
text-decoration: underline;
cursor: pointer;
}
.debugSongIdHint button:hover {
color: #cfe9ff;
}