mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
742 lines
17 KiB
CSS
742 lines
17 KiB
CSS
/* Styles for the Micromodal-based modals */
|
|
:root {
|
|
/* Exit buttons are sometimes Cancel, but sometimes
|
|
other "Nah, forget it" actions. */
|
|
--color-exit-button-text: hsl(0deg 0% 0%);
|
|
--color-exit-button-border: hsl(300deg 2% 11% / 30%);
|
|
--color-exit-button-background: hsl(226deg 1% 42% / 20%);
|
|
--color-exit-button-background-interactive: hsl(226deg 1% 42% / 27%);
|
|
}
|
|
|
|
.modal__overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
background: hsl(0deg 0% 0% / 60%);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
z-index: 105;
|
|
}
|
|
|
|
.modal__container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
background-color: var(--color-background-modal);
|
|
max-width: calc(100% - 32px);
|
|
max-height: 96%;
|
|
width: 37.1428em; /* 520px at 14px em */
|
|
border-radius: 4px;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.modal__header {
|
|
padding: 16px 16px 16px 24px;
|
|
display: grid;
|
|
/* 1.8em is the shortest round value for heading at which none of
|
|
the letters of the english alphabet get cut by overflow:hidden
|
|
at em = 20px
|
|
29px at 16px/1em = 1.8125 */
|
|
grid-template:
|
|
"heading close-button" 1.8em "heading ." auto / minmax(0, 1fr)
|
|
1.8125em;
|
|
grid-column-gap: 4px;
|
|
}
|
|
|
|
.modal__footer {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
align-items: center;
|
|
padding: 20px 24px;
|
|
}
|
|
|
|
.modal__title {
|
|
grid-area: heading;
|
|
margin: 0;
|
|
/* 16 / 14 * 1.375 = 1.5714, from original 1.375rem */
|
|
font-size: 1.5714em;
|
|
font-weight: 600;
|
|
line-height: 1.25;
|
|
overflow: hidden;
|
|
word-wrap: break-word;
|
|
|
|
.channel-privacy-type-icon {
|
|
/* This pushes back on suspect styles
|
|
in app_components.css. A fuller fix
|
|
will require tracking down other
|
|
instances of this class. */
|
|
width: auto;
|
|
padding-right: 0;
|
|
}
|
|
|
|
/* help_link_widget margin for the fa-circle-o. */
|
|
.help_link_widget {
|
|
margin-left: 5px;
|
|
}
|
|
}
|
|
|
|
.modal__title:has(.stream-or-topic-reference) {
|
|
/* Reduce the font weight of headings that
|
|
include stream or topic references (e.g.,
|
|
topic move/rename modals). */
|
|
font-weight: 450;
|
|
|
|
.stream-or-topic-reference {
|
|
/* Make the stream or topic references
|
|
more prominent. */
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
|
|
.user-profile-name-heading {
|
|
max-width: 80%;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
/* This line-height is to increase the vertical clickable areas on the icons. */
|
|
line-height: 1.2727em; /* 28px at 22px font-size at 14px em */
|
|
|
|
.user-profile-name {
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
}
|
|
|
|
.modal__close {
|
|
&::before {
|
|
content: "\2715";
|
|
color: var(--color-modal-close-button);
|
|
}
|
|
background: transparent;
|
|
border: 0;
|
|
|
|
&:hover {
|
|
background: var(--color-background-modal-close-button-hover);
|
|
}
|
|
}
|
|
|
|
.modal__content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 16px at 14px/1em */
|
|
font-size: 1.1429em;
|
|
padding: 2px 24px;
|
|
line-height: 1.5;
|
|
/* Prevent the appearance of a horizontal
|
|
native scrollbar at certain
|
|
info-density/zoom levels. */
|
|
overflow: hidden auto;
|
|
/* Set a max-width, less the 24px of left and right
|
|
padding specified above. */
|
|
max-width: calc(100% - 48px);
|
|
|
|
&.simplebar-scrollable-y + .modal__footer {
|
|
border-top: 1px solid var(--color-border-modal-footer);
|
|
}
|
|
}
|
|
|
|
.modal__button {
|
|
/* We need the backup value for billing related html files where
|
|
this variable is not defined. */
|
|
font-size: var(--base-font-size-px, 14px);
|
|
padding: 8px 16px;
|
|
background-color: hsl(0deg 0% 90%);
|
|
border-radius: 4px;
|
|
border-width: 0;
|
|
cursor: pointer;
|
|
text-transform: none;
|
|
overflow: visible;
|
|
line-height: 1.15;
|
|
margin: 0;
|
|
will-change: transform;
|
|
backface-visibility: hidden;
|
|
transform: translateZ(0);
|
|
transition: transform 0.25s ease-out;
|
|
|
|
&:hover {
|
|
text-decoration: none;
|
|
}
|
|
|
|
&:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
.modal__button:focus,
|
|
.modal__button:hover {
|
|
transform: scale(1.05);
|
|
/* The extremely subtle 1.05 scale can cause
|
|
a gap to appear between the outline and
|
|
button background color; this negative
|
|
offset preserves the scale effect, but also
|
|
covers any tiny gaps owing to subtle scaling. */
|
|
outline-offset: -1px;
|
|
}
|
|
|
|
.dialog_exit_button {
|
|
color: var(--color-exit-button-text);
|
|
background: var(--color-exit-button-background);
|
|
border: 1px solid var(--color-exit-button-border);
|
|
|
|
&:hover {
|
|
background: var(--color-exit-button-background-interactive);
|
|
}
|
|
}
|
|
|
|
.dialog_submit_button {
|
|
margin-left: 12px;
|
|
background-color: hsl(240deg 96% 68%);
|
|
color: hsl(0deg 0% 100%) !important;
|
|
}
|
|
|
|
#user-profile-modal .save-success {
|
|
vertical-align: top;
|
|
background-color: transparent;
|
|
border-radius: 4px;
|
|
margin-right: 10px;
|
|
color: hsl(156deg 30% 50%);
|
|
padding: 0.5rem 1rem;
|
|
line-height: 1.15;
|
|
|
|
&:not(:empty) {
|
|
border: 1px solid hsl(156deg 30% 50%);
|
|
}
|
|
}
|
|
|
|
#read_receipts_error,
|
|
#dialog_error {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
#read_receipts_modal {
|
|
.modal__container {
|
|
width: 25.7142em; /* 360px at 14px em */
|
|
|
|
.modal__content {
|
|
/* When showing read receipts, we use simplebar
|
|
to make the list scrollable. It requires this to
|
|
be flex. */
|
|
display: flex;
|
|
|
|
/* Setting a minimum height prevents the loading indicator
|
|
appearing/disappearing from resizing the modal in the
|
|
common case that one is requesting read receipts for
|
|
direct messages. */
|
|
min-height: 120px;
|
|
/* Setting a maximum height is just for aesthetics; the modal looks
|
|
weird if its aspect ratio gets too stretched. */
|
|
max-height: 480px;
|
|
|
|
/* For the notification bot error, we want to keep the modal clean and small.
|
|
The 16px padding is intended to match the padding at the top of the modal. */
|
|
&.compact {
|
|
min-height: unset;
|
|
padding-bottom: 16px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.modal__header {
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
& hr {
|
|
margin: 10px 0;
|
|
}
|
|
|
|
.modal__content {
|
|
padding: 0 24px 8px;
|
|
}
|
|
|
|
.loading_indicator {
|
|
margin: auto;
|
|
}
|
|
|
|
.read_receipts_list {
|
|
margin-left: 0;
|
|
|
|
& li {
|
|
.read_receipts_user_avatar {
|
|
display: inline-block;
|
|
height: 1.25em; /* 20px at 16px font-size at 14px em */
|
|
width: 1.25em; /* 20px at 16px font-size at 14px em */
|
|
position: relative;
|
|
right: 8px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
margin: 2px 0;
|
|
list-style-type: none;
|
|
overflow-x: hidden;
|
|
padding-left: 10px;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
cursor: pointer;
|
|
line-height: 1.625em; /* 26px at 16px font-size at 14px em */
|
|
|
|
&:hover {
|
|
background-color: hsl(0deg 0% 0% / 5%);
|
|
}
|
|
|
|
&:active,
|
|
&:focus {
|
|
background-color: hsl(0deg 0% 0% / 10%);
|
|
outline: none;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.email_field {
|
|
margin-top: 10px;
|
|
|
|
.email_field_textarea {
|
|
width: 97%;
|
|
resize: vertical;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.border-top {
|
|
border-top: 1px solid hsl(300deg 2% 11% / 30%);
|
|
padding-top: 10px;
|
|
}
|
|
|
|
.email-body {
|
|
margin-left: 20px;
|
|
margin-top: 20px;
|
|
}
|
|
}
|
|
|
|
@keyframes mmfadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes mmfadeOut {
|
|
from {
|
|
opacity: 1;
|
|
}
|
|
|
|
to {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
.micromodal {
|
|
display: none;
|
|
}
|
|
|
|
.micromodal.modal--opening,
|
|
.micromodal.modal--open {
|
|
display: block;
|
|
}
|
|
|
|
.micromodal[aria-hidden="true"] .modal__overlay {
|
|
animation: mmfadeOut 75ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal[aria-hidden="false"] .modal__overlay {
|
|
animation: mmfadeIn 120ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal[aria-hidden="true"] .modal__container {
|
|
animation: mmfadeOut 75ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal[aria-hidden="false"] .modal__container {
|
|
animation: mmfadeIn 120ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal .modal__container,
|
|
.micromodal .modal__overlay {
|
|
will-change: transform;
|
|
}
|
|
|
|
.modal__spinner .loading_indicator_spinner {
|
|
height: 16px;
|
|
|
|
& path {
|
|
fill: hsl(0deg 0% 100%);
|
|
}
|
|
}
|
|
|
|
.modal__spinner {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.time-input-formatted-description {
|
|
font-style: italic;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
#sender_channel_email_address_widget {
|
|
width: 12.875em; /* 206px at 16px/em */
|
|
}
|
|
|
|
#copy_email_address_modal {
|
|
width: 800px;
|
|
|
|
.inline {
|
|
display: inline;
|
|
}
|
|
|
|
.question-which-parts {
|
|
padding-bottom: 10px;
|
|
}
|
|
|
|
.stream-email-header {
|
|
font-size: 1.125em; /* 18px at 16px/em */
|
|
}
|
|
}
|
|
|
|
.modal_select {
|
|
width: var(--modal-input-width);
|
|
padding: 4px 25px 4px 6px;
|
|
color: hsl(0deg 0% 33%);
|
|
border-radius: 4px;
|
|
border: 1px solid hsl(0deg 0% 80%);
|
|
cursor: pointer;
|
|
background-color: hsl(0deg 0% 100%);
|
|
|
|
&:disabled {
|
|
cursor: not-allowed;
|
|
|
|
/* The background-color of select elements inside modal is different than the others in
|
|
settings pages, because the background of the modal is brighter than the setting page. */
|
|
background-color: hsl(0deg 0% 90%);
|
|
|
|
/* This is reset for other browsers to use Chrome's opacity. */
|
|
opacity: 0.7;
|
|
}
|
|
}
|
|
|
|
.modal-field-label {
|
|
margin-bottom: var(--margin-bottom-field-description);
|
|
/* Avoid having the clickable area extend to the full width of the containing element */
|
|
width: fit-content;
|
|
}
|
|
|
|
.modal__body,
|
|
.overlay-content {
|
|
.dropdown-widget-button,
|
|
.dropdown_widget_with_label_wrapper {
|
|
width: var(--modal-input-width);
|
|
}
|
|
}
|
|
|
|
.modal_password_input,
|
|
.modal_url_input,
|
|
.modal_text_input {
|
|
padding: 4px 6px;
|
|
color: hsl(0deg 0% 33%);
|
|
border-radius: 4px;
|
|
border: 1px solid hsl(0deg 0% 80%);
|
|
box-shadow: inset 0 1px 1px hsl(0deg 0% 0% / 7.5%);
|
|
transition:
|
|
border-color linear 0.2s,
|
|
box-shadow linear 0.2s;
|
|
margin-bottom: 10px;
|
|
/* subtract padding (6px each side) and border (1px each side) */
|
|
width: calc(var(--modal-input-width) - 14px);
|
|
|
|
&:focus {
|
|
border-color: hsl(206deg 80% 62% / 80%);
|
|
outline: 0;
|
|
box-shadow:
|
|
inset 0 1px 1px hsl(0deg 0% 0% / 7.5%),
|
|
0 0 8px hsl(206deg 80% 62% / 60%);
|
|
}
|
|
}
|
|
|
|
#add-realm-domain-widget {
|
|
.modal_text_input {
|
|
width: 14.7143em; /* 206px at 14px em */
|
|
}
|
|
}
|
|
|
|
.edit_profile_field_choices_container,
|
|
#profile_field_choices {
|
|
.modal_text_input {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.choice-row {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
}
|
|
|
|
.choice-row,
|
|
.option-row {
|
|
.icon-button {
|
|
font-size: 1.1em;
|
|
}
|
|
}
|
|
|
|
#create_bot_short_name {
|
|
/* A shorter dropdown width (~200px at 14px em)
|
|
to ensure the email all fits on one line. */
|
|
width: 14em;
|
|
}
|
|
|
|
#add-poll-modal,
|
|
#add-todo-modal {
|
|
/* this height allows 3-4 option rows
|
|
to fit in without need for scrolling */
|
|
height: 32.1428em; /* 450px / 14px em */
|
|
overflow: hidden;
|
|
|
|
.modal__content {
|
|
flex-grow: 1;
|
|
|
|
.simplebar-content {
|
|
box-sizing: border-box;
|
|
height: 100%;
|
|
}
|
|
}
|
|
|
|
#add-poll-form,
|
|
#add-todo-form {
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
height: 100%;
|
|
|
|
.poll-label,
|
|
.todo-label {
|
|
font-weight: bold;
|
|
margin: 5px 0;
|
|
}
|
|
|
|
.poll-question-input-container,
|
|
.todo-title-input-container {
|
|
display: flex;
|
|
margin-bottom: 10px;
|
|
|
|
#poll-question-input,
|
|
#todo-title-input {
|
|
flex-grow: 1;
|
|
}
|
|
}
|
|
|
|
.poll-options-list,
|
|
.todo-options-list {
|
|
margin: 0;
|
|
height: 0;
|
|
overflow: auto;
|
|
flex-grow: 1;
|
|
|
|
.option-row {
|
|
list-style-type: none;
|
|
cursor: move;
|
|
margin-top: 10px;
|
|
padding: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
|
|
.drag-icon {
|
|
color: hsl(0deg 0% 75%);
|
|
}
|
|
|
|
.poll-option-input {
|
|
/* Overwrite .modal_text_input margin to keep vertical centering. */
|
|
margin-bottom: 0;
|
|
flex-grow: 1;
|
|
}
|
|
|
|
.todo-input {
|
|
flex: 1 1 auto;
|
|
margin-bottom: 0;
|
|
max-width: 30%;
|
|
}
|
|
|
|
.todo-description-container {
|
|
flex: 1 1 auto;
|
|
display: flex;
|
|
min-width: 0;
|
|
|
|
.todo-description-input {
|
|
flex-grow: 1;
|
|
margin-bottom: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.option-row:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.option-row:last-child {
|
|
cursor: default;
|
|
|
|
.delete-option {
|
|
visibility: hidden;
|
|
}
|
|
|
|
.drag-icon {
|
|
visibility: hidden;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (max-width: $sm_min) {
|
|
.option-row {
|
|
.todo-input {
|
|
width: 100%;
|
|
min-width: 90px;
|
|
}
|
|
|
|
.todo-description-container {
|
|
.todo-description-input {
|
|
width: 100%;
|
|
min-width: 90px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#introduce-zulip-view-modal {
|
|
i {
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.keyboard-button {
|
|
color: var(--color-hotkey-hint);
|
|
font-size: 0.75em; /* 12px at 16px/em */
|
|
font-weight: 500;
|
|
padding: 0.125em 0.25em; /* 2px 4px at 16px/em */
|
|
border-radius: 3px;
|
|
border: 1px solid var(--color-hotkey-hint);
|
|
}
|
|
}
|
|
|
|
#generate-integration-url-modal {
|
|
#integrations-event-container {
|
|
.integration-all-events-buttons {
|
|
display: flex;
|
|
gap: 10px;
|
|
margin: 5px 0 10px;
|
|
}
|
|
|
|
#integrations-event-options {
|
|
.integration-event-wrapper {
|
|
margin: 5px 0;
|
|
}
|
|
|
|
.integration-event-name {
|
|
word-break: break-all;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#invite_users_option_tabs_container {
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
#send_later_options {
|
|
.send_later_list {
|
|
margin: 0;
|
|
list-style: none;
|
|
|
|
.send_later_option {
|
|
display: flex;
|
|
padding: 3px 15px;
|
|
|
|
&:focus,
|
|
&:hover {
|
|
text-decoration: none;
|
|
background-color: hsl(0deg 0% 0% / 20%);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.dialog-widget-footer-minor-text {
|
|
font-size: smaller;
|
|
font-style: italic;
|
|
margin-right: auto;
|
|
}
|
|
|
|
#topic-summary-modal {
|
|
width: 45em;
|
|
}
|
|
|
|
#navigation-tour-video-modal {
|
|
width: 97vw;
|
|
max-width: 1024px;
|
|
|
|
.modal__content {
|
|
overflow: hidden;
|
|
}
|
|
|
|
#navigation-tour-video-wrapper {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
&::after {
|
|
content: "";
|
|
position: absolute;
|
|
background-image: url("../images/play_button.svg");
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
background-color: transparent;
|
|
width: 20%;
|
|
height: 20%;
|
|
pointer-events: none;
|
|
}
|
|
|
|
&.hide-play-button::after {
|
|
content: none;
|
|
background-image: none;
|
|
}
|
|
}
|
|
|
|
#navigation-tour-video {
|
|
width: 100%;
|
|
aspect-ratio: 16 / 9;
|
|
cursor: pointer;
|
|
border: 1px solid hsl(0deg 0% 50%);
|
|
|
|
&.dimmed-background {
|
|
opacity: 0.4;
|
|
}
|
|
}
|
|
|
|
#navigation-tour-video-ended-button-wrapper {
|
|
position: absolute;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
width: 100%;
|
|
visibility: hidden;
|
|
|
|
#navigation-tour-video-ended-button {
|
|
color: hsl(0deg 0% 100%) !important;
|
|
cursor: pointer;
|
|
font-size: 200%;
|
|
padding: 1% 5%;
|
|
border-radius: 8px;
|
|
border: 1px solid hsl(0deg 0% 100%);
|
|
transition: transform 0.25s ease-out;
|
|
|
|
&:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
}
|
|
}
|
|
}
|