div.timeline-event { width: 100%; max-width: 100%; overflow: hidden; overflow-wrap: anywhere; display: grid; margin-top: .5rem; grid-template: "avatar gap sender sender" auto "avatar gap content status" auto / 2.5rem .5rem 1fr 2rem; &.highlight { background-color: rgba(255, 255, 0, .1); } &.jump-highlight { background-color: rgba(0, 255, 0, .2); } &.jump-highlight-fadeout { transition: background-color 1s; } &:hover { background-color: #eee; &.highlight { background-color: #eec; } &.jump-highlight { background-color: #cec; } } > div.sender-avatar { grid-area: avatar; width: 40px; height: 40px; margin-top: 2px; } > div.event-sender-and-time { grid-area: sender; display: flex; align-items: center; gap: .25rem; > span.event-sender { font-weight: bold; } > span.event-time, > span.event-edited { font-size: .7rem; color: #888; } } > div.event-time-only { grid-area: timestamp; display: none; align-items: end; font-size: .7rem; color: #888; max-height: 1.25rem; margin-left: .25rem; } > div.event-content { grid-area: content; overflow: hidden; } > div.event-send-status { grid-area: status; display: flex; justify-content: right; align-items: end; max-height: 1.25rem; > svg { height: 16px; } &.error { color: red; } &.sending, &.sent { color: #ccc; } } &.same-sender { grid-template: "timestamp content status" auto / 3rem 1fr 2rem; margin-top: .25rem; > div.sender-avatar, > div.event-sender-and-time { display: none; } > div.event-time-only { display: flex; } } &.hidden-event { grid-template: "timestamp avatar content status" auto / 3rem 1.5rem 1fr 2rem; > div.sender-avatar { width: 1.5rem; height: 1.5rem; } > div.event-sender-and-time { display: none; } > div.event-time-only { display: flex; } + div.timeline-event.hidden-event { margin-top: 0; } } } div.hidden-event > div.sender-avatar, blockquote.reply-body > div.reply-sender > div.sender-avatar { margin-top: 0; display: flex; align-items: center; } div.date-separator { display: flex; align-items: center; gap: .5rem; > hr { flex: 1; opacity: .2; } } div.decryption-error-body { display: flex; align-items: center; > svg { height: 20px; color: red; } } div.redacted-body, div.decryption-pending-body { display: flex; align-items: center; color: #888; > svg { height: 20px; } } div.member-body { display: flex; align-items: center; gap: .25rem; } div.message-text { &.plaintext-body { white-space: pre-wrap; } &.notice-message { opacity: .6; } &.emote-message::before { content: "* " attr(data-event-sender) " "; } } div.html-body { overflow: hidden; img[data-mx-emoticon] { vertical-align: middle; } img.hicli-custom-emoji { vertical-align: middle; height: 24px; width: auto; max-width: 72px; } img.hicli-sizeless-inline-img { height: 24px; width: auto; max-width: 72px; } span.hicli-spoiler { filter: blur(4px); transition: filter .5s; cursor: pointer; &.spoiler-revealed { filter: none; } &:not(.spoiler-revealed) a { pointer-events: none; } } blockquote { border-left: 2px solid #ccc; padding-left: .5rem; } pre { width: 100%; max-height: max(50vh, 400px); overflow: auto; } h1, h2, h3, h4, h5, h6 { margin: 0 0 .5rem; } p, ul, ol, dl, table, pre, blockquote { &:not(:last-child) { margin: 0 0 .25rem; } &:last-child { margin: 0; } } } div.media-container { &.video-container { width: 100%; height: 240px; } > a { display: flex; align-items: center; text-decoration: none; color: inherit; } > img { max-width: 100%; max-height: 100%; } > video { min-width: 320px; max-width: 100%; height: 100%; } }