@import 'mediawiki.skin.variables.less';

@error-color: @color-destructive;
@link-color: @color-progressive;
@parser-function-color: @color-destructive;
@table-color: #d08;
@table-color-dark: #ff5edd;
@template-color: #80c;
@template-color-dark: #af84e6;
@template-variable-color: #ac6600;
@wikitext-formatting-color: @color-progressive--focus;
@wikitext-formatting-color-dark: @color-progressive--hover;
@xml-tag-color: @color-content-added;
@template-background-color: #a11;
@ext-background-color: #eee;
@link-background-color: #219;
@skip-formatting-color: #adf;

.ground( @template: 0, @ext: 0, @link: 0 ) {
	@template-shade: fade( @template-background-color, 4% * @template );
	@ext-shade: fade( @ext-background-color, 4% * @ext );
	@link-shade: fade( @link-background-color, 4% * @link );
	background-color: average( average( @template-shade, @ext-shade ), @link-shade );
}

.darkmode( @prop, @value ) {
	@media screen {
		html.skin-theme-clientpref-night & {
			@{prop}: @value;
		}
	}

	@media screen and ( prefers-color-scheme: dark ) {
		html.skin-theme-clientpref-os & {
			@{prop}: @value;
		}
	}
}

.wikitext-formatting-color {
	color: @wikitext-formatting-color;
	.darkmode( color, @wikitext-formatting-color-dark );
}

.cm-mw-pagename {
	text-decoration: underline;
}

.cm-mw-skipformatting {
	background-color: @skip-formatting-color;
}
.cm-mw-list,
.cm-mw-indenting {
	.wikitext-formatting-color();
	font-weight: bold;
}
// FIXME: Remove camelCase variant after CM6 upgrade is complete (also check Global Search)
.cm-mw-doubleUnderscore,
.cm-mw-double-underscore,
.cm-mw-signature,
.cm-mw-hr {
	.wikitext-formatting-color();
	font-weight: bold;
	background-color: @background-color-disabled-subtle;
}

// TODO: Deprecate .cm-mw-mnemonic in favor of -html-entity
.cm-mw-mnemonic,
.cm-mw-html-entity {
	color: @xml-tag-color;
}
.cm-mw-comment {
	color: @color-subtle;
	font-weight: normal;
}
.cm-mw-apostrophes-bold,
.cm-mw-apostrophes-italic {
	.wikitext-formatting-color();
}
.cm-mw-strong {
	font-weight: bold;
}

// FIXME: Remove .CodeMirror-line rules after CM6 upgrade
pre.CodeMirror-line.cm-mw-section-1,
pre.CodeMirror-line-like.cm-mw-section-1,
.cm-mw-section-1,
.cm-mw-section-1 ~ * {
	font-size: 1.8em;
	line-height: 1.2em;
}
pre.CodeMirror-line.cm-mw-section-2,
pre.CodeMirror-line-like.cm-mw-section-2,
.cm-mw-section-2,
.cm-mw-section-2 ~ * {
	font-size: 1.5em;
	line-height: 1.2em;
}
pre.CodeMirror-line.cm-mw-section-3,
pre.CodeMirror-line-like.cm-mw-section-3,
pre.CodeMirror-line.cm-mw-section-4,
pre.CodeMirror-line-like.cm-mw-section-4,
pre.CodeMirror-line.cm-mw-section-5,
pre.CodeMirror-line-like.cm-mw-section-5,
pre.CodeMirror-line.cm-mw-section-6,
pre.CodeMirror-line-like.cm-mw-section-6,
/* TODO: remove overqualified `span` after CM6 upgrade */
span.cm-mw-section-3 ~ *,
span.cm-mw-section-4 ~ *,
span.cm-mw-section-5 ~ *,
span.cm-mw-section-6 ~ * {
	font-weight: bold;
}

.cm-mw-template {
	color: @template-color;
	font-weight: normal;

	html.skin-theme-clientpref-night & {
		color: @template-color-dark;
	}

	@media ( prefers-color-scheme: dark ) {
		html.skin-theme-clientpref-os & {
			color: @template-color-dark;
		}
	}
}

// TODO: deprecate/remove after CM6 upgrade
.cm-mw-template-name-mnemonic {
	font-weight: normal;
}

.cm-mw-template-name,
.cm-mw-template-argument-name,
.cm-mw-template-delimiter,
.cm-mw-template-bracket {
	color: @template-color;
	font-weight: bold;
	.darkmode( color, @template-color-dark );
}

.cm-mw-templatevariable,
.cm-mw-templatevariable-bracket {
	color: @template-variable-color;
	font-weight: normal;
}
.cm-mw-templatevariable-name,
.cm-mw-templatevariable-delimiter {
	color: @template-variable-color;
	font-weight: bold;
}

.cm-mw-parserfunction {
	font-weight: normal;
}
.cm-mw-parserfunction-name,
.cm-mw-parserfunction-bracket,
.cm-mw-parserfunction-delimiter {
	color: @parser-function-color;
	font-weight: bold;
}

pre.CodeMirror-line.cm-mw-exttag,
pre.CodeMirror-line-like.cm-mw-exttag {
	.ground( @ext: 0.5 );
}
.cm-mw-exttag {
	.ground( @ext: 1 );
}
.cm-mw-exttag-name,
.cm-mw-htmltag-name {
	color: @xml-tag-color;
	font-weight: bold;
}
.cm-mw-exttag-bracket,
.cm-mw-exttag-attribute,
.cm-mw-htmltag-bracket,
.cm-mw-htmltag-attribute {
	color: @xml-tag-color;
	font-weight: normal;
}

.cm-mw-tag-pre,
.cm-mw-tag-nowiki,
pre.CodeMirror-line.cm-mw-tag-pre,
pre.CodeMirror-line-like.cm-mw-tag-pre,
pre.CodeMirror-line.cm-mw-tag-nowiki,
pre.CodeMirror-line-like.cm-mw-tag-nowiki {
	background-color: rgba( 0, 0, 0, 0.04 );
	.darkmode( background-color, rgba( 255, 255, 255, 0.06 ) );
}

.cm-mw-link,
.cm-mw-link-tosection,
.cm-mw-section-header {
	.wikitext-formatting-color();
	font-weight: normal;
}
.cm-mw-link-pagename,
.cm-mw-link-bracket,
.cm-mw-link-delimiter,
.cm-mw-extlink,
.cm-mw-free-extlink {
	color: @link-color;
	&:not( .cm-mw-strong ) {
		font-weight: normal;
	}
}
.cm-mw-extlink-protocol,
.cm-mw-free-extlink-protocol,
.cm-mw-extlink-bracket {
	color: @link-color;
	font-weight: bold;
}

.cm-mw-table-bracket,
.cm-mw-table-delimiter {
	color: @table-color;
	font-weight: bold;
	.darkmode( color, @table-color-dark );
}
.cm-mw-table-definition {
	color: @table-color;
	font-weight: normal;
	.darkmode( color, @table-color-dark );
}
.cm-mw-table-caption {
	font-weight: bold;
}

.cm-mw-template2-ground {
	.ground( @template: 1 );
}
.cm-mw-template3-ground {
	.ground( @template: 2 );
}
.cm-mw-ext-ground,
.cm-mw-template-ext-ground {
	.ground( @ext: 1 );
}
.cm-mw-ext2-ground,
.cm-mw-template-ext2-ground {
	.ground( @ext: 2 );
}
.cm-mw-ext3-ground,
.cm-mw-template-ext3-ground {
	.ground( @ext: 3 );
}
.cm-mw-link-ground,
.cm-mw-ext-link-ground,
.cm-mw-template-link-ground {
	.ground( @link: 1 );
}
.cm-mw-ext2-link-ground,
.cm-mw-template-ext-link-ground {
	.ground( @ext: 1, @link: 1 );
}
.cm-mw-ext3-link-ground,
.cm-mw-template-ext2-link-ground {
	.ground( @ext: 2, @link: 1 );
}
.cm-mw-template-ext3-link-ground {
	.ground( @ext: 3, @link: 1 );
}

.cm-mw-template2-ext-ground {
	.ground( @template: 1, @ext: 1 );
}
.cm-mw-template2-ext2-ground {
	.ground( @template: 1, @ext: 2 );
}
.cm-mw-template2-ext3-ground {
	.ground( @template: 1, @ext: 3 );
}
.cm-mw-template2-link-ground {
	.ground( @template: 1, @link: 1 );
}
.cm-mw-template2-ext-link-ground {
	.ground( @template: 1, @ext: 1, @link: 1 );
}
.cm-mw-template2-ext2-link-ground {
	.ground( @template: 1, @ext: 2, @link: 1 );
}
.cm-mw-template2-ext3-link-ground {
	.ground( @template: 1, @ext: 3, @link: 1 );
}

.cm-mw-template3-ext-ground {
	.ground( @template: 2, @ext: 1 );
}
.cm-mw-template3-ext2-ground {
	.ground( @template: 2, @ext: 2 );
}
.cm-mw-template3-ext3-ground {
	.ground( @template: 2, @ext: 3 );
}
.cm-mw-template3-link-ground {
	.ground( @template: 2, @link: 1 );
}
.cm-mw-template3-ext-link-ground {
	.ground( @template: 2, @ext: 1, @link: 1 );
}
.cm-mw-template3-ext2-link-ground {
	.ground( @template: 2, @ext: 2, @link: 1 );
}
.cm-mw-template3-ext3-link-ground {
	.ground( @template: 2, @ext: 3, @link: 1 );
}

.cm-mw-error {
	color: @error-color;
}

.cm-mw-em {
	font-style: italic;
}
