/* The standard layout defined in the server includes a fixed header with a
 * sticky sidebar. This causes the scroll bar for the main area to appear to the
 * right of the sidebar, which looks confusing for the chat. Thus that layout is
 * overridden with a full set of flex containers to cascade parent element
 * height to the main view to limit the vertical scroll bar only to it (same
 * thing done for the sidebar and the chat view). */
#body-user,
#body-public {
	display: flex;
	flex-direction: column;
}

#body-user #header,
#body-public #header {
	/* Override fixed position from server to include it in the flex layout */
	position: static;
	flex-shrink: 0;
}

#content {
	display: flex;
	flex-direction: row;
	overflow: hidden;

	flex-grow: 1;

	/* Override "min-height: 100%" and "padding-top: 50px" set in server, as the
	 * header is part of the flex layout and thus the whole body is not
	 * available for the content. */
	min-height: 0;
	padding-top: 0;

	/* Does not change anything in normal mode, but ensures that the element
	 * will stretch to the full width in full screen mode. */
	width: 100%;

	/* Override margin used in server, as the header is part of the flex layout
	 * and thus the content does not need to be pushed down. */
	margin-top: 0;
}

#app-content {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	margin-right: -10px;
	flex-grow: 1;
}

#app-content-wrapper {
	display: flex;
	flex-direction: column;
	overflow: hidden;

	flex-grow: 1;

	@media (max-width: $breakpoint-mobile) {
		/* In narrow screens force the app content width to the full viewport
		 * width to prevent the app content from being compressed when the
		 * sidebar is shown. */
		width: 100vw;
	}
}

.contactsmenu-popover li > a > img {
	/* The app uses border-box sizing, so the size of the icon is the
	 * width/height plus the padding set by default in the server
	 * (16px + 11px*2). */
	width: 38px;
	height: 38px;
}



/**
 * Confirm icon inside input field.
 *
 * The input and the icon should be direct children of a wrapper with a relative
 * position. The input is expected to be as wide as its wrapper.
 *
 * It is assumed that the icon will have the standard width for buttons in
 * inputs of 34px. However, further adjustments may be needed for the input and
 * the padding depending on the context where they are used.
 *
 * The confirm icon can have a sibling loading icon to switch to (by hiding one
 * icon and showing the other) while the operation is in progress.
 */
input[type="text"],
input[type="password"] {
	padding-right: 34px;

	/* When the input is focused it is expected that pressing enter will confirm
	 * the input just like clicking on the icon would do. To hint this behaviour
	 * the opacity of the confirm icon is slightly increased in this case.
	 */
	&:focus + .icon-confirm:not(:disabled) {
		opacity: .6;
	}

	& + .icon-confirm {
		position: absolute;
		top: 0;
		/* Compensate for right margin of inputs set in the server. */
		right: 3px;

		/* Border and background color are removed to show only the icon inside
		* the input. */
		border: none;
		background-color: transparent;

		opacity: .3;

		&:hover:not(:disabled),
		&:focus:not(:disabled),
		&:active:not(:disabled) {
			opacity: 1;
		}

		+ .icon-loading-small {
			/* Mimic size set in server for confirm button. */
			width: 34px;
			height: 34px;
			padding: 7px 6px;
			margin-top: 3px;
			margin-bottom: 3px;

			position: absolute;
			top: 0;
			right: 3px;
		}
	}
}

.menuitem input[type="text"],
.menuitem input[type="password"] {
	& + .icon-confirm + .icon-loading-small {
		/* Mimic size set in server for inputs in menu items. */
		min-width: 44px;
		max-height: 40px;
		margin: 2px 0;

		/* Override padding set in server for icons in menu items. */
		padding: 7px 6px;
	}
}



/**
 * Sidebar styles
 */

#select2-drop {
	margin-top: -44px !important;
}
#oca-spreedme-add-room .select2-container {
	border-bottom: 1px solid var(--color-border);

	&.select2-container-active {
		border-bottom-color: var(--color-border-dark);
		border-right: 1px solid var(--color-border-dark);

		.select2-choice,
		.select2-default {
			color: var(--color-text-light) !important;
		}
	}
}
.oca-spreedme-add-person .select2-container {
	border: 1px solid var(--color-border);
	border-radius: var(--border-radius);

	&.select2-container-active {
		border-color: var(--color-border-dark);

		.select2-choice,
		.select2-default {
			color: var(--color-text-light) !important;
		}
	}
}
#oca-spreedme-add-room .select2-container,
.oca-spreedme-add-person .select2-container {
	width: 100%;
	margin: 0 !important;
	padding: 9px;
}
#oca-spreedme-add-room .select2-container .select2-choice,
.oca-spreedme-add-person .select2-container .select2-choice {
	border: none;
	color: var(--color-text-maxcontrast) !important;
}
#oca-spreedme-add-room .select2-arrow,
.oca-spreedme-add-person .select2-arrow {
	display: none !important;
}
#select2-drop .select2-search input {
	padding: 13px 12px 13px 43px !important;
	width: 100%;
	box-sizing: border-box;
	margin: 0;
	border: none;
	background-image: none !important;
}
#select2-drop .select2-results .select2-result {
	padding: 0;
}

#app-navigation .app-navigation-entry-link > .avatar {
	position: absolute;
	left: 6px;
	top: 6px;
}

#app-navigation li > a:first-child img {
	width: 32px !important;
	height: 32px !important;
	margin: 0 !important;
}

.participantWithList .contactsmenu-popover {
	margin-left: 7px;
}

.select2-result .avatar.icon,
.atwho-view-ul .avatar.icon,
#app-navigation .app-navigation-entry-link .avatar.icon {
	border-radius: 50%;
	width: 32px;
	height: 32px;
	background-color: var(--color-background-darker);
}

.icon-file-white {
	@include icon-color('text', 'filetypes', $color-white, 1, true);
}

.icon-changelog {
	background-image: url('../img/changelog.svg');
}

#app-navigation .favorite-mark {
	position: absolute;
	/* 44px is the padding of the main entry link, and 16px the size (size, not
	 * background size) of the icon, both defined in the server. */
	left: calc(44px - 16px);
	line-height: 100%;

	.icon-favorite {
		display: inline-block;
		vertical-align: middle;

		/* Show favorite icon in yellow instead of default black. */
		@include icon-color('star-dark', 'actions', 'FC0', 1, true);
	}
}

#app-navigation .app-navigation-entry-utils-counter {
	overflow: hidden;
	text-align: right;
	font-size: 9pt;
	line-height: 44px;
	padding: 0 12px; /* Same padding as all li > a in the app-navigation */

	span {
		padding: 2px 5px;
		border-radius: 10px;
		font-weight: bold;
		background-color: var(--color-background-dark);
	}

	&.highlighted {
		padding-right: 0;
		text-align: center;
		width: 22px !important;

		span {
			background-color: var(--color-primary);
			color: var(--color-primary-text);
		}
	}
}

.hidden-important {
	display: none !important;
}

/**
 * Main view chat styles
 */
#app-content-wrapper {
	height: 100%;
}

#app-content-wrapper #chatView {
	width: 100%;
	height: 100%;

	display: flex;
	flex-direction: column;
}

/* The lateral padding is set for each child instead of for the chat view as a
   whole to prevent showing the scroll bar padded from the border of the chat
   view (which could be fixed by using a negative margin and a positive padding
   in the list of messages) and to ensure that the contacts menu is not clipped
   due to overflowing the chat view on its left (much harder to fix). */
#app-content-wrapper #chatView .newCommentRow {
	padding-left: 44px;
	padding-right: 44px;
}

#app-content-wrapper #chatView .comments {
	overflow-y: auto;

	/* Needed for proper calculation of comment positions in the scrolling
	   container (as otherwise the comment position is calculated with respect
	   to the closest ancestor with a relative position) */
	position: relative;

	padding-left: 44px;
	padding-right: 44px;
}


#app-content-wrapper #chatView .comments .wrapper-background,
#app-content-wrapper #chatView .comments .wrapper {
	/* Padding is not respected in the comment wrapper due to its absolute
	 * positioning, so it must be set through its position. */
	left: 44px;
	right: 44px;
}

/* Hide all siblings of the chat view when shown as the main view */
#app-content-wrapper #chatView ~ *:not(#video-fullscreen):not([id^=tooltip]) {
	display: none !important;
}

#emptycontent {
	position: absolute;
	z-index: 40;
}

#emptycontent-icon {
	width: 128px;
	margin: 0 auto;
	padding-bottom: 20px;
}


#app-content ~ #app-sidebar-wrapper .icon-menu-people,
#app-content .icon-fullscreen {
	opacity: .5;

	&:hover,
	&:focus {
		opacity: 1;
	}
}

#app-content.incall .force-icon-white-in-call,
#app-content.screensharing .force-icon-white-in-call,
#app-content.incall ~ #app-sidebar-wrapper .force-icon-white-in-call,
#app-content.screensharing ~ #app-sidebar-wrapper .force-icon-white-in-call {
	/*
	 * Force the white icon, independent from white/dark mode selection,
	 * because those icons are presented on our black calling-screen.
	 */
	&.icon-menu-people {
		background-image: url(icon-color-path('menu-people', 'spreed', 'fff', 1, false));
	}
	&.icon-fullscreen {
		background-image: url(icon-color-path('fullscreen', 'actions', 'fff', 1, true));
	}

	/* ".force-icon-white-in-call" can be combined with ".icon-shadow" just like
	 * ".icon-white". */
	&.icon-shadow {
		filter: drop-shadow(1px 1px 4px var(--color-box-shadow));
	}
}

/* Use white icon for the app navigation toggle when in a call; this can not be
 * integrated above because the navigation toggle is created by the core and
 * does not include the Talk-specific "force-icon-white-in-call" CSS class. */
#app-content.incall .icon-menu,
#app-content.screensharing .icon-menu {
	background-image: url(icon-color-path('menu', 'actions', 'fff', 1, true));
	filter: drop-shadow(1px 1px 4px var(--color-box-shadow));
}

#video-fullscreen {
	position: absolute;
	top: 44px;
	right: 0;
	z-index: 90;
}

#video-fullscreen,
#app-sidebar-trigger {
	background-color: transparent;
	border: none;
	margin: 0 10px 0 0;
	width: 44px;
	height: 44px;
}



/* Fullscreen handling */

/* No switching between rooms in fullscreen, focus on the current call. */
#content:-webkit-full-screen #app-navigation-toggle {
	display: none !important;
}
#content:-moz-full-screen #app-navigation-toggle {
	display: none !important;
}
#content:-ms-fullscreen #app-navigation-toggle {
	display: none !important;
}
#content:fullscreen #app-navigation-toggle {
	display: none !important;
}

#content:-webkit-full-screen #app-navigation {
	display: none;
}
#content:-moz-full-screen #app-navigation {
	display: none;
}
#content:-ms-fullscreen #app-navigation {
	display: none;
}
#content:fullscreen #app-navigation {
	display: none;
}

#content:-webkit-full-screen #app-content {
	margin-left: 0;
}
#content:-moz-full-screen #app-content {
	margin-left: 0;
}
#content:-ms-fullscreen #app-content {
	margin-left: 0 !important;
}
#content:fullscreen #app-content {
	margin-left: 0;
}

#content:-ms-fullscreen #app-sidebar {
	/* The sidebar height is unset in Talk to override the "100vh-50px" set in
	 * server and force it to get the full height in fullscreen mode. However,
	 * IE11 does not support "unset", so the height needs to be explicitly set
	 * to 100%. */
	height: 100%;
	/* Remove the space added when IE is used to not overlap with the header. */
	top: 0;
}

/* Set the background of the content to the same colour as the app content and
 * the app sidebar to prevent a black background from appearing when the sidebar
 * is shown or hidden.
 * During a call the background of the app content is black, but as the
 * background of the content has the same colour of the sidebar and is a
 * placeholder on its position it looks acceptable. */
#content:-webkit-full-screen {
	background-color: var(--color-main-background);
}
#content:-moz-full-screen {
	background-color: var(--color-main-background);
}
#content:-ms-fullscreen {
	background-color: var(--color-main-background);
}
#content:fullscreen {
	background-color: var(--color-main-background);
}


.localmediaerror h2 {
	color: red;
	font-weight: bold;
}

.localmediaerror .emptycontent-additional {
	display: none;
}

#app-navigation .utils {
	padding: 0;
}
#app-navigation .utils .action {
	display: inline-block;
	padding: 22px;
	cursor: pointer;
	opacity: .3;
}

#app-navigation .app-navigation-entry-menu li {
	width: auto !important;
	float: inherit;
}

#app-navigation .app-navigation-entry-menu li.active {
	box-shadow: inset 4px 0 var(--color-primary);
	margin-left: -1px;
	padding-left: 1px;
}

.room-moderation-button .menu li div.separator,
#app-navigation .app-navigation-entry-menu li div.separator {
	border-bottom: 1px solid var(--color-border-dark);
	margin: 0 10px;
	width: 100%;
}


#app-navigation .app-navigation-entry-menu li button {
	float: inherit !important;
	margin: 0;
	padding: 0;
	width: 100% !important;
	min-height: 44px;
}

#app-navigation .app-navigation-entry-menu input {
	margin-left: 5px !important;
	margin-top: -5px;
	min-width: 150px;
	padding-right: 26px;
	text-overflow: ellipsis;
	overflow: hidden;
}

#app-navigation .app-navigation-entry-menu-caption   {
	font-weight: bold;
	line-height: 44px;
	white-space: nowrap;
	text-overflow: ellipsis;
	padding: 0 36px 0 36px;
	// !important to overwrite specific hover and focus
	opacity: .7;
	box-shadow: none !important;
	user-select: none;
	pointer-events: none;
}

#app-navigation .app-navigation-entry-menu input.first-option {
	margin-top: 5px;
}

#app-navigation .app-navigation-entry-menu li span {
	display: inline-block;
	height: 36px;
	line-height: 36px;
	padding-right: 10px;
	font-weight: 400;
	float: left;
}

#app-navigation .app-navigation-entry-menu li span[class^='icon-'],
#app-navigation .app-navigation-entry-menu li span[class*=' icon-'] {
	padding: 16px;
	box-sizing: border-box;
	width: 36px;
}

#app-navigation .app-navigation-entry-utils-menu-button {
	display: inline-block;
}

/* The sidebar wrapper contains the trigger for the sidebar and the sidebar
 * itself placed in columns. To prevent the trigger from taking up space for the
 * app content the trigger width is removed from the wrapper by pushing its left
 * margin. */
#app-sidebar-wrapper {
	display: flex;
	margin-left: -44px;
}

#app-sidebar-trigger {
	/* Higher than the z-index of the app-content */
	z-index: 1050;
	cursor: pointer;
}

/* Override server definitions to ensure that the sidebar is vertically
 * stretched, as the header is part of the flex layout and its height does not
 * need to be removed from the sidebar (specially in fullscreen mode where there
 * is no header). */
#app-sidebar {
	position: static;
	height: unset;
	top: 0;
}

/* The server sets the position of the sidebar as fixed when IE is used, so it
 * needs to be pulled down to not overlap with the header. */
.ie #app-sidebar {
	top: $header-height;
}

@include icon-black-white('menu-people', 'spreed', 1);
@include icon-black-white('no-password', 'spreed', 1);
@include icon-black-white('share-window', 'spreed', 1);
@include icon-black-white('lobby', 'spreed', 1);

#app-sidebar .close {
	position: absolute;
	top: 0;
	right: 0;
	padding: 22px;
	opacity: .3;
	/* Higher index than the trigger to hide it when the sidebar is open */
	z-index: 20;
}

#app-sidebar .close:hover,
#app-sidebar .close:focus {
	opacity: 1;
}

/* make blue header bar transparent in shared room */
#body-public #app-content:not(.participants-1) #header.spreed-public {
	background: transparent;
}

/* As the header is hidden (except for the logo), move the fullscreen button and
 * sidebar to the top during calls */
#body-public #app-content:not(.participants-1) #app-sidebar,
#body-public #app-content:not(.participants-1) #app-sidebar-trigger,
#body-public #app-content:not(.participants-1) #video-fullscreen {
	top: 0;
	z-index: 3000;
}
#body-public #app-content:not(.participants-1) #video-fullscreen {
	top: 44px;
}

/**
 * Right sidebar
 */

#app-sidebar .detailCallInfoContainer {
	padding: 15px;
	clear: both;
}

.tabHeaders {
	display: inline-block;
}

/* START: move padding fixes and icons-for-tabs capability into core */
.tabHeaders {
	display: flex;
	margin-top: 0;
	margin-bottom: 10px;
	min-height: 44px;

	/* Prevent the chat view from vertically compressing the tab headers */
	flex-shrink: 0;
}

.tabHeaders .tabHeader {
	flex-basis: 50%;
	flex-grow: 0;
	padding: 12px;
	text-align: center;
	border-bottom: 1px solid var(--color-border);
	margin-bottom: 0;

	.icon, a {
		color: var(--color-main-text);
		opacity: .5;
	}
}

.tabHeaders .tabHeader.selected,
.tabHeaders .tabHeader:hover,
.tabHeaders .tabHeader:focus {
	.icon, a {
		opacity: 1;
	}
}
/* END: move padding fixes and icons-for-tabs capability into core */

/* In Talk clicking on the selected tab header has no effect, so the pointer
 * cursor should not be used. */
.tabHeaders .tabHeader.selected,
.tabHeaders .tabHeader.selected .icon,
.tabHeaders .tabHeader.selected a {
	cursor: default;
}

#app-sidebar.hidden {
	display: none !important;
}

.participantWithList .participant-moderator-indicator {
	color: var(--color-text-maxcontrast);
	font-weight: 300;
	padding-left: 5px;
}

.participantWithList .icon {
	width: 16px;
	display: inline-block;
	opacity: .4;
	margin-left: 5px;
	margin-bottom: -4px;

	&.hidden {
		display: none;
	}
}

.participantWithList .participant-offline {
	& > span {
		color: var(--color-text-maxcontrast);
	}
	.avatar {
		opacity: .4;
	}
}

.participantWithList > li {
	position: relative;
	width: 100%;
	box-sizing: border-box;
}

.participantWithList > li > span {
	display: block;
	width: 100%;
	line-height: 44px;
	min-height: 44px;
	overflow: hidden;
	box-sizing: border-box;
	white-space: nowrap;
	text-overflow: ellipsis;
	padding-left: 44px;
	background-size: 16px 16px;
	background: no-repeat 14px center;
}

.participantWithList > li > span > .avatar-wrapper {
	position: absolute;
	top: 6px;
	left: 6px;

	&:focus,
	&:active {
		border: 1px solid var(--color-border-dark);
		border-radius: 50%;

		/* Separate the border slightly from the avatar to make it more
		 * noticeable. */
		padding: 3px;

		/* Compensate position for the border and the increased size. */
		top: 2px;
		left: 2px;
	}
}

body:not(#body-public) .participantWithList > li > span:not(.currentUser):not(.guestUser) {
	.avatar,
	.avatar img {
		cursor: pointer;
	}
}



/**
 * App navigation utils, buttons and counters for drop down menu
 */
.participantWithList .participant-entry-utils {
	position: absolute;
	top: 0;
	right: 0;
	z-index: 105;
}

.participantWithList .active > .participant-entry-utils li {
	display: inline-block;
}

.participantWithList .participant-entry-utils li {
	width: 44px;
	height: 44px;
}

.participantWithList .participant-entry-utils button,
.participantWithList .participant-entry-utils button + .icon-loading-small {
	height: 100%;
	width: 100%;
	margin: 0;
	box-shadow: none;
}

.participantWithList .participant-entry-utils-menu-button button {
	border: 0;
	opacity: .5;
	background-color: transparent;
}

.participantWithList .participant-entry-utils-menu-button button:hover,
.participantWithList .participant-entry-utils-menu-button button:focus {
	opacity: 1;
}

/**
 * Sidebar details view
 */
.detailCallInfoContainer,
.authorRow {
	.editable-text-label {
		.label-wrapper {
			display: flex;
			align-items: center;
			.edit-button .icon {
				background-color: transparent;
				border: none;
				padding: 13px 22px;
				margin: 0;

				opacity: .3;

				&:hover,
				&:focus,
				&:active {
					opacity: 1;
				}
			}
		}
		.input-wrapper {
			position: relative;

			.icon-confirm {
				/* Needed to override an important rule set in the
				 * server. */
				background-color: transparent !important;
			}
		}
		.label {
			margin-left: 5px;
		}
	}

	.room-name-container {
		display: flex;

		/* Prevent the room name from overlapping the button to close the
		 * sidebar. */
		margin-right: 29px;

		a {
			opacity: .6;

			&:hover,
			&:focus,
			&:active {
				opacity: 1;
			}

			/* The container height is 42px (line height of 30px and bottom
			 * margin of 12px, both defined for h2 in the server), so clear the
			 * extra height of the link below the icon; this limits the
			 * clickable area to 44x44px, as otherwise it was too near the call
			 * button. */
			margin-bottom: 5px;

			.icon {
				display: block;

				width: 44px;
				height: 44px;

				background-size: 24px;

				/* Pull up the icon slightly to align it vertically with the
				 * label, which has a line height of 30px (defined in the
				 * server). */
				margin-top: -7px;
			}
		}
	}

	.room-name {
		display: block;

		flex-grow: 1;

		/* Limit the room name to the container width and prevent it from
		 * wrapping the full label when using a flex display; this is needed for
		 * the edit button and the ellipsis in the name to work as expected. */
		overflow: hidden;

		.label-wrapper {
			.label {
				white-space: nowrap;
				text-overflow: ellipsis;
				overflow: hidden;
			}

			.edit-button {
				/* Use the same bottom margin as h2 (defined in the server) to
				 * align the button vertically with the label. */
				margin-bottom: 12px;
			}
		}

		.input-wrapper {
			position: relative;

			.username {
				width: 100%;
				margin: 4px 0 4px 0 !important;
				font-size: 15px;
				font-weight: 300;
				text-overflow: ellipsis;
			}

			input[type="text"] {
				padding-right: 44px;
			}

			.icon-confirm,
			.icon-loading-small {
				top: 4px;
				right: 0;

				padding: 12px 21px;
				margin: 0;
			}
		}
	}

	.guest-name p {
		display: inline-block;
		padding: 9px 0;
	}

	.call-controls-container {
		display: flex;
		align-items: center;

		.call-button {
			flex-grow: 0;
			flex-basis: 50%;

			.join-call,
			.leave-call {
				width: 100%;
				padding: 12px;
			}

			.icon-loading-small {
				/* Prevent the text from being moved when the icon is shown. */
				position: absolute;

				margin-left: 5px;
				margin-top: 1px;

				/* Unset the background image set by the server for loading
				 * icons inside buttons, as in this case the pure CSS icon can
				 * be used instead of the image. */
				background-image: unset;

				&.hidden {
					display: none;
				}
			}
		}
	}

	.room-moderation-button {
		/* Needed for proper positioning of the menu. */
		position: relative;

		/* Position the button to the right end of its flex parent. */
		margin-left: auto;
	}

	.clipboard-button button {
		display: flex;
		align-items: center;

		> span {
			cursor: pointer;

			/* Override reduced opacity set for button icons in server, as the
			* button is already dimmed. */
			opacity: 1;
		}

		/* Override appearance set for button text in server, as this button has
		 * no background. */
		padding: 0;

		> span {
			color: var(--color-main-text);
			font-weight: normal;
		}
	}

	.clipboard-button button,
	.room-moderation-button .button {
		background-color: transparent;
		border: none;
		margin: 0;
		opacity: .5;

		&:hover,
		&:focus,
		&:active {
			opacity: 1;
		}
	}

	.clipboard-button .icon,
	.room-moderation-button .button {
		width: 44px;
		height: 44px;
	}

	.room-moderation-button .menu {
		/* Values copied from apps.scss in server. */
		$popoveritem-height: 44px;
		$popovericon-size: 16px;
		$outter-margin: ($popoveritem-height - $popovericon-size) / 2;

		/* The server sets a top/bottom margin to forms and inputs of the
		 * first/last item in a menu, but that misaligns the left icon; this
		 * sets the top/bottom margin to the whole item instead of only to the
		 * forms or inputs. */
		li:first-of-type {
			> .menuitem.password-option {

				margin-top: $outter-margin - 2px; // minus the input margin

				> form, > input {
					margin-top: 0;
				}
			}
		}
		li:last-of-type {
			> .menuitem.password-option {

				margin-bottom: $outter-margin - 2px; // minus the input margin

				> form, > input {
					margin-bottom: 0;
				}
			}
		}

		li {
			> .separator {

				margin-top: $outter-margin - 2px; // minus the input margin
			}
		}

		.menuitem.caption,
		.menuitem.caption > span {
			/* Override rule for menu items from server, as in this case the
			 * caption is not clickable. */
			cursor: default;
		}

		.menuitem.caption {
			font-weight: bold;

			&:hover,
			&:focus,
			&:active {
				opacity: 0.7 !important;
			}
		}

		.menuitem.password-option,
		.menuitem.lobby-timer-option {
			/* Override rule for menu items from server, as in this case
			 * only the button in the password field is clickable, so the
			 * pointer cursor should not be used for the whole item. */
			cursor: default;

			form {
				position: relative;

				.icon-confirm,
				.icon-loading-small {
					/* Inputs in menu items do not have a right margin, so
					 * it does not need to be compensated. */
					right: 0;
				}

				.icon-confirm {
					/* Needed to override an important rule set in the
					 * server. */
					background-color: transparent !important;
				}
			}
		}
	}

	/* The specific locator is needed to have higher priority than other
	 * important rules set in the server. */
	input.checkbox + label.link-checkbox-label,
	input.radio + label {
		/* If ".icon-loading-small" is set hide the checkbox and show a
		 * loading icon instead. */
		&.icon-loading-small:before {
			background-image: none !important;
			background-color: transparent !important;
			border-color: transparent !important;
		}
		&.icon-loading-small:after {
			top: 22px;
			left: 21px;
		}
	}
}

/**
 * Cascade parent element height to the chat view in the sidebar to limit the
 * vertical scroll bar only to the list of messages. Otherwise, the vertical
 * scroll bar would be shown for the whole sidebar and everything would be
 * moved when scrolling to see overflown messages.
 *
 * The list of messages should stretch to fill the available space at the bottom
 * of the right sidebar, so the height is cascaded using flex boxes.
 *
 * It is horrible, I know (but better than using JavaScript ;-) ). Please
 * improve it if you know how :-)
 */
#app-sidebar {
	display: flex;
	flex-direction: column;
}

#app-sidebar .tabs {
	display: flex;
	flex-direction: column;
	overflow: hidden;

	flex-grow: 1;
}

#app-sidebar .tabsContainer {
	display: flex;
	flex-direction: column;
	overflow: hidden;

	flex-grow: 1;
}

#app-sidebar .tab {
	display: flex;
	flex-direction: column;
	overflow: hidden;

	flex-grow: 1;
}

#app-sidebar #chatView {
	display: flex;
	flex-direction: column;
	overflow: hidden;

	flex-grow: 1;
}

#app-sidebar .comments {
	overflow-y: auto;

	/* Needed for proper calculation of comment positions in the scrolling
	   container (as otherwise the comment position is calculated with respect
	   to the closest ancestor with a relative position) */
	position: relative;
}

/**
 * Place the scroll bar of the message list on the right edge of the sidebar,
 * but keeping the padding of the tab view.
 *
 * The padding must be set on the left too to ensure that the contacts menu
 * shown when clicking on an author name does not overflow the tab (as it would
 * be hidden).
 *
 * The bottom padding is removed to extend the chat view to the bottom edge of
 * the sidebar.
 */
#app-sidebar .tab-chat {
	padding-left: 0;
	padding-right: 0;
	padding-bottom: 0;
}

#app-sidebar #chatView .newCommentRow,
#app-sidebar #chatView .comments {
	padding-left: 15px;
	padding-right: 15px;
}

#app-sidebar #chatView .comments .wrapper-background,
#app-sidebar #chatView .comments .wrapper {
	/* Padding is not respected in the comment wrapper due to its absolute
	 * positioning, so it must be set through its position. */
	left: 15px;
	right: 15px;
}

#app-sidebar #chatView .newCommentForm.with-add-button {
	/* Make room to show the "Add" button if needed when chat is shown in the
	 * sidebar. */
	margin-right: 44px;
}

/**
 * Limiting the scroll bar in the sidebar to the list of chat messages causes
 * the scroll bar to be removed from the whole sidebar in other tabs too.
 * Therefore, the scroll bars must be explicitly enabled in the other tab
 * contents that need them.
 */
#app-sidebar #participantsTabView {
	display: flex;
	flex-direction: column;
	overflow: hidden;
}

#app-sidebar .participantWithList {
	overflow-y: auto;
	padding-top: 8px;
}

#app-sidebar .participantWithList .participant:last-child {
	/* Add room for the popovermenu on last user */
	padding-bottom: 94px;
}

/**
 * Place the scroll bar of the participants list on the right edge of the
 * sidebar, but keeping the padding of the tab view.
 *
 * The bottom padding is removed to extend the participant view to the bottom
 * edge of the sidebar.
 */
#app-sidebar .tab-participants {
	padding-right: 0;
	padding-bottom: 0;
}

/* Form needs margin, participant list needs padding
 * So the form has margin from the right side, but the scroll bar of the
 * participant list is directly on the right.
 */
#app-sidebar #participantsTabView form {
	margin-right: 15px;
}
#app-sidebar #participantsTabView .participantWithList {
	padding-right: 15px;
}

/**
 * Add a little margin to the last participant so the list is nicely framed with
 * the sides when fully scrolled to the bottom.
 */
#app-sidebar #participantsTabView .participant:last-child {
	margin-bottom: 15px;
}

/**
 * Dark-Theme fixes
 */
// We always want to use the white icons, this is why we don't use var(--color-white) here.
.avatar.icon {
	&.icon-public {
		background-image: url(icon-color-path('public', 'actions', 'fff', 1, true));
	}
	&.icon-contacts {
		background-image: url(icon-color-path('contacts', 'places', 'fff', 1, true));
	}
	&.icon-password {
		background-image: url(icon-color-path('password', 'actions', 'fff', 1, true));
	}
	&.icon-file {
		background-image: url(icon-color-path('text', 'filetypes', 'fff', 1, true));
	}
	&.icon-mail {
		background-image: url(icon-color-path('mail', 'actions', 'fff', 1, true));
	}
}

#app-navigation > ul > li > a:first-child {
	img {
		filter: none !important;
	}
}
