854 lines
18 KiB
CSS

:root {
--color-twitter-text-gray: #536171;
--color-twitter-blue: #1b95e0; /* hsv(203, 87.9, 87,8) */
--color-twitter-blue-light: #7cc5f6; /* hsv(204, 49.6, 96.5) */
--color-twitter-off-white: #f7f9f9; /* hsv(180, 0.8, 97.6) */
--color-twitter-off-white-dark: #dae5e5; /* hsv(180, 4.8, 89.8) */
--color-outline-gray: #dcdcdc;
--color-twitter-text-gray: #536471;
--color-space-purple: #a49bfd;
--color-space-purple-outline: #6452fc;
/*
const QColor COLOR_OUTLINE_GRAY = QColor(220, 220, 220);
const QColor COLOR_TWITTER_BLUE = QColor(27, 149, 224);
const QColor COLOR_TWITTER_BLUE_LIGHT = QColor(124,197,246);
const QColor COLOR_TWITTER_OFF_WHITE = QColor(247,249,249);
const QColor COLOR_TWITTER_OFF_WHITE_DARK = QColor(218,229,229);
const QColor COLOR_TWITTER_TEXT_GRAY = QColor(83, 100, 113);
const QColor COLOR_BACKGROUND_GREEN = QColor(40, 205, 50);
const QColor COLOR_RED = QColor(255, 0, 0);
const QColor COLOR_SPACE_PURPLE = QColor(164, 155, 253);
const QColor COLOR_SPACE_PURPLE_OUTLINE = QColor(100, 82, 252);
*/
}
html {
/* Force scrollbar, even when it fits on 1 page. Prevents viewport from resizing -> flickering / stuff moving btw page loads */
overflow-y: scroll;
}
body {
margin: 0 30%;
border-color: var(--color-twitter-off-white-dark);
border-right-style: solid;
border-left-style: solid;
border-width: 1px;
min-height: 100vh;
font-family: "Titillium Web";
}
main {
padding-top: 4em;
}
input, select {
font-family: inherit;
font-size: 1em;
padding: 0.2em 0.6em;
box-sizing: border-box;
border-radius: 0.5em;
}
.server-error-msg {
position: fixed;
margin: 6em 0;
left: 0;
top: 0;
z-index: 1;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: row;
justify-content: center;
}
.server-error-msg .error-msg-container {
width: 30%;
background-color: #fee;
border: 1px solid red;
border-radius: 1em;
padding: 1em;
color: red;
text-align: center;
}
ul.inline-dotted-list {
list-style: none;
margin: 0;
}
ul.inline-dotted-list li {
display: inline;
}
ul.inline-dotted-list li:after {
content: " ⋅";
}
ul.inline-dotted-list li:last-child:after {
content: "";
}
.tweet {
padding: 0 1.5em;
position: relative;
}
:not(#focused-tweet) > .tweet {
cursor: pointer;
}
.htmx-spinner-container {
display: none;
z-index: 2; /* On top of the search bar, which is z-index of 1 */
}
.htmx-request > .htmx-spinner-container {
display: revert;
font-size: 3em;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.htmx-spinner-container .htmx-spinner-background {
opacity: 0.3;
background-color: #7cc5f6;
width: 100%;
height: 100%;
}
.htmx-spinner-container .htmx-spinner {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
/* https://codepen.io/sosuke/pen/Pjoqqp */
filter: invert(54%) sepia(17%) saturate(4210%) hue-rotate(176deg) brightness(89%) contrast(98%);
}
.quoted-tweet {
margin: 1em 0;
}
.rounded-gray-outline {
outline-color: lightgray;
outline-style: solid;
outline-width: 1px;
border-radius: 20px;
}
.profile-banner-image {
width: 100%;
}
.unstyled-link {
text-decoration: none;
color: inherit;
}
.author-info {
display: flex;
align-items: center;
}
.author-info a {
line-height: 0;
}
.author-info, .tweet .text {
cursor: default;
}
.circle-outline {
display: flex;
border-radius: 50%;
outline: 1px solid #777;
margin: 0 0.4em;
font-size: 0.8em;
padding: 0.2em;
box-sizing: border-box;
}
.name-and-handle {
padding: 0 0.6em !important; /* !important to make the ".quick-link .span" rule in the login button not overrule it */
}
.display-name {
font-weight: bold;
white-space: nowrap;
}
.handle {
color: var(--color-twitter-text-gray);
}
.tweet-header-container {
display: flex;
align-items: center;
}
.reply-mentions-container {
display: flex;
align-items: center;
cursor: default;
flex-grow: 1;
justify-content: center;
flex-wrap: wrap;
}
.reply-mentions {
padding: 0 0.5em;
}
.replying-to-label {
color: var(--color-twitter-text-gray);
}
a.entity {
text-decoration: none;
color: var(--color-twitter-blue);
}
.tweet .text, .dm-message-text-container .text {
display: block;
margin-bottom: 0.4em;
margin-top: 0;
overflow-wrap: anywhere;
}
.dm-message-text-container .text:last-child {
margin-bottom: 0;
}
#focused-tweet .text {
font-size: 1.4em;
}
#focused-tweet .quoted-tweet .text {
font-size: unset;
}
.tweet-content video {
max-width: 100%;
max-height: 40em;
}
.embedded-link {
padding: 1.3em;
margin-top: 1em;
display: flex;
flex-direction: column;
background-color: var(--color-twitter-off-white);
}
img.embedded-link-preview {
border-radius: 1em;
max-width: 100%;
}
.embedded-link-description {
color: var(--color-twitter-text-gray);
font-size: 0.8em;
margin: 0;
}
h3 {
margin: 0.5em 0;
}
.embedded-link-domain-container {
margin-top: 0.2em
}
.embedded-link-domain {
margin-left: 0.3em;
}
.thread-parent-tweet:first-child, #focused-tweet:first-child {
padding-top: 1em;
}
.thread-parent-tweet .vertical-reply-line-container,
.reply-chain .vertical-reply-line-container {
width: 3em;
margin-right: 0.5em;
}
.thread-parent-tweet .vertical-reply-line:not(.quoted-tweet .vertical-reply-line),
.reply-chain > :not(:last-child) .vertical-reply-line:not(.quoted-tweet .vertical-reply-line) {
width: 2px;
background-color: var(--color-twitter-off-white-dark);
flex-grow: 1;
margin: auto;
}
.profile-image {
border-radius: 50%;
width: 3em;
height: 3em;
display: inline;
border: 1px solid var(--color-outline-gray);
}
.user-header {
border-bottom: 1px solid var(--color-outline-gray);
}
.user-header .author-info {
font-size: 1.3em;
padding: 1em;
}
.user-header .profile-image {
width: 8em;
height: 8em;
}
.tabs-container {
outline: 1px solid var(--color-outline-gray);
}
.tabs-container a.tab {
flex-grow: 1;
text-align: center;
font-size: 1.1em;
font-weight: bold;
color: var(--color-twitter-text-gray);
padding: 0.8em;
}
.tabs-container a.tab.active-tab {
color: var(--color-twitter-blue);
border-bottom: 0.2em solid var(--color-twitter-blue);
}
.tabs-container a.tab:hover {
color: var(--color-twitter-blue);
}
.row {
display: flex;
flex-direction: row;
align-items: center;
}
.vertical-reply-line-container {
flex-grow: 0;
flex-shrink: 0;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
align-self: stretch;
width: 1em; /* will be overridden by, e.g., parent-thread properties */
}
.vertical-container-1 {
flex-grow: 1;
flex-shrink: 1;
}
.posted-at-container {
flex-grow: 1;
min-width: 5em;
}
p.posted-at {
float: right;
color: var(--color-twitter-text-gray);
font-size: 0.875em;
white-space: nowrap;
}
.interactions-bar {
display: flex;
flex-direction: row;
margin: 0.5em 0;
}
.interaction-stat {
flex-grow: 1;
display: flex;
}
.interaction-stat span {
line-height: 1.5em;
padding: 0 0.5em;
}
.interactions-bar .dummy {
flex-grow: 5;
}
#focused-tweet {
border-bottom: 1px solid var(--color-twitter-off-white-dark);
padding-bottom: 0.5em;
}
.reply-chain {
margin-top: 1em;
}
.reply-chain > :last-child {
padding-bottom: 1em;
border-bottom: 1px solid var(--color-twitter-off-white-dark);
}
.nav-sidebar {
display: flex;
flex-direction: column;
position: fixed;
transform: translate(-100%, 0);
font-size: 1.4em;
}
ul.quick-links {
display: flex;
flex-direction: column;
list-style: none;
align-items: flex-start;
padding: 0 2em;
}
.quick-link {
display: flex;
flex-direction: row;
align-items: center;
padding: 0.5em;
margin: 0.2em;
border-radius: 100em; /* any large amount, just don't use % because then it makes an ellipse */
cursor: pointer;
}
.quick-link:hover {
background-color: var(--color-twitter-blue-light);
}
.quick-link:active {
transform: translate(0.1em, 0.1em);
background-color: var(--color-twitter-blue);
}
.quick-link span {
padding: 0 0.3em;
white-space: nowrap;
}
.followers-count, .following-count {
font-weight: bold;
}
.followers-label, .following-label {
color: var(--color-twitter-text-gray);
}
.bio-info-with-icon {
display: flex;
flex-direction: row;
align-items: center;
gap: 0.3em;
}
.user-header-info-container {
padding: 2em;
border-bottom: 1px solid var(--color-outline-gray);
}
.timeline .tweet, .quoted-tweet .tweet {
padding-top: 0.8em;
padding-bottom: 0.8em;
}
.timeline > .tweet {
/* not for nested (i.e., quoted) tweets */
border-bottom: 1px solid var(--color-twitter-off-white-dark);
}
.timeline .eof-indicator {
text-align: center;
color: var(--color-twitter-text-gray);
font-size: 1.2em;
padding: 1em 0;
}
.top-bar {
display: flex;
flex-direction: row;
align-items: center;
height: 4em;
padding: 0.5em 1em;
gap: 1em;
border: 1px solid var(--color-outline-gray);
position: fixed;
background-color: white;
width: 40%;
left: 30%;
box-sizing: border-box;
z-index: 1;
}
.back-button {
flex-grow: 0;
border-radius: 50%;
border: 2px solid black;
width: 2em;
position: relative;
height: 2em;
box-sizing: border-box;
cursor: pointer;
}
img.svg-icon {
width: 1.5em;
height: auto;
}
svg {
width: 1.5em;
}
.back-button img {
color: rgb(239, 243, 244);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.top-bar form {
flex-grow: 1;
display: flex;
}
#search-bar {
flex-grow: 1;
}
.login {
width: 60%;
margin: 20% auto;
}
.login-form input {
width: 100%;
border-radius: 0.5em;
padding: 0.5em 0.6em;
}
.login-form .error {
color: #C0392B;
font-weight: bold;
}
.login-form .error + input {
border-color: #C0392B;
border-width: 2px;
}
.field-container {
padding: 0.5em 0;
}
.submit-container {
text-align: right;
}
input[type="submit"] {
background-color: var(--color-twitter-blue-light);
width: 10em;
padding: 1em;
border-radius: 1em;
font-size: 1em;
cursor: pointer;
}
.change-session-form select {
display: block;
width: 100%;
}
#logged-in-user-info {
font-size: 0.8em;
margin-top: 1em;
display: flex;
flex-direction: column;
align-items: center;
}
.quick-link .author-info {
pointer-events: none;
}
.retweet-info-container {
margin-left: 3.5em;
display: flex;
align-items: center;
opacity: 0.8;
}
.retweet-info-container .svg-icon {
width: 1.2em; /* override default from .svg-icon of 1.5em */
opacity: 0.6;
margin-right: 0.3em;
}
.retweeted-by-label {
margin: 0 0.2em;
}
.user-bio {
margin: 1.5em 0;
}
.followers-followees-container {
margin-top: 1em;
gap: 4em;
}
.followers-followees-container .spacer {
flex-grow: 1;
}
.user-feed-buttons-container, .tweet-buttons-container {
display: flex;
flex-direction: row;
}
.tweet-buttons-container .quick-link {
margin: 0;
font-size: 0.8em;
}
.poll {
padding: 1em;
}
.poll-choice {
position: relative;
margin: 0.3em 0;
}
.poll-fill-bar {
position: absolute;
height: 100%;
z-index: -1;
background-color: var(--color-twitter-off-white-dark);
}
.poll-fill-bar.poll-winner {
background-color: var(--color-twitter-blue-light);
}
.poll-info-container {
width: 100%;
line-height: 2em;
margin: 0 0.5em;
}
.poll-choice-label {
width: 50%;
}
.poll-choice-votes {
width: 50%;
}
.poll-metadata {
color: var(--color-twitter-text-gray);
margin: 0;
font-size: 0.9em;
}
.space {
outline: 1px solid var(--color-space-purple-outline);
background-color: var(--color-space-purple);
border-radius: 1.5em;
padding: 1.5em;
}
.space-title {
padding-top: 0.5em;
}
.space .host-label {
color: var(--color-space-purple-outline);
}
.space-date {
color: var(--color-space-purple-outline);
font-size: 0.8em;
}
.space-info-list {
padding: 0;
}
.space .layout-spacer {
flex-grow: 1;
}
ul.space-participants-list {
list-style: none;
padding: 0;
}
ul.space-participants-list li {
padding: 0.5em 0;
display: inline-block;
width: 24%;
}
.space-participants-list .author-info {
font-size: 0.9em;
line-height: 1.2em;
}
.space-participants-list .author-info .profile-image {
font-size: 0.8em;
}
.tombstone {
outline: 1px solid var(--color-outline-gray);
background-color: var(--color-twitter-off-white);
padding: 0.5em 1em;
border-radius: 0.5em;
color: var(--color-twitter-text-gray);
}
.tweet-image {
max-width: 95%;
max-height: 30em;
width: auto;
height: auto;
}
.tweet video {
max-height: 25em;
}
.like-icon {
cursor: pointer;
}
.like-icon.liked, .like-icon:hover {
filter: invert(20%) sepia(97%) saturate(4383%) hue-rotate(321deg) brightness(101%) contrast(95%);
}
.users-list-container {
display: flex;
flex-direction: column;
}
.users-list-container .author-info .profile-image {
width: 4em;
height: 4em;
}
.users-list-container .user {
border-color: var(--color-twitter-off-white-dark);
border-bottom-style: solid;
border-width: 1px;
padding: 1em;
}
.users-list-container .user p.bio {
margin: 0 5.3em;
font-size: 0.9em;
color: var(--color-twitter-text-gray);
}
.sort-order-container {
padding: 1em 1em 1em 3em;
margin-bottom: -0.5em;
border-bottom: 1px solid var(--color-outline-gray);
}
.sort-order-container select {
text-transform: capitalize;
margin: 0 1em;
}
.sort-order-container .sort-order-label {
font-weight: bold;
}
.chats-container {
display: flex;
flex-direction: row;
/** Setup to allow the two panes to scroll independently **/
height: 100vh;
padding-top: 4em;
margin-top: -4em;
box-sizing: border-box;
}
.chats-container .chat-list {
flex-basis: 0;
flex-grow: 4;
display: flex;
flex-direction: column;
overflow-y: scroll;
}
.chats-container .chat-list .chat {
border-bottom: 1px solid var(--color-outline-gray);
padding: 1em 1em 0 1em;
box-sizing: border-box;
cursor: pointer;
}
.chats-container .chat-list .chat.active-chat {
color: var(--color-twitter-blue);
border-left: 0.2em solid var(--color-twitter-blue);
background-color: var(--color-twitter-off-white);
}
.chats-container .chat-list .chat.active-chat .profile-image{
box-shadow: 0 0 1em 0em var(--color-twitter-blue);
}
.chats-container .chat-list .chat .chat-preview-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.chats-container .chat-list .chat .chat-preview-header .posted-at {
margin: 0;
}
.chats-container .chat-list .chat .groupchat-profile-image-container {
display: flex;
}
.chats-container .chat-list .chat .groupchat-profile-image-container .display-name {
padding: 0.6em;
font-style: italic;
}
.chats-container .chat-list .chat .chat-preview {
font-size: 0.9em;
color: var(--color-twitter-text-gray);
padding: 0 1em;
border-left: 1px solid var(--color-outline-gray);
}
.chats-container #chat-view {
flex-basis: 0;
flex-grow: 7;
border-left: 1px solid var(--color-outline-gray);
padding: 0.5em;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.chats-container #chat-view .chat-messages {
flex-grow: 1;
overflow-y: auto;
}
.chats-container #chat-view .our-message {
align-items: flex-end;
}
.dm-message-and-reacts-container {
display: flex;
flex-direction: column;
margin: 1em 0;
}
.dm-message-text-container {
display: inline-block;
padding: 1em;
background-color: #ddd;
border-radius: 1em;
margin: 0;
}
.our-message .dm-message-text-container {
background-color: var(--color-twitter-blue-light);
}
.sender-profile-image-container {
display: flex;
align-items: flex-end;
}
.sender-profile-image-container a {
line-height: 0; /* TODO: This is redundant with ".author-info a" rule above */
}
.dm-message-container {
display: flex;
align-items: stretch;
gap: 0.5em;
}
.our-message .dm-message-container {
flex-direction: row-reverse;
}
.dm-message-reactions {
display: flex;
padding: 0 4em;
cursor: default;
}
.our-message .dm-message-reactions {
flex-direction: row-reverse;
}
.dm-message-and-reacts-container p.posted-at {
margin: 0 4.5em;
}
.dm-message-content-container {
display: flex;
flex-direction: column;
align-items: flex-start;
max-width: 80%;
}
.our-message .dm-message-content-container {
align-items: flex-end;
}
.dm-message-content-container .tweet-preview {
border-radius: 1em;
border: 1px solid var(--color-outline-gray);
max-width: 100%;
}
.dm-message-content-container .replying-to-container {
background-color: #f0f0f0f0;
border-radius: 1em 1em 1em 0em;
padding: 0.5em 1.2em 2em 1.2em;
margin: 0 0 -2em 0.2em;
font-size: 0.9em;
}
.our-message .dm-message-content-container .replying-to-container {
border-radius: 1em 1em 0em 1em;
margin: 0 0.2em -2em;
}
.dm-message-content-container .replying-to-label {
font-size: 0.8em;
display: flex;
gap: 0.2em;
}
.dm-message-content-container .replying-to-label img.svg-icon {
width: 1em;
}
.dm-composer-container {
padding-top: 0.5em;
border-top: 1px solid var(--color-outline-gray);
/* position: absolute;
bottom: 1em;
right: 0.5em;
left: 0.5em;*/
}
.dm-composer-container form {
display: flex;
}
#composer {
flex-grow: 1;
border: 1px solid #ccc;
font-family: inherit;
font-size: inherit;
padding: 1px 6px;
max-height: 10em;
overflow-y: auto; /* scrollbar only if needed */
}