/* Reset CSS */ *, *::before, *::after { box-sizing: border-box; } body, h1, h2, h3, h4, p, figure, blockquote, dl, dd, fieldset, menu { margin: 0; padding: 0; } ul[role='list'], ol[role='list'] { list-style: none; } html:focus-within { scroll-behavior: smooth; } body { min-height: 100vh; text-rendering: optimizeSpeed; line-height: 1.5; font-family: sans-serif; } a:not([class]) { text-decoration-skip-ink: auto; } img, picture { display: inline-block; } input, button, textarea, select { font: inherit; } a { color: inherit; text-decoration: none; } p a, td a { text-decoration: underline; } @media (prefers-reduced-motion: reduce) { html:focus-within { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* Base template styling */ :root { --color-bg-main: #26323c; --color-bg-menu: #2e3e4c; --color-bg-box: #1a2631; --color-bg-error: rgb(87, 32, 32); --color-highlight: #449c8c; --color-delete: #8b2821; --color-text-duller: #5f6983; --color-text-dull: #99a; --color-text-main: #fff; --color-text-link: rgb(176, 194, 206); --color-input-border: #000; --color-input-border-active: #444b5d; --color-button-main: #444b5d; --color-button-main-hover: #515d7c; --color-button-disabled: #7c9c97; --sm-header-height: 50px; --sm-sidebar-width: 50px; --md-sidebar-width: 250px; --md-header-height: 50px; } body { background-color: var(--color-bg-main); color: var(--color-text-main); font-family: "Raleway", sans-serif; font-size: 16px; min-height: 100%; } main { width: 900px; margin: 20px auto; box-shadow: 0 0 50px rgba(0, 0, 0, 0.6); border-radius: 5px; } .no-sidebar main { box-shadow: none; max-width: 800px; } footer { max-width: 900px; margin: 0 auto; padding: 0 0 10px 0; color: var(--color-text-duller); text-align: center; font-size: 90%; } .no-sidebar footer { max-width: 800px; } footer a { border-bottom: 1px solid var(--color-text-duller); margin-right: 5px; } header { display: flex; height: 50px; } .no-sidebar header { justify-content: center; } header .logo { display: inline-block; font-family: "Raleway"; font-weight: bold; background: var(--color-highlight); border-radius: 5px 0 0 0; text-transform: lowercase; padding: 10px 11px 9px 10px; height: 50px; font-size: 130%; color: var(--color-text-main); border-bottom: 3px solid rgba(0, 0, 0, 0); z-index: 10; overflow: hidden; white-space: nowrap; } .no-sidebar header .logo { border-radius: 5px; } header .logo:hover { border-bottom: 3px solid rgba(255, 255, 255, 0.3); } header .logo img { display: inline; vertical-align: top; margin: 0 3px 0 0; } header menu { flex-grow: 1; display: flex; list-style-type: none; justify-content: flex-start; z-index: 10; } .no-sidebar header menu { flex-grow: 0; } header menu a { padding: 10px 20px 4px 20px; color: #eee; line-height: 30px; border-bottom: 3px solid rgba(0, 0, 0, 0); } .no-sidebar header menu a { margin: 0 10px; } body.has-banner header menu a { background: rgba(0, 0, 0, 0.5); border-right: 0; } header menu a:hover, header menu a.selected { border-bottom: 3px solid var(--color-highlight); } .no-sidebar header menu a:hover:not(.logo) { border-bottom: 3px solid rgba(0, 0, 0, 0); background-color: var(--color-bg-menu); border-radius: 5px; } header menu a i { font-size: 24px; display: inline-block; vertical-align: middle; } header menu a.htmx-request i { -webkit-animation-delay: var(--fa-animation-delay, 0s); animation-delay: var(--fa-animation-delay, 0s); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-name: fa-spin; animation-name: fa-spin; -webkit-animation-duration: var(--fa-animation-duration, 2s); animation-duration: var(--fa-animation-duration, 2s); -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-iteration-count: var(--fa-animation-iteration-count, infinite); -webkit-animation-timing-function: var(--fa-animation-timing, linear); animation-timing-function: var(--fa-animation-timing, linear); } header menu .gap { flex-grow: 1; } header menu a.identity { border-right: 0; text-align: right; padding-right: 10px; background: var(--color-bg-menu) !important; border-radius: 0 5px 0 0; width: 250px; } header menu a.identity i { display: inline-block; vertical-align: middle; padding: 0 7px 2px 0; } header menu a img { display: inline-block; vertical-align: middle; margin: 0 0 2px 8px; height: 30px; width: auto; } header menu a small { color: var(--color-text-dull); font-size: 70%; } nav { padding: 10px 10px 20px 0; } nav h3 { text-transform: uppercase; font-weight: bold; font-size: 90%; padding: 15px 18px 7px 16px; } nav h3:first-child { padding-top: 0; } nav a { display: block; color: var(--color-text-dull); padding: 7px 18px 7px 13px; border-left: 3px solid transparent; } nav a.selected { color: var(--color-text-main); background: var(--color-bg-main); border-radius: 0 5px 5px 0; } nav a:hover { color: var(--color-text-main); border-left: 3px solid var(--color-highlight); } nav a.selected:hover { border-left: 3px solid transparent; } nav a.danger { color: var(--color-text-duller); } nav a.danger:hover { color: var(--color-text-dull); } nav a i { width: 20px; text-align: center; margin-right: 4px; display: inline-block; } /* Left-right columns */ .columns { display: flex; align-items: stretch; justify-content: center; } .left-column { flex-grow: 1; width: 300px; max-width: 700px; padding: 15px; } .left-column h1 { margin: 0 0 10px 0; } .left-column h1 small { font-size: 60%; color: var(--color-text-dull); display: block; margin: -10px 0 0 0; padding: 0; } .left-column h2 { margin: 10px 0 10px 0; } .left-column h3 { margin: 10px 0 0 0; } .right-column { width: var(--md-sidebar-width); background: var(--color-bg-menu); border-radius: 0 0 5px 0; } .right-column h2 { background: var(--color-highlight); padding: 8px 10px; font-weight: bold; font-size: 90%; text-transform: uppercase; } img.emoji { height: 0.8em; } /* Generic markdown styling and sections */ .no-sidebar section { max-width: 700px; background: var(--color-bg-box); box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); margin: 25px auto 45px auto; padding: 5px 15px; } .no-sidebar section.shell { background: none; box-shadow: none; padding: 0; } .no-sidebar #main-content>h1 { max-width: 700px; margin: 25px auto 5px auto; font-weight: bold; font-size: 120%; text-transform: uppercase; color: var(--color-text-main); } .no-sidebar h1+section { margin-top: 0; } .markdown .banner { width: calc(100% + 30px); height: auto; object-fit: cover; margin: -5px -15px 10px -15px; border-radius: 5px 0 0 0; display: block; } .markdown p { margin: 4px 0 10px 0; } .markdown li { margin: 4px 0 10px 0; } p.authorization-code { margin: 10px 0; font-size: 140%; } /* Icon menus */ .icon-menu .option { display: block; margin: 0 0 20px 0; background: var(--color-bg-box); box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); color: inherit; text-decoration: none; padding: 10px 20px; border: 2px solid rgba(255, 255, 255, 0); border-radius: 3px; overflow: hidden; } .icon-menu .option:hover { border: 2px solid var(--color-highlight); } .icon-menu .option.empty { color: var(--color-text-dull); } .icon-menu .option-actions { text-align: right; } .icon-menu .option.empty:hover, .icon-menu .option.static:hover { border: 2px solid rgba(255, 255, 255, 0); } .icon-menu .option img, .icon-menu .option i { vertical-align: middle; margin: 0 10px 3px 0; height: 50px; width: auto; } .icon-menu .option img.emoji { height: 20px; } .icon-menu .option i { display: inline-block; text-align: center; width: 50px; line-height: 50px; font-size: 200%; } .icon-menu .option.hashtags { display: flex; align-items: center; } .icon-menu .option.hashtags .tag { min-width: 0; text-overflow: ellipsis; overflow: hidden; flex-grow: 1; } .icon-menu .option.hashtags .count { text-align: right; } .icon-menu .option .pill { display: inline-block; padding: 2px 10px; background: var(--color-text-duller); border-radius: 20px; margin: 0 5px 0 5px; font-size: 70%; } .icon-menu .option .pill.bad { background: var(--color-delete); } .icon-menu .option time { color: var(--color-text-duller); margin: 14px 0 0 0; } .icon-menu .option button { margin-top: 8px; margin-right: 20px; } .icon-menu .option button.right { float: right; margin-right: 0; } .handle { vertical-align: middle; display: inline-block; line-height: normal; } .handle small { display: block; color: var(--color-text-dull); } /* Forms */ .no-sidebar form { max-width: 500px; margin: 40px auto; } fieldset { border: 0; background: var(--color-bg-box); box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); margin: 25px 0 45px 0; padding: 5px 15px; } fieldset legend { position: relative; top: -15px; left: -15px; font-weight: bold; text-transform: uppercase; color: var(--color-text-dull); } .right-column form, form.inline { padding: 0; } form.follow-profile { float: right; margin: 20px 0 0 0; font-size: 16px; text-align: center; } form.follow-profile.has-reverse { margin-top: 0; } form.follow-profile .reverse-follow { display: block; margin: 0 0 5px 0; } form.follow-profile button { margin: 0; } form.follow { display: inline; } form.search { display: flex; margin: 0 0 20px 0; } form h1 { margin: 0 0 10px 0; } form p { color: var(--color-text-main); margin: 10px 0 15px 0; } form .field { margin: 0 0 25px 0; display: flex; } form .field:last-of-type { margin-bottom: 10px; } form .field .label-input { flex-grow: 1; } form .field.stats { width: 100%; } form .field.stats table { width: 50%; } form .field.stats table tr th { color: var(--color-text-main); } form .field.stats table tbody td { color: var(--color-text-dull); text-align: center; } .right-column form .field { margin: 0; background: none; box-shadow: none; padding: 0; } form label { display: block; text-transform: uppercase; font-size: 100%; font-weight: bold; margin: 0 0 5px 0; } form label small { font-size: 80%; margin-left: 5px; color: var(--color-text-dull); } .right-column form label { margin: 5px 10px 5px 10px; } form .help { color: var(--color-text-dull); font-size: 90%; margin: -5px 0 5px 0; } form .errorlist { list-style-type: none; margin: 0; padding: 0; } form .errorlist li { color: var(--color-text-main); background: var(--color-bg-error); border-radius: 3px; margin: 5px 0 8px 0; padding: 3px 7px; } form .errorlist li::before { content: "\f071"; font: var(--fa-font-solid); margin-right: 7px; } form .hidden { display: none; } form input, form select, form textarea { width: 100%; padding: 5px 7px; background: var(--color-bg-main); border: 1px solid var(--color-input-border); border-radius: 3px; color: var(--color-text-main); } form .clear { color: var(--color-text-main); font-size: 90%; margin: 5px 0 5px 0; } form .clear input { display: inline; width: 32px; } .right-column form.compose input, .right-column form.compose textarea { margin: 0 0 10px 0; border: 0; font-size: 95%; border-radius: 0; background-color: var(--color-bg-box); } .right-column form.compose textarea { height: 150px; } form input:focus, form select:focus, form textarea:focus { outline: none; border: 1px solid var(--color-input-border-active); } form input[type=submit] { width: 100%; padding: 4px 6px; margin: 0 0 10px; background: var(--color-button-main); border: 0; border-radius: 3px; color: var(--color-text-main); cursor: pointer; } form input[type=submit]:hover { background: var(--color-button-main-hover); } form img.preview { max-height: 100%; max-width: 100px; margin: 0 0 0 20px; align-self: center; } form .uploaded-image { margin: 0 0 10px 0; overflow: hidden; } form .uploaded-image img { max-width: 200px; max-height: 200px; float: left; } form .uploaded-image p { margin-left: 220px; } form .uploaded-image .buttons { margin-left: 220px; } form .buttons { clear: both; text-align: right; margin: -20px 0 15px 0; } form .buttons:nth-of-type(2) { padding-top: 15px; } form p+.buttons, form fieldset .buttons { margin-top: 0; } form .button.add-image { margin: 10px 0 10px 0; } form legend+.button.add-image { margin-top: 0px; } form progress { display: none; width: 100%; } .right-column form .buttons { margin: 5px 10px 5px 0; } button, .button { padding: 5px 10px; margin: 0 0 0 5px; border-radius: 5px; border: 3px solid rgba(255, 255, 255, 0); cursor: pointer; font-weight: bold; background-color: var(--color-highlight); color: var(--color-text-main); display: inline-block; } button.delete, .button.delete, button.danger, .button.danger { background: var(--color-delete); } button.destructive:hover, .button.destructive:hover { background: var(--color-delete); } button.secondary, .button.secondary { background: var(--color-bg-menu); } button.toggle, .button.toggle { background: var(--color-bg-main); } button[disabled], .button[disabled] { background: var(--color-button-disabled); } button.left, .button.left { float: left; margin: 0 5px 0 0; } button.toggle.enabled, .button.toggle.enabled { background: var(--color-highlight); } button:hover, .button:hover { border: 3px solid rgba(255, 255, 255, 0.3); } .right-column button, .right-column .button { padding: 2px 6px; } /* Logged out homepage */ .about p { margin: 0 0 15px 0; } .about img.banner { width: calc(100% + 30px); height: auto; object-fit: cover; margin: -65px -15px 0 -15px; border-radius: 5px 0 0 0; display: block; } /* Identities */ h1.identity { margin: 0 0 20px 0; } h1.identity .banner { width: 100%; height: 200px; object-fit: cover; display: block; width: calc(100% + 30px); margin: -65px -15px 20px -15px; border-radius: 5px 0 0 0; } h1.identity .icon { width: 80px; height: 80px; float: left; margin: 0 20px 0 0; } h1.identity .emoji { height: 22px; } h1.identity small { display: block; font-size: 60%; font-weight: normal; color: var(--color-text-dull); margin: -5px 0 0 0; } .bio { margin: 0 0 20px 0; } .bio .emoji { height: 22px; } .bio p { margin: 0 0 10px 0; } .system-note { background: var(--color-bg-menu); color: var(--color-text-dull); border-radius: 3px; padding: 5px 8px; margin: 15px 0; } .system-note a { text-decoration: underline; } table.metadata { margin: -10px 0 0 0; text-align: left; } table.metadata td { padding: 0; } table.metadata th { padding: 0 10px 0 0; font-weight: bold; } table.buttons { margin: -10px 0 10px 0; text-align: left; } table.buttons th { padding: 5px 20px 5px 0; text-align: center; } table.buttons th button { width: 100%; } .stats { margin: 0 0 20px 0; } .stats ul { padding: 0; list-style: none; display: flex; justify-content: start; gap: 1em; } table.metadata td .emoji { height: 22px; } /* Timelines */ .left-column .timeline-name { margin: 0 0 10px 0; color: var(--color-text-main); font-size: 130%; } .left-column .timeline-name i { margin-right: 10px } .view-options { margin: 0 0 10px 0px; } .view-options.follows { margin: 0 0 20px 0px; } .view-options a { display: inline-block; margin: 0 10px 5px 0; padding: 4px 12px; color: var(--color-text-duller); background: var(--color-bg-box); border-radius: 3px; } .view-options a:hover { color: var(--color-text-dull); } .view-options a.selected { color: var(--color-text-highlight); } .view-options .fa-solid { min-width: 16px; } /* Identity banner */ .identity-banner { display: flex; align-items: center; flex-grow: 1; min-width: 0; } .identity-banner .handle { display: block; padding: 0 10px; vertical-align: middle; min-width: 0; } .identity-banner .handle .link, .identity-banner .handle .small { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; display: block; } .identity-banner .avatar-link { line-height: 0; /* Fixes a bit of extra padding on the bottom of the link. */ } /* Posts */ .post { margin-bottom: 20px; background: var(--color-bg-box); box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); padding: 14px; } .post.mini { font-size: 14px; } .post.reply { margin-left: 32px; } .post.user { overflow: hidden; } form .post { background-color: var(--color-bg-main); } .post .icon { height: 48px; width: auto; } .post.mini .icon { height: 28px; width: auto; } .post .emoji { height: 18px; } .post .post-banner { display: flex; align-items: center; } .post time { display: block; color: var(--color-text-duller); width: 65px; text-align: center; background-color: var(--color-bg-main); border-radius: 3px; padding: 3px 3px; cursor: pointer; } .post time i { margin-right: 3px; } .post .summary { margin: 12px 0 4px 58px; padding: 3px 6px; border-radius: 3px; background: var(--color-bg-menu); cursor: pointer; } .post .summary::before { display: block; font-weight: bold; float: right; content: "SHOW"; font-size: 80%; padding: 2px 2px 2px 10px; } .post .summary.enabled::before { content: "HIDE"; } .post .edited { font-weight: lighter; color: var(--color-text-duller); margin-left: 58px; } .post .content { margin-left: 58px; } .post.mini .content, .post.mini .edited { margin-left: 0; } .post .content.hidden { display: none; } .post .content p { margin: 12px 0 4px 0; } .post .attachments { padding-top: 4px; display: grid; grid-template-columns: repeat(2, auto); grid-column-gap: 4px; grid-row-gap: 4px; } .post .attachments a { display: block; width: 100%; } .post .attachments a.image img { display: block; max-width: 100%; object-fit: cover; object-position: center; max-height: 400px; height: 100%; width: 100%; } .post .attachments video { max-width: 100%; } .post .actions { display: flex; position: relative; justify-content: space-between; padding: 8px 0 0 0; align-items: center; align-content: center; margin: 0 0 -8px 64px; } .post .actions a { padding: 2px 4px; border-radius: 4px; min-width: 60px; text-align: center; cursor: pointer; color: var(--color-text-dull); } .post .actions a:hover { background-color: var(--color-bg-main); } .post .actions menu { display: none; background-color: var(--color-bg-menu); border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); position: absolute; right: 0; bottom: 35px; } .post .actions menu.enabled { display: block; z-index: 10; } .post .actions menu a { text-align: left; display: block; font-size: 15px; padding: 4px 10px; } .post .actions menu a i { margin-right: 4px; width: 16px; } .post .actions a:hover { color: var(--color-text-main); } .post .actions a.active { color: var(--color-highlight); } .post .handle .link:hover { text-decoration: underline; } .post .content a { word-break: break-all; text-decoration: none; color: var(--color-highlight); } .post .content a:hover { text-decoration: underline; } /* Special Type Posts */ .post .notice a:hover { text-decoration: underline; } .post .poll h3 small { font-weight: lighter; font-size: small; } .post .poll ul { list-style: none; } .post .poll li { padding: 6px 0; line-height: 18px; } .poll-number { display: inline-block; width: 45px; } .poll-footer { padding: 6px 0 6px; font-size: 12px; } .post .poll ul li .votes { margin-left: 10px; font-size: small; } .boost-banner, .mention-banner, .follow-banner, .like-banner { padding: 0 0 3px 5px; } .boost-banner .emoji, .mention-banner .emoji, .follow-banner .emoji, .like-banner .emoji { height: 22px; } .boost-banner a, .mention-banner a, .follow-banner a, .like-banner a { font-weight: bold; } .boost-banner::before { content: "\f079"; font: var(--fa-font-solid); margin-right: 4px; } .boost-banner time { float: right; display: block; color: var(--color-text-duller); border-radius: 3px; } .mention-banner::before { content: "\0040"; font: var(--fa-font-solid); margin-right: 4px; } .follow-banner::before { content: "\f007"; font: var(--fa-font-solid); margin-right: 4px; } .like-banner::before { content: "\f005"; font: var(--fa-font-solid); margin-right: 4px; } .pagination { display: flex; justify-content: center; gap: 1em; } .load-more { margin: 10px 0; text-align: center; } @media (max-width: 920px), (display-mode: standalone) { div.columns { height: calc(100vh - 50px); align-items: stretch; } .left-column { margin: var(--md-header-height) var(--md-sidebar-width) 0 0; } .right-column { width: var(--md-sidebar-width); position: fixed; height: 100%; right: 0; top: var(--md-header-height); } .right-column nav { padding: 0; } body:not(.no-sidebar) header { height: var(--md-header-height); position: fixed; width: 100%; z-index: 9; } body:not(.no-sidebar) header menu a { background: rgba(0, 0, 0, 0.5); } main { width: 100%; margin: 0; box-shadow: none; border-radius: 0; } .no-sidebar main { margin: 20px auto 20px auto; } body:not(.no-sidebar) footer { position: fixed; bottom: 0; right: 0; width: 250px; margin: 0; padding: 5px; text-align: right; } body:not(.no-sidebar) footer a { display: block; border: 0; } body:not(.no-sidebar) header .logo { border-radius: 0; } .post .attachments a.image img { max-height: 300px; } } @media (max-width: 750px) { header { height: var(--sm-header-height); } header menu a.identity { width: var(--sm-sidebar-width); padding: 10px 10px 0 0; font-size: 0; } header menu a.identity i { font-size: 22px; } .left-column { padding: 8px; margin: var(--sm-header-height) var(--sm-sidebar-width) 0 0; } .right-column { width: var(--sm-sidebar-width); top: var(--sm-header-height); } .right-column nav { padding-right: 0; } .right-column nav a { font-size: 0; padding: 10px 0 10px 10px; } .right-column nav a i { font-size: 22px; } .right-column h3 { visibility: hidden; } .right-column h2, .right-column .compose { display: none; } body:not(.no-sidebar) footer { display: none; } .post { margin-bottom: 15px; } } @media (max-width: 550px) { .post .content, .post .summary, .post .edited, .post .actions { margin-left: 0; } menu a.search { display: none; } } @media (display-mode: standalone) { html { scrollbar-color: var(--color-bg-main) var(--color-text-duller); } html::-webkit-scrollbar { background: var(--color-bg-menu); width: 7px; } html::-webkit-scrollbar-thumb { background: var(--color-text-dull); } } /* Copy to clipboard action */ .copy { transition: 0.2s; } .copy:hover { color: var(--color-text-main); cursor: pointer; } .copied, .copied:hover { color: var(--color-highlight); transition: 0.2s; } /* Accessibility */ .screenreader-text { position: absolute; left: -999px; width: 1px; height: 1px; top: auto; } .screenreader-text:focus { color: black; display: inline-block; height: auto; width: auto; position: static; margin: auto; } /* Debug */ .debug { width: 100%; } .debug h2 { text-align: center; padding-bottom: 5px; } .debug-section { text-align: center; } .debug-section .field.payload, #canonical_response, #raw_response { margin-bottom: 10px; } #canonical_response, #raw_response { background-color: var(--color-bg-box); overflow: scroll; text-align: left; } .debug-section .field .name { display: inline-block; min-width: 49%; text-align: right; padding-right: 10px; } .debug-section .field .value { display: inline-block; min-width: 49%; text-align: left; } .debug-section { margin-bottom: 20px; } .debug-section .hidden { display: none; }