MediaWiki:Mobile.css: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(49 intermediate revisions by the same user not shown) | |||
Line 10: | Line 10: | ||
* as possible; otherwise list ALL templates / pages that rely on the CSS | * as possible; otherwise list ALL templates / pages that rely on the CSS | ||
* found in here. | * found in here. | ||
* | |||
* Also, the CSS here should be divided into sections and sub-sections just as | |||
* you would do with headers in a regular page. Use the following format for | |||
* these "headers" below: | |||
* | |||
* /* | |||
* * == This is a section of cleaned-up CSS == | |||
* * / | |||
* | |||
* /* | |||
* * === This is a sub-section of the above === | |||
* * / | |||
* | * | ||
*****************************************************************************/ | *****************************************************************************/ | ||
Line 17: | Line 29: | ||
*/ | */ | ||
/* The Citizen skin defines some variables based on which the entire color | |||
palette is defined. It's blue by default for the dark theme. */ | |||
:root.skin-citizen-dark { | :root.skin-citizen-dark { | ||
/* This should give us a nice dark orange / brown. */ | |||
--color-primary__h: 15; | --color-primary__h: 15; | ||
/* Make surfaces darker. */ | |||
--color-surface-0: hsl(var(--color-primary__h) 10% 8%); | --color-surface-0: hsl(var(--color-primary__h) 10% 8%); | ||
--color-surface-1: hsl(var(--color-primary__h) 10% 10%); | --color-surface-1: hsl(var(--color-primary__h) 10% 10%); | ||
Line 29: | Line 44: | ||
* == Advertisement == | * == Advertisement == | ||
* | * | ||
* On Citizen, we show a | * On Citizen, we show a fixed banner at the bottom. It's added through a hook | ||
* | * in LocalSettings.php and uses the id bg3wiki-footer-ad. | ||
*/ | |||
/* | |||
* === Control visibility === | |||
* | |||
* The ad only appears if the screen dimensions are at least 320x600, because: | |||
* | |||
* - Smallest ads are 320px in width, so no ads if the screen is narrower. | |||
* - We shouldn't steal any vertical space if the screen isn't tall enough. | |||
* | |||
* Note that mobile browsers often use a height value for CSS media queries | |||
* that's quite a bit smaller than the real height that will be available once | |||
* UI elements of the browser are hidden, which usually happens as the user | |||
* starts scrolling down on a page. | |||
* | |||
* At the time of this writing, this behavior doesn't seem standardized, and | |||
* there's no way to query, in CSS, what the available height will be once the | |||
* browser has hidden some of its UI elements. In JS, it's windnow.innerHeight, | |||
* which gets dynamically updated as UI elements appear and disappear. But the | |||
* height used for CSS media queries is static, and generally seems to be based | |||
* on the initial value of window.innerHeight at first render. | |||
*/ | */ | ||
#bg3wiki-footer-ad { | #bg3wiki-footer-ad { | ||
display: none; | display: none; | ||
} | } | ||
@media screen and (min-height: | @media screen and (min-width: 320px) and (min-height: 600px) { | ||
.mw-ads-enabled #bg3wiki-footer-ad { | .mw-ads-enabled #bg3wiki-footer-ad { | ||
display: block; | display: block; | ||
} | |||
} | |||
/* | |||
* === Footer ad height config === | |||
* | |||
* Height is conditional, to fit various standard ad sizes: | |||
* | |||
* 320x50, 468x60, 728x90, 970x90 | |||
* | |||
* The sizes with height 90px are only used if the screen is very tall. | |||
*/ | |||
:root { | |||
/* Make sure to use 'px' here or else calc() can break. */ | |||
--footer-ad-h: 0px; | |||
} | |||
@media screen and (min-width: 320px) and (min-height: 600px) { | |||
:root { | |||
--footer-ad-h: 50px; | |||
} | |||
} | |||
@media screen and (min-width: 468px) and (min-height: 600px) { | |||
:root { | |||
--footer-ad-h: 60px; | |||
} | |||
} | |||
@media screen and (min-width: 728px) and (min-height: 800px) { | |||
:root { | |||
--footer-ad-h: 90px; | |||
} | |||
} | |||
/* | |||
* === Adjustments to Citizen skin elements === | |||
* | |||
* Citizen switches its layout at the width limit of 1120px, and we have to | |||
* apply different customizations to the layout based on that. | |||
*/ | |||
/* Make sure we can scroll to the end, taking the ad into account. */ | |||
.mw-ads-enabled .citizen-page-container { | |||
margin-bottom: var(--footer-ad-h); | |||
} | |||
/* The narrow layout where the Citizen "header" is at the bottom. We have to | |||
make sure that the "header" and everything tied to it is above the ad. */ | |||
@media screen and (max-width: 1119px) { | |||
/* This one is visible even if the Citizen "header" is hidden. Make sure | |||
it's above the ad. Note that the weird .citizen-feature... class is on | |||
the <html> element so it's even before .mw-ads-enabled. */ | |||
.citizen-feature-autohide-navigation-clientpref-1 | |||
.mw-ads-enabled.citizen-scroll--down .citizen-toc { | |||
bottom: calc(var(--footer-ad-h) + var(--space-xs)); | |||
} | } | ||
/* The "header" is actually at the bottom; make sure it's above the ad. */ | |||
.mw-ads-enabled .citizen-header { | |||
bottom: var(--footer-ad-h); | |||
} | } | ||
/* | /* These float above the header. */ | ||
.mw-ads-enabled .citizen- | .mw-ads-enabled .page-actions, | ||
.mw-ads-enabled .citizen-toc { | |||
bottom: calc(var(--footer-ad-h) + var(--header-size) + var(--space-xs)); | |||
} | } | ||
} | |||
/* The wide layout where the Citizen "header" is on the left-side and the TOC | |||
floats on the right. */ | |||
@media screen and (min-width: 1120px) { | |||
/* Make sure "header" (left-side panel) isn't covered by ad. */ | |||
.mw-ads-enabled .citizen-header { | .mw-ads-enabled .citizen-header { | ||
bottom: | bottom: var(--footer-ad-h); | ||
} | } | ||
/* | /* Make sure TOC isn't too high. */ | ||
.mw-ads-enabled . | .mw-ads-enabled .citizen-toc { | ||
max-height: calc( | |||
100vh - var(--footer-ad-h) - var(--height-sticky-header) | |||
); | |||
} | } | ||
} | } | ||
/* | |||
* === Rest of the footer ad configuration === | |||
*/ | |||
/* Container */ | |||
.mw-ads-enabled #bg3wiki-footer-ad { | |||
position: fixed; | |||
bottom: 0; | |||
left: 0; | |||
height: var(--footer-ad-h); | |||
width: 100%; | |||
background: var(--color-surface-3); | |||
z-index: 999; | |||
align-content: center; | |||
overflow: hidden; | |||
} | |||
/* Placeholder text for when ad isn't shown yet / doesn't show up. */ | |||
#bg3wiki-footer-ad p { | |||
text-align: center; | |||
font-size: 0.9em; | |||
font-style: italic; | |||
color: var(--color-subtle); | |||
} | |||
/* The actual insertion point for the ad. */ | |||
#bg3wiki-footer-ad-fuse { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
right: 0; | |||
bottom: 0; | |||
align-content: center; | |||
} | |||
/* The "Ads served by: xyz" text at the bottom. */ | |||
#bg3wiki-ad-provider-notice { | |||
margin: 0 var(--padding-page); | |||
color: var(--color-subtle); | |||
} | |||
/* | |||
* == Template-specific CSS == | |||
* | |||
* These are things that can't be done via Extension:TemplateStyles, because | |||
* they respond to dark/light theme settings. | |||
*/ | |||
/* | |||
* === Template:DamageColor === | |||
*/ | |||
.skin-citizen-dark .bg3wiki-damage-type-physical, | |||
.skin-citizen-dark .bg3wiki-damage-type-weapon, | |||
.skin-citizen-dark .bg3wiki-damage-type-piercing, | |||
.skin-citizen-dark .bg3wiki-damage-type-bludgeoning, | |||
.skin-citizen-dark .bg3wiki-damage-type-slashing { | |||
color: #8c8c8c; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-acid { | |||
color: #80b000; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-cold { | |||
color: #3399cc; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-fire { | |||
color: #ee5500; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-force { | |||
color: #cc3333; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-healing { | |||
color: #30bbbb; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-lightning { | |||
color: #3366cc; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-necrotic { | |||
color: #40b050; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-poison { | |||
color: #44bb00; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-radiant { | |||
color: #ccaa00; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-thunder { | |||
color: #8844bb; | |||
} | |||
.skin-citizen-dark .bg3wiki-damage-type-psychic { | |||
color: #cc77aa; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-physical, | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-weapon, | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-piercing, | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-bludgeoning, | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-slashing { | |||
color: #8c8c8c; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-acid { | |||
color: #80b000; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-cold { | |||
color: #3399cc; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-fire { | |||
color: #ee5500; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-force { | |||
color: #cc3333; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-healing { | |||
color: #30bbbb; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-lightning { | |||
color: #3366cc; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-necrotic { | |||
color: #40b050; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-poison { | |||
color: #44bb00; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-radiant { | |||
color: #ccaa00; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-thunder { | |||
color: #8844bb; | |||
} | |||
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-psychic { | |||
color: #cc77aa; | |||
} | |||
/* | |||
* == Extensions == | |||
*/ | |||
/* | |||
* === PortableInfobox === | |||
*/ | |||
.portable-infobox { | |||
margin-bottom: 2em; | |||
} | |||
/* Style the resistances part of the creature infobox. */ | |||
.pi-type-creature [data-item-name="resistances"] ul { | |||
margin: 0; | |||
list-style: none; | |||
display: flex; | |||
justify-content: center; | |||
gap: 5px; | |||
flex-wrap: wrap; | |||
} | |||
/* | |||
* === AudioButton === | |||
*/ | |||
a.ext-audiobutton[data-state="play"]::before { | |||
content: ' '; | |||
background-image: url('data:image/svg+xml, | |||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 64 64"> | |||
<circle fill="none" cx="32" cy="32" r="29" stroke-width="3" stroke="%23ffa03c"/> | |||
<polygon fill="%23ffa03c" points="24,18 24,46 48,32 "/> | |||
</svg>'); | |||
width: 20px; | |||
height: 20px; | |||
display: inline-block; | |||
background-repeat: no-repeat; | |||
vertical-align: -12%; | |||
background-position: bottom; | |||
} | |||
a.ext-audiobutton[data-state="pause"]::before { | |||
content: ' '; | |||
background-image: url('data:image/svg+xml, | |||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 64 64"> | |||
<circle fill="none" cx="32" cy="32" r="29" stroke-width="3" stroke="%23ffa03c"/> | |||
<line x1="26" y1="20" x2="26" y2="44" stroke="%23ffa03c" stroke-width="4"/> | |||
<line x1="38" y1="20" x2="38" y2="44" stroke="%23ffa03c" stroke-width="4"/> | |||
</svg>'); | |||
width: 20px; | |||
height: 20px; | |||
display: inline-block; | |||
background-repeat: no-repeat; | |||
vertical-align: -12%; | |||
background-position: bottom; | |||
} | |||
/* | |||
* == Miscellaneous == | |||
*/ | |||
/* Citizen wraps tables in a pair of divs, and the outer one's width isn't set. | |||
For some reason, it ends up being narrower than the available width if this | |||
isn't set. */ | |||
/* Not needed as of Citizen v2.27.0 */ | |||
/* | |||
.citizen-overflow-wrapper { | |||
width: 100%; | |||
} | |||
*/ | |||
/***************************************************************************** | /***************************************************************************** | ||
Line 447: | Line 740: | ||
*/ | */ | ||
[aria-label]:hover, [aria-label]:focus {position: relative} | .mw-body [aria-label]:hover, | ||
.mw-body [aria-label]:focus { | |||
position: relative; | |||
} | |||
[aria-label]:hover::after, | .mw-body [aria-label]:hover::after, | ||
[aria-label]:focus::after { | .mw-body [aria-label]:focus::after { | ||
position: absolute; | position: absolute; | ||
white-space: pre; | white-space: pre; | ||
Line 467: | Line 763: | ||
/* Changes the tooltip position. */ | /* Changes the tooltip position. */ | ||
[aria-label].aria-label-top-rig:hover::after, | .mw-body [aria-label].aria-label-top-rig:hover::after, | ||
[aria-label].aria-label-top-rig:focus::after { | .mw-body [aria-label].aria-label-top-rig:focus::after { | ||
bottom: 100%; | bottom: 100%; | ||
left: unset; | left: unset; | ||
Line 623: | Line 919: | ||
/* These are hidden since the screen may be too narrow. */ | /* These are hidden since the screen may be too narrow. */ | ||
display: none; | display: none; | ||
} | } | ||
Latest revision as of 04:01, 5 November 2024
/* All CSS here will be loaded for users of the mobile site */
/*****************************************************************************
*
* = START CLEANED UP SECTION =
*
* Everything here has to be documented properly, explaining what it does if
* not obvious, and especially, explaining where the CSS classes/ids/etc. are
* actually used. Things should be transitioned to use TemplateStyles as much
* as possible; otherwise list ALL templates / pages that rely on the CSS
* found in here.
*
* Also, the CSS here should be divided into sections and sub-sections just as
* you would do with headers in a regular page. Use the following format for
* these "headers" below:
*
* /*
* * == This is a section of cleaned-up CSS ==
* * /
*
* /*
* * === This is a sub-section of the above ===
* * /
*
*****************************************************************************/
/*
* == Modify Citizen's dark theme ==
*/
/* The Citizen skin defines some variables based on which the entire color
palette is defined. It's blue by default for the dark theme. */
:root.skin-citizen-dark {
/* This should give us a nice dark orange / brown. */
--color-primary__h: 15;
/* Make surfaces darker. */
--color-surface-0: hsl(var(--color-primary__h) 10% 8%);
--color-surface-1: hsl(var(--color-primary__h) 10% 10%);
--color-surface-2: hsl(var(--color-primary__h) 10% 12%);
}
/*
* == Advertisement ==
*
* On Citizen, we show a fixed banner at the bottom. It's added through a hook
* in LocalSettings.php and uses the id bg3wiki-footer-ad.
*/
/*
* === Control visibility ===
*
* The ad only appears if the screen dimensions are at least 320x600, because:
*
* - Smallest ads are 320px in width, so no ads if the screen is narrower.
* - We shouldn't steal any vertical space if the screen isn't tall enough.
*
* Note that mobile browsers often use a height value for CSS media queries
* that's quite a bit smaller than the real height that will be available once
* UI elements of the browser are hidden, which usually happens as the user
* starts scrolling down on a page.
*
* At the time of this writing, this behavior doesn't seem standardized, and
* there's no way to query, in CSS, what the available height will be once the
* browser has hidden some of its UI elements. In JS, it's windnow.innerHeight,
* which gets dynamically updated as UI elements appear and disappear. But the
* height used for CSS media queries is static, and generally seems to be based
* on the initial value of window.innerHeight at first render.
*/
#bg3wiki-footer-ad {
display: none;
}
@media screen and (min-width: 320px) and (min-height: 600px) {
.mw-ads-enabled #bg3wiki-footer-ad {
display: block;
}
}
/*
* === Footer ad height config ===
*
* Height is conditional, to fit various standard ad sizes:
*
* 320x50, 468x60, 728x90, 970x90
*
* The sizes with height 90px are only used if the screen is very tall.
*/
:root {
/* Make sure to use 'px' here or else calc() can break. */
--footer-ad-h: 0px;
}
@media screen and (min-width: 320px) and (min-height: 600px) {
:root {
--footer-ad-h: 50px;
}
}
@media screen and (min-width: 468px) and (min-height: 600px) {
:root {
--footer-ad-h: 60px;
}
}
@media screen and (min-width: 728px) and (min-height: 800px) {
:root {
--footer-ad-h: 90px;
}
}
/*
* === Adjustments to Citizen skin elements ===
*
* Citizen switches its layout at the width limit of 1120px, and we have to
* apply different customizations to the layout based on that.
*/
/* Make sure we can scroll to the end, taking the ad into account. */
.mw-ads-enabled .citizen-page-container {
margin-bottom: var(--footer-ad-h);
}
/* The narrow layout where the Citizen "header" is at the bottom. We have to
make sure that the "header" and everything tied to it is above the ad. */
@media screen and (max-width: 1119px) {
/* This one is visible even if the Citizen "header" is hidden. Make sure
it's above the ad. Note that the weird .citizen-feature... class is on
the <html> element so it's even before .mw-ads-enabled. */
.citizen-feature-autohide-navigation-clientpref-1
.mw-ads-enabled.citizen-scroll--down .citizen-toc {
bottom: calc(var(--footer-ad-h) + var(--space-xs));
}
/* The "header" is actually at the bottom; make sure it's above the ad. */
.mw-ads-enabled .citizen-header {
bottom: var(--footer-ad-h);
}
/* These float above the header. */
.mw-ads-enabled .page-actions,
.mw-ads-enabled .citizen-toc {
bottom: calc(var(--footer-ad-h) + var(--header-size) + var(--space-xs));
}
}
/* The wide layout where the Citizen "header" is on the left-side and the TOC
floats on the right. */
@media screen and (min-width: 1120px) {
/* Make sure "header" (left-side panel) isn't covered by ad. */
.mw-ads-enabled .citizen-header {
bottom: var(--footer-ad-h);
}
/* Make sure TOC isn't too high. */
.mw-ads-enabled .citizen-toc {
max-height: calc(
100vh - var(--footer-ad-h) - var(--height-sticky-header)
);
}
}
/*
* === Rest of the footer ad configuration ===
*/
/* Container */
.mw-ads-enabled #bg3wiki-footer-ad {
position: fixed;
bottom: 0;
left: 0;
height: var(--footer-ad-h);
width: 100%;
background: var(--color-surface-3);
z-index: 999;
align-content: center;
overflow: hidden;
}
/* Placeholder text for when ad isn't shown yet / doesn't show up. */
#bg3wiki-footer-ad p {
text-align: center;
font-size: 0.9em;
font-style: italic;
color: var(--color-subtle);
}
/* The actual insertion point for the ad. */
#bg3wiki-footer-ad-fuse {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
align-content: center;
}
/* The "Ads served by: xyz" text at the bottom. */
#bg3wiki-ad-provider-notice {
margin: 0 var(--padding-page);
color: var(--color-subtle);
}
/*
* == Template-specific CSS ==
*
* These are things that can't be done via Extension:TemplateStyles, because
* they respond to dark/light theme settings.
*/
/*
* === Template:DamageColor ===
*/
.skin-citizen-dark .bg3wiki-damage-type-physical,
.skin-citizen-dark .bg3wiki-damage-type-weapon,
.skin-citizen-dark .bg3wiki-damage-type-piercing,
.skin-citizen-dark .bg3wiki-damage-type-bludgeoning,
.skin-citizen-dark .bg3wiki-damage-type-slashing {
color: #8c8c8c;
}
.skin-citizen-dark .bg3wiki-damage-type-acid {
color: #80b000;
}
.skin-citizen-dark .bg3wiki-damage-type-cold {
color: #3399cc;
}
.skin-citizen-dark .bg3wiki-damage-type-fire {
color: #ee5500;
}
.skin-citizen-dark .bg3wiki-damage-type-force {
color: #cc3333;
}
.skin-citizen-dark .bg3wiki-damage-type-healing {
color: #30bbbb;
}
.skin-citizen-dark .bg3wiki-damage-type-lightning {
color: #3366cc;
}
.skin-citizen-dark .bg3wiki-damage-type-necrotic {
color: #40b050;
}
.skin-citizen-dark .bg3wiki-damage-type-poison {
color: #44bb00;
}
.skin-citizen-dark .bg3wiki-damage-type-radiant {
color: #ccaa00;
}
.skin-citizen-dark .bg3wiki-damage-type-thunder {
color: #8844bb;
}
.skin-citizen-dark .bg3wiki-damage-type-psychic {
color: #cc77aa;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-physical,
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-weapon,
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-piercing,
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-bludgeoning,
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-slashing {
color: #8c8c8c;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-acid {
color: #80b000;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-cold {
color: #3399cc;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-fire {
color: #ee5500;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-force {
color: #cc3333;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-healing {
color: #30bbbb;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-lightning {
color: #3366cc;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-necrotic {
color: #40b050;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-poison {
color: #44bb00;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-radiant {
color: #ccaa00;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-thunder {
color: #8844bb;
}
.skin-citizen-dark .bg3wiki-info-blob .bg3wiki-damage-type-psychic {
color: #cc77aa;
}
/*
* == Extensions ==
*/
/*
* === PortableInfobox ===
*/
.portable-infobox {
margin-bottom: 2em;
}
/* Style the resistances part of the creature infobox. */
.pi-type-creature [data-item-name="resistances"] ul {
margin: 0;
list-style: none;
display: flex;
justify-content: center;
gap: 5px;
flex-wrap: wrap;
}
/*
* === AudioButton ===
*/
a.ext-audiobutton[data-state="play"]::before {
content: ' ';
background-image: url('data:image/svg+xml,
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 64 64">
<circle fill="none" cx="32" cy="32" r="29" stroke-width="3" stroke="%23ffa03c"/>
<polygon fill="%23ffa03c" points="24,18 24,46 48,32 "/>
</svg>');
width: 20px;
height: 20px;
display: inline-block;
background-repeat: no-repeat;
vertical-align: -12%;
background-position: bottom;
}
a.ext-audiobutton[data-state="pause"]::before {
content: ' ';
background-image: url('data:image/svg+xml,
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 64 64">
<circle fill="none" cx="32" cy="32" r="29" stroke-width="3" stroke="%23ffa03c"/>
<line x1="26" y1="20" x2="26" y2="44" stroke="%23ffa03c" stroke-width="4"/>
<line x1="38" y1="20" x2="38" y2="44" stroke="%23ffa03c" stroke-width="4"/>
</svg>');
width: 20px;
height: 20px;
display: inline-block;
background-repeat: no-repeat;
vertical-align: -12%;
background-position: bottom;
}
/*
* == Miscellaneous ==
*/
/* Citizen wraps tables in a pair of divs, and the outer one's width isn't set.
For some reason, it ends up being narrower than the available width if this
isn't set. */
/* Not needed as of Citizen v2.27.0 */
/*
.citizen-overflow-wrapper {
width: 100%;
}
*/
/*****************************************************************************
*
* = START LEGACY CSS =
*
* This is CSS that was added in the past and wasn't always documented well.
* Some of it may be unnecessary and should perhaps be cautiously deleted,
* other parts should be moved either to TemplateStyles or to the cleaned up
* section above.
*
*****************************************************************************/
:root.skin-citizen-dark {
--background-color-overlay: hsla(var(--color-primary__h) 20% 20% / 60%);
--background-color-overlay--lighter: hsl(var(--color-primary__h) 20% 20% / 80%);
--bg3wiki-relative-location-bg: var(--color-surface-0);
--bg3wiki-relative-location-header-bg-dark: var(--color-surface-1);
/* CSS tooltip colours */
--aria-label-tooltip-bg: hsl(200deg 5% 10%);
--aria-label-tooltip-fg: hsl(0deg 0% 90%);
--aria-label-tooltip-border: none;
--bg3wiki-tooltip-border: #785000;
}
/* MobileFrontend should strip elements with this class, but still */
.nomobile {
display: none;
}
/* Trick to easily make lists with list-style: none */
/* Wrap a list in <div class="bg3wiki-list-style-none"> */
.bg3wiki-list-style-none > ul {
list-style: none;
}
/* Table styling */
.wikitable {
width: 100%;
}
/*
* Various elements used across the wiki
*/
/* Info blob */
div.bg3wiki-info-blob {
display: inline-block;
padding: 0 1em 0 1em;
border-radius: 20px;
}
span.bg3wiki-info-blob {
padding: 0 0.5em 0 0.5em;
border-radius: 10px;
}
.bg3wiki-info-blob {
background-color: var(--color-surface-1);
font-family: monospace;
}
/* D20 background image for numbers */
.bg3wiki-d20-bg {
background-image: url('/static/d20-bg.png');
background-position: center;
background-repeat: no-repeat;
background-size: 35px;
}
/* Coordinates */
.skin-citizen-dark .bg3wiki-coordinates {
font-family: 'Linux Libertine', 'Georgia', serif;
text-shadow: 1px 1px 2px #000, -1px -1px 2px #000;
color: #AB9F89;
background: #34323285;
border-radius: 5px;
padding: 3px 5px;
box-shadow: 1px 1px 5px #00000030;
}
/* Item, spell, etc. properties */
.bg3wiki-property-list dt {
font-weight: normal;
}
.bg3wiki-property-list dd {
margin-left: 0;
}
.mw-content-ltr ul.bg3wiki-property-list {
margin-left: 0;
list-style: none;
}
/* Imitating in-game tooltips */
.bg3wiki-tooltip-box {
overflow: hidden;
margin: 0.5em 0.2em 0 0.2em;
}
.skin-citizen-dark .bg3wiki-tooltip-box {
background: #1B1A19;
box-shadow:
rgba(0, 0, 0, 0.14) 3px 3px 6px 0px inset,
rgba(0, 0, 0, 0.14) -3px -3px 6px 1px inset;
border: 0.15rem solid var(--bg3wiki-tooltip-border);
border-radius: 10px;
padding: 15px;
}
.skin-citizen-dark .bg3wiki-tooltip-gradient-common {
background: linear-gradient(to bottom, #1B1A1999, #1B1A1999, #1B1A1999, #40295199);
}
.skin-citizen-dark .bg3wiki-tooltip-gradient-uncommon {
background: linear-gradient(to bottom, #00491599, #1B1A1999, #1B1A1999, #40295199);
}
.skin-citizen-dark .bg3wiki-tooltip-gradient-rare {
background: linear-gradient(to bottom, #00374999, #1B1A1999, #1B1A1999, #40295199);
}
.skin-citizen-dark .bg3wiki-tooltip-gradient-veryrare {
background: linear-gradient(to bottom, #54003299, #1B1A1999, #1B1A1999, #40295199);
}
.skin-citizen-dark .bg3wiki-tooltip-gradient-legendary {
background: linear-gradient(to bottom, #563E0D99, #1B1A1999, #1B1A1999, #40295199);
}
.skin-citizen-dark .bg3wiki-tooltip-gradient-story {
background: linear-gradient(to bottom, #561D0099, #1B1A1999, #1B1A1999, #40295199);
}
.bg3wiki-book-text p {
font-family: 'Linux Libertine', 'Georgia', serif;
}
/* ItemIcon stuff */
:root {
/* ItemIcon rarity colors */
--bg3wiki-itemicon-common: 72, 72, 72;
--bg3wiki-itemicon-uncommon: 1, 189, 57;
--bg3wiki-itemicon-rare: 1, 191, 255;
--bg3wiki-itemicon-very-rare: 209, 1, 123;
--bg3wiki-itemicon-legendary: 183, 134, 29;
--bg3wiki-itemicon-story: 255, 89, 1;
--bg3wiki-itemicon-gradient-top-opacity: 0%;
--bg3wiki-itemicon-gradient-bot-opacity: 12.5%;
--bg3wiki-itemicon-border-opacity: 60%;
}
.bg3wiki-itemicon-wrapper {
text-align: center;
white-space: nowrap;
}
/* The value of --bg3wiki-rarity-color will be set per rarity class. */
.bg3wiki-itemicon {
display: inline-block;
background: linear-gradient(
rgba(var(--bg3wiki-rarity-color), var(--bg3wiki-itemicon-gradient-top-opacity)),
rgba(var(--bg3wiki-rarity-color), var(--bg3wiki-itemicon-gradient-bot-opacity))
);
border: solid 1px rgba(var(--bg3wiki-rarity-color), var(--bg3wiki-itemicon-border-opacity));
}
.bg3wiki-itemicon-common {
--bg3wiki-rarity-color: var(--bg3wiki-itemicon-common);
}
.bg3wiki-itemicon-uncommon {
--bg3wiki-rarity-color: var(--bg3wiki-itemicon-uncommon);
}
.bg3wiki-itemicon-rare {
--bg3wiki-rarity-color: var(--bg3wiki-itemicon-rare);
}
.bg3wiki-itemicon-very-rare {
--bg3wiki-rarity-color: var(--bg3wiki-itemicon-very-rare);
}
.bg3wiki-itemicon-legendary {
--bg3wiki-rarity-color: var(--bg3wiki-itemicon-legendary);
}
.bg3wiki-itemicon-story {
--bg3wiki-rarity-color: var(--bg3wiki-itemicon-story);
}
/* Relative Location stuff */
.relative-location {
background: var(--bg3wiki-relative-location-bg);
border: 1px solid var(--bg3wiki-tooltip-border);
border-spacing: 0;
box-shadow: 0 0.25rem 0.35rem -0.25rem rgba(0, 0, 0, 0.1);
margin: 5px;
text-align: center;
}
.relative-location-header {
background: var(--bg3wiki-relative-location-header-bg-dark);
}
/* Damage Rider As Source (DRS) template */
.bg3wiki-damage-rider-source {
font-size:10px;
vertical-align: top;
font-style: italic;
}
/* License box */
#mw-license-preview .bg3wiki-license-box-container {
/* Don't want margin in the preview box because that breaks things */
margin: auto auto auto 0;
}
.bg3wiki-license-box-container {
margin: 4px 0 4px 10%;
}
.bg3wiki-license-box {
border: 2px solid #785000;
border-collapse: collapse;
background: #1B1A19;
color: rgb(210,210,210);
width: 100%;
}
.bg3wiki-license-box-image {
border-right: none;
padding: 0.4rem 0 0.4rem 0.9rem;
}
.bg3wiki-license-box-text {
border-left: none;
vertical-align: top;
padding: 0.4rem 0 0.4rem 0.9rem;
}
/* Hat note */
.hatnote {
font-style: italic;
padding-left: 1.6em;
margin-bottom: 0.5em;
}
/* Price calculator */
#bg3wiki-price-calculator {
border: 1px solid var(--bg3wiki-tooltip-border);
}
#bg3wiki-price-calculator-form {
padding: 0.5em;
}
#bg3wiki-price-calculator-form input[type="number"] {
width: 100%;
}
#bg3wiki-price-calculator-form td {
padding-right: 0.5em;
}
#bg3wiki-price-calculator-form th {
text-align: right;
padding-right: 0.5em;
}
#bg3wiki-price-calculator-form label {
margin-left: 0.2em;
}
#bg3wiki-price-calculator-result {
margin: 1em;
}
#bg3wiki-price-calculator-result td, #bg3wiki-price-calculator-result th {
text-align: right;
}
/* Hack to display category trees as a navbox. Only used on NavModding and
* NavGuides for now.
*/
.navcat div > .CategoryTreeSection::after {
content: " · ";
font-weight: bold;
}
.navcat div > .CategoryTreeSection:last-child::after {
content: none;
}
.navcat div > .CategoryTreeTag,
.navcat div > .CategoryTreePageBullet {
display: none;
margin: 0;
padding: 0;
}
.navcat div {
display: inline;
margin: 0;
padding: 0;
padding-left: 0;
}
/* UID widget styling. */
.bg3wiki-uid {
display: inline-block;
}
.bg3wiki-uid summary {
display: inline-block;
list-style: none;
margin: 2px 0;
}
.bg3wiki-uid summary span {
text-decoration: underline dotted;
cursor: pointer;
}
.bg3wiki-uid tt {
border: 1px dashed var(--bg3wiki-tooltip-border);
user-select: all;
padding: 0 0.5rem;
}
/* number inside AC shield */
.bg3wiki-ac-value {
display: grid;
justify-items:start;
align-items: start
}
.bg3wiki-ac-value > div {
grid-column-start: 1;
grid-row-start: 1;
}
.bg3wiki-ac-value .ac-value {
text-align:center;
width: 40px;
align-self: center;
padding-bottom: 0.5ch
}
.bg3wiki-ac-value .ac-value-comment {
grid-column-start: 2;
grid-row-start: 1;
align-self: center
}
/* CSS tooltip implementation. Usage in markup:
<some-element aria-label="tooltip text here">
normal text
</some-element>
*/
.mw-body [aria-label]:hover,
.mw-body [aria-label]:focus {
position: relative;
}
.mw-body [aria-label]:hover::after,
.mw-body [aria-label]:focus::after {
position: absolute;
white-space: pre;
line-height: 1;
padding: 0.3rem;
content: attr(aria-label);
background-color: var(--aria-label-tooltip-bg);
color: var(--aria-label-tooltip-fg);
border: var(--aria-label-tooltip-border);
text-decoration: unset;
/* See optional override below. */
bottom: 100%;
left: 0;
}
/* Changes the tooltip position. */
.mw-body [aria-label].aria-label-top-rig:hover::after,
.mw-body [aria-label].aria-label-top-rig:focus::after {
bottom: 100%;
left: unset;
right: 0;
}
/* Optional class for indicating tooltip presence via underline. */
.bg3wiki-help-tooltip[aria-label] {
cursor: help;
text-decoration-line: underline;
text-decoration-style: dotted;
text-decoration-thickness: 1px;
text-underline-offset: calc(1ex / 2);
}
/* Tab bar */
.bg3wiki-tabbar {
background-color: #1B1A19;
margin: 0.5em 0 0 0;
}
.bg3wiki-tabbar .bg3wiki-tab {
padding:0 10px;
display: inline-block;
}
.bg3wiki-tabbar .bg3wiki-tab-active {
background-color: #281c14;
color: #cfbca9;
}
/* Unbulleted lists */
.bg3wiki-ublist ul,
.bg3wiki-ublist ol {
margin: 0;
padding: 0;
line-height: inherit;
list-style: none;
}
/* Horizontal lists */
.bg3wiki-horizontlist dl,
.bg3wiki-horizontlist ul {
margin: 0;
padding: 0;
}
.bg3wiki-horizontlist dl ul,
.bg3wiki-horizontlist dl dl,
.bg3wiki-horizontlist ul dl,
.bg3wiki-horizontlist ul ul {
display: inline;
}
.bg3wiki-horizontlist dd,
.bg3wiki-horizontlist dt,
.bg3wiki-horizontlist li {
margin: 0;
display: inline;
}
.bg3wiki-horizontlist dd::after,
.bg3wiki-horizontlist li::after {
content: " · ";
font-weight: bold;
}
.bg3wiki-horizontlist dd:last-child::after,
.bg3wiki-horizontlist dt:last-child::after,
.bg3wiki-horizontlist li:last-child::after {
content: none;
}
.bg3wiki-horizontlist dt::after {
content: ":";
font-weight: normal;
font-size: 100%;
}
.bg3wiki-horizontlist dd dd:first-child::before,
.bg3wiki-horizontlist dd dt:first-child::before,
.bg3wiki-horizontlist dd li:first-child::before,
.bg3wiki-horizontlist dt dd:first-child::before,
.bg3wiki-horizontlist dt dt:first-child::before,
.bg3wiki-horizontlist dt li:first-child::before,
.bg3wiki-horizontlist li dd:first-child::before,
.bg3wiki-horizontlist li dt:first-child::before,
.bg3wiki-horizontlist li li:first-child::before {
content: " (";
font-weight: normal;
}
.bg3wiki-horizontlist dd dd:last-child::after,
.bg3wiki-horizontlist dd dt:last-child::after,
.bg3wiki-horizontlist dd li:last-child::after,
.bg3wiki-horizontlist dt dd:last-child::after,
.bg3wiki-horizontlist dt dt:last-child::after,
.bg3wiki-horizontlist dt li:last-child::after,
.bg3wiki-horizontlist li dd:last-child::after,
.bg3wiki-horizontlist li dt:last-child::after,
.bg3wiki-horizontlist li li:last-child::after {
content: ")";
font-weight: normal;
}
.bg3wiki-bquote {
overflow: hidden;
margin: 1em 0;
}
.bg3wiki-quotesource {
line-height: 1.5em;
padding-left: 1.5em;
margin-top: 0;
}
.bg3wiki-blockquote-marks {
font-size: 120%;
font-family: serif;
font-weight: bold;
}
/* Shortcut */
.bg3wiki-template-shortcut {
display: inline-block;
background-color: var(--color-surface-2);
text-align: center;
margin: 1em;
padding: 0 0.33em 0 0.33em;
vertical-align: top;
width: fit-content;
font-size: 85%;
}
.bg3wiki-template-shortcut-top {
text-align: center;
margin: 0;
padding: 0 0 0.16em 0;
border-bottom: 2px solid #3d3d3d;
font-size: 90%;
}
/* Amboxes */
.ambox {
background-color: var(--color-surface-2);
}
.ambox-speedy {
/* Pink */
background-color: #400805;
}
.ambox .mbox-image,
.ambox .mbox-imageright {
/* These are hidden since the screen may be too narrow. */
display: none;
}
/* Character info template styling */
.infobox {
display: table;
width: 100%;
font-size: 90%;
margin-left: auto;
margin-right: auto;
background-color: var(--color-surface-0);
}
.infobox-above {
font-size: 130%;
text-align: center;
background: var(--color-surface-1);
}
.infobox-subheader {
text-align: center;
background-color: var(--color-surface-0);
}
.infobox-header {
text-align: center;
font-size: 130%;
text-align: center;
background: var(--color-surface-1);
}
.infobox-title {
text-align: center;
}
.infobox-label {
background-color: var(--color-surface-1);
margin-right: 5em;
padding: 5px;
}
th.infobox-label {
text-align: right;
}
th.infobox-label:has(.bg3wiki-icontext-block),
th.infobox-label:has(.bg3wiki-condition) {
text-align: left;
}
td.infobox-label {
text-align: center;
}
.infobox-data {
text-align: center;
background-color: var(--color-surface-1);
padding: 5px;
}
.infobox-below {
text-align: center;
background: var(--color-surface-1);
}
.infobox-image {
text-align: center;
background-color: var(--color-surface-0);
}
.infobox table {
display: table;
}
.infobox caption {
display: table-caption;
background-color: var(--color-surface-0);
}
/* Remove nowrap when undesired in infoboxes */
.mw-parser-output .infobox .nowrap {
white-space: normal !important;
}
/* When we want wrapping */
.wrap,
.wraplinks a {
white-space: normal;
}
/* Template:WeaponsTableHeader / Template:WeaponsTableRow */
.bg3wiki-weapons-table td:not(:last-child) {
text-align: center;
}