.rendered_markdown { /* The default top/bottom margins for paragraphs are small, to make sure they look nice next to blockquotes, lists, etc. */ p { margin: 3px 0 3px 0; } /* The spacing between two paragraphs is significantly larger. We arrange things so that this spacing matches the spacing between paragraphs in two consecutive 1-line messages. */ p + p { margin-top: 10px; } /* Ensure bulleted lists are nicely centered in 1-line messages */ ul { margin: 2px 0 5px 20px; } /* Swap the left and right margins of bullets for Right-To-Left languages */ &.rtl ul { margin-right: 20px; margin-left: 0; } /* Ensure ordered lists are nicely centered in 1-line messages */ ol { margin: 2px 0 5px 20px; } /* Swap the left and right margins of ordered list for Right-To-Left languages */ &.rtl ol { margin-right: 8px; margin-left: 0; } /* Reduce top-margin when a paragraph is followed by an ordered or bulleted list */ p + ul, p + ol { margin-top: 0; } /* Headings: We need to make sure our headings are less prominent than our sender names styling. */ h1, h2, h3, h4, h5, h6 { font-size: 14px; font-weight: 600; line-height: 1.4; margin-top: 0; margin-bottom: 5px; text-decoration: underline; } /* Formatting for blockquotes */ blockquote { padding-left: 5px; margin-left: 10px; margin-top: 5px; margin-bottom: 6px; border-left-color: hsl(0, 0%, 87%); p { line-height: inherit; font-size: inherit; } } &.rtl blockquote { padding-left: unset; padding-right: 5px; margin-left: unset; margin-right: 10px; border-left: unset; border-right: 5px solid hsl(0, 0%, 87%); } /* Formatting for Markdown tables */ table { padding-right: 10px; margin: 5px 5px 5px 5px; width: 99%; display: block; max-width: fit-content; overflow-x: auto; white-space: nowrap; } thead { background-color: hsl(0, 0%, 93%); } tr { display: table-row; vertical-align: inherit; } tr th { border: 1px solid hsl(0, 0%, 80%); padding: 4px; text-align: left; } tr td { border: 1px solid hsl(0, 0%, 80%); padding: 4px; } /* Emoji; sized to be easily understood while not overwhelming text. */ .emoji { height: 20px; width: 20px; } /* Mentions and alert words */ .user-mention-me :not(.silent) { background-color: hsl(112, 88%, 87%); } .user-group-mention, .user-mention { border-radius: 3px; padding: 0 0.2em; box-shadow: 0 0 0 1px hsl(0, 0%, 80%); margin-right: 2px; margin-left: 2px; white-space: nowrap; background: linear-gradient( to bottom, hsla(0, 0%, 0%, 0.1) 0%, hsla(0, 0%, 0%, 0) 100% ); display: inline-block; margin-bottom: 1px; } .alert-word { background-color: hsla(102, 85%, 57%, 0.5); } /* Timestamps */ time { background: hsl(0, 0%, 93%); border-radius: 3px; padding: 0 0.2em; box-shadow: 0 0 0 1px hsl(0, 0%, 80%); white-space: nowrap; margin-left: 2px; margin-right: 2px; display: inline-block; margin-bottom: 1px; } /* LaTeX styling */ .katex-display { margin: 0 0; } .tex-error { color: hsl(0, 0%, 50%); } /* Spoiler styling */ .spoiler-block { border: hsl(0, 0%, 50%) 1px solid; padding: 2px 8px 2px 10px; border-radius: 10px; position: relative; top: 1px; display: block; margin: 5px 0 15px 0; .spoiler-header { padding: 5px; font-weight: bold; } .spoiler-content { overflow: hidden; border-top: hsl(0, 0%, 50%) 0 solid; transition: height 0.4s ease-in-out, border-top 0.4s step-end, padding 0.4s step-end; padding: 0; height: 0; &.spoiler-content-open { border-top: hsl(0, 0%, 50%) 1px solid; transition: height 0.4s ease-in-out, border-top 0.4s step-start, padding 0.4s step-start; padding: 5px; height: auto; } } .spoiler-button { float: right; width: 25px; height: 25px; &:hover .spoiler-arrow { &::before, &::after { background-color: hsl(0, 0%, 50%); } } } .spoiler-arrow { float: right; width: 13px; height: 13px; position: relative; bottom: -5px; left: -10px; cursor: pointer; transition: 0.4s ease; margin-top: 2px; text-align: left; transform: rotate(45deg); &::before, &::after { position: absolute; content: ""; display: inline-block; width: 12px; height: 3px; background-color: hsl(0, 0%, 83%); transition: 0.4s ease; } &::after { position: absolute; transform: rotate(90deg); top: -5px; left: 5px; } &.spoiler-button-open { transform: rotate(45deg) translate(-5px, -5px); &::before { transform: translate(10px, 0); } &::after { transform: rotate(90deg) translate(10px, 0); } } } } /* embedded link previews */ .message_inline_image_title { font-weight: bold; } .twitter-image, .message_inline_image { position: relative; margin-bottom: 5px; margin-left: 5px; height: 100px; display: block !important; border: none !important; } &.rtl .twitter-image, &.rtl .message_inline_image { margin-left: unset; margin-right: 5px; } .twitter-tweet { border: 1px solid hsl(0, 0%, 87%); padding: 0.5em 0.75em; margin-bottom: 0.25em; word-break: break-word; min-height: 48px; } .twitter-avatar { float: left; width: 48px; height: 48px; margin-right: 0.75em; } .message_inline_ref { margin-bottom: 5px; margin-left: 5px; height: 50px; display: block !important; border: none !important; } &.rtl .message_inline_ref { margin-left: unset; margin-right: 5px; } .twitter-image img, .message_inline_image img, .message_inline_ref img { height: auto; max-height: 100%; float: left; margin-right: 10px; } .message_inline_image img { cursor: zoom-in; } .youtube-video img, .vimeo-video img, .embed-video img { cursor: pointer; } &.rtl .twitter-image img, &.rtl .message_inline_image img, &.rtl .message_inline_ref img { float: right; margin-right: unset; margin-left: 10px; } li .message_inline_image img { float: none; } .youtube-video .fa-play::before, .embed-video .fa-play::before { position: absolute; margin: var(--margin-top, 32px) 0 0 var(--margin-left, 45px); padding: 5px 8px 5px 10px; font-size: 12px; border-radius: 4px; background-color: hsl(0, 0%, 0%); color: hsl(0, 0%, 100%); opacity: 0.7; top: 0; left: 0; } .message_embed { display: block; position: relative; margin: 5px 0; border: none; border-left: 3px solid hsl(0, 0%, 93%); height: 80px; padding: 5px; z-index: 1; text-shadow: hsla(0, 0%, 0%, 0.01) 0 0 1px; .message_embed_title { padding-top: 0; /* to remove the spacing that the font has from the top of the container. */ margin-top: -5px; font-size: 1.2em; line-height: normal; } .message_embed_description { position: relative; max-width: 500px; margin-top: 3px; /* to put it below the container gradient. */ z-index: -1; } .message_embed_image { display: inline-block; width: 70px; height: 70px; background-size: cover; background-position: center; } .data-container { position: relative; padding: 0 5px; display: inline-block; vertical-align: top; max-width: calc(100% - 115px); max-height: 80px; overflow: hidden; } .data-container div { display: block; border: none; } .data-container::after { content: " "; position: absolute; width: 100%; height: 10%; bottom: 0; background: linear-gradient( 0deg, hsl(0, 0%, 100%), transparent 100% ); } } &.rtl .message_embed { border-left: unset; border-right: 3px solid hsl(0, 0%, 93%); } .message_embed > * { display: inherit; padding: 5px; border: none; } pre { &:hover .copy_codeblock, &:hover .code_external_link { visibility: visible; } } /* Style copy-to-clipboard button inside codeblocks */ .copy_codeblock { visibility: hidden; /* Having absolute positioning here ensures that the element doesn't scroll along with the code div in narrow windows */ position: absolute; right: 2px; margin-top: -6px; } .code_external_link { visibility: hidden; position: absolute; right: 23px; margin-top: -2px; font-size: 1.4em; /* The default icon and on-hover colors are inherited from tag. so we set our own to match the copy-to-clipbord icon */ color: hsl(0, 0%, 47%); &:hover { color: hsl(200, 100%, 40%); } } } .preview_content .copy_codeblock { /* We avoid displaying copy_codeblock button in previews, because it feels odd given that you can just copy-paste the code out of the "edit" state. We may change this decision when we add menu options for viewing the code in a coding playground. */ display: none; } .preview_content .code_external_link { right: 12px; } @media (width < $sm_min) { .rendered_markdown .message_embed { height: auto; .message_embed_image { width: 100%; height: 100px; } .data-container { display: block; max-width: 100%; margin-top: 10px; } } } /* Inline and block code. TODO: It is likely that this CSS can and should be moved into the rendered_markdown block; we just need to do further analysis to confirm doing so won't break anything. */ code { /* 12/14 em, so bootstrap's default 12 px, when body is the default 14 px */ font-size: 0.857em; unicode-bidi: embed; direction: ltr; color: hsl(0, 0%, 0%); white-space: pre; } .rendered_markdown code { white-space: pre-wrap; padding: 0 4px; background-color: hsl(0, 0%, 100%); } .codehilite { display: block !important; border: none !important; background: none !important; } pre { direction: ltr; /* code block text is a bit smaller than normal text */ font-size: 0.8em; line-height: 1.4; white-space: pre; overflow-x: auto; word-wrap: normal; /* Bootstrap's default here is top: 0px, bottom: 10px */ margin-top: 5px; margin-bottom: 5px; /* Bootstrap's default here is 9.5 on all sides */ padding-top: 5px; padding-bottom: 3px; padding-left: 7px; padding-right: 7px; } .rendered_markdown pre code { font-size: inherit; padding: 0; white-space: inherit; } /* Both the horizontal scrollbar in
 as well as
   vertical scrollbar in the