MediaWiki:Citizen.css: Difference between revisions
MediaWiki interface page
More actions
No edit summary |
No edit summary |
||
| (35 intermediate revisions by the same user not shown) | |||
| Line 128: | Line 128: | ||
.skin-citizen .citizen-footer a:hover { | .skin-citizen .citizen-footer a:hover { | ||
color: #ffd37a; | color: #ffd37a; | ||
} | |||
/* Main Page banner swap for Citizen/tablet/mobile. | |||
The no-background banner is used through the tablet range, then the desktop | |||
parchment banner returns at the 900px layout breakpoint. */ | |||
.skin-citizen .page-banner-desktop { | |||
display: block !important; | |||
} | |||
.skin-citizen .page-banner-mobile { | |||
display: none !important; | |||
} | |||
@media (max-width: 899px) { | |||
.skin-citizen .page-banner { | |||
aspect-ratio: 300 / 141; | |||
margin-bottom: 0; | |||
background-image: url("/index.php/Special:Redirect/file/Wizlords_banner_nobg.png"); | |||
background-repeat: no-repeat; | |||
background-position: center center; | |||
background-size: contain; | |||
} | |||
.skin-citizen .page-banner-desktop { | |||
display: none !important; | |||
} | |||
.skin-citizen .page-banner-mobile { | |||
display: none !important; | |||
} | |||
} | |||
@media (min-width: 900px) { | |||
.skin-citizen .page-banner { | |||
aspect-ratio: auto; | |||
background-image: none; | |||
} | |||
.skin-citizen .page-banner-desktop { | |||
display: block !important; | |||
} | |||
.skin-citizen .page-banner-mobile { | |||
display: none !important; | |||
} | |||
} | } | ||
| Line 138: | Line 183: | ||
width: 100%; | width: 100%; | ||
max-width: 100%; | max-width: 100%; | ||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-class-category-table) { | |||
width: min(100%, 640px); | |||
max-width: 640px; | |||
margin-right: auto; | |||
margin-left: auto; | |||
overflow-x: visible; | |||
border: 0; | |||
border-radius: 0; | |||
box-shadow: none; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-class-category-table) | |||
.wizlords-class-category-table { | |||
width: 100%; | |||
min-width: 0; | |||
max-width: 640px; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-example-table) { | |||
width: min(100%, 600px); | |||
max-width: 600px; | |||
margin-right: auto; | |||
margin-left: auto; | |||
overflow-x: visible; | |||
border: 0; | |||
border-radius: 0; | |||
box-shadow: none; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-example-table.mw-collapsed) { | |||
background: transparent; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-example-table) | |||
.wizlords-example-table { | |||
width: 100%; | |||
min-width: 0; | |||
max-width: 600px; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-example-table-full-heal) { | |||
width: min(100%, 500px); | |||
max-width: 500px; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-example-table-full-heal) | |||
.wizlords-example-table-full-heal { | |||
max-width: 500px; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-reward-table) { | |||
width: fit-content; | |||
max-width: 100%; | |||
margin-right: auto; | |||
margin-left: 0; | |||
overflow-x: visible; | |||
border: 0; | |||
border-radius: 0; | |||
box-shadow: none; | |||
background: transparent; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-reward-table) | |||
.wizlords-reward-table { | |||
min-width: 0; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-example-table) | |||
.wizlords-example-table caption { | |||
display: table-caption !important; | |||
caption-side: top; | |||
width: auto !important; | |||
max-width: none !important; | |||
text-align: center !important; | |||
} | } | ||
| Line 178: | Line 299: | ||
+ .collapsible-block.open-block { | + .collapsible-block.open-block { | ||
margin-top: 12px; | margin-top: 12px; | ||
} | |||
/* ========================================================================== | |||
Citizen Custom Collapsible Boxes | |||
-------------------------------------------------------------------------- | |||
Desktop Vector keeps the standard MediaWiki [Expand] / [Collapse] text from | |||
Common.css. Citizen uses a compact chevron control so custom collapsible | |||
boxes visually match MobileFrontend section headings. | |||
========================================================================== */ | |||
.skin-citizen .wizlords-collapsible-section { | |||
position: relative; | |||
padding-right: 46px; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle { | |||
position: absolute; | |||
top: 9px; | |||
right: 10px; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
box-sizing: border-box; | |||
width: 30px; | |||
height: 30px; | |||
margin: 0; | |||
color: var(--wiz-link, #ff942d) !important; | |||
font-size: 0; | |||
line-height: 1; | |||
text-decoration: none; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle::after { | |||
content: "⌄"; | |||
display: block; | |||
color: var(--wiz-link, #ff942d); | |||
font-size: 22px; | |||
line-height: 1; | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section:not(.mw-collapsed) | |||
> .mw-collapsible-toggle::after { | |||
content: "⌃"; | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section | |||
> .mw-collapsible-toggle | |||
.mw-collapsible-text, | |||
.skin-citizen | |||
.wizlords-collapsible-section | |||
> .mw-collapsible-toggle | |||
a { | |||
font-size: 0; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-bottom-toggle { | |||
color: var(--wiz-link, #ff942d) !important; | |||
font-size: 0; | |||
line-height: 1; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-bottom-toggle::after { | |||
content: "⌃"; | |||
font-size: 22px; | |||
} | |||
/* Override the text-glyph toggle above with a CSS-drawn Citizen-style chevron. | |||
The toggle spans the title row, so tapping the heading area opens/closes the | |||
custom collapsible box on Citizen while Vector keeps the text toggle. */ | |||
.skin-citizen .wizlords-collapsible-section { | |||
position: relative; | |||
padding-right: 14px; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle { | |||
position: absolute; | |||
z-index: 2; | |||
top: 0; | |||
right: 0; | |||
left: 0; | |||
box-sizing: border-box; | |||
width: auto; | |||
height: 48px; | |||
margin: 0; | |||
color: transparent !important; | |||
font-size: 0; | |||
line-height: 1; | |||
text-decoration: none; | |||
cursor: pointer; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle::after { | |||
content: ""; | |||
position: absolute; | |||
top: 20px; | |||
right: 18px; | |||
display: block; | |||
width: 8px; | |||
height: 8px; | |||
border-right: 2px solid var(--wiz-link, #ff942d); | |||
border-bottom: 2px solid var(--wiz-link, #ff942d); | |||
transform: rotate(45deg); | |||
transform-origin: center; | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section:not(.mw-collapsed) | |||
> .mw-collapsible-toggle::after { | |||
top: 24px; | |||
transform: rotate(225deg); | |||
} | |||
.skin-citizen .wizlords-collapsible-section-title { | |||
padding-right: 34px; | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section | |||
> .mw-collapsible-toggle | |||
.mw-collapsible-text, | |||
.skin-citizen | |||
.wizlords-collapsible-section | |||
> .mw-collapsible-toggle | |||
a { | |||
color: transparent !important; | |||
font-size: 0; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-bottom-toggle { | |||
position: relative; | |||
min-height: 28px; | |||
color: var(--wiz-link, #ff942d) !important; | |||
font-size: 0; | |||
line-height: 1; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-bottom-toggle::after { | |||
content: ""; | |||
position: absolute; | |||
right: 4px; | |||
bottom: 6px; | |||
width: 8px; | |||
height: 8px; | |||
border-right: 2px solid var(--wiz-link, #ff942d); | |||
border-bottom: 2px solid var(--wiz-link, #ff942d); | |||
transform: rotate(225deg); | |||
} | |||
/* Final Citizen custom-collapsible icon override. | |||
Mimics MobileFrontend's mf-icon-expand / mf-icon-rotate-flip visual states | |||
without depending on those internal classes being present in page markup. */ | |||
.skin-citizen .wizlords-collapsible-section { | |||
position: relative; | |||
padding-right: 14px; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-title { | |||
padding-right: 34px; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle { | |||
position: absolute; | |||
z-index: 2; | |||
top: 0; | |||
right: 0; | |||
left: 0; | |||
box-sizing: border-box; | |||
width: auto; | |||
height: 48px; | |||
margin: 0; | |||
color: transparent !important; | |||
font-size: 0; | |||
line-height: 1; | |||
text-decoration: none; | |||
cursor: pointer; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle::after { | |||
content: ""; | |||
position: absolute; | |||
top: 19px; | |||
right: 18px; | |||
display: block; | |||
width: 10px; | |||
height: 10px; | |||
border-right: 2px solid var(--wiz-link, #ff942d); | |||
border-bottom: 2px solid var(--wiz-link, #ff942d); | |||
transform: rotate(45deg); | |||
transform-origin: 50% 50%; | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section:not(.mw-collapsed) | |||
> .mw-collapsible-toggle::after { | |||
top: 23px; | |||
transform: rotate(225deg); | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section | |||
> .mw-collapsible-toggle | |||
.mw-collapsible-text, | |||
.skin-citizen | |||
.wizlords-collapsible-section | |||
> .mw-collapsible-toggle | |||
a { | |||
color: transparent !important; | |||
font-size: 0; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-bottom-toggle { | |||
position: relative; | |||
min-height: 28px; | |||
color: transparent !important; | |||
font-size: 0; | |||
line-height: 1; | |||
cursor: pointer; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-bottom-toggle::after { | |||
content: ""; | |||
position: absolute; | |||
right: 4px; | |||
bottom: 6px; | |||
width: 10px; | |||
height: 10px; | |||
border-right: 2px solid var(--wiz-text, #d2d2d2); | |||
border-bottom: 2px solid var(--wiz-text, #d2d2d2); | |||
transform: rotate(225deg); | |||
} | |||
/* Citizen custom collapsible heading refinement: place the chevron before the | |||
title text, matching native Citizen section headings. */ | |||
.skin-citizen .wizlords-collapsible-section-title { | |||
position: relative; | |||
padding-right: 0; | |||
padding-left: 20px; | |||
font-family: Roboto, Roboto-fallback, system-ui, -apple-system, sans-serif !important; | |||
font-size: 22px !important; | |||
font-weight: 700 !important; | |||
line-height: 1.3 !important; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .wizlords-collapsed-hint { | |||
font-family: Roboto, Roboto-fallback, system-ui, -apple-system, sans-serif !important; | |||
font-size: 14px !important; | |||
font-style: normal !important; | |||
font-weight: 400 !important; | |||
line-height: 1.6 !important; | |||
} | |||
.skin-citizen .wizlords-collapsible-section > .mw-collapsible-toggle::after { | |||
display: none; | |||
} | |||
.skin-citizen .wizlords-collapsible-section-title::before { | |||
content: ""; | |||
position: absolute; | |||
top: 50%; | |||
left: 1px; | |||
display: block; | |||
width: 8px; | |||
height: 8px; | |||
border-right: 2px solid var(--wiz-heading, #e7e1d4); | |||
border-bottom: 2px solid var(--wiz-heading, #e7e1d4); | |||
transform: translateY(-65%) rotate(45deg); | |||
transform-origin: 50% 50%; | |||
} | |||
.skin-citizen | |||
.wizlords-collapsible-section:not(.mw-collapsed) | |||
.wizlords-collapsible-section-title::before { | |||
transform: translateY(-35%) rotate(225deg); | |||
} | } | ||
| Line 257: | Line 652: | ||
Wide image cards use separate classes and are intentionally unaffected. | Wide image cards use separate classes and are intentionally unaffected. | ||
========================================================================== */ | ========================================================================== */ | ||
.skin-citizen .wizlords-mainpage-items | .skin-citizen .wizlords-mainpage-items { | ||
display: flex; | display: flex; | ||
flex-wrap: wrap; | flex-wrap: wrap; | ||
| Line 269: | Line 662: | ||
margin-right: auto; | margin-right: auto; | ||
margin-left: auto; | margin-left: auto; | ||
text-align: center; | text-align: center; | ||
} | } | ||
| Line 325: | Line 707: | ||
line-height: 1.2; | line-height: 1.2; | ||
text-align: center; | text-align: center; | ||
overflow-wrap: | overflow-wrap: normal; | ||
word-break: normal; | |||
hyphens: none; | |||
} | } | ||
| Line 347: | Line 731: | ||
} | } | ||
/* Small-desktop | /* Small-desktop / landscape-tablet Citizen keeps the desktop-style four-slot | ||
rhythm, but uses larger icons so the wider mobile/tablet skin does not feel | |||
@media screen and (min-width: 900px) { | sparse before the full desktop Vector layout takes over. */ | ||
.skin-citizen .wizlords-mainpage-items | @media screen and (min-width: 900px) and (max-width: 1199px) { | ||
.skin-citizen .wizlords- | .skin-citizen .wizlords-mainpage-items { | ||
.skin-citizen .wizlords- | gap: 20px 16px; | ||
} | |||
.skin-citizen .wizlords-imagetext { | |||
flex-basis: calc((100% - 48px) / 4); | |||
width: calc((100% - 48px) / 4); | |||
} | |||
.skin-citizen .wizlords-imagetext-image, | |||
.skin-citizen .wizlords-imagetext-image img { | |||
width: clamp(92px, 10vw, 108px); | |||
height: clamp(92px, 10vw, 108px); | |||
} | |||
.skin-citizen .wizlords-imagetext-text { | |||
font-size: 13px; | |||
} | |||
} | |||
/* Full-width Citizen fallback. Normal desktop visitors use Vector, but this | |||
keeps Citizen tidy if it is tested manually on a wide screen. */ | |||
@media screen and (min-width: 1200px) { | |||
.skin-citizen .wizlords-mainpage-items { | |||
gap: 16px 12px; | gap: 16px 12px; | ||
} | } | ||
| Line 461: | Line 867: | ||
line-height: 1.2; | line-height: 1.2; | ||
text-align: center; | text-align: center; | ||
overflow-wrap: | overflow-wrap: normal; | ||
word-break: normal; | |||
hyphens: none; | |||
} | |||
} | |||
/* Ultra-narrow phones/foldables. | |||
Keep the four-across homepage icon rhythm, but give labels just enough room | |||
that words do not split into single trailing letters around 344-369px. */ | |||
@media screen and (max-width: 369px) { | |||
.skin-citizen .wizlords-mainpage-items { | |||
gap: 12px 6px; | |||
} | |||
.skin-citizen .wizlords-imagetext { | |||
flex-basis: calc((100% - 18px) / 4); | |||
width: calc((100% - 18px) / 4); | |||
} | |||
.skin-citizen .wizlords-imagetext-image, | |||
.skin-citizen .wizlords-imagetext-image img { | |||
width: 58px; | |||
height: 58px; | |||
} | |||
.skin-citizen .wizlords-imagetext-text { | |||
font-size: 11px; | |||
line-height: 1.15; | |||
} | |||
} | |||
/* Extremely narrow foldable screens. | |||
At 360px and below, four columns become too tight for readable labels. | |||
The Main Page square-icon groups contain seven items, so this creates a | |||
centred 3 / 3 / 1 rhythm instead of allowing single-letter word breaks. */ | |||
@media screen and (max-width: 360px) { | |||
.skin-citizen .wizlords-mainpage-items { | |||
gap: 14px 8px; | |||
} | |||
.skin-citizen .wizlords-imagetext { | |||
flex-basis: calc((100% - 16px) / 3); | |||
width: calc((100% - 16px) / 3); | |||
} | |||
.skin-citizen .wizlords-imagetext-image, | |||
.skin-citizen .wizlords-imagetext-image img { | |||
width: 62px; | |||
height: 62px; | |||
} | |||
.skin-citizen .wizlords-imagetext-text { | |||
font-size: 12px; | |||
line-height: 1.15; | |||
} | } | ||
} | } | ||
| Line 469: | Line 928: | ||
-------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ||
At 600-899px the homepage uses the available width as one broad content | At 600-899px the homepage uses the available width as one broad content | ||
column. | column. The square icon groups need one component-specific split inside the | ||
tablet range: 600-799px keeps the stable four-column rhythm with centred | |||
wrapped rows, while 800-899px has enough room for compact single-row groups. | |||
This avoids ugly orphan rows such as 5+2 or 6+1. | |||
========================================================================== */ | ========================================================================== */ | ||
@media screen and (min-width: 600px) and (max-width: 899px) { | @media screen and (min-width: 600px) and (max-width: 899px) { | ||
| Line 523: | Line 984: | ||
} | } | ||
.skin-citizen .wizlords-mainpage-items | .skin-citizen .wizlords-mainpage-items { | ||
display: flex; | |||
flex-wrap: wrap; | |||
gap: | gap: 12px 16px; | ||
max-width: 360px; | |||
margin-right: auto; | |||
margin-left: auto; | |||
justify-content: center; | |||
align-items: flex-start; | |||
} | } | ||
.skin-citizen .wizlords-imagetext { | .skin-citizen .wizlords-imagetext { | ||
flex | flex: 0 0 78px; | ||
width: | width: 78px; | ||
max-width: none; | |||
} | } | ||
| Line 550: | Line 1,012: | ||
font-size: 12px; | font-size: 12px; | ||
line-height: 1.15; | line-height: 1.15; | ||
} | |||
/* Upper tablet widths can cleanly fit seven or eight compact icons in one | |||
row. Use flex here rather than auto-fit grid: auto-fit can create an | |||
empty eighth track for seven-item groups once there is enough width, | |||
while flex only lays out real icon items. */ | |||
@media screen and (min-width: 800px) { | |||
.skin-citizen .wizlords-mainpage-items { | |||
display: flex; | |||
flex-wrap: wrap; | |||
gap: 10px 14px; | |||
max-width: none; | |||
justify-content: center; | |||
align-items: flex-start; | |||
} | |||
.skin-citizen .wizlords-imagetext { | |||
flex: 0 0 78px; | |||
} | |||
} | } | ||
| Line 628: | Line 1,109: | ||
padding-right: max(var(--padding-page, 16px), env(safe-area-inset-right)); | padding-right: max(var(--padding-page, 16px), env(safe-area-inset-right)); | ||
padding-left: max(var(--padding-page, 16px), env(safe-area-inset-left)); | padding-left: max(var(--padding-page, 16px), env(safe-area-inset-left)); | ||
} | } | ||
} | } | ||
| Line 660: | Line 1,131: | ||
} | } | ||
.skin-citizen .wizlords-magic-intro { | .skin-citizen .wizlords-magic-intro { | ||
align-items: flex-start; | align-items: flex-start; | ||
gap: 16px; | gap: 16px; | ||
} | } | ||
| Line 726: | Line 1,192: | ||
min-width: 0; | min-width: 0; | ||
max-width: 100%; | max-width: 100%; | ||
} | |||
.skin-citizen .wizlords-class-category-table { | |||
max-width: 640px; | |||
} | |||
.skin-citizen .citizen-overflow-wrapper:has(.wizlords-reward-table) { | |||
margin-right: auto; | |||
margin-left: auto; | |||
} | |||
.skin-citizen .wizlords-class-category-mobile { | |||
max-width: 420px; | |||
} | } | ||
| Line 755: | Line 1,234: | ||
padding: 6px 10px; | padding: 6px 10px; | ||
text-align: center; | text-align: center; | ||
} | |||
.skin-citizen .wizlords-class-card-title { | |||
font-family: Roboto, Roboto-fallback, system-ui, -apple-system, sans-serif !important; | |||
font-size: 20px !important; | |||
font-weight: 700 !important; | |||
line-height: 1.25 !important; | |||
} | |||
.skin-citizen .wizlords-class-card-summary { | |||
font-family: Roboto, Roboto-fallback, system-ui, -apple-system, sans-serif !important; | |||
font-size: 13px !important; | |||
font-style: italic !important; | |||
font-weight: 400 !important; | |||
line-height: 1.35 !important; | |||
display: block !important; | |||
overflow: visible !important; | |||
-webkit-line-clamp: unset !important; | |||
} | } | ||
} | } | ||