skins/MinervaNeue/resources/skins.minerva.styles/ui.less
@import '../../minerva.less/minerva.variables.less';
@import '../../minerva.less/minerva.mixins.less';
@import 'mediawiki.mixins.less';
@import 'icons.less';

/* stylelint-disable no-descending-specificity */
html,
body {
	// Ensure overlays take up full screen
	height: 100%;
}

html {
	font-size: @font-size-root;
	// Support Safari: Prevent font scaling in landscape
	-webkit-text-size-adjust: none;
}

body {
	background-color: @background-color-base;
	color: @color-base;
	// Support All Browsers: Remove `margin` (normalized)
	margin: 0;
}

/* needed for navigation elements and content */
ul {
	margin: 0;
	padding: 0;
}

.mw-body {
	// avoid margin collapsing (see T147956)
	border-top: @border-width-base @border-style-base @border-color-transparent;
	padding-bottom: 32px;
}

.overlay-enabled,
.mw-body {
	background-color: @background-color-base;
}

// Bottom dock only supported with JavaScript enabled.
// If footer has last modified list item (Desktop MinervaNeue ?useformat=desktop&useskin=minerva),
// hide it (T173545).
.mw-portlet-dock-bottom,
.navigation-drawer--loading,
/* stylelint-disable-next-line selector-max-id */
#footer-info-lastmod {
	display: none;
}

// Override rule in MobileFrontend (
// (ul.footer-info li in resources/mobile.init.styles.less)
// to show copyright.
// stylelint-disable-next-line selector-max-id
#footer-info-copyright {
	display: block;
}

// JavaScript overlay and server side rendered header
.overlay-header,
.minerva-header {
	display: flex;
	align-items: center;
	width: 100%;
	border-spacing: 0;
	border-collapse: collapse;
	height: @height-site-header;
	white-space: nowrap;
	// When banners are present we want to easily distinguish between them and the header so add border
	border-top: @border-subtle;
	// Hide the header border top when a banner is not present.
	margin-top: -@border-width-base;
}

//
// Search
//
.minerva-search-form {
	display: flex;
	width: 100%;
	flex-grow: 1;
	align-items: center;

	> button {
		margin-left: auto;
	}
}

.search-box {
	position: relative;
}

// Search input
// Used in minerva header and search overlay header
.search-box .search {
	@size-icon-search: unit( ( 18 / @font-size-browser ), em );
	@size-icon-search-gutter: unit( ( 8 / @font-size-browser ), em );
	@size-modifier-border: unit( ( 1 / @font-size-browser ), em );
	@padding-vertical-search: 8px - @border-width-base;
	@padding-start-search-icon: @size-icon-search + ( 2 * @size-icon-search-gutter ) - @size-modifier-border;
	background-color: @background-color-base; // Support Fennec, Opera Mini: Remove default background, see T38490.
	// Support Safari: Get rid of rounded corners.
	-webkit-appearance: none;
	width: 100%;
	margin: 0;
	height: 2.25em;
	border: @border-width-base @border-style-base @border-color-inverted;
	border-radius: @border-radius-base;
	padding: @padding-vertical-search 0 @padding-vertical-search @padding-start-search-icon;
	box-shadow: @box-shadow-drop-small;
	// Keyboard focus is taken care of below at `.search:focus`.
	outline: 0;
	transition-property: border-color, box-shadow;
	transition-duration: @transition-duration-medium;
	font: inherit;
	// Disable search background for cached HTML.
	mask-image: none;

	// [T139928] Hide all pseudo-elements added to search inputs in WebKit.
	&::-webkit-search-decoration,
	&::-webkit-search-cancel-button,
	&::-webkit-search-results-button,
	&::-webkit-search-results-decoration {
		display: none;
	}
}

.search-box-icon-overlay {
	position: absolute;
	display: flex;
	align-items: center;
	left: 8px;
	top: 0;
	bottom: 0;
}

// Provide focus styles only in non-JS and overlay to prevent double transition.
.client-nojs .search-box .search:focus,
.search-overlay .search-box .search:focus {
	border-color: @border-color-progressive--focus;
	box-shadow: @box-shadow-inset-small @box-shadow-color-progressive--focus, 0 1px 1px rgba( 0, 0, 0, 0.05 );
}

.content {
	.mw-heading2,
	h2 {
		// Clear table of contents and any other floated elements in desktop Minerva.
		clear: left;
	}

	// Only reveal section edit links in expanded section headings.
	// The .section-heading class is only present on mobile.
	.section-heading {
		.mw-editsection {
			visibility: hidden;
		}

		&.open-block .mw-editsection,
		.client-nojs & .mw-editsection {
			visibility: visible;
		}
	}

	/* For legacy parser */
	.mw-parser-output > .mw-heading2,
	.mw-parser-output > h2,
	.mw-parser-output[ data-mw-parsoid-version ] > section > .mw-heading2,
	.section-heading {
		border-bottom: @border-width-base @border-style-base @border-color-muted;
		margin-bottom: @margin-heading;
	}

	.mw-parser-output {
		// We want to apply display: flex to the heading wrapper elements to style them right (T305971),
		// but not to the heading text elements, because it results in bad text layout (T367468).
		// This turns out to be difficult, because mobile/desktop, legacy/modern/unwrapped headings,
		// and DiscussionTools/normal page generate a lot of different combinations of HTML markup.

		// Support modern headings, DiscussionTools, and mobile mode
		.mw-heading,
		.section-heading {
			display: flex;
			// T356513: display after floated elements
			min-width: fit-content;
		}

		// Support desktop Minerva legacy headings (this can only be done with a :has() selector,
		// there's no other way to distinguish them from unwrapped headings, even though it lacks
		// support for some browsers). Will be no longer needed when legacy headings are gone.
		// FIXME: Remove this block when $wgParserEnableLegacyHeadingDOM is removed.
		:is( h1, h2, h3, h4, h5, h6 ):has( .mw-headline ) {
			display: flex;
		}

		// FIXME: Remove `.mw-headline` when $wgParserEnableLegacyHeadingDOM is removed.
		h1,
		h2,
		h3,
		h4,
		h5,
		h6,
		.mw-headline {
			flex-grow: 1;
			flex-basis: 0;
			margin-left: 0;
		}

		.mw-editsection {
			align-self: center;
			// Negative margins to prevent the edit icon from affecting the height of the heading
			margin-top: -1em;
			margin-bottom: -1em;
			.cdx-mixin-button-layout-flush( 'end', true, 'large' );

			.cdx-button {
				font-size: 1rem;
			}
		}
	}
}

// stylelint-disable selector-max-id
#page-secondary-actions {
	a {
		margin: 10px 2px 2px 0;
	}
}

// It may be better to express these in a single class
// or think about using extend or a mixin to stay with semantic selectors
// https://css-tricks.com/the-extend-concept/
#bodyContent .panel .content,
.overlay .content-header,
.overlay .panel,
.mw-mf-page-list.side-list .list-thumb,
.mw-mf-page-list li,
.topic-title-list li,
.site-link-list li,
.drawer,
/*Specificity needed to override content styles in core. */
.content h2.list-header,
.list-header,
.mw-revision {
	padding-left: @padding-content;
	padding-right: @padding-content;
}

.image-list,
.minerva-anon-talk-message,
.pre-content,
/* Form only pages e.g Special:MobileOptions */
#mw-content-text > form > .oo-ui-fieldLayout > .oo-ui-fieldLayout-body,
/* Save button on Special:MobileOptions */
#mw-content-text > form > .oo-ui-widget,
.content,
.post-content {
	margin: 0 @margin-content;
}

// T217197
#mw-content-subtitle {
	margin-top: 10px;
	margin-bottom: 10px;

	&:empty {
		margin: 0;
	}
}
// stylelint-enable selector-max-id

@media all and ( min-width: @min-width-breakpoint-tablet ) {
	/* FIXME: this should be one generic class name */
	/* SpecialMobileEditWatchlist */
	.page-summary-list,
	/* Talk overlay */
	.topic-title-list,
	/* structured languages, mobile pagelists */
	.site-link-list,
	/* overlays */
	.overlay .panel,
	/* language overlay / MobileSpecialPageFeed */
	.list-header {
		padding-left: @padding-content-tablet;
		padding-right: @padding-content-tablet;
	}
}
/* stylelint-enable no-descending-specificity */
