hardlounge/client/css/style.css

2735 lines
54 KiB
CSS
Raw Normal View History

2018-03-21 12:13:52 +00:00
@import "fontawesome.css";
@import "bootstrap.css";
2019-11-02 10:45:41 +00:00
@import "../../node_modules/primer-tooltips/build/build.css";
:root {
/* Main text color */
--body-color: #222;
/* Secondary text color, dimmed. Make sure to keep contrast WCAG 2.0 AA compliant on var(--window-bg-color) */
--body-color-muted: #767676;
/* Background color of the whole page */
--body-bg-color: #415364;
2019-02-18 18:32:41 +00:00
/* Main button color. Applies to border, text, and background on hover */
--button-color: #84ce88;
--button-text-color-hover: #fff;
/* Links and link-looking buttons */
--link-color: #50a656;
/* Background color of the main window */
--window-bg-color: #fff;
/* Text color for <h2> and <h3> headings in windows */
--window-heading-color: #6c797a;
/* Color of the date marker, text and separator */
--date-marker-color: rgba(0, 107, 59, 0.5);
/* Color of the unread message marker, text and separator */
--unread-marker-color: rgba(231, 76, 60, 0.5);
/* Background and left-border color of highlight messages */
--highlight-bg-color: #efe8dc;
--highlight-border-color: #b08c4f;
2019-03-18 00:42:53 +00:00
/* Color of the progress bar that appears as a file is being uploaded to the server. Defaults to button color */
--upload-progressbar-color: var(--button-color);
}
::placeholder {
color: rgba(0, 0, 0, 0.35);
opacity: 1; /* fix opacity in Firefox */
}
2014-08-15 13:52:14 +00:00
html,
body {
height: 100%;
overscroll-behavior: none; /* prevent overscroll navigation actions */
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
body {
background: var(--body-bg-color);
color: var(--body-color);
2017-09-18 10:32:52 +00:00
font: 16px -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
2014-08-15 13:52:14 +00:00
margin: 0;
user-select: none;
cursor: default;
touch-action: none;
/**
* Disable pull-to-refresh on mobile that conflicts with scrolling the message list.
* See http://stackoverflow.com/a/29313685/1935861
*/
overflow-y: hidden;
2014-08-15 13:52:14 +00:00
}
a,
a:hover,
a:focus {
color: var(--link-color);
}
2014-08-15 13:52:14 +00:00
a:hover {
2018-07-05 10:10:10 +00:00
text-decoration: underline;
2014-08-15 13:52:14 +00:00
}
/**
* From Normalize. See https://github.com/thelounge/thelounge/pull/1217
* 1. Remove the bottom border in Chrome 57- and Firefox 39-.
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
2014-08-15 13:52:14 +00:00
h1,
h2,
h3 {
2014-08-15 13:52:14 +00:00
font: inherit;
line-height: inherit;
margin: 0;
}
button {
2014-08-15 13:52:14 +00:00
border: none;
background: none;
margin: 0;
outline: none;
padding: 0;
user-select: inherit;
2014-08-15 13:52:14 +00:00
}
code,
pre,
#chat .msg.motd .text,
.irc-monospace,
textarea#user-specified-css-input {
font-family: Consolas, Menlo, Monaco, "Lucida Console", "DejaVu Sans Mono", "Courier New", monospace;
}
code,
.irc-monospace {
font-size: 13px;
padding: 2px 4px;
color: #e74c3c;
background-color: #f9f2f4;
border-radius: 2px;
}
pre {
display: block;
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: #f5f5f5;
border-radius: 4px;
}
kbd {
display: inline-block;
font-family: inherit;
line-height: 1em;
min-width: 28px; /* Ensure 1-char keys have the same width */
margin: 0 1px;
padding: 4px 6px;
color: #444;
text-align: center;
text-shadow: 0 1px 0 #fff;
background-color: white;
background-image: linear-gradient(180deg, rgba(0, 0, 0, 0.05), transparent);
border: 1px solid #bbb;
border-radius: 4px;
box-shadow: 0 2px 0 #bbb, inset 0 1px 1px #fff, inset 0 -1px 3px #ccc;
}
2014-08-15 13:52:14 +00:00
.btn {
2019-02-18 18:32:41 +00:00
border: 2px solid var(--button-color);
2014-08-15 13:52:14 +00:00
border-radius: 3px;
2019-02-18 18:32:41 +00:00
color: var(--button-color);
2014-08-15 13:52:14 +00:00
display: inline-block;
font-size: 12px;
font-weight: bold;
2014-08-15 13:52:14 +00:00
letter-spacing: 1px;
margin-bottom: 10px;
padding: 9px 17px;
text-transform: uppercase;
transition: background 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s;
2014-08-15 13:52:14 +00:00
word-spacing: 3px;
2017-07-12 06:54:32 +00:00
cursor: pointer; /* This is useful for `<button>` elements */
2014-08-15 13:52:14 +00:00
}
.btn-small {
padding: 5px 13px;
}
2014-08-15 13:52:14 +00:00
.btn:disabled,
.btn:hover,
.btn:focus {
2019-02-18 18:32:41 +00:00
background: var(--button-color);
color: var(--button-text-color-hover);
2017-07-12 06:54:32 +00:00
opacity: 1;
2014-08-15 13:52:14 +00:00
}
.input:focus,
.btn:active,
.btn:focus {
outline: 0;
box-shadow: 0 0 0 3px rgba(132, 206, 136, 0.5);
}
2014-08-15 13:52:14 +00:00
.btn:active {
opacity: 0.8;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
.btn:disabled {
opacity: 0.6;
2014-08-15 13:52:14 +00:00
}
.btn-sm {
padding: 4px 8px;
border-width: 1px;
letter-spacing: 0;
word-spacing: 0;
text-transform: none;
}
2014-08-15 13:52:14 +00:00
.container {
margin-bottom: 20px;
max-width: 480px;
touch-action: pan-y;
2014-08-15 13:52:14 +00:00
}
2017-08-26 16:36:18 +00:00
#js-copy-hack,
#loading pre,
#help .container,
#changelog .container,
#windows .header .title,
#windows .header .topic,
#chat .messages {
user-select: text;
cursor: text;
}
2017-08-26 16:36:18 +00:00
#js-copy-hack {
position: absolute;
left: -999999px;
}
#chat #js-copy-hack .condensed:not(.closed) .msg,
#chat #js-copy-hack > .msg {
display: block;
}
2018-09-25 15:43:46 +00:00
.only-copy {
font-size: 0;
opacity: 0;
width: 0;
}
/* Icons */
#viewport .lt::before,
#viewport .rt::before,
#chat button.menu::before,
#sidebar .chan::before,
#footer .icon,
#chat .count::before,
Offer optional syncing of client settings Write synced settings to localstorage. move settings and webpush init to init.js stub for server sending clientsettings get very basic setting sync working Also update client.config.clientSettings on settings:set Full setting sync with mandatory and excluded sync options Actually check client preferences. Further settings restructuring. Refactor options.js make storage act in a sane manner. Add new parameter to applySetting Do not sync if the setting is stored as a result of syncing General clean up, commenting and restructing. sync from server on checking "sync" offer initial sync Better deal with DOM being ready and instances of inital sync showing Don't try to disable autocompletion when not enabled. Restructure option.js to seperate functions from settings. More consistency in naming options vs settings Switch processSetting and applySetting names reflecting their functionality better. move options init back to configuration. simplify how settings are synced around. move options init after template building. Remove unneeded hasOwnProperty Use global for #theme and only apply theme in applySetting Return when no server side clientsettings excist. Autocompletion options to options.settings Make nocss param in url work again. Actually filter out empty highlight values. Clarify alwaysSync comment. Remove manual step for initial sync change attr to prop in options.js replace unbind with off in autocompletion.js Do not sync settings when the lounge is set to public. fix eslint error Fix merge error Do not show sync warning after page refresh when sync is enabled Move setting sync label in actual label. Improve server setting sync handling performance and failure potential. Don't give impression that the desktop notificiation is off when the browser permission is denied. Refine showing and hiding of notification warnings. rename all setting socket events to singular setting. add experimental note and icon to settingsync. fix css linting error
2017-12-11 19:01:15 +00:00
#settings .extra-experimental,
#settings .extra-help,
#settings #play::before,
#form #upload::before,
#form #submit::before,
#chat .away .from::before,
#chat .back .from::before,
#chat .invite .from::before,
#chat .join .from::before,
#chat .kick .from::before,
#chat .part .from::before,
#chat .quit .from::before,
#chat .topic .from::before,
#chat .mode_channel .from::before,
#chat .mode .from::before,
#chat .motd .from::before,
#chat .ctcp .from::before,
#chat .ctcp_request .from::before,
#chat .whois .from::before,
#chat .nick .from::before,
#chat .action .from::before,
2019-10-22 17:38:13 +00:00
#chat .plugin .from::before,
2019-07-17 07:34:23 +00:00
#chat .raw .from::before,
#chat .toggle-button::after,
#chat .toggle-content .more-caret::before,
#chat .scroll-down-arrow::after,
#chat .topic-container .save-topic span::before,
#version-checker::before,
.context-menu-item::before,
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
#help .website-link::before,
#help .documentation-link::before,
#help .report-issue-link::before,
#image-viewer .previous-image-btn::before,
2018-02-20 08:42:50 +00:00
#image-viewer .next-image-btn::before,
#image-viewer .open-btn::before,
2018-03-04 19:02:27 +00:00
#sidebar .not-secure-icon::before,
#sidebar .not-connected-icon::before,
#sidebar .parted-channel-icon::before,
2018-03-04 19:02:27 +00:00
#sidebar .collapse-network-icon::before {
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit; /* Can't have font-size inherit on line above, so need to override */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#viewport .lt::before { content: "\f0c9"; /* http://fontawesome.io/icon/bars/ */ }
2018-05-01 14:10:41 +00:00
#viewport .rt::before { content: "\f0c0"; /* https://fontawesome.com/icons/users?style=solid */ }
#chat button.menu::before { content: "\f142"; /* http://fontawesome.io/icon/ellipsis-v/ */ }
.context-menu-join::before { content: "\f067"; /* http://fontawesome.io/icon/plus/ */ }
.context-menu-user::before { content: "\f007"; /* http://fontawesome.io/icon/user/ */ }
.context-menu-close::before { content: "\f00d"; /* http://fontawesome.io/icon/times/ */ }
.context-menu-list::before { content: "\f03a"; /* http://fontawesome.io/icon/list/ */ }
.context-menu-disconnect::before { content: "\f127"; /* https://fontawesome.com/icons/unlink?style=solid */ }
.context-menu-connect::before { content: "\f0c1"; /* https://fontawesome.com/icons/link?style=solid */ }
.context-menu-action-whois::before { content: "\f05a"; /* http://fontawesome.io/icon/info-circle/ */ }
.context-menu-action-kick::before { content: "\f05e"; /* http://fontawesome.io/icon/ban/ */ }
.context-menu-action-op::before { content: "\f1fa"; /* http://fontawesome.io/icon/at/ */ }
.context-menu-action-voice::before { content: "\f067"; /* http://fontawesome.io/icon/plus/ */ }
.context-menu-network::before { content: "\f233"; /* https://fontawesome.com/icons/server?style=solid */ }
2018-03-16 14:10:28 +00:00
.context-menu-edit::before { content: "\f303"; /* https://fontawesome.com/icons/pencil-alt?style=solid */ }
2018-03-04 19:02:27 +00:00
#sidebar .not-secure-icon::before {
content: "\f071"; /* https://fontawesome.com/icons/exclamation-triangle?style=solid */
}
#sidebar .not-connected-icon::before,
#sidebar .parted-channel-icon::before {
2017-12-08 04:01:58 +00:00
content: "\f127"; /* https://fontawesome.com/icons/unlink?style=solid */
}
.context-menu-query::before,
.context-menu-action-query::before,
#sidebar .chan.query::before { content: "\f075"; /* https://fontawesome.com/icons/comment?style=solid */ }
.context-menu-chan::before,
#sidebar .chan.channel::before { content: "\f086"; /* http://fontawesome.io/icon/comments/ */ }
#sidebar .chan.special::before { content: "\f03a"; /* http://fontawesome.io/icon/list/ */ }
#footer .connect::before { content: "\f067"; /* http://fontawesome.io/icon/plus/ */ }
#footer .settings::before { content: "\f013"; /* http://fontawesome.io/icon/cog/ */ }
#footer .help::before { content: "\f059"; /* http://fontawesome.io/icon/question/ */ }
#form #upload::before { content: "\f0c6"; /* https://fontawesome.com/icons/paperclip?style=solid */ }
#form #submit::before { content: "\f1d8"; /* http://fontawesome.io/icon/paper-plane/ */ }
#chat .away .from::before,
#chat .back .from::before {
2017-12-08 04:01:58 +00:00
content: "\f017"; /* https://fontawesome.com/icons/clock?style=solid */
color: #7f8c8d;
}
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
#help .website-link::before,
#help .documentation-link::before,
2018-07-11 11:58:55 +00:00
#help .report-issue-link::before {
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
display: inline-block;
margin-right: 5px;
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
/* These 2 directives are loosely taken from .fa-fw */
width: 1.35em;
text-align: center;
}
#help .website-link::before { content: "\f0ac"; /* http://fontawesome.io/icon/globe/ */ }
#help .documentation-link::before { content: "\f19d"; /* http://fontawesome.io/icon/graduation-cap/ */ }
#help .report-issue-link::before { content: "\f188"; /* http://fontawesome.io/icon/bug/ */ }
2017-08-15 09:44:29 +00:00
.session-list strong {
display: block;
}
.session-list p {
margin-bottom: 10px;
}
#chat .invite .from::before {
2017-12-08 04:01:58 +00:00
content: "\f0e0"; /* https://fontawesome.com/icons/envelope?style=solid */
color: #2ecc40;
}
#chat .part .from::before,
#chat .quit .from::before {
2018-03-12 15:37:57 +00:00
content: "\f2f5"; /* https://fontawesome.com/icons/sign-out-alt?style=solid */
color: #ff4136;
display: inline-block;
transform: rotate(180deg);
}
#chat .topic .from::before {
content: "\f0a1"; /* http://fontawesome.io/icon/bullhorn/ */
color: #2ecc40;
}
#chat .mode_channel .from::before,
#chat .mode .from::before {
content: "\f05a"; /* http://fontawesome.io/icon/info-circle/ */
color: #2ecc40;
}
#chat .motd .from::before {
content: "\f02e"; /* https://fontawesome.com/icons/bookmark?style=solid */
color: var(--body-color-muted);
}
#chat .ctcp .from::before,
#chat .ctcp_request .from::before {
2017-12-08 04:01:58 +00:00
content: "\f15c"; /* https://fontawesome.com/icons/file-alt?style=solid */
color: var(--body-color-muted);
}
#chat .whois .from::before {
content: "\f007"; /* http://fontawesome.io/icon/user/ */
color: #2ecc40;
}
#chat .nick .from::before {
content: "\f007"; /* http://fontawesome.io/icon/user/ */
color: #2ecc40;
}
#chat .join .from::before {
2018-03-12 15:37:57 +00:00
content: "\f2f6"; /* https://fontawesome.com/icons/sign-in-alt?style=solid */
color: #2ecc40;
}
#chat .kick .from::before {
content: "\f05e"; /* http://fontawesome.io/icon/ban/ */
color: #ff4136;
}
2019-07-17 07:34:23 +00:00
#chat .raw .from::before {
content: "\f101"; /* https://fontawesome.com/icons/angle-double-right?style=solid */
}
#chat .raw.self .from::before {
content: "\f359"; /* https://fontawesome.com/icons/arrow-alt-circle-left?style=solid */
color: #2ecc40;
}
#chat .action .from::before {
content: "\f005"; /* http://fontawesome.io/icon/star/ */
}
2019-10-22 17:38:13 +00:00
#chat .plugin .from::before {
content: "\f1e6"; /* http://fontawesome.io/icon/plug/ */
transform: rotate(45deg);
display: inline-block;
padding: 1px;
}
#chat .toggle-button {
2017-11-26 12:28:33 +00:00
display: inline-block;
transition: opacity 0.2s, transform 0.2s;
/* These 2 directives are loosely taken from .fa-fw */
width: 1.35em;
text-align: center;
}
#chat .toggle-button::after {
content: "\f0da"; /* http://fontawesome.io/icon/caret-right/ */
}
#chat .count::before {
color: #cfcfcf;
content: "\f002"; /* http://fontawesome.io/icon/search/ */
position: absolute;
2018-03-30 06:07:11 +00:00
right: 13px;
line-height: 45px;
}
Offer optional syncing of client settings Write synced settings to localstorage. move settings and webpush init to init.js stub for server sending clientsettings get very basic setting sync working Also update client.config.clientSettings on settings:set Full setting sync with mandatory and excluded sync options Actually check client preferences. Further settings restructuring. Refactor options.js make storage act in a sane manner. Add new parameter to applySetting Do not sync if the setting is stored as a result of syncing General clean up, commenting and restructing. sync from server on checking "sync" offer initial sync Better deal with DOM being ready and instances of inital sync showing Don't try to disable autocompletion when not enabled. Restructure option.js to seperate functions from settings. More consistency in naming options vs settings Switch processSetting and applySetting names reflecting their functionality better. move options init back to configuration. simplify how settings are synced around. move options init after template building. Remove unneeded hasOwnProperty Use global for #theme and only apply theme in applySetting Return when no server side clientsettings excist. Autocompletion options to options.settings Make nocss param in url work again. Actually filter out empty highlight values. Clarify alwaysSync comment. Remove manual step for initial sync change attr to prop in options.js replace unbind with off in autocompletion.js Do not sync settings when the lounge is set to public. fix eslint error Fix merge error Do not show sync warning after page refresh when sync is enabled Move setting sync label in actual label. Improve server setting sync handling performance and failure potential. Don't give impression that the desktop notificiation is off when the browser permission is denied. Refine showing and hiding of notification warnings. rename all setting socket events to singular setting. add experimental note and icon to settingsync. fix css linting error
2017-12-11 19:01:15 +00:00
#settings .extra-experimental::before {
content: "\f0c3"; /* https://fontawesome.com/icons/flask?style=solid */
}
#settings .extra-help::before {
content: "\f059"; /* http://fontawesome.io/icon/question-circle/ */
}
#settings #play::before {
content: "\f028"; /* http://fontawesome.io/icon/volume-up/ */
margin-right: 9px;
}
#image-viewer .previous-image-btn::before {
content: "\f104"; /* http://fontawesome.io/icon/angle-left/ */
}
#image-viewer .next-image-btn::before {
content: "\f105"; /* http://fontawesome.io/icon/angle-right/ */
}
#image-viewer .open-btn::before {
content: "\f35d"; /* https://fontawesome.com/icons/external-link-alt?style=solid */
}
/* End icons */
#viewport {
display: flex;
2014-08-15 13:52:14 +00:00
height: 100%;
}
#windows {
flex: 1 0 auto;
position: relative;
}
2017-07-09 01:17:03 +00:00
#form button,
2018-03-30 06:07:11 +00:00
.header button,
.reveal-password span {
transition: opacity 0.2s;
2017-07-09 01:17:03 +00:00
}
#form button:hover,
2018-03-30 06:07:11 +00:00
.header button:hover,
.reveal-password span:hover {
opacity: 0.6;
2017-07-09 01:17:03 +00:00
}
2014-09-10 21:43:56 +00:00
#viewport .lt,
2016-03-19 18:20:11 +00:00
#viewport .rt,
#chat button.menu {
2018-03-30 06:07:11 +00:00
color: #607992;
2018-02-23 21:57:45 +00:00
display: flex;
font-size: 14px;
line-height: 1;
2014-09-10 21:43:56 +00:00
height: 36px;
2018-02-23 21:57:45 +00:00
width: 36px;
margin-top: 6px;
flex-shrink: 0;
}
#viewport .lt::before,
#viewport .rt::before,
#chat button.menu::before {
2014-09-10 21:43:56 +00:00
width: 36px;
2018-05-01 14:10:41 +00:00
line-height: 36px; /* Fix alignment in Microsoft Edge */
2014-09-10 21:43:56 +00:00
}
/* Channel list button stays fixed when scrolling... */
#viewport .lt {
position: fixed;
}
/* ... Except on chat windows, relative to include the notification dot */
#viewport #chat .lt {
position: relative;
}
/* Notification dot on the top right corner of the menu icon */
#viewport .lt::after {
content: "";
position: absolute;
top: 9px;
right: 7px;
background-color: #e74c3c;
width: 10px;
height: 10px;
border-radius: 50%;
border: 2px solid var(--window-bg-color);
opacity: 0;
transition: opacity 0.2s;
2018-05-01 14:10:41 +00:00
background-clip: padding-box; /* Fix border-radius bleeding color */
}
2018-03-08 13:46:05 +00:00
#viewport.notified .lt::after {
opacity: 1;
}
#viewport.userlist-open #chat .userlist {
display: flex;
2014-10-10 19:21:40 +00:00
}
2014-08-15 13:52:14 +00:00
#sidebar {
display: none;
flex-direction: column;
2014-08-15 13:52:14 +00:00
width: 220px;
2019-03-03 17:47:49 +00:00
max-height: 100%;
will-change: transform;
}
#viewport.menu-open #sidebar {
display: flex;
2014-08-15 13:52:14 +00:00
}
#sidebar .scrollable-area {
overflow-x: auto;
flex-grow: 1;
touch-action: pan-y;
scrollbar-width: thin;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
}
#sidebar .logo-container {
text-align: center;
}
#sidebar .logo,
#sidebar .logo-inverted {
height: 45px;
}
#sidebar .logo {
display: none;
}
#sidebar .chan,
#sidebar .empty {
2018-03-30 06:07:11 +00:00
color: #b7c5d1;
2014-08-15 13:52:14 +00:00
font-size: 14px;
}
#sidebar .chan {
2019-03-19 13:11:44 +00:00
display: flex;
padding: 8px 14px;
position: relative;
cursor: pointer;
}
2018-03-30 06:07:11 +00:00
/* All sidebar buttons and channels/queries must be white on hover and active */
2014-08-15 13:52:14 +00:00
#sidebar button:hover,
#sidebar .chan:hover,
2014-08-15 13:52:14 +00:00
#sidebar .active {
color: #fff;
}
2018-03-30 06:07:11 +00:00
/* All lobbies/channels/queries and footer buttons must have a half-transparent
background on hover (unless active) */
#sidebar .chan:hover,
#footer button:hover {
background-color: rgba(48, 62, 74, 0.5); /* #303e4a x 50% alpha */
}
/* All active elements, hovered or not, must have a background */
#sidebar .active,
#sidebar .active:hover {
background-color: #303e4a;
}
/* Remove background on hovered/active channel when sorting/drag-and-dropping */
2019-03-19 13:11:44 +00:00
#sidebar .chan.ui-sortable-dragged,
#sidebar .ui-sortable-dragged .chan,
#sidebar .ui-sortable-active .chan:hover,
#sidebar .ui-sortable-active .chan.active {
background: transparent;
}
#sidebar .ui-sortable-ghost::after {
background: var(--body-bg-color);
border: 1px dashed #99a2b4;
border-radius: 6px;
content: " ";
display: block;
position: absolute;
left: 10px;
top: 0;
bottom: 0;
right: 10px;
2018-03-30 06:07:11 +00:00
}
2014-08-15 13:52:14 +00:00
#sidebar .networks {
2018-03-30 06:07:11 +00:00
padding-top: 5px;
2014-09-19 23:12:17 +00:00
}
2019-03-19 13:11:44 +00:00
#sidebar .network {
2018-03-04 19:02:27 +00:00
position: relative;
2018-03-30 06:07:11 +00:00
margin-bottom: 20px;
touch-action: pan-y;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#sidebar .empty {
flex-grow: 1;
2014-08-15 13:52:14 +00:00
line-height: 1.6;
padding: 40px 20px;
2014-08-15 13:52:14 +00:00
text-align: center;
}
#sidebar .chan.lobby {
2014-08-15 13:52:14 +00:00
color: #84ce88;
font-size: 15px;
font-weight: bold;
2018-03-04 19:02:27 +00:00
padding-left: 0;
}
#sidebar .lobby-wrap {
display: flex;
flex-grow: 1;
overflow: hidden;
2014-08-15 13:52:14 +00:00
}
2018-03-04 19:02:27 +00:00
#sidebar .chan.lobby .lobby-wrap:hover,
#sidebar .chan.lobby.active {
2014-08-15 13:52:14 +00:00
color: #c0f8c3;
}
#sidebar .not-connected-tooltip,
#sidebar .not-secure-tooltip,
#sidebar .parted-channel-tooltip {
margin: 0 8px;
}
#sidebar .not-secure .chan.lobby {
color: #f39c12;
}
2018-03-04 19:02:27 +00:00
#sidebar .not-secure .chan.lobby .lobby-wrap:hover,
#sidebar .not-secure .chan.lobby.active {
color: #f8c572;
}
#sidebar .not-connected .chan.lobby,
#sidebar .parted-channel {
color: #e74c3c;
}
2018-03-04 19:02:27 +00:00
#sidebar .not-connected .chan.lobby .lobby-wrap:hover,
#sidebar .not-connected .chan.lobby.active,
#sidebar .parted-channel:hover,
#sidebar .parted-channel.active {
color: #f1978e;
}
#sidebar .chan::before {
2018-03-04 19:02:27 +00:00
width: 14px;
2014-09-30 18:00:23 +00:00
margin-right: 12px;
line-height: 18px;
2016-02-21 01:28:45 +00:00
}
#sidebar .chan .name {
position: relative;
2018-03-04 19:02:27 +00:00
flex-grow: 1;
2016-02-21 01:28:45 +00:00
overflow: hidden;
white-space: nowrap;
margin-right: 5px;
}
#windows .header .topic,
#sidebar .chan .name {
mask-image: linear-gradient(to left, transparent, black 20px);
2016-02-21 01:28:45 +00:00
}
#sidebar .badge,
2018-03-04 19:02:27 +00:00
#sidebar .add-channel-tooltip,
#sidebar .close-tooltip {
flex-shrink: 0;
line-height: 1;
}
2014-08-15 13:52:14 +00:00
#sidebar .badge {
background: rgba(255, 255, 255, 0.06);
2014-08-15 13:52:14 +00:00
border-radius: 3px;
color: #afb6c0;
font-size: 10px;
2018-03-04 19:02:27 +00:00
padding: 4px 6px;
transition: background-color 0.2s, color 0.2s;
2014-08-15 13:52:14 +00:00
}
#sidebar .badge:empty {
display: none;
}
2014-08-15 13:52:14 +00:00
#sidebar .badge.highlight {
background: #fff;
color: #49505a;
}
2014-08-15 13:52:14 +00:00
#sidebar .close {
width: 18px;
height: 18px;
display: none;
transition: opacity 0.2s, background-color 0.2s;
2016-02-15 10:03:37 +00:00
}
#sidebar .close::before {
font-size: 20px;
font-weight: normal;
2016-02-15 10:03:37 +00:00
display: inline-block;
line-height: 16px;
2016-02-15 10:03:37 +00:00
text-align: center;
content: "×";
color: #fff;
2014-08-15 13:52:14 +00:00
}
2016-02-15 10:03:37 +00:00
#sidebar .lobby .add-channel {
border-radius: 3px;
width: 18px;
height: 18px;
opacity: 0.4;
transition: opacity 0.2s, background-color 0.2s, transform 0.2s;
}
#sidebar .lobby .add-channel::before {
font-size: 20px;
font-weight: normal;
display: inline-block;
line-height: 16px;
text-align: center;
content: "+";
color: #fff;
}
#sidebar .lobby .add-channel:hover {
opacity: 1;
}
#sidebar .lobby .add-channel.opened {
/* translateZ(0) enables hardware acceleration, this is to avoid jittering when animating */
transform: rotate(45deg) translateZ(0);
}
2018-02-20 08:42:50 +00:00
#sidebar .network .collapse-network {
2018-03-04 19:02:27 +00:00
width: 40px;
2018-02-20 08:42:50 +00:00
opacity: 0.4;
2018-03-04 19:02:27 +00:00
padding-left: 11px;
transition: opacity 0.2s;
2018-02-20 08:42:50 +00:00
}
2018-03-04 19:02:27 +00:00
#sidebar .network .collapse-network-icon {
display: block;
width: 20px;
height: 20px;
transition: transform 0.2s;
2018-03-02 13:59:45 +00:00
}
2018-03-04 19:02:27 +00:00
#sidebar .network.collapsed .collapse-network-icon {
transform: rotate(-90deg);
}
2018-03-04 19:02:27 +00:00
#sidebar .network .collapse-network-icon::before {
2018-02-20 08:42:50 +00:00
content: "\f0d7"; /* http://fontawesome.io/icon/caret-down/ */
color: #fff;
}
#sidebar .collapse-network:hover {
opacity: 1;
}
2019-08-13 10:42:55 +00:00
#sidebar .chan.active {
cursor: default;
}
#sidebar .chan.active .close {
opacity: 0.4;
display: unset;
}
#sidebar .chan.active .close:hover {
opacity: 1;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#footer {
height: 45px;
font-size: 14px;
flex-shrink: 0;
2018-03-30 06:07:11 +00:00
display: flex;
justify-content: center;
2014-08-15 13:52:14 +00:00
}
2018-03-30 06:07:11 +00:00
#footer button {
color: #b7c5d1;
2014-08-15 13:52:14 +00:00
display: inline-block;
2018-03-30 06:07:11 +00:00
width: 45px;
height: 100%;
border-radius: 5px;
2014-08-15 13:52:14 +00:00
}
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
#windows li,
2017-08-15 09:44:29 +00:00
#windows p,
2017-07-10 19:47:03 +00:00
#windows label,
#settings .error {
font-size: 14px;
}
.input {
background-color: white;
2014-08-15 13:52:14 +00:00
border: 1px solid #cdd3da;
2014-08-16 00:05:37 +00:00
border-radius: 2px;
2014-08-15 13:52:14 +00:00
color: #222;
font-size: 14px;
margin: 2px 0;
margin-bottom: 10px;
2018-06-19 10:32:15 +00:00
padding: 0 10px;
transition: border-color 0.2s, box-shadow 0.2s;
2014-08-15 13:52:14 +00:00
width: 100%;
2018-06-19 10:32:15 +00:00
height: 35px;
line-height: 35px;
2014-08-15 13:52:14 +00:00
}
2017-12-27 20:31:21 +00:00
.input:disabled {
background-color: #ddd;
}
.input:not(:disabled):hover,
.input:not(:disabled):focus {
border-color: #84ce88;
2017-12-27 20:31:21 +00:00
}
#user-specified-css-input {
resize: vertical;
2018-06-19 10:32:15 +00:00
height: 10em;
padding: 6px 10px;
line-height: 1.5;
}
2019-02-15 06:40:42 +00:00
.window {
background: var(--window-bg-color);
2019-02-18 09:18:32 +00:00
display: flex;
flex-direction: column;
overflow-y: auto;
height: 100%;
scrollbar-width: thin;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
}
#chat .chan,
2019-02-15 06:40:42 +00:00
.window {
/* flexbox does not seem to scroll without doing this */
2014-08-15 13:52:14 +00:00
position: absolute;
bottom: 0;
left: 0;
2014-08-15 13:52:14 +00:00
right: 0;
top: 0;
}
2014-08-15 13:52:14 +00:00
#windows .window h1 {
font-size: 36px;
2014-08-15 13:52:14 +00:00
}
2014-09-10 15:56:19 +00:00
#windows .window h2 {
border-bottom: 1px solid currentColor;
color: var(--window-heading-color);
2014-09-10 15:56:19 +00:00
font-size: 22px;
margin: 30px 0 10px;
padding-bottom: 7px;
}
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
#windows .window h2 small {
color: inherit;
line-height: 30px;
}
#windows .window h3 {
color: var(--window-heading-color);
font-size: 18px;
margin: 20px 0 10px;
}
#windows .header {
2018-03-30 06:07:11 +00:00
line-height: 45px;
height: 45px;
2018-02-23 21:57:45 +00:00
padding: 0 6px;
display: flex;
flex-shrink: 0;
overflow: hidden;
2014-08-15 13:52:14 +00:00
}
#windows #chat .header {
border-bottom: 1px solid #e7e7e7;
}
#windows .header .title {
2017-05-09 09:39:15 +00:00
font-size: 15px;
padding-left: 6px;
2018-02-23 21:57:45 +00:00
flex-shrink: 0;
2014-08-15 13:52:14 +00:00
}
.topic-container {
position: relative;
flex-grow: 1;
padding-left: 10px;
}
#windows .header .topic {
color: var(--body-color-muted);
2014-08-15 13:52:14 +00:00
margin-left: 8px;
2016-03-22 16:04:34 +00:00
word-break: break-all;
2018-02-23 21:57:45 +00:00
flex-grow: 1;
overflow: hidden;
font-size: 14px;
2014-08-15 13:52:14 +00:00
}
#windows .header .topic-input {
color: inherit;
background: transparent;
border: 1px solid #cdd3da;
border-radius: 2px;
padding-right: 37px;
padding-left: 10px;
width: 100%;
height: 35px;
overflow: hidden;
font-size: 14px;
outline: none;
}
.topic-container .save-topic {
position: absolute;
top: 6px;
right: 0;
}
.topic-container .save-topic span {
font-size: 16px;
color: #607992;
width: 35px;
height: 35px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.topic-container .save-topic span:hover {
opacity: 0.6;
}
2016-07-05 23:23:46 +00:00
#chat {
overflow: hidden;
flex: 1 0 auto;
position: relative;
2016-07-05 23:23:46 +00:00
}
#chat .chan {
display: none;
flex-direction: column;
2016-07-05 23:23:46 +00:00
}
#chat .chan.active {
display: flex;
}
2017-06-22 20:08:36 +00:00
#chat .condensed {
flex-wrap: wrap;
}
#chat .condensed .content {
flex: 1;
}
/* Ensures expanded status messages always take up the full width */
#chat .condensed .msg {
flex-basis: 100%;
}
#chat .condensed-summary .content {
display: block;
cursor: pointer;
user-select: none;
}
#chat .condensed-summary {
display: flex;
}
2017-09-13 05:36:11 +00:00
#chat .condensed-summary .content:hover {
text-decoration: underline;
2017-06-22 20:08:36 +00:00
}
#chat .condensed.closed .msg {
2017-06-22 20:08:36 +00:00
display: none;
}
#chat .condensed-summary .time {
visibility: hidden;
}
2018-06-19 10:32:15 +00:00
#windows #form,
.messages .msg,
.userlist {
font-size: 14px;
line-height: 1.4;
}
#chat .chat-content {
display: flex;
flex-grow: 1;
2018-03-06 18:01:39 +00:00
overflow: hidden;
position: relative;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#chat .chat {
overflow: auto;
overflow-x: hidden;
2017-12-01 10:41:26 +00:00
display: flex;
flex-grow: 1;
2017-12-01 10:41:26 +00:00
flex-direction: column;
scrollbar-width: thin;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
outline: none;
2014-08-15 13:52:14 +00:00
}
#chat .userlist {
2014-08-15 13:52:14 +00:00
border-left: 1px solid #e7e7e7;
width: 180px;
display: none;
flex-direction: column;
flex-shrink: 0;
touch-action: pan-y;
2014-08-15 13:52:14 +00:00
}
/**
* Toggled via JavaScript
*/
#sidebar .join-form {
2018-03-04 19:02:27 +00:00
padding: 0 18px 8px;
}
#sidebar .join-form .input {
display: block;
margin-left: auto;
margin-right: auto;
margin-top: 5px;
margin-bottom: 5px;
}
#sidebar .join-form .btn {
display: block;
2018-03-04 19:02:27 +00:00
width: 100%;
margin: auto;
}
2014-08-15 13:52:14 +00:00
#chat .show-more {
2014-09-28 21:51:24 +00:00
padding: 10px;
padding-top: 15px;
2016-05-13 10:23:05 +00:00
padding-bottom: 0;
2014-08-15 13:52:14 +00:00
width: 100%;
display: none;
2014-08-15 13:52:14 +00:00
}
#chat .show-more .btn {
2014-09-28 21:51:24 +00:00
width: 100%;
margin: 0;
2014-08-15 13:52:14 +00:00
}
.scroll-down {
position: absolute;
bottom: 16px;
right: 16px;
z-index: 2;
pointer-events: none;
opacity: 0;
transform: translateY(16px);
2019-02-18 06:13:32 +00:00
transition: transform 0.2s, opacity 0.2s;
cursor: pointer;
}
.scroll-down-shown {
opacity: 1;
transform: none;
pointer-events: auto;
}
.scroll-down-arrow {
2019-02-18 06:13:32 +00:00
width: 36px;
height: 36px;
line-height: 34px;
border-radius: 50%;
2019-02-18 06:13:32 +00:00
background: var(--window-bg-color);
2019-02-18 18:32:41 +00:00
color: var(--button-color);
border: 2px solid var(--button-color);
text-align: center;
2019-02-18 06:13:32 +00:00
transition: background 0.2s, color 0.2s;
2019-02-18 18:54:25 +00:00
box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.15);
}
.scroll-down:hover .scroll-down-arrow {
2019-02-18 18:32:41 +00:00
background: var(--button-color);
color: var(--button-text-color-hover);
}
.scroll-down-arrow::after {
content: "\f107"; /* https://fontawesome.com/icons/angle-down?style=solid */
}
.userlist-open .channel .scroll-down {
right: 196px;
}
2014-08-15 13:52:14 +00:00
#chat .messages {
2016-02-27 23:22:52 +00:00
padding: 10px 0;
touch-action: pan-y;
}
#chat .chan:not(.special) .messages {
2017-12-01 10:41:26 +00:00
margin-top: auto;
}
#chat .msg {
2016-07-04 21:57:49 +00:00
word-wrap: break-word;
word-break: break-word; /* Webkit-specific */
display: flex;
align-items: flex-start;
position: relative;
2014-08-15 13:52:14 +00:00
}
2016-07-04 21:57:49 +00:00
#chat .unread-marker {
position: relative;
text-align: center;
margin: 0 10px;
z-index: 0;
font-weight: bold;
font-size: 12px;
2014-08-15 13:52:14 +00:00
}
#chat .unread-marker::before {
2016-07-04 21:57:49 +00:00
position: absolute;
z-index: -1;
content: "";
left: 0;
right: 0;
top: 50%;
border-top: 1px solid var(--unread-marker-color);
2016-07-04 21:57:49 +00:00
}
#chat .unread-marker-text::before {
2016-07-04 21:57:49 +00:00
content: "New messages";
background-color: var(--window-bg-color);
color: var(--unread-marker-color);
2016-07-04 21:57:49 +00:00
padding: 0 10px;
2016-05-13 10:23:05 +00:00
}
#chat .unread-marker:last-child {
display: none;
2014-08-15 13:52:14 +00:00
}
2016-10-03 18:03:19 +00:00
#chat .date-marker {
position: relative;
text-align: center;
margin: 0 10px;
z-index: 0;
font-weight: bold;
font-size: 12px;
}
#chat .date-marker::before {
2016-10-03 18:03:19 +00:00
position: absolute;
z-index: -1;
content: "";
left: 0;
right: 0;
top: 50%;
border-top: 1px solid var(--date-marker-color);
2016-10-03 18:03:19 +00:00
}
#chat .date-marker-text::before {
2019-11-20 22:16:58 +00:00
content: attr(aria-label);
background-color: var(--window-bg-color);
color: var(--date-marker-color);
2016-10-03 18:03:19 +00:00
padding: 0 10px;
}
2014-08-15 13:52:14 +00:00
#chat .time,
#chat .from,
#chat .content {
padding: 3px 0;
flex: 0 0 auto;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#chat .time {
color: var(--body-color-muted);
2017-05-06 18:44:57 +00:00
padding-left: 10px;
width: 55px;
font-variant-numeric: tabular-nums;
}
#chat.show-seconds .time {
width: 75px;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#chat .from {
padding-right: 10px;
text-align: right;
width: 134px;
2017-05-11 00:17:27 +00:00
overflow: hidden;
white-space: nowrap;
position: relative;
}
#chat .content {
flex: 1 1 auto;
min-width: 0;
2017-11-26 12:28:33 +00:00
padding-left: 10px;
padding-right: 6px;
border-left: 1px solid #f6f6f6;
overflow: hidden; /* Prevents Zalgo text to expand beyond messages */
text-align: left; /* so RTL text will still be aligned left, not right */
2014-08-15 13:52:14 +00:00
}
#chat .unhandled .from {
color: var(--body-color-muted);
}
#chat .special table th {
word-break: normal;
}
/* Parsed nicks and channels */
2018-04-30 05:03:47 +00:00
#chat .user,
.inline-channel {
cursor: pointer;
}
.chat .user:hover,
.inline-channel:hover {
2018-07-05 10:10:10 +00:00
text-decoration: underline;
}
/* Nicknames */
#chat .user {
color: #50a656;
}
#chat.colored-nicks .user.color-1 { color: #107ead; }
#chat.colored-nicks .user.color-2 { color: #a86500; }
#chat.colored-nicks .user.color-3 { color: #008a3c; }
#chat.colored-nicks .user.color-4 { color: #e00096; }
#chat.colored-nicks .user.color-5 { color: #f0000c; }
#chat.colored-nicks .user.color-6 { color: #000094; }
#chat.colored-nicks .user.color-7 { color: #006441; }
#chat.colored-nicks .user.color-8 { color: #00566e; }
#chat.colored-nicks .user.color-9 { color: #e6006b; }
#chat.colored-nicks .user.color-10 { color: #0d8766; }
#chat.colored-nicks .user.color-11 { color: #006b3b; }
#chat.colored-nicks .user.color-12 { color: #00857e; }
#chat.colored-nicks .user.color-13 { color: #00465b; }
#chat.colored-nicks .user.color-14 { color: #eb005a; }
#chat.colored-nicks .user.color-15 { color: #e62600; }
#chat.colored-nicks .user.color-16 { color: #0f8546; }
#chat.colored-nicks .user.color-17 { color: #e60067; }
#chat.colored-nicks .user.color-18 { color: #eb002b; }
#chat.colored-nicks .user.color-19 { color: #eb003f; }
#chat.colored-nicks .user.color-20 { color: #007a56; }
#chat.colored-nicks .user.color-21 { color: #095092; }
#chat.colored-nicks .user.color-22 { color: #000bde; }
#chat.colored-nicks .user.color-23 { color: #008577; }
#chat.colored-nicks .user.color-24 { color: #00367d; }
#chat.colored-nicks .user.color-25 { color: #007e9e; }
#chat.colored-nicks .user.color-26 { color: #006119; }
#chat.colored-nicks .user.color-27 { color: #007ea8; }
#chat.colored-nicks .user.color-28 { color: #3c8500; }
#chat.colored-nicks .user.color-29 { color: #e6007e; }
#chat.colored-nicks .user.color-30 { color: #c75300; }
#chat.colored-nicks .user.color-31 { color: #eb0400; }
#chat.colored-nicks .user.color-32 { color: #e60082; }
#chat .self .content {
color: var(--body-color-muted);
2014-09-14 18:49:42 +00:00
}
#chat .msg.channel_list_loading .text {
color: #999;
font-style: italic;
padding-left: 20px;
}
#chat .msg.channel_list_truncated .text {
color: #f00;
padding-left: 20px;
}
2017-04-22 12:51:21 +00:00
#chat table.channel-list,
#chat table.ban-list,
2019-04-14 11:44:44 +00:00
#chat table.invite-list,
#chat table.ignore-list {
margin: 5px 10px;
width: calc(100% - 30px);
}
#chat table.channel-list th,
2017-04-22 12:51:21 +00:00
#chat table.ban-list th,
2019-04-14 11:44:44 +00:00
#chat table.invite-list th,
#chat table.ignore-list th,
2017-04-22 12:51:21 +00:00
#chat table.channel-list td,
#chat table.ban-list td,
2019-04-14 11:44:44 +00:00
#chat table.invite-list td,
#chat.table.ignore-list td {
padding: 5px;
vertical-align: top;
border-bottom: #eee 1px solid;
}
#chat table.channel-list .channel {
width: 80px;
}
#chat table.channel-list .channel,
2017-04-22 12:51:21 +00:00
#chat table.channel-list .topic,
#chat table.ban-list .hostmask,
#chat table.ban-list .banned_by,
#chat table.ban-list .banned_at,
#chat table.ignore-list .hostmask,
#chat table.ignore-list .when {
text-align: left;
}
#chat table.channel-list .users {
text-align: center;
width: 50px;
}
2017-06-22 20:08:36 +00:00
#chat.hide-motd .motd {
2014-09-10 20:08:32 +00:00
display: none !important;
}
2016-02-12 11:24:13 +00:00
#chat .msg.motd .text {
background: #f6f6f6;
display: inline-block;
border-radius: 4px;
padding: 6px;
}
2017-06-22 20:08:36 +00:00
#chat .condensed .content,
#chat .away .content,
#chat .back .content,
#chat .join .content,
#chat .kick .content,
#chat .mode .content,
#chat .nick .content,
#chat .part .content,
#chat .quit .content,
#chat .topic .content,
#chat .topic_set_by .content {
color: var(--body-color-muted);
}
#chat .action .from,
#chat .action .content,
2016-01-23 14:39:54 +00:00
#chat .action .user {
color: #f39c12;
2016-01-23 14:39:54 +00:00
}
2016-01-23 14:39:54 +00:00
#chat .notice .time,
#chat .notice .content,
2016-01-23 14:39:54 +00:00
#chat .chan .notice .user {
color: #0074d9 !important;
2016-01-23 14:39:54 +00:00
}
#chat .notice .from .user::before {
2016-01-23 14:39:54 +00:00
content: "Notice: ";
2014-08-15 13:52:14 +00:00
}
2016-01-23 14:39:54 +00:00
#chat .error,
#chat .error .from {
color: #e74c3c;
}
#chat .channel .msg.highlight {
background-color: var(--highlight-bg-color);
border-left: 5px solid var(--highlight-border-color);
}
#chat .channel .msg.highlight .time {
padding-left: 5px;
width: 50px;
color: #696969;
}
#chat.show-seconds .channel .msg.highlight .time {
width: 70px;
}
#chat .channel .msg.highlight .content {
border-left: 1px solid var(--highlight-bg-color);
}
2019-08-09 20:20:08 +00:00
#chat .preview-size {
margin-left: 5px;
user-select: none;
}
#chat .toggle-content.opened .more-caret, /* Expand/Collapse link previews */
#chat .toggle-button.opened, /* Thumbnail toggle */
#chat .msg.condensed:not(.closed) .toggle-button { /* Expanded status message toggle */
transform: rotate(90deg);
}
2019-11-25 19:37:51 +00:00
#chat .preview {
display: flex; /* Fix odd margin added by inline-flex in .toggle-content */
}
2014-09-27 19:17:05 +00:00
#chat .toggle-content {
background: #f6f6f6;
border-radius: 5px;
max-width: 100%;
margin: 0;
margin-top: 6px;
overflow: hidden;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
2018-07-10 14:44:50 +00:00
display: inline-flex !important;
align-items: flex-start;
2018-09-25 13:28:08 +00:00
white-space: normal;
2014-09-27 19:17:05 +00:00
}
/* This applies to images of preview-type-image and thumbnails of preview-type-link */
2014-09-27 19:17:05 +00:00
#chat .toggle-content img {
max-width: 100%;
max-height: 128px;
2014-09-27 20:39:14 +00:00
display: block;
cursor: zoom-in;
2014-09-27 20:39:14 +00:00
}
#chat .toggle-content pre.prefetch-error {
padding: 0;
margin: 0;
color: inherit;
background-color: transparent;
}
#chat .toggle-content .prefetch-error {
display: none;
}
#chat .toggle-content.opened .prefetch-error {
display: inline;
}
/* This applies to thumbnails of preview-type-link only */
#chat .toggle-content .thumb {
max-height: 54px;
max-width: 96px;
}
#chat .toggle-type-error,
#chat .toggle-content .toggle-text {
padding: 8px 10px;
}
#chat .toggle-content .toggle-text {
white-space: nowrap;
overflow: hidden;
text-align: initial;
}
#chat .toggle-content.opened .toggle-text {
white-space: normal;
}
#chat .toggle-content .head {
display: flex;
align-items: flex-start;
font-weight: bold;
}
#chat .toggle-type-error,
#chat .toggle-text .body {
color: #717171;
}
#chat .toggle-text a {
color: inherit;
}
#chat .toggle-text .overflowable {
text-overflow: ellipsis;
overflow: hidden;
flex-grow: 1;
2014-09-27 20:39:14 +00:00
}
#chat .toggle-content .more {
color: var(--link-color);
font-weight: normal;
margin-left: 10px;
flex-shrink: 0;
}
#chat .toggle-content .more:hover {
text-decoration: underline;
}
#chat .toggle-content .more::after {
content: " " attr(aria-label);
}
#chat .toggle-content .more-caret {
display: inline-block;
transition: transform 0.2s;
}
#chat .toggle-content .more-caret::before {
content: "\f0da"; /* https://fontawesome.com/icons/caret-right?style=solid */
2014-09-27 20:39:14 +00:00
}
2017-12-06 22:27:35 +00:00
#chat audio {
width: 600px;
max-width: 100%;
}
2017-12-14 11:12:22 +00:00
#chat video {
max-width: 640px;
max-height: 240px;
}
/* Do not display an empty div when there are no previews. Useful for example in
part/quit messages where we don't load previews (adds a blank line otherwise) */
#chat .preview:empty {
display: none;
}
#chat .userlist .count {
2014-09-10 15:56:19 +00:00
background: #fafafa;
2018-03-30 06:07:11 +00:00
height: 45px;
flex-shrink: 0;
position: relative;
2014-08-15 13:52:14 +00:00
}
#chat .userlist .search {
color: var(--body-color);
2014-08-15 13:52:14 +00:00
border: 0;
background: none;
font: inherit;
outline: 0;
2018-03-30 06:07:11 +00:00
padding: 13px;
2014-08-15 13:52:14 +00:00
width: 100%;
}
#chat .userlist .names {
flex-grow: 1;
2014-08-15 13:52:14 +00:00
overflow: auto;
overflow-x: hidden;
2014-10-04 19:47:27 +00:00
padding-bottom: 10px;
2014-08-15 13:52:14 +00:00
width: 100%;
touch-action: pan-y;
scrollbar-width: thin;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
2014-08-15 13:52:14 +00:00
}
#chat .names .user {
2014-08-15 13:52:14 +00:00
display: block;
2014-08-18 23:54:14 +00:00
line-height: 1.6;
2014-10-04 19:47:27 +00:00
padding: 0 16px;
white-space: nowrap;
2014-08-15 13:52:14 +00:00
}
#chat .user-mode {
margin-bottom: 15px;
}
#chat .user-mode::before {
background: var(--window-bg-color);
color: var(--body-color-muted);
2014-10-04 19:47:27 +00:00
display: block;
font-size: 0.85em;
2014-10-04 19:47:27 +00:00
line-height: 1.6;
padding: 5px 16px;
position: sticky;
top: 0;
2014-10-04 19:47:27 +00:00
}
#chat .user-mode.owner::before {
2014-10-04 19:47:27 +00:00
content: "Owners";
}
#chat .user-mode.admin::before {
2014-10-04 19:47:27 +00:00
content: "Administrators";
}
#chat .user-mode.op::before {
2014-10-04 19:47:27 +00:00
content: "Operators";
}
#chat .user-mode.half-op::before {
content: "Half-Operators";
}
#chat .user-mode.voice::before {
2014-10-04 19:47:27 +00:00
content: "Voiced";
}
#chat .user-mode.normal::before {
2014-10-04 19:47:27 +00:00
content: "Users";
}
#chat .user-mode-search::before {
content: "Search Results";
}
#loading {
font-size: 14px;
2019-02-15 06:40:42 +00:00
height: 100%;
}
#loading .window {
height: initial;
2017-10-28 20:50:57 +00:00
display: flex;
flex-direction: column;
2019-02-15 06:40:42 +00:00
bottom: 5px;
left: 5px;
right: 5px;
top: 5px;
}
#loading p {
2014-08-15 13:52:14 +00:00
margin-top: 10px;
}
#loading-slow,
#loading-reload {
2017-10-28 20:50:57 +00:00
visibility: hidden;
}
#loading summary {
outline: none;
cursor: pointer;
}
#loading pre {
2017-10-28 20:50:57 +00:00
text-align: left;
white-space: normal;
}
#sign-in .container,
2017-10-28 20:50:57 +00:00
#loading-reload-container,
#loading-status-container {
flex: 1 0 auto;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
2018-03-11 21:20:51 +00:00
width: 100%;
2017-10-28 20:50:57 +00:00
}
#loading-reload-container {
flex-grow: 0;
}
2018-07-08 08:52:05 +00:00
#loading .logo-inverted,
#windows .logo-inverted {
2018-03-11 21:20:51 +00:00
display: none; /* In dark themes, inverted logo must be used instead */
2017-10-28 20:50:57 +00:00
}
#sign-in label {
display: block;
margin-top: 10px;
2018-03-11 21:20:51 +00:00
width: 100%;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#sign-in .btn {
margin-top: 25px;
}
2014-08-15 13:52:14 +00:00
#sign-in .error {
color: #e74c3c;
margin-top: 1em;
2018-03-11 21:20:51 +00:00
width: 100%;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#connect label {
display: block;
margin-top: 11px;
2014-08-15 13:52:14 +00:00
}
#connect .port::before {
2014-08-15 13:52:14 +00:00
content: ":";
margin: 9px 0 0 -17px;
2014-08-15 13:52:14 +00:00
position: absolute;
}
2014-09-10 15:56:19 +00:00
#connect .tls {
float: left;
margin-top: 6px;
2014-09-10 15:56:19 +00:00
}
2014-09-10 15:56:19 +00:00
#connect .tls input {
float: left;
margin: 3px 10px 0 0;
}
2014-08-15 13:52:14 +00:00
#connect .btn {
2014-09-10 15:56:19 +00:00
float: left;
margin-top: 30px;
2014-08-15 13:52:14 +00:00
}
#settings .settings-sync-panel {
padding: 10px;
margin-bottom: 16px;
border-radius: 2px;
background-color: #d9edf7;
color: #31708f;
}
#settings .settings-sync-panel p:last-child {
margin-bottom: 0;
}
#settings .settings-sync-panel .btn {
color: #007bff;
border-color: #007bff;
margin-bottom: 0;
}
#settings .settings-sync-panel .btn:hover,
#settings .settings-sync-panel .btn:focus {
background-color: #007bff;
color: #fff;
}
#settings .settings-sync-panel .btn:active,
#settings .settings-sync-panel .btn:focus {
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.5);
Offer optional syncing of client settings Write synced settings to localstorage. move settings and webpush init to init.js stub for server sending clientsettings get very basic setting sync working Also update client.config.clientSettings on settings:set Full setting sync with mandatory and excluded sync options Actually check client preferences. Further settings restructuring. Refactor options.js make storage act in a sane manner. Add new parameter to applySetting Do not sync if the setting is stored as a result of syncing General clean up, commenting and restructing. sync from server on checking "sync" offer initial sync Better deal with DOM being ready and instances of inital sync showing Don't try to disable autocompletion when not enabled. Restructure option.js to seperate functions from settings. More consistency in naming options vs settings Switch processSetting and applySetting names reflecting their functionality better. move options init back to configuration. simplify how settings are synced around. move options init after template building. Remove unneeded hasOwnProperty Use global for #theme and only apply theme in applySetting Return when no server side clientsettings excist. Autocompletion options to options.settings Make nocss param in url work again. Actually filter out empty highlight values. Clarify alwaysSync comment. Remove manual step for initial sync change attr to prop in options.js replace unbind with off in autocompletion.js Do not sync settings when the lounge is set to public. fix eslint error Fix merge error Do not show sync warning after page refresh when sync is enabled Move setting sync label in actual label. Improve server setting sync handling performance and failure potential. Don't give impression that the desktop notificiation is off when the browser permission is denied. Refine showing and hiding of notification warnings. rename all setting socket events to singular setting. add experimental note and icon to settingsync. fix css linting error
2017-12-11 19:01:15 +00:00
}
2014-08-15 13:52:14 +00:00
#settings .opt {
display: block;
padding: 5px 0 5px 1px;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#settings .opt input {
margin-right: 6px;
2014-08-15 13:52:14 +00:00
}
Offer optional syncing of client settings Write synced settings to localstorage. move settings and webpush init to init.js stub for server sending clientsettings get very basic setting sync working Also update client.config.clientSettings on settings:set Full setting sync with mandatory and excluded sync options Actually check client preferences. Further settings restructuring. Refactor options.js make storage act in a sane manner. Add new parameter to applySetting Do not sync if the setting is stored as a result of syncing General clean up, commenting and restructing. sync from server on checking "sync" offer initial sync Better deal with DOM being ready and instances of inital sync showing Don't try to disable autocompletion when not enabled. Restructure option.js to seperate functions from settings. More consistency in naming options vs settings Switch processSetting and applySetting names reflecting their functionality better. move options init back to configuration. simplify how settings are synced around. move options init after template building. Remove unneeded hasOwnProperty Use global for #theme and only apply theme in applySetting Return when no server side clientsettings excist. Autocompletion options to options.settings Make nocss param in url work again. Actually filter out empty highlight values. Clarify alwaysSync comment. Remove manual step for initial sync change attr to prop in options.js replace unbind with off in autocompletion.js Do not sync settings when the lounge is set to public. fix eslint error Fix merge error Do not show sync warning after page refresh when sync is enabled Move setting sync label in actual label. Improve server setting sync handling performance and failure potential. Don't give impression that the desktop notificiation is off when the browser permission is denied. Refine showing and hiding of notification warnings. rename all setting socket events to singular setting. add experimental note and icon to settingsync. fix css linting error
2017-12-11 19:01:15 +00:00
#settings .extra-experimental {
color: #84ce88;
}
#settings .extra-experimental,
#settings .extra-help {
cursor: help;
}
Offer optional syncing of client settings Write synced settings to localstorage. move settings and webpush init to init.js stub for server sending clientsettings get very basic setting sync working Also update client.config.clientSettings on settings:set Full setting sync with mandatory and excluded sync options Actually check client preferences. Further settings restructuring. Refactor options.js make storage act in a sane manner. Add new parameter to applySetting Do not sync if the setting is stored as a result of syncing General clean up, commenting and restructing. sync from server on checking "sync" offer initial sync Better deal with DOM being ready and instances of inital sync showing Don't try to disable autocompletion when not enabled. Restructure option.js to seperate functions from settings. More consistency in naming options vs settings Switch processSetting and applySetting names reflecting their functionality better. move options init back to configuration. simplify how settings are synced around. move options init after template building. Remove unneeded hasOwnProperty Use global for #theme and only apply theme in applySetting Return when no server side clientsettings excist. Autocompletion options to options.settings Make nocss param in url work again. Actually filter out empty highlight values. Clarify alwaysSync comment. Remove manual step for initial sync change attr to prop in options.js replace unbind with off in autocompletion.js Do not sync settings when the lounge is set to public. fix eslint error Fix merge error Do not show sync warning after page refresh when sync is enabled Move setting sync label in actual label. Improve server setting sync handling performance and failure potential. Don't give impression that the desktop notificiation is off when the browser permission is denied. Refine showing and hiding of notification warnings. rename all setting socket events to singular setting. add experimental note and icon to settingsync. fix css linting error
2017-12-11 19:01:15 +00:00
#settings .extra-experimental,
#settings h2 .extra-help {
font-size: 0.8em;
}
#settings #play {
font-size: 14px;
transition: opacity 0.2s;
color: var(--window-heading-color);
}
2014-08-15 13:52:14 +00:00
#settings #play:hover {
opacity: 0.8;
2014-08-15 13:52:14 +00:00
}
#settings #change-password .error,
#settings #change-password .success {
margin-bottom: 1em;
}
#settings #change-password .error {
color: #e74c3c;
}
#settings #change-password .success {
color: #2ecc40;
}
#settings .error {
color: #e74c3c;
margin-top: 0.2em;
}
.password-container {
position: relative;
}
.password-container input {
padding-right: 37px;
}
#sign-in .password-container {
width: 100%;
}
#sign-in .password-container .reveal-password {
top: 31px;
right: 0;
}
.password-container .reveal-password {
position: absolute;
top: 2px;
right: 15px;
}
2018-05-24 19:20:23 +00:00
.password-container .reveal-password span {
2018-05-07 23:52:54 +00:00
font: normal normal normal 14px/1 FontAwesome;
font-size: 16px;
2018-03-30 06:07:11 +00:00
color: #607992;
2018-06-19 10:32:15 +00:00
width: 35px;
height: 35px;
2018-05-24 19:20:23 +00:00
display: flex;
justify-content: center;
align-items: center;
2018-03-30 06:07:11 +00:00
cursor: pointer;
2018-05-07 23:52:54 +00:00
}
2018-05-24 19:20:23 +00:00
.password-container .reveal-password span::before {
content: "\f06e"; /* https://fontawesome.com/icons/eye?style=solid */
2018-05-07 23:52:54 +00:00
}
.topic-container .save-topic span::before {
content: "\f00c"; /* https://fontawesome.com/icons/check?style=solid */
}
2019-02-18 09:18:32 +00:00
.password-container .reveal-password-visible span::before {
content: "\f070"; /* https://fontawesome.com/icons/eye-slash?style=solid */
color: #ff4136;
}
#help .help-item {
display: table-row;
font-size: 14px;
}
#help .help-item .subject,
#help .help-item .description {
display: table-cell;
padding-bottom: 15px;
}
#help .help-item .subject {
white-space: nowrap;
padding-right: 15px;
}
#help .help-item .description p {
margin-bottom: 0;
}
2017-12-17 14:28:30 +00:00
.whois {
display: grid;
grid-template-columns: max-content auto;
margin: 0;
}
.whois dt {
grid-column-start: 1;
margin-right: 20px;
}
.whois dd {
grid-column-start: 2;
}
.changelog-text {
line-height: 1.5;
}
.changelog-text p {
margin-bottom: 16px;
}
.window#changelog h3 {
font-size: 20px;
border-bottom: 1px solid currentColor;
color: var(--window-heading-color);
margin: 30px 0 10px;
padding-bottom: 7px;
}
#version-checker {
display: flex;
align-items: center;
padding: 10px;
margin-bottom: 16px;
border-radius: 2px;
transition: color 0.2s, background-color 0.2s;
}
#version-checker p,
#version-checker button {
margin-bottom: 0;
}
#version-checker p {
flex: 1;
padding-top: 6px;
padding-bottom: 6px;
}
#version-checker::before {
margin-left: 6px;
margin-right: 12px;
font-size: 1.2em;
}
#version-checker.loading {
background-color: #d9edf7;
color: #31708f;
}
#version-checker.loading::before {
2017-12-08 04:01:58 +00:00
content: "\f253"; /* https://fontawesome.com/icons/hourglass-end?style=solid */
}
#version-checker.new-version,
#version-checker.new-packages {
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
color: #8a6d3b;
background-color: #fcf8e3;
}
#version-checker.new-version::before,
#version-checker.new-packages::before {
2017-12-08 04:01:58 +00:00
content: "\f164"; /* https://fontawesome.com/icons/thumbs-up?style=solid */
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
}
#version-checker.error {
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
color: #a94442;
background-color: #f2dede;
}
#version-checker.error::before {
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
content: "\f06a"; /* http://fontawesome.io/icon/exclamation-circle/ */
}
#version-checker.up-to-date {
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
background-color: #dff0d8;
color: #3c763d;
}
#version-checker.up-to-date::before {
Improve UI of the About section and changelog viewer - Keep consistent width between the Help page and Changelog (which is already different from other windows 😠) - Add icons to the About links - Make sure `li` elements (i.e. all the lists in changelogs) are consistent in size with rest of the client - Display version and release notes link on the "About The Lounge" header line, smaller, pushed to the right - Check new releases when opening the Help window in order to display it without having to open the release notes. Release notes are being fed to the Changelog page at that moment to avoid fetching twice. - Re-check version/fetch release notes after 24h. Since The Lounge can now run 24/7, reconnect when losing the network, we have to assume an "always-on" usage. - Change icon, animate background color when getting response from GitHub to avoid flashing. - Combine click handlers with our wonderful window management. These were the same handler, even with similar checks (`target` exists, etc.), just in 2 different places. This is necessary for the next item. - Combine "Open release notes" and "Go back to Help" button behaviors with window management handlers. The window management code is gross as ever, and is in desperate need of a refactor, but at least there is no duplicated code for the same behavior + history management. This fixes the "Next" history behavior (however reloading the app while viewing the notes does not load on the notes, but this is a bug for a different PR!). - Added a rule in the history management thingy: if a link we want to add history handling to has an `id`, store that in the state - Added a button to go back to the Help window - Fixed links to releases - Send user to the GitHub issues *list* instead of *new issue form* because if they do not have a GitHub account, they will be redirected to the login page, which is a rather unpleasant experience when you are already confused... - Fixed a bug that would return data about a new release in `latest` even though it is already the `current`. It was showing the current version as "The Lounge v... is now available". - Added https://user-images.githubusercontent.com to the CSP rule when prefetch storage is enabled, because that is where we have stored screenshots in the changelog so far. Meh (we can improve that later if we decide to have a dedicated place for screenshots). - Fetch changelog info even in public mode because users in public mode can access the release notes. They do not see the result of the version checker however.
2017-12-23 03:40:41 +00:00
content: "\f00c"; /* http://fontawesome.io/icon/check/ */
}
#upload-progressbar {
2019-03-18 00:42:53 +00:00
background: var(--upload-progressbar-color);
box-shadow: 0 0 10px var(--upload-progressbar-color);
width: 0%;
height: 2px;
visibility: hidden;
}
#upload-progressbar.upload-progressbar-visible {
visibility: visible;
transition: 0.3s width ease-in-out;
}
2014-08-15 13:52:14 +00:00
#form {
flex: 0 0 auto;
2018-03-30 06:07:11 +00:00
border: 0;
border-top: 1px solid #e7e7e7;
border-radius: 0;
2016-07-05 23:23:46 +00:00
margin: 0;
2018-03-30 06:07:11 +00:00
padding: 6px;
background: white;
display: flex;
align-items: flex-end;
2014-09-21 15:21:26 +00:00
}
2018-10-16 10:21:16 +00:00
#user-visible-error {
font-size: 14px;
line-height: 1.5;
font-weight: 600;
padding: 10px;
2017-08-28 15:03:27 +00:00
word-spacing: 3px;
text-transform: uppercase;
background: #e74c3c;
color: #fff;
text-align: center;
cursor: pointer;
}
2014-09-25 23:51:53 +00:00
#form #nick {
background: #f6f6f6;
2014-09-27 00:21:14 +00:00
color: #666;
font-size: 13px;
margin: 4px;
2018-03-16 14:10:28 +00:00
line-height: 24px;
padding: 0 8px;
border-radius: 2px;
display: none;
}
2018-03-16 14:10:28 +00:00
.public #form #nick {
display: block;
}
2014-09-25 23:51:53 +00:00
#form #input {
background: transparent;
border: none;
2014-09-25 23:51:53 +00:00
font: inherit;
min-height: 19px; /* Required when computing input height at char deletion */
height: 19px;
max-height: 95px; /* min-height/height x number of lines maximum */
line-height: 19px; /* should match height */
2014-09-25 23:51:53 +00:00
outline: none;
margin: 5px;
padding: 0;
resize: none;
flex: 1 0 auto;
align-self: center;
touch-action: pan-y;
2014-09-25 23:51:53 +00:00
}
#form #upload-input {
display: none;
}
#form #upload,
2014-08-15 13:52:14 +00:00
#form #submit {
2018-03-30 06:07:11 +00:00
color: #607992;
font-size: 14px;
height: 32px;
width: 32px;
flex: 0 0 auto;
2016-03-11 06:44:09 +00:00
}
2018-09-12 19:54:20 +00:00
#form #upload[disabled],
#form #submit[disabled] {
opacity: 0.5;
}
2016-02-12 11:34:10 +00:00
#context-menu-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1000;
background: transparent;
}
#context-menu,
.textcomplete-menu {
2016-02-12 11:34:10 +00:00
position: absolute;
list-style: none;
margin: 0;
padding: 0 6px;
min-width: 180px;
2016-02-12 11:34:10 +00:00
font-size: 14px;
background-color: #fff;
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 5px;
2019-11-18 20:05:47 +00:00
outline: 0;
2016-02-12 11:34:10 +00:00
}
.context-menu-divider {
height: 1px;
margin: 6px 0;
background-color: rgba(0, 0, 0, 0.1);
2016-02-12 11:34:10 +00:00
}
.context-menu-item,
.textcomplete-item {
2016-02-12 11:34:10 +00:00
cursor: pointer;
display: block;
padding: 4px 8px;
2016-02-12 11:34:10 +00:00
color: #333;
margin-top: 6px;
margin-bottom: 6px;
2017-08-23 14:19:04 +00:00
line-height: 1.4;
transition: background-color 0.2s;
border-radius: 3px;
2019-11-23 14:26:20 +00:00
white-space: nowrap;
2016-02-12 11:34:10 +00:00
}
2019-11-18 20:05:47 +00:00
.context-menu-item.active,
.textcomplete-item:focus,
.textcomplete-item:hover,
.textcomplete-menu .active,
#chat .userlist .user.active {
background-color: rgba(0, 0, 0, 0.1);
transition: none;
2016-02-12 11:34:10 +00:00
}
.context-menu-item::before,
.textcomplete-item::before {
2016-02-12 11:34:10 +00:00
width: 20px;
display: inline-block;
}
.textcomplete-item a {
color: #333;
}
.textcomplete-item a:hover {
text-decoration: none;
}
2017-08-23 14:19:04 +00:00
.emoji {
font-size: 1.4em;
2018-02-23 21:57:45 +00:00
vertical-align: text-top;
2017-08-23 14:19:04 +00:00
line-height: 1;
}
.textcomplete-item .emoji {
2017-08-23 14:19:04 +00:00
width: 32px;
text-align: center;
}
.textcomplete-item .irc-bg {
display: block;
}
2014-10-10 23:11:57 +00:00
/**
2014-12-11 03:35:17 +00:00
* IRC Message Styling
* Colours are credit to http://clrs.cc/
*/
.irc-fg0 { color: #fff; }
.irc-fg1 { color: #000; }
.irc-fg2 { color: #001f3f; }
.irc-fg3 { color: #2ecc40; }
.irc-fg4 { color: #ff4136; }
.irc-fg5 { color: #85144b; }
.irc-fg6 { color: #b10dc9; }
.irc-fg7 { color: #ff851b; }
.irc-fg8 { color: #ffdc00; }
.irc-fg9 { color: #01ff70; }
.irc-fg10 { color: #39cccc; }
.irc-fg11 { color: #7fdbff; }
.irc-fg12 { color: #0074d9; }
.irc-fg13 { color: #f012be; }
.irc-fg14 { color: #aaa; }
.irc-fg15 { color: #ddd; }
.irc-bg0 { background: #fff; }
.irc-bg1 { background: #000; }
.irc-bg2 { background: #001f3f; }
.irc-bg3 { background: #2ecc40; }
.irc-bg4 { background: #ff4136; }
.irc-bg5 { background: #85144b; }
.irc-bg6 { background: #b10dc9; }
.irc-bg7 { background: #ff851b; }
.irc-bg8 { background: #ffdc00; }
.irc-bg9 { background: #01ff70; }
.irc-bg10 { background: #39cccc; }
.irc-bg11 { background: #7fdbff; }
.irc-bg12 { background: #0074d9; }
.irc-bg13 { background: #f012be; }
.irc-bg14 { background: #aaa; }
.irc-bg15 { background: #ddd; }
2014-10-10 23:11:57 +00:00
2017-12-12 18:14:05 +00:00
/* https://modern.ircdocs.horse/formatting.html#colors-16-98 */
.irc-fg16 { color: #470000; }
.irc-fg17 { color: #472100; }
.irc-fg18 { color: #474700; }
.irc-fg19 { color: #324700; }
.irc-fg20 { color: #004700; }
.irc-fg21 { color: #00472c; }
.irc-fg22 { color: #004747; }
.irc-fg23 { color: #002747; }
.irc-fg24 { color: #000047; }
.irc-fg25 { color: #2e0047; }
.irc-fg26 { color: #470047; }
.irc-fg27 { color: #47002a; }
.irc-fg28 { color: #740000; }
.irc-fg29 { color: #743a00; }
.irc-fg30 { color: #747400; }
.irc-fg31 { color: #517400; }
.irc-fg32 { color: #007400; }
.irc-fg33 { color: #007449; }
.irc-fg34 { color: #007474; }
.irc-fg35 { color: #004074; }
.irc-fg36 { color: #000074; }
.irc-fg37 { color: #4b0074; }
.irc-fg38 { color: #740074; }
.irc-fg39 { color: #740045; }
.irc-fg40 { color: #b50000; }
.irc-fg41 { color: #b56300; }
.irc-fg42 { color: #b5b500; }
.irc-fg43 { color: #7db500; }
.irc-fg44 { color: #00b500; }
.irc-fg45 { color: #00b571; }
.irc-fg46 { color: #00b5b5; }
.irc-fg47 { color: #0063b5; }
.irc-fg48 { color: #0000b5; }
.irc-fg49 { color: #7500b5; }
.irc-fg50 { color: #b500b5; }
.irc-fg51 { color: #b5006b; }
.irc-fg52 { color: #f00; }
2017-12-12 18:14:05 +00:00
.irc-fg53 { color: #ff8c00; }
.irc-fg54 { color: #ff0; }
2017-12-12 18:14:05 +00:00
.irc-fg55 { color: #b2ff00; }
.irc-fg56 { color: #0f0; }
2017-12-12 18:14:05 +00:00
.irc-fg57 { color: #00ffa0; }
.irc-fg58 { color: #0ff; }
2017-12-12 18:14:05 +00:00
.irc-fg59 { color: #008cff; }
.irc-fg60 { color: #00f; }
2017-12-12 18:14:05 +00:00
.irc-fg61 { color: #a500ff; }
.irc-fg62 { color: #f0f; }
2017-12-12 18:14:05 +00:00
.irc-fg63 { color: #ff0098; }
.irc-fg64 { color: #ff5959; }
.irc-fg65 { color: #ffb459; }
.irc-fg66 { color: #ffff71; }
.irc-fg67 { color: #cfff60; }
.irc-fg68 { color: #6fff6f; }
.irc-fg69 { color: #65ffc9; }
.irc-fg70 { color: #6dffff; }
.irc-fg71 { color: #59b4ff; }
.irc-fg72 { color: #5959ff; }
.irc-fg73 { color: #c459ff; }
.irc-fg74 { color: #f6f; }
2017-12-12 18:14:05 +00:00
.irc-fg75 { color: #ff59bc; }
.irc-fg76 { color: #ff9c9c; }
.irc-fg77 { color: #ffd39c; }
.irc-fg78 { color: #ffff9c; }
.irc-fg79 { color: #e2ff9c; }
.irc-fg80 { color: #9cff9c; }
.irc-fg81 { color: #9cffdb; }
.irc-fg82 { color: #9cffff; }
.irc-fg83 { color: #9cd3ff; }
.irc-fg84 { color: #9c9cff; }
.irc-fg85 { color: #dc9cff; }
.irc-fg86 { color: #ff9cff; }
.irc-fg87 { color: #ff94d3; }
.irc-fg88 { color: #000; }
2017-12-12 18:14:05 +00:00
.irc-fg89 { color: #131313; }
.irc-fg90 { color: #282828; }
.irc-fg91 { color: #363636; }
.irc-fg92 { color: #4d4d4d; }
.irc-fg93 { color: #656565; }
.irc-fg94 { color: #818181; }
.irc-fg95 { color: #9f9f9f; }
.irc-fg96 { color: #bcbcbc; }
.irc-fg97 { color: #e2e2e2; }
.irc-fg98 { color: #fff; }
2017-12-12 18:14:05 +00:00
.irc-bg16 { background-color: #470000; }
.irc-bg17 { background-color: #472100; }
.irc-bg18 { background-color: #474700; }
.irc-bg19 { background-color: #324700; }
.irc-bg20 { background-color: #004700; }
.irc-bg21 { background-color: #00472c; }
.irc-bg22 { background-color: #004747; }
.irc-bg23 { background-color: #002747; }
.irc-bg24 { background-color: #000047; }
.irc-bg25 { background-color: #2e0047; }
.irc-bg26 { background-color: #470047; }
.irc-bg27 { background-color: #47002a; }
.irc-bg28 { background-color: #740000; }
.irc-bg29 { background-color: #743a00; }
.irc-bg30 { background-color: #747400; }
.irc-bg31 { background-color: #517400; }
.irc-bg32 { background-color: #007400; }
.irc-bg33 { background-color: #007449; }
.irc-bg34 { background-color: #007474; }
.irc-bg35 { background-color: #004074; }
.irc-bg36 { background-color: #000074; }
.irc-bg37 { background-color: #4b0074; }
.irc-bg38 { background-color: #740074; }
.irc-bg39 { background-color: #740045; }
.irc-bg40 { background-color: #b50000; }
.irc-bg41 { background-color: #b56300; }
.irc-bg42 { background-color: #b5b500; }
.irc-bg43 { background-color: #7db500; }
.irc-bg44 { background-color: #00b500; }
.irc-bg45 { background-color: #00b571; }
.irc-bg46 { background-color: #00b5b5; }
.irc-bg47 { background-color: #0063b5; }
.irc-bg48 { background-color: #0000b5; }
.irc-bg49 { background-color: #7500b5; }
.irc-bg50 { background-color: #b500b5; }
.irc-bg51 { background-color: #b5006b; }
.irc-bg52 { background-color: #f00; }
2017-12-12 18:14:05 +00:00
.irc-bg53 { background-color: #ff8c00; }
.irc-bg54 { background-color: #ff0; }
2017-12-12 18:14:05 +00:00
.irc-bg55 { background-color: #b2ff00; }
.irc-bg56 { background-color: #0f0; }
2017-12-12 18:14:05 +00:00
.irc-bg57 { background-color: #00ffa0; }
.irc-bg58 { background-color: #0ff; }
2017-12-12 18:14:05 +00:00
.irc-bg59 { background-color: #008cff; }
.irc-bg60 { background-color: #00f; }
2017-12-12 18:14:05 +00:00
.irc-bg61 { background-color: #a500ff; }
.irc-bg62 { background-color: #f0f; }
2017-12-12 18:14:05 +00:00
.irc-bg63 { background-color: #ff0098; }
.irc-bg64 { background-color: #ff5959; }
.irc-bg65 { background-color: #ffb459; }
.irc-bg66 { background-color: #ffff71; }
.irc-bg67 { background-color: #cfff60; }
.irc-bg68 { background-color: #6fff6f; }
.irc-bg69 { background-color: #65ffc9; }
.irc-bg70 { background-color: #6dffff; }
.irc-bg71 { background-color: #59b4ff; }
.irc-bg72 { background-color: #5959ff; }
.irc-bg73 { background-color: #c459ff; }
.irc-bg74 { background-color: #f6f; }
2017-12-12 18:14:05 +00:00
.irc-bg75 { background-color: #ff59bc; }
.irc-bg76 { background-color: #ff9c9c; }
.irc-bg77 { background-color: #ffd39c; }
.irc-bg78 { background-color: #ffff9c; }
.irc-bg79 { background-color: #e2ff9c; }
.irc-bg80 { background-color: #9cff9c; }
.irc-bg81 { background-color: #9cffdb; }
.irc-bg82 { background-color: #9cffff; }
.irc-bg83 { background-color: #9cd3ff; }
.irc-bg84 { background-color: #9c9cff; }
.irc-bg85 { background-color: #dc9cff; }
.irc-bg86 { background-color: #ff9cff; }
.irc-bg87 { background-color: #ff94d3; }
.irc-bg88 { background-color: #000; }
2017-12-12 18:14:05 +00:00
.irc-bg89 { background-color: #131313; }
.irc-bg90 { background-color: #282828; }
.irc-bg91 { background-color: #363636; }
.irc-bg92 { background-color: #4d4d4d; }
.irc-bg93 { background-color: #656565; }
.irc-bg94 { background-color: #818181; }
.irc-bg95 { background-color: #9f9f9f; }
.irc-bg96 { background-color: #bcbcbc; }
.irc-bg97 { background-color: #e2e2e2; }
.irc-bg98 { background-color: #fff; }
2017-12-12 18:14:05 +00:00
.irc-bold {
font-weight: bold;
}
.irc-underline {
text-decoration: underline;
}
.irc-strikethrough {
text-decoration: line-through;
}
2018-03-18 19:34:46 +00:00
.irc-underline.irc-strikethrough {
text-decoration: underline line-through;
}
.irc-italic {
font-style: italic;
}
.tooltipped::after {
font-size: 12px;
}
2017-05-11 00:17:27 +00:00
@media (min-width: 480px) {
/* Fade out for long usernames */
#chat .from {
padding-left: 10px;
mask-image: linear-gradient(to left, transparent, black 10px);
2017-05-11 00:17:27 +00:00
}
}
2014-08-15 13:52:14 +00:00
@media (max-width: 768px) {
/**
* TODO Replace this with `@media (hover: hover)` when Firefox supports it
* See:
* - http://stackoverflow.com/a/28058919/1935861
* - http://caniuse.com/#feat=css-media-interaction
* - https://www.w3.org/TR/mediaqueries-4/
* - https://developer.mozilla.org/en-US/docs/Web/CSS/@media/hover
*/
.tooltipped-no-touch:hover::before,
.tooltipped-no-touch:hover::after {
visibility: hidden;
opacity: 0;
}
#sidebar .logo-container {
margin-top: 5px;
}
#sidebar button,
#sidebar .chan,
#sidebar .empty,
#windows label,
#windows .header .topic,
#settings .error,
#help .help-item,
#loading,
#context-menu,
#form #input,
.textcomplete-menu,
.messages .msg {
font-size: 15px;
}
#sidebar {
display: flex;
background: var(--body-bg-color);
height: 100%;
position: absolute;
left: -220px;
z-index: 10;
transition: transform 160ms;
transform: translateZ(0);
}
#sidebar-overlay {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.5);
opacity: 0;
2018-03-18 01:08:08 +00:00
visibility: hidden;
transition: opacity 160ms, visibility 160ms;
z-index: 9;
}
#viewport.menu-open #sidebar-overlay {
opacity: 1;
}
#viewport.menu-open #sidebar {
transform: translate3d(220px, 0, 0);
}
#viewport.menu-dragging #sidebar-overlay,
#viewport.menu-dragging #sidebar {
transition: none;
}
#viewport.menu-open #sidebar,
#viewport.menu-dragging #sidebar {
box-shadow: 0 0 25px 0 rgba(0, 0, 0, 0.5);
}
#viewport.menu-open #sidebar-overlay,
#viewport.menu-dragging #sidebar-overlay {
2018-03-18 01:08:08 +00:00
visibility: visible;
}
2014-09-10 21:43:56 +00:00
#viewport .lt,
#viewport .channel .rt {
2018-02-23 21:57:45 +00:00
display: flex;
2014-08-15 13:52:14 +00:00
}
/* On mobile display, channel list button stays at the top */
#viewport .lt {
position: relative;
}
#chat .userlist {
background-color: var(--window-bg-color);
height: 100%;
position: absolute;
right: 0;
transform: translateX(180px);
transition: transform 0.2s;
}
#viewport.userlist-open #chat .userlist {
transform: translateX(0);
2016-06-12 02:16:17 +00:00
}
2018-02-23 21:57:45 +00:00
#chat .header .title {
padding-left: 6px;
}
#chat .toggle-content .thumb {
max-height: 58px;
max-width: 104px;
}
2016-06-12 02:16:17 +00:00
}
@media (max-width: 479px) {
2014-09-10 15:56:19 +00:00
.container {
margin: 0;
}
2018-03-11 21:20:51 +00:00
#sign-in .btn {
width: 100%;
}
#connect .tls {
margin: 20px 0;
}
#windows .input {
margin-bottom: 2px;
2014-09-10 15:56:19 +00:00
}
2014-08-15 13:52:14 +00:00
#chat .messages {
display: block;
padding: 5px 0;
2014-08-15 13:52:14 +00:00
}
2014-08-15 13:52:14 +00:00
#chat .msg {
display: block;
padding: 2px 10px;
2014-08-15 13:52:14 +00:00
}
#chat .condensed .msg {
padding: 2px 0;
}
#chat .time,
2014-08-15 13:52:14 +00:00
#chat .from,
#chat .content {
2014-08-15 13:52:14 +00:00
border: 0;
display: inline;
padding: 0;
}
2016-05-13 10:23:05 +00:00
#chat .from::after {
/* Add a space because mobile view changes to block display without paddings */
content: " ";
white-space: pre;
}
#chat .channel .msg.highlight {
padding-left: 5px;
}
#chat .channel .msg.highlight .time {
padding-left: 0;
}
#chat .condensed-summary .time,
#chat .condensed-summary .from {
display: none;
}
#help .help-item .subject {
display: inline-block;
padding-bottom: 4px;
}
#help .help-item .description {
display: block;
}
2014-08-15 13:52:14 +00:00
}
2014-09-15 17:41:23 +00:00
2016-01-18 17:49:23 +00:00
::-webkit-scrollbar {
width: 8px;
background-color: rgba(0, 0, 0, 0);
2016-01-18 17:49:23 +00:00
}
2016-01-18 17:49:23 +00:00
::-webkit-scrollbar:hover {
background-color: rgba(0, 0, 0, 0.09);
2016-01-18 17:49:23 +00:00
}
2016-01-18 17:49:23 +00:00
::-webkit-scrollbar-thumb:vertical {
background: rgba(0, 0, 0, 0.5);
2016-01-18 17:49:23 +00:00
border-radius: 100px;
}
::-webkit-scrollbar-thumb:vertical:active {
background: rgba(0, 0, 0, 0.6);
}
/* Image viewer and drag-and-drop overlay */
#upload-overlay,
#image-viewer,
#image-viewer .open-btn,
#image-viewer .close-btn {
/* Vertically and horizontally center stuff */
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#upload-overlay,
#image-viewer {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: black;
visibility: hidden;
opacity: 0;
transition: opacity 0.2s, visibility 0.2s;
z-index: 999;
user-select: none;
}
#image-viewer.opened {
visibility: visible;
opacity: 1;
}
#upload-overlay.is-dragover {
visibility: visible;
opacity: 0.3;
}
#image-viewer .close-btn,
#image-viewer .open-btn,
#image-viewer .previous-image-btn,
#image-viewer .next-image-btn {
position: fixed;
top: 0;
width: 2em;
font-size: 36px;
color: white;
opacity: 0.6;
transition: 0.2s opacity;
}
#image-viewer .close-btn {
right: 0;
height: 2em;
z-index: 1002;
}
#image-viewer .close-btn::before {
content: "×";
}
#image-viewer .open-btn {
right: 0;
bottom: 0;
top: auto;
height: 2em;
z-index: 1002;
}
#image-viewer .previous-image-btn,
#image-viewer .next-image-btn {
bottom: 0;
z-index: 1001;
}
#image-viewer .previous-image-btn {
left: 0;
}
#image-viewer .next-image-btn {
right: 0;
}
#image-viewer .close-btn:hover,
#image-viewer .previous-image-btn:hover,
#image-viewer .next-image-btn:hover {
opacity: 1;
}
#image-viewer > img {
cursor: grab;
position: absolute;
transform-origin: 50% 50%;
/* Checkered background for transparent images */
background-position: 0 0, 10px 10px;
background-size: 20px 20px;
background-image:
linear-gradient(45deg, #eee 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 75%, #eee 75%, #eee 100%),
linear-gradient(45deg, #eee 25%, #fff 25%, #fff 75%, #eee 75%, #eee 100%);
}
/* Correctly handle multiple successive whitespace characters.
For example: user has quit ( ===> L O L <=== ) */
#windows .header .topic,
#chat .message .content,
#chat .motd .content,
#chat .notice .content,
#chat .ctcp-message,
#chat .part-reason,
#chat .quit-reason,
#chat .new-topic,
#chat .action .content,
#chat table.channel-list .topic {
white-space: pre-wrap;
}