MediaWiki:Portal.css: Difference between revisions
MediaWiki interface page
More actions
No edit summary |
m Suppress empty paragraphs MW injects around block HTML in wikitext |
||
| (14 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
/* | /* | ||
* MediaWiki:Portal.css — BattlestarWiki | |||
* MediaWiki:Portal.css | * Loaded via MediaWiki:Common.js | ||
* Design tokens from MediaWiki:Citizen.css (dark theme) | |||
* Loaded via MediaWiki: | |||
*/ | */ | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
PAGE SHELL | PAGE SHELL | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-page { | .portal-page { | ||
| Line 33: | Line 14: | ||
} | } | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
HEADER | HEADER | ||
Structure: .portal-header > .portal-header-top + .portal-stats-bar | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal-header { | .portal-header { | ||
background: var( -- | background: var(--background2); | ||
border: 1px solid var( --border-color-base ); | border: 1px solid var(--border-color-base); | ||
border-radius: var( --border- | border-radius: 0; | ||
padding: | border-top: 3px solid var(--border-color-base); | ||
padding: 12px 16px 0; | |||
margin-bottom: 12px; | margin-bottom: 12px; | ||
} | } | ||
| Line 51: | Line 34: | ||
flex-wrap: wrap; | flex-wrap: wrap; | ||
gap: 8px; | gap: 8px; | ||
padding-bottom: 10px; | |||
} | } | ||
.portal-title { | .portal-title { | ||
font-size: 1. | font-size: 1.25em; | ||
font-weight: | font-weight: 700; | ||
color: var(--color-primary); | |||
color: var( --color- | |||
display: flex; | display: flex; | ||
align-items: center; | align-items: center; | ||
| Line 66: | Line 48: | ||
.portal-badge { | .portal-badge { | ||
font-size: | font-size: 0.65em; | ||
font-weight: 500; | font-weight: 500; | ||
padding: 2px 9px; | padding: 2px 9px; | ||
border-radius: 999px; | border-radius: 999px; | ||
border: 1px solid var( --border-color-base ); | border: 1px solid var(--border-color-base--lighter); | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
background: var( -- | background: var(--background3); | ||
vertical-align: middle; | vertical-align: middle; | ||
font-family: var(--font-family-base); | |||
} | } | ||
.portal-breadcrumb { | .portal-breadcrumb { | ||
font-size: | font-size: 0.75em; | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
margin-top: | margin-top: 2px; | ||
} | } | ||
.portal-header-links { | .portal-header-links { | ||
font-size: | font-size: 0.75em; | ||
color: var( --color- | color: var(--color-link); | ||
white-space: nowrap; | white-space: nowrap; | ||
padding-top: | padding-top: 2px; | ||
} | |||
.portal-header-links a { | |||
color: var(--color-link); | |||
text-decoration: none; | |||
} | |||
.portal-header-links a:hover { | |||
color: var(--color-link--hover); | |||
} | } | ||
/* Stats bar */ | /* Stats bar */ | ||
.portal-stats-bar { | .portal-stats-bar { | ||
display: flex; | display: flex; | ||
gap: | gap: 0; | ||
border-top: 1px solid var(--border-color-base); | |||
border-top: 1px solid var( --border-color-base ); | margin: 0 -16px; | ||
padding | padding: 0; | ||
} | } | ||
.portal-stat { | .portal-stat { | ||
flex: 1; | |||
text-align: center; | text-align: center; | ||
padding: 8px 4px; | |||
border-right: 1px solid var(--border-color-base); | |||
} | |||
.portal-stat:last-child { | |||
border-right: none; | |||
} | } | ||
.portal-stat-num { | .portal-stat-num { | ||
font-size: 1.25em; | font-size: 1.25em; | ||
font-weight: | font-weight: 700; | ||
line-height: 1. | line-height: 1.1; | ||
color: var( --color- | color: var(--color-primary); | ||
display: block; | |||
} | } | ||
.portal-stat-label { | .portal-stat-label { | ||
font-size: | font-size: 0.6rem; | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
text-transform: uppercase; | |||
letter-spacing: 0.06em; | |||
display: block; | |||
margin-top: 1px; | margin-top: 1px; | ||
} | } | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
SERIES | SERIES NAV PILLS | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-series-nav { | .portal-series-nav { | ||
| Line 127: | Line 128: | ||
margin-bottom: 12px; | margin-bottom: 12px; | ||
align-items: center; | align-items: center; | ||
} | } | ||
.portal-series-pill { | .portal-series-pill { | ||
display: inline-block; | display: inline-block; | ||
font-size: | font-size: 0.78em; | ||
padding: 4px 12px; | padding: 4px 12px; | ||
border-radius: 999px; | border-radius: 999px; | ||
border: 1px solid var( --border-color-base ); | border: 1px solid var(--border-color-base--lighter); | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
background: | background: transparent; | ||
cursor: pointer; | cursor: pointer; | ||
text-decoration: none !important; | text-decoration: none !important; | ||
white-space: nowrap; | white-space: nowrap; | ||
transition: background 0.15s, border-color 0.15s; | transition: background 0.15s, border-color 0.15s, color 0.15s; | ||
} | } | ||
.portal-series-pill:hover { | .portal-series-pill:hover { | ||
border-color: var( --border-color- | border-color: var(--border-color-base); | ||
background: var( --color- | background: var(--background-color-quiet--hover); | ||
color: var( --color-base ); | color: var(--color-base); | ||
} | } | ||
.portal-series-pill--active { | .portal-series-pill--active { | ||
border-color: var( --border-color- | border-color: var(--border-color-base); | ||
background: var( --color- | background: var(--background-color-quiet--hover); | ||
color: var( --color- | color: var(--color-primary); | ||
font-weight: 600; | font-weight: 600; | ||
cursor: default; | cursor: default; | ||
| Line 167: | Line 162: | ||
} | } | ||
.portal-series-pill-sep { | .portal-series-pill-sep { | ||
flex: 0 0 8px; | flex: 0 0 8px; | ||
} | } | ||
/* | .portal-series-nav a { | ||
MAIN | color: inherit; | ||
text-decoration: none; | |||
} | |||
/* ═══════════════════════════════════════════════════════════ | |||
MAIN GRID | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal-main-grid { | .portal-main-grid { | ||
display: grid; | display: grid; | ||
grid-template-columns: 1fr | grid-template-columns: 1fr 280px; | ||
gap: 12px; | gap: 12px; | ||
align-items: start; | align-items: start; | ||
} | } | ||
@media screen and ( max-width: 800px ) { | @media screen and (max-width: 800px) { | ||
.portal-main-grid { | .portal-main-grid { grid-template-columns: 1fr; } | ||
} | } | ||
| Line 194: | Line 191: | ||
flex-direction: column; | flex-direction: column; | ||
gap: 12px; | gap: 12px; | ||
min-width: 0; /* prevent grid blowout */ | |||
overflow: hidden; | |||
} | } | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
WIDGET CARD | WIDGET CARD — matches bsw-card exactly | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-widget { | .portal-widget { | ||
background: var( -- | background: var(--background2); | ||
overflow: hidden; | overflow: hidden; | ||
} | } | ||
/* Head — matches bsw-card-hd */ | |||
.portal-widget-head { | .portal-widget-head { | ||
display: flex; | display: flex; | ||
align-items: center; | align-items: center; | ||
justify-content: space-between; | justify-content: space-between; | ||
padding: | padding: 5px 12px; | ||
background: var(--color-surface-2--active); | |||
border-bottom: 1px solid var(--border-color-base); | |||
gap: 8px; | gap: 8px; | ||
flex-wrap: wrap; | flex-wrap: wrap; | ||
| Line 219: | Line 217: | ||
.portal-widget-title { | .portal-widget-title { | ||
font-size: | font-size: 0.6875rem; | ||
font-weight: 600; | font-weight: 600; | ||
color: var( --color- | color: var(--color-primary); | ||
text-transform: uppercase; | |||
letter-spacing: 0.08em; | |||
} | } | ||
.portal-widget-edit { | .portal-widget-edit { | ||
font-size: | font-size: 0.6875rem; | ||
color: var( --color-link ); | color: var(--color-link); | ||
white-space: nowrap; | white-space: nowrap; | ||
font-weight: 400; | |||
text-transform: none; | |||
letter-spacing: 0; | |||
} | } | ||
.portal-widget- | .portal-widget-edit a, | ||
.portal-widget-head a { | |||
color: var(--color-link); | |||
text-decoration: none; | |||
color: var( --color- | |||
} | } | ||
.portal-widget- | .portal-widget-edit a:hover, | ||
.portal-widget-head a:hover { | |||
color: var(--color-link--hover); | |||
} | } | ||
.portal-widget-foot { | |||
.portal- | |||
display: flex; | display: flex; | ||
justify-content: space-between; | |||
align-items: center; | align-items: center; | ||
padding: 5px 12px; | |||
border-top: 1px solid var(--border-color-base); | |||
font-size: 0.6875rem; | |||
color: var(--color-base--subtle); | |||
gap: 8px; | gap: 8px; | ||
flex-wrap: wrap; | |||
background: var(--background3); | |||
} | } | ||
.portal- | .portal-widget-foot a { | ||
color: var(--color-link); | |||
text-decoration: none; | |||
color: var( --color- | |||
} | } | ||
.portal- | .portal-widget-foot a:hover { | ||
color: var(--color-link--hover); | |||
} | } | ||
.portal- | .portal-widget-body { | ||
padding: 10px 12px; | |||
overflow-x: auto; /* allow scroll rather than blowout */ | |||
max-width: 100%; | |||
} | } | ||
.portal- | /* Suppress empty paragraphs MW injects around block HTML in wikitext */ | ||
display: | .portal-widget-body > p:empty, | ||
.portal-widget-body > p:first-child:empty, | |||
.portal-widget-body > p:last-child:empty, | |||
.portal-widget-body > p > br:only-child { | |||
display: none; | |||
margin: 0; | |||
padding: 0; | |||
} | } | ||
/* ═══════════════════════════════════════════════════════════ | |||
/* | |||
NEWEST ARTICLE | NEWEST ARTICLE | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-newest-inner { | .portal-newest-inner { | ||
display: flex; | |||
gap: 10px; | |||
align-items: flex-start; | |||
} | } | ||
/* Uses bsw-fa-* classes from Citizen.css — no extra styles needed */ | |||
/* | /* ═══════════════════════════════════════════════════════════ | ||
COLONIAL CALENDAR | COLONIAL CALENDAR | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-calendar-date { | .portal-calendar-date { | ||
font-size: 1. | font-size: 1.6em; | ||
font-weight: | font-weight: 700; | ||
color: var(--color-primary); | |||
line-height: 1.2; | line-height: 1.2; | ||
} | } | ||
.portal-calendar-sub { | .portal-calendar-sub { | ||
font-size: | font-size: 0.75em; | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
margin-bottom: | margin-bottom: 8px; | ||
} | } | ||
| Line 406: | Line 318: | ||
.portal-calendar-event { | .portal-calendar-event { | ||
font-size: | font-size: 0.8125em; | ||
color: var( --color-base ); | color: var(--color-base); | ||
padding: | padding: 5px 0; | ||
border-bottom: 1px solid var( --border-color-base ); | border-bottom: 1px solid var(--border-color-base); | ||
line-height: 1.5; | line-height: 1.5; | ||
} | } | ||
.portal-calendar-event:last-child { | .portal-calendar-event:last-child { border-bottom: none; } | ||
} | |||
.portal-calendar-year { | .portal-calendar-year { | ||
font-weight: 600; | font-weight: 600; | ||
color: var( --color- | color: var(--color-primary); | ||
margin-right: | margin-right: 3px; | ||
} | } | ||
.portal-calendar-none { | .portal-calendar-none { | ||
font-size: | font-size: 0.8125em; | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
} | } | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
RELATED PORTALS | RELATED PORTALS | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-related-grid { | .portal-related-grid { | ||
display: grid; | display: grid; | ||
grid-template-columns: 1fr 1fr; | grid-template-columns: 1fr 1fr; | ||
gap: | gap: 5px; | ||
} | } | ||
.portal-related-tile { | .portal-related-tile { | ||
background: var( -- | background: var(--background3); | ||
clip-path: polygon(0 6px,6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px)); | |||
padding: 7px 9px; | |||
padding: 7px | font-size: 0.8em; | ||
font-size: | transition: background 0.15s; | ||
transition: | |||
} | } | ||
.portal-related- | .portal-related-title { | ||
font-weight: 600; | |||
line-height: 1.3; | |||
} | |||
.portal-related-sub { | |||
font-size: 0.85em; | |||
color: var(--color-base--subtle); | |||
margin-top: 2px; | |||
line-height: 1.3; | |||
} | } | ||
.portal-related- | .portal-related-tile:hover { | ||
background: var(--color-surface-2--hover); | |||
} | } | ||
.portal-related-title a { | .portal-related-title a { | ||
color: var( --color- | color: var(--color-link); | ||
text-decoration: none; | text-decoration: none; | ||
} | } | ||
.portal-related- | .portal-related-title a:hover { color: var(--color-link--hover); } | ||
} | |||
/* | /* ═══════════════════════════════════════════════════════════ | ||
DYK | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal-dyk-body li, | .portal-dyk-body li, | ||
.portal-dyk-body p { | .portal-dyk-body p { | ||
font-size: | font-size: 0.8125em; | ||
line-height: 1. | line-height: 1.65; | ||
padding: | padding: 5px 0; | ||
border-bottom: 1px solid var( --border-color-base ); | border-bottom: 1px solid var(--border-color-base); | ||
margin: 0; | margin: 0; | ||
color: var(--color-base--subtle); | |||
} | } | ||
.portal-dyk-body li:last-child, | .portal-dyk-body li:last-child, | ||
.portal-dyk-body p:last-child { | .portal-dyk-body p:last-child { border-bottom: none; } | ||
} | |||
/* | /* ═══════════════════════════════════════════════════════════ | ||
ORPHANED ARTICLES | ORPHANED ARTICLES | ||
═══════════════════════════════════════════════════════════ */ | |||
.portal-orphan-chips { | .portal-orphan-chips { | ||
| Line 495: | Line 407: | ||
.portal-orphan-chip { | .portal-orphan-chip { | ||
font-size: | font-size: 0.75em; | ||
padding: 2px 8px; | padding: 2px 8px; | ||
border-radius: 999px; | border-radius: 999px; | ||
border: 1px solid | border: 1px solid var(--border-color-base--lighter); | ||
color: | color: var(--color-base--subtle); | ||
background: | background: var(--background3); | ||
white-space: nowrap; | white-space: nowrap; | ||
} | } | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
BROWSE BY TOPIC | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal-browse-bar { | |||
display: flex; | |||
flex-wrap: wrap; | |||
gap: 5px; | |||
} | } | ||
.portal-browse-topic { display: inline-block; } | |||
.portal- | .portal-browse-topic a { | ||
display: inline-block; | |||
font-size: 0.8125rem; | |||
padding: 3px 11px; | |||
border-radius: 999px; | |||
border: 1px solid var(--border-color-base--lighter); | |||
color: var(--color-base) !important; | |||
background: var(--background3); | |||
text-decoration: none !important; | |||
transition: background 0.15s, border-color 0.15s, color 0.15s; | |||
white-space: nowrap; | |||
} | } | ||
.portal- | .portal-browse-topic a:hover { | ||
background: var(--background-color-quiet--hover); | |||
border-color: var(--border-color-base); | |||
color: var(--color-primary) !important; | |||
} | } | ||
/* ═══════════════════════════════════════════════════════════ | |||
PODCAST TEASER | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal- | .portal-podcast-teaser { | ||
font-size: 0.8125rem; | |||
color: var(--color-base--subtle); | |||
line-height: 1.5; | |||
} | } | ||
.portal- | .portal-podcast-teaser a { | ||
color: var(--color-link); | |||
color: var( --color- | |||
text-decoration: none; | text-decoration: none; | ||
} | } | ||
/* ═══════════════════════════════════════════════════════════ | |||
SUBPORTALS | |||
═══════════════════════════════════════════════════════════ */ | |||
/* | |||
SUBPORTALS | |||
.portal-subportals { | .portal-subportals { | ||
display: grid; | display: grid; | ||
grid-template-columns: 1fr | grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); | ||
gap: 12px; | gap: 12px; | ||
} | } | ||
.portal-subportals-heading { | .portal-subportals-heading { | ||
font-size: | font-size: 0.6875rem; | ||
font-weight: 600; | font-weight: 600; | ||
color: var( --color-base ); | color: var(--color-primary); | ||
text-transform: uppercase; | |||
letter-spacing: 0.05em; | |||
margin-bottom: 5px; | |||
border-bottom: 1px solid var(--border-color-base); | |||
padding-bottom: 3px; | |||
} | } | ||
| Line 587: | Line 489: | ||
display: flex; | display: flex; | ||
flex-direction: column; | flex-direction: column; | ||
gap: | gap: 3px; | ||
font-size: 0.8125em; | |||
} | } | ||
.portal-subportals-list li { | .portal-subportals-list li { | ||
padding-left: 10px; | padding-left: 10px; | ||
position: relative; | position: relative; | ||
| Line 601: | Line 502: | ||
position: absolute; | position: absolute; | ||
left: 0; | left: 0; | ||
color: var( --color- | color: var(--color-primary); | ||
} | } | ||
.portal-subportals-list a { | |||
color: var(--color-link); | |||
text-decoration: none; | |||
.portal- | |||
} | } | ||
.portal- | .portal-subportals-list a:hover { color: var(--color-link--hover); } | ||
} | |||
/* ═══════════════════════════════════════════════════════════ | |||
HERO SLIDER — mirrors bsw-hero / bsw-slide exactly | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal-hero { | .portal-hero { | ||
position: relative; | position: relative; | ||
height: 420px; | |||
overflow: hidden; | overflow: hidden; | ||
background: var( -- | background: var(--background3); | ||
margin-bottom: 12px; | |||
margin-bottom: | |||
} | } | ||
.portal-slide { | |||
.portal- | |||
position: absolute; | position: absolute; | ||
inset: 0; | inset: 0; | ||
opacity: 0; | |||
transition: opacity 0.8s ease; | |||
display: flex; | |||
align-items: flex-end; | |||
} | } | ||
.portal-slide.portal-active { opacity: 1; } | |||
.portal- | |||
.portal-slide-bg { | |||
position: absolute; | position: absolute; | ||
inset: | inset: 0; | ||
overflow: hidden; | |||
} | } | ||
.portal-slide-bg-blur { | |||
.portal- | |||
position: absolute; | position: absolute; | ||
inset: | inset: -20px; | ||
width: calc(100% + 40px); | |||
height: calc(100% + 40px); | |||
object-fit: cover; | |||
object-position: center; | |||
filter: blur(24px) brightness(0.45) saturate(1.4); | |||
); | display: block; | ||
clip-path: none !important; | |||
transform: scale(1.05); | |||
} | } | ||
.portal-slide-bg-img { | |||
.portal- | |||
position: absolute; | position: absolute; | ||
inset: 0; | inset: 0; | ||
width: 100%; | |||
height: 100%; | |||
object-fit: contain; | |||
object-position: center; | |||
display: block; | display: block; | ||
clip-path: none !important; | |||
} | } | ||
.portal- | .portal-slide-overlay { | ||
position: absolute; | |||
inset: 0; | |||
background: linear-gradient(to top, var(--background3) 0%, rgba(0,0,0,0.35) 55%, transparent 100%); | |||
z-index: 1; | |||
} | } | ||
.portal-slide-content { | |||
.portal- | position: relative; | ||
position: | |||
z-index: 2; | z-index: 2; | ||
padding: 1rem 1.25rem; | |||
width: 100%; | |||
} | } | ||
.portal-slide-badge { | |||
.portal- | display: inline-flex; | ||
display: inline- | |||
align-items: center; | align-items: center; | ||
gap: 5px; | gap: 5px; | ||
background: var(--background-color-quiet--hover); | |||
border: 1px solid var(--border-color-base--lighter); | |||
border-radius: 12px; | |||
padding: 2px 9px; | |||
margin-bottom: 0.375rem; | |||
} | } | ||
.portal- | .portal-slide-badge-dot { | ||
width: 6px; | width: 6px; | ||
height: 6px; | height: 6px; | ||
border-radius: 50%; | border-radius: 50%; | ||
background: | background: var(--color-primary); | ||
flex-shrink: 0; | |||
} | } | ||
.portal- | .portal-slide-badge span { | ||
font-size: 0.6875rem; | |||
color: var(--color-primary--hover); | |||
text-transform: uppercase; | |||
letter-spacing: 0.08em; | |||
font-size: | |||
color: | |||
} | } | ||
.portal-slide-title { | |||
font-size: 1.375rem; | |||
.portal- | |||
font-size: 1. | |||
font-weight: 600; | font-weight: 600; | ||
color: var(--color-base); | |||
color: var( --color-base ); | margin-bottom: 0.25rem; | ||
line-height: 1.2; | |||
} | } | ||
.portal- | .portal-slide-title a { | ||
color: var(--color-base); | |||
text-decoration: none; | |||
color: var( --color-base | |||
} | } | ||
.portal- | .portal-slide-title a:hover { color: var(--color-primary--hover); } | ||
} | |||
.portal- | .portal-slide-desc { | ||
font-size: | font-size: 0.8125rem; | ||
color: var( --color-base--subtle ); | color: var(--color-base--subtle); | ||
max-width: 560px; | |||
line-height: 1.55; | |||
} | } | ||
.portal-hero-dots { | |||
position: absolute; | |||
.portal- | top: 0.75rem; | ||
right: 0.75rem; | |||
display: flex; | display: flex; | ||
gap: | gap: 5px; | ||
z-index: 10; | |||
} | } | ||
.portal- | .portal-hero-dot { | ||
width: 7px; | |||
height: 7px; | |||
border-radius: 50%; | |||
background: var(--background-color-icon); | |||
cursor: pointer; | |||
transition: background 0.2s; | |||
display: inline-block; | |||
} | } | ||
.portal- | .portal-hero-dot.is-active { background: var(--color-primary); } | ||
} | |||
.portal- | .portal-hero-nav { | ||
position: absolute; | |||
bottom: 0.75rem; | |||
right: 0.75rem; | |||
display: flex; | display: flex; | ||
gap: 5px; | gap: 5px; | ||
z-index: 10; | |||
} | } | ||
.portal-hero-btn { | |||
.portal- | width: 24px; | ||
height: 24px; | |||
border-radius: 50%; | |||
background: var(--background-color-quiet--hover); | |||
border: 1px solid var(--border-color-base--lighter); | |||
color: var(--color-primary); | |||
font-size: 0.875rem; | |||
border: 1px solid var( --border-color-base ); | |||
color: var( --color- | |||
cursor: pointer; | cursor: pointer; | ||
display: inline-flex; | |||
align-items: center; | |||
transition: background 0.15s | justify-content: center; | ||
line-height: 1; | |||
transition: background 0.15s; | |||
user-select: none; | |||
} | } | ||
.portal- | .portal-hero-btn:hover { | ||
background: var(--background-color-quiet--active); | |||
color: var(--color-primary--hover); | |||
color: var( --color- | |||
} | } | ||
@media screen and (max-width: 600px) { | |||
.portal- | .portal-hero { height: 280px; } | ||
.portal-slide-title { font-size: 1rem; } | |||
.portal-slide-desc { font-size: 0.75rem; } | |||
} | } | ||
/* | /* ═══════════════════════════════════════════════════════════ | ||
CHARACTER GRID | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal- | .portal-char-grid { | ||
display: grid; | display: grid; | ||
grid-template-columns: 1fr | grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); | ||
gap: | gap: 6px; | ||
align-items: start; | align-items: start; | ||
} | } | ||
.portal-char-card { } | |||
} | |||
.portal- | .portal-char-card a { | ||
display: block; | |||
display: | text-decoration: none !important; | ||
background: var(--background3); | |||
clip-path: polygon(0 6px,6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px)); | |||
background: var( -- | |||
overflow: hidden; | overflow: hidden; | ||
transition: background 0.15s, transform 0.15s; | |||
} | } | ||
.portal- | .portal-char-card a:hover { | ||
background: var(--color-surface-2--hover); | |||
transform: translateY(-2px); | |||
background: var( --color-surface-2 ); | |||
} | } | ||
.portal- | .portal-char-card span[typeof~="mw:File/Frameless"] { | ||
display: block; | |||
width: 100%; | |||
height: 130px; | |||
overflow: hidden; | |||
line-height: 0; | |||
} | } | ||
.portal- | .portal-char-card .mw-file-description { | ||
display: block; | |||
width: 100%; | |||
height: 130px; | |||
overflow: hidden; | |||
background: var(--background3); | |||
line-height: 0; | |||
} | } | ||
.portal- | .portal-char-card .mw-file-element { | ||
width: 100% !important; | |||
height: 130px !important; | |||
object-fit: cover !important; | |||
object-position: top center !important; | |||
display: block !important; | |||
float: none !important; | |||
margin: 0 !important; | |||
} | } | ||
.portal- | .portal-char-name { | ||
font-size: 0.7rem; | |||
color: var(--color-base); | |||
font-size: | |||
color: var( --color-base | |||
text-align: center; | text-align: center; | ||
padding: 4px 4px 5px; | |||
line-height: 1.3; | |||
white-space: nowrap; | |||
overflow: hidden; | |||
text-overflow: ellipsis; | |||
background: var(--background2); | |||
} | } | ||
/* ═══════════════════════════════════════════════════════════ | |||
FEATURED EPISODE NAV | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal- | .portal-featured-nav { | ||
display: flex; | display: flex; | ||
align-items: center; | align-items: center; | ||
gap: | gap: 6px; | ||
} | } | ||
.portal- | .portal-featured-prev, | ||
.portal- | .portal-featured-next { | ||
width: | width: 20px; | ||
height: | height: 20px; | ||
border-radius: 50%; | border-radius: 50%; | ||
background: var(--background3); | |||
border: 1px solid var(--border-color-base--lighter); | |||
color: var( --color- | color: var(--color-primary); | ||
font-size: 0.875rem; | |||
cursor: pointer; | cursor: pointer; | ||
display: inline-flex; | display: inline-flex; | ||
align-items: center; | align-items: center; | ||
justify-content: center; | justify-content: center; | ||
user-select: none; | user-select: none; | ||
transition: background 0.15s; | transition: background 0.15s; | ||
} | } | ||
.portal- | .portal-featured-prev:hover, | ||
.portal- | .portal-featured-next:hover { | ||
background: var( --color- | background: var(--background-color-quiet--hover); | ||
} | } | ||
.portal- | .portal-featured-dots { | ||
display: flex; | display: flex; | ||
gap: 4px; | gap: 4px; | ||
align-items: center; | |||
} | } | ||
.portal- | .portal-featured-dot { | ||
width: | width: 5px; | ||
height: | height: 5px; | ||
border-radius: 50%; | border-radius: 50%; | ||
background: var( -- | background: var(--background-color-icon); | ||
cursor: pointer; | cursor: pointer; | ||
transition: background 0.2s; | transition: background 0.2s; | ||
} | } | ||
.portal- | .portal-featured-dot.is-active { background: var(--color-primary); } | ||
} | |||
/* ═══════════════════════════════════════════════════════════ | |||
EPISODE GUIDE PAGE SLIDERS | |||
═══════════════════════════════════════════════════════════ */ | |||
.portal- | .portal-epguide { | ||
display: flex; | |||
flex-direction: column; | |||
gap: 0; | |||
} | } | ||
.portal-epguide-section { | |||
background: var(--background2); | |||
clip-path: polygon(0 10px,10px 0,calc(100% - 8px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px)); | |||
overflow: hidden; | |||
.portal- | margin-bottom: 12px; | ||
} | } | ||
.portal- | .portal-epguide-hd { | ||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
padding: 5px 12px; | |||
background: var(--color-surface-2--active); | |||
border-bottom: 1px solid var(--border-color-base); | |||
} | } | ||
.portal- | .portal-epguide-title { | ||
font-size: | font-size: 0.6875rem; | ||
font-weight: 600; | font-weight: 600; | ||
color: var(--color-primary); | |||
text-transform: uppercase; | |||
letter-spacing: 0.08em; | |||
color: var( --color- | |||
} | } | ||
.portal- | .portal-epguide-link { | ||
font-size: 0.6875rem; | |||
color: var(--color-link); | |||
font-size: | |||
color: var( --color- | |||
text-decoration: none; | text-decoration: none; | ||
} | } | ||
.portal- | .portal-epguide-link:hover { | ||
color: var(--color-link--hover); | |||
color: var( --color- | |||
} | } | ||
.portal-epguide-slider { | |||
padding: 10px 12px; | |||
min-height: 60px; | |||
.portal- | |||
} | } | ||
/* Individual slide layout: thumb left, info right */ | |||
.portal-ep-slide { | |||
.portal- | |||
display: flex; | display: flex; | ||
gap: 12px; | |||
align-items: flex-start; | |||
} | } | ||
.portal- | .portal-ep-thumb-wrap { | ||
flex-shrink: 0; | |||
display: block; | |||
} | } | ||
.portal-ep-thumb { | |||
width: 160px; | |||
height: 90px; | |||
object-fit: cover; | |||
object-position: center; | |||
display: block; | |||
clip-path: polygon(0 6px,6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px)); | |||
clip-path: none !important; /* screencaps look better without */ | |||
} | } | ||
.portal-ep-info { | |||
flex: 1; | |||
min-width: 0; | |||
.portal- | |||
} | } | ||
.portal- | .portal-ep-title { | ||
font-size: 0.9375rem; | |||
font-size: | |||
font-weight: 600; | font-weight: 600; | ||
margin-bottom: 4px; | margin-bottom: 4px; | ||
line-height: 1.3; | |||
} | } | ||
.portal- | .portal-ep-title a { | ||
color: var(--color-link); | |||
color: var( --color- | |||
text-decoration: none; | text-decoration: none; | ||
} | } | ||
.portal- | .portal-ep-title a:hover { color: var(--color-link--hover); } | ||
} | |||
.portal- | .portal-ep-extract { | ||
font-size: | font-size: 0.8125rem; | ||
color: var(--color-base--subtle); | |||
color: var( --color-base ); | line-height: 1.55; | ||
} | } | ||
.portal- | /* Nav bar */ | ||
.portal-ep-nav { | |||
display: flex; | display: flex; | ||
align-items: center; | |||
gap: 8px; | gap: 8px; | ||
margin-top: 10px; | |||
padding-top: 8px; | |||
border-top: 1px solid var(--border-color-base); | |||
} | } | ||
.portal- | .portal-ep-btn { | ||
width: 22px; | |||
height: 22px; | |||
border-radius: 50%; | |||
background: var(--background3); | |||
border: 1px solid var(--border-color-base--lighter); | |||
color: var(--color-primary); | |||
font-size: 0.875rem; | |||
cursor: pointer; | |||
border: 1px solid var( --border-color-base | display: inline-flex; | ||
font-size: | |||
align-items: center; | align-items: center; | ||
justify-content: center; | |||
user-select: none; | user-select: none; | ||
flex-shrink: 0; | |||
transition: | transition: background 0.15s; | ||
} | } | ||
.portal- | .portal-ep-btn:hover { background: var(--background-color-quiet--hover); } | ||
} | |||
.portal- | .portal-ep-dots { | ||
display: flex; | display: flex; | ||
gap: 4px; | gap: 4px; | ||
align-items: center; | align-items: center; | ||
flex: 1; | |||
flex-wrap: wrap; | |||
} | } | ||
.portal- | .portal-ep-dot { | ||
width: | width: 5px; | ||
height: | height: 5px; | ||
border-radius: 50%; | border-radius: 50%; | ||
background: var( -- | background: var(--background-color-icon); | ||
cursor: pointer; | cursor: pointer; | ||
transition: background 0.2s | transition: background 0.2s; | ||
flex-shrink: 0; | |||
} | |||
.portal-ep-dot.is-active { background: var(--color-primary); } | |||
.portal-ep-count { | |||
font-size: 0.6875rem; | |||
color: var(--color-base--subtle); | |||
white-space: nowrap; | |||
flex-shrink: 0; | |||
} | } | ||
.portal- | @media screen and (max-width: 500px) { | ||
.portal-ep-thumb { width: 110px; height: 62px; } | |||
} | } | ||
Latest revision as of 21:06, 16 April 2026
/*
* MediaWiki:Portal.css — BattlestarWiki
* Loaded via MediaWiki:Common.js
* Design tokens from MediaWiki:Citizen.css (dark theme)
*/
/* ═══════════════════════════════════════════════════════════
PAGE SHELL
═══════════════════════════════════════════════════════════ */
.portal-page {
max-width: 1100px;
margin: 0 auto;
}
/* ═══════════════════════════════════════════════════════════
HEADER
Structure: .portal-header > .portal-header-top + .portal-stats-bar
═══════════════════════════════════════════════════════════ */
.portal-header {
background: var(--background2);
border: 1px solid var(--border-color-base);
border-radius: 0;
border-top: 3px solid var(--border-color-base);
padding: 12px 16px 0;
margin-bottom: 12px;
}
.portal-header-top {
display: flex;
align-items: flex-start;
justify-content: space-between;
flex-wrap: wrap;
gap: 8px;
padding-bottom: 10px;
}
.portal-title {
font-size: 1.25em;
font-weight: 700;
color: var(--color-primary);
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.portal-badge {
font-size: 0.65em;
font-weight: 500;
padding: 2px 9px;
border-radius: 999px;
border: 1px solid var(--border-color-base--lighter);
color: var(--color-base--subtle);
background: var(--background3);
vertical-align: middle;
font-family: var(--font-family-base);
}
.portal-breadcrumb {
font-size: 0.75em;
color: var(--color-base--subtle);
margin-top: 2px;
}
.portal-header-links {
font-size: 0.75em;
color: var(--color-link);
white-space: nowrap;
padding-top: 2px;
}
.portal-header-links a {
color: var(--color-link);
text-decoration: none;
}
.portal-header-links a:hover {
color: var(--color-link--hover);
}
/* Stats bar */
.portal-stats-bar {
display: flex;
gap: 0;
border-top: 1px solid var(--border-color-base);
margin: 0 -16px;
padding: 0;
}
.portal-stat {
flex: 1;
text-align: center;
padding: 8px 4px;
border-right: 1px solid var(--border-color-base);
}
.portal-stat:last-child {
border-right: none;
}
.portal-stat-num {
font-size: 1.25em;
font-weight: 700;
line-height: 1.1;
color: var(--color-primary);
display: block;
}
.portal-stat-label {
font-size: 0.6rem;
color: var(--color-base--subtle);
text-transform: uppercase;
letter-spacing: 0.06em;
display: block;
margin-top: 1px;
}
/* ═══════════════════════════════════════════════════════════
SERIES NAV PILLS
═══════════════════════════════════════════════════════════ */
.portal-series-nav {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-bottom: 12px;
align-items: center;
}
.portal-series-pill {
display: inline-block;
font-size: 0.78em;
padding: 4px 12px;
border-radius: 999px;
border: 1px solid var(--border-color-base--lighter);
color: var(--color-base--subtle);
background: transparent;
cursor: pointer;
text-decoration: none !important;
white-space: nowrap;
transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.portal-series-pill:hover {
border-color: var(--border-color-base);
background: var(--background-color-quiet--hover);
color: var(--color-base);
}
.portal-series-pill--active {
border-color: var(--border-color-base);
background: var(--background-color-quiet--hover);
color: var(--color-primary);
font-weight: 600;
cursor: default;
}
.portal-series-pill--jump {
border-style: dashed;
}
.portal-series-pill-sep {
flex: 0 0 8px;
}
.portal-series-nav a {
color: inherit;
text-decoration: none;
}
/* ═══════════════════════════════════════════════════════════
MAIN GRID
═══════════════════════════════════════════════════════════ */
.portal-main-grid {
display: grid;
grid-template-columns: 1fr 280px;
gap: 12px;
align-items: start;
}
@media screen and (max-width: 800px) {
.portal-main-grid { grid-template-columns: 1fr; }
}
.portal-main-col,
.portal-sidebar {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* prevent grid blowout */
overflow: hidden;
}
/* ═══════════════════════════════════════════════════════════
WIDGET CARD — matches bsw-card exactly
═══════════════════════════════════════════════════════════ */
.portal-widget {
background: var(--background2);
overflow: hidden;
}
/* Head — matches bsw-card-hd */
.portal-widget-head {
display: flex;
align-items: center;
justify-content: space-between;
padding: 5px 12px;
background: var(--color-surface-2--active);
border-bottom: 1px solid var(--border-color-base);
gap: 8px;
flex-wrap: wrap;
}
.portal-widget-title {
font-size: 0.6875rem;
font-weight: 600;
color: var(--color-primary);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.portal-widget-edit {
font-size: 0.6875rem;
color: var(--color-link);
white-space: nowrap;
font-weight: 400;
text-transform: none;
letter-spacing: 0;
}
.portal-widget-edit a,
.portal-widget-head a {
color: var(--color-link);
text-decoration: none;
}
.portal-widget-edit a:hover,
.portal-widget-head a:hover {
color: var(--color-link--hover);
}
.portal-widget-foot {
display: flex;
justify-content: space-between;
align-items: center;
padding: 5px 12px;
border-top: 1px solid var(--border-color-base);
font-size: 0.6875rem;
color: var(--color-base--subtle);
gap: 8px;
flex-wrap: wrap;
background: var(--background3);
}
.portal-widget-foot a {
color: var(--color-link);
text-decoration: none;
}
.portal-widget-foot a:hover {
color: var(--color-link--hover);
}
.portal-widget-body {
padding: 10px 12px;
overflow-x: auto; /* allow scroll rather than blowout */
max-width: 100%;
}
/* Suppress empty paragraphs MW injects around block HTML in wikitext */
.portal-widget-body > p:empty,
.portal-widget-body > p:first-child:empty,
.portal-widget-body > p:last-child:empty,
.portal-widget-body > p > br:only-child {
display: none;
margin: 0;
padding: 0;
}
/* ═══════════════════════════════════════════════════════════
NEWEST ARTICLE
═══════════════════════════════════════════════════════════ */
.portal-newest-inner {
display: flex;
gap: 10px;
align-items: flex-start;
}
/* Uses bsw-fa-* classes from Citizen.css — no extra styles needed */
/* ═══════════════════════════════════════════════════════════
COLONIAL CALENDAR
═══════════════════════════════════════════════════════════ */
.portal-calendar-date {
font-size: 1.6em;
font-weight: 700;
color: var(--color-primary);
line-height: 1.2;
}
.portal-calendar-sub {
font-size: 0.75em;
color: var(--color-base--subtle);
margin-bottom: 8px;
}
.portal-calendar-events {
list-style: none;
padding: 0;
margin: 0;
}
.portal-calendar-event {
font-size: 0.8125em;
color: var(--color-base);
padding: 5px 0;
border-bottom: 1px solid var(--border-color-base);
line-height: 1.5;
}
.portal-calendar-event:last-child { border-bottom: none; }
.portal-calendar-year {
font-weight: 600;
color: var(--color-primary);
margin-right: 3px;
}
.portal-calendar-none {
font-size: 0.8125em;
color: var(--color-base--subtle);
}
/* ═══════════════════════════════════════════════════════════
RELATED PORTALS
═══════════════════════════════════════════════════════════ */
.portal-related-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5px;
}
.portal-related-tile {
background: var(--background3);
clip-path: polygon(0 6px,6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px));
padding: 7px 9px;
font-size: 0.8em;
transition: background 0.15s;
}
.portal-related-title {
font-weight: 600;
line-height: 1.3;
}
.portal-related-sub {
font-size: 0.85em;
color: var(--color-base--subtle);
margin-top: 2px;
line-height: 1.3;
}
.portal-related-tile:hover {
background: var(--color-surface-2--hover);
}
.portal-related-title a {
color: var(--color-link);
text-decoration: none;
}
.portal-related-title a:hover { color: var(--color-link--hover); }
/* ═══════════════════════════════════════════════════════════
DYK
═══════════════════════════════════════════════════════════ */
.portal-dyk-body li,
.portal-dyk-body p {
font-size: 0.8125em;
line-height: 1.65;
padding: 5px 0;
border-bottom: 1px solid var(--border-color-base);
margin: 0;
color: var(--color-base--subtle);
}
.portal-dyk-body li:last-child,
.portal-dyk-body p:last-child { border-bottom: none; }
/* ═══════════════════════════════════════════════════════════
ORPHANED ARTICLES
═══════════════════════════════════════════════════════════ */
.portal-orphan-chips {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.portal-orphan-chip {
font-size: 0.75em;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border-color-base--lighter);
color: var(--color-base--subtle);
background: var(--background3);
white-space: nowrap;
}
/* ═══════════════════════════════════════════════════════════
BROWSE BY TOPIC
═══════════════════════════════════════════════════════════ */
.portal-browse-bar {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.portal-browse-topic { display: inline-block; }
.portal-browse-topic a {
display: inline-block;
font-size: 0.8125rem;
padding: 3px 11px;
border-radius: 999px;
border: 1px solid var(--border-color-base--lighter);
color: var(--color-base) !important;
background: var(--background3);
text-decoration: none !important;
transition: background 0.15s, border-color 0.15s, color 0.15s;
white-space: nowrap;
}
.portal-browse-topic a:hover {
background: var(--background-color-quiet--hover);
border-color: var(--border-color-base);
color: var(--color-primary) !important;
}
/* ═══════════════════════════════════════════════════════════
PODCAST TEASER
═══════════════════════════════════════════════════════════ */
.portal-podcast-teaser {
font-size: 0.8125rem;
color: var(--color-base--subtle);
line-height: 1.5;
}
.portal-podcast-teaser a {
color: var(--color-link);
text-decoration: none;
}
/* ═══════════════════════════════════════════════════════════
SUBPORTALS
═══════════════════════════════════════════════════════════ */
.portal-subportals {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 12px;
}
.portal-subportals-heading {
font-size: 0.6875rem;
font-weight: 600;
color: var(--color-primary);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 5px;
border-bottom: 1px solid var(--border-color-base);
padding-bottom: 3px;
}
.portal-subportals-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 3px;
font-size: 0.8125em;
}
.portal-subportals-list li {
padding-left: 10px;
position: relative;
}
.portal-subportals-list li::before {
content: '›';
position: absolute;
left: 0;
color: var(--color-primary);
}
.portal-subportals-list a {
color: var(--color-link);
text-decoration: none;
}
.portal-subportals-list a:hover { color: var(--color-link--hover); }
/* ═══════════════════════════════════════════════════════════
HERO SLIDER — mirrors bsw-hero / bsw-slide exactly
═══════════════════════════════════════════════════════════ */
.portal-hero {
position: relative;
height: 420px;
overflow: hidden;
background: var(--background3);
margin-bottom: 12px;
}
.portal-slide {
position: absolute;
inset: 0;
opacity: 0;
transition: opacity 0.8s ease;
display: flex;
align-items: flex-end;
}
.portal-slide.portal-active { opacity: 1; }
.portal-slide-bg {
position: absolute;
inset: 0;
overflow: hidden;
}
.portal-slide-bg-blur {
position: absolute;
inset: -20px;
width: calc(100% + 40px);
height: calc(100% + 40px);
object-fit: cover;
object-position: center;
filter: blur(24px) brightness(0.45) saturate(1.4);
display: block;
clip-path: none !important;
transform: scale(1.05);
}
.portal-slide-bg-img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: contain;
object-position: center;
display: block;
clip-path: none !important;
}
.portal-slide-overlay {
position: absolute;
inset: 0;
background: linear-gradient(to top, var(--background3) 0%, rgba(0,0,0,0.35) 55%, transparent 100%);
z-index: 1;
}
.portal-slide-content {
position: relative;
z-index: 2;
padding: 1rem 1.25rem;
width: 100%;
}
.portal-slide-badge {
display: inline-flex;
align-items: center;
gap: 5px;
background: var(--background-color-quiet--hover);
border: 1px solid var(--border-color-base--lighter);
border-radius: 12px;
padding: 2px 9px;
margin-bottom: 0.375rem;
}
.portal-slide-badge-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--color-primary);
flex-shrink: 0;
}
.portal-slide-badge span {
font-size: 0.6875rem;
color: var(--color-primary--hover);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.portal-slide-title {
font-size: 1.375rem;
font-weight: 600;
color: var(--color-base);
margin-bottom: 0.25rem;
line-height: 1.2;
}
.portal-slide-title a {
color: var(--color-base);
text-decoration: none;
}
.portal-slide-title a:hover { color: var(--color-primary--hover); }
.portal-slide-desc {
font-size: 0.8125rem;
color: var(--color-base--subtle);
max-width: 560px;
line-height: 1.55;
}
.portal-hero-dots {
position: absolute;
top: 0.75rem;
right: 0.75rem;
display: flex;
gap: 5px;
z-index: 10;
}
.portal-hero-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--background-color-icon);
cursor: pointer;
transition: background 0.2s;
display: inline-block;
}
.portal-hero-dot.is-active { background: var(--color-primary); }
.portal-hero-nav {
position: absolute;
bottom: 0.75rem;
right: 0.75rem;
display: flex;
gap: 5px;
z-index: 10;
}
.portal-hero-btn {
width: 24px;
height: 24px;
border-radius: 50%;
background: var(--background-color-quiet--hover);
border: 1px solid var(--border-color-base--lighter);
color: var(--color-primary);
font-size: 0.875rem;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
line-height: 1;
transition: background 0.15s;
user-select: none;
}
.portal-hero-btn:hover {
background: var(--background-color-quiet--active);
color: var(--color-primary--hover);
}
@media screen and (max-width: 600px) {
.portal-hero { height: 280px; }
.portal-slide-title { font-size: 1rem; }
.portal-slide-desc { font-size: 0.75rem; }
}
/* ═══════════════════════════════════════════════════════════
CHARACTER GRID
═══════════════════════════════════════════════════════════ */
.portal-char-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
gap: 6px;
align-items: start;
}
.portal-char-card { }
.portal-char-card a {
display: block;
text-decoration: none !important;
background: var(--background3);
clip-path: polygon(0 6px,6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px));
overflow: hidden;
transition: background 0.15s, transform 0.15s;
}
.portal-char-card a:hover {
background: var(--color-surface-2--hover);
transform: translateY(-2px);
}
.portal-char-card span[typeof~="mw:File/Frameless"] {
display: block;
width: 100%;
height: 130px;
overflow: hidden;
line-height: 0;
}
.portal-char-card .mw-file-description {
display: block;
width: 100%;
height: 130px;
overflow: hidden;
background: var(--background3);
line-height: 0;
}
.portal-char-card .mw-file-element {
width: 100% !important;
height: 130px !important;
object-fit: cover !important;
object-position: top center !important;
display: block !important;
float: none !important;
margin: 0 !important;
}
.portal-char-name {
font-size: 0.7rem;
color: var(--color-base);
text-align: center;
padding: 4px 4px 5px;
line-height: 1.3;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
background: var(--background2);
}
/* ═══════════════════════════════════════════════════════════
FEATURED EPISODE NAV
═══════════════════════════════════════════════════════════ */
.portal-featured-nav {
display: flex;
align-items: center;
gap: 6px;
}
.portal-featured-prev,
.portal-featured-next {
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--background3);
border: 1px solid var(--border-color-base--lighter);
color: var(--color-primary);
font-size: 0.875rem;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
user-select: none;
transition: background 0.15s;
}
.portal-featured-prev:hover,
.portal-featured-next:hover {
background: var(--background-color-quiet--hover);
}
.portal-featured-dots {
display: flex;
gap: 4px;
align-items: center;
}
.portal-featured-dot {
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--background-color-icon);
cursor: pointer;
transition: background 0.2s;
}
.portal-featured-dot.is-active { background: var(--color-primary); }
/* ═══════════════════════════════════════════════════════════
EPISODE GUIDE PAGE SLIDERS
═══════════════════════════════════════════════════════════ */
.portal-epguide {
display: flex;
flex-direction: column;
gap: 0;
}
.portal-epguide-section {
background: var(--background2);
clip-path: polygon(0 10px,10px 0,calc(100% - 8px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px));
overflow: hidden;
margin-bottom: 12px;
}
.portal-epguide-hd {
display: flex;
align-items: center;
justify-content: space-between;
padding: 5px 12px;
background: var(--color-surface-2--active);
border-bottom: 1px solid var(--border-color-base);
}
.portal-epguide-title {
font-size: 0.6875rem;
font-weight: 600;
color: var(--color-primary);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.portal-epguide-link {
font-size: 0.6875rem;
color: var(--color-link);
text-decoration: none;
}
.portal-epguide-link:hover {
color: var(--color-link--hover);
}
.portal-epguide-slider {
padding: 10px 12px;
min-height: 60px;
}
/* Individual slide layout: thumb left, info right */
.portal-ep-slide {
display: flex;
gap: 12px;
align-items: flex-start;
}
.portal-ep-thumb-wrap {
flex-shrink: 0;
display: block;
}
.portal-ep-thumb {
width: 160px;
height: 90px;
object-fit: cover;
object-position: center;
display: block;
clip-path: polygon(0 6px,6px 0,calc(100% - 6px) 0,100% 6px,100% calc(100% - 6px),calc(100% - 6px) 100%,6px 100%,0 calc(100% - 6px));
clip-path: none !important; /* screencaps look better without */
}
.portal-ep-info {
flex: 1;
min-width: 0;
}
.portal-ep-title {
font-size: 0.9375rem;
font-weight: 600;
margin-bottom: 4px;
line-height: 1.3;
}
.portal-ep-title a {
color: var(--color-link);
text-decoration: none;
}
.portal-ep-title a:hover { color: var(--color-link--hover); }
.portal-ep-extract {
font-size: 0.8125rem;
color: var(--color-base--subtle);
line-height: 1.55;
}
/* Nav bar */
.portal-ep-nav {
display: flex;
align-items: center;
gap: 8px;
margin-top: 10px;
padding-top: 8px;
border-top: 1px solid var(--border-color-base);
}
.portal-ep-btn {
width: 22px;
height: 22px;
border-radius: 50%;
background: var(--background3);
border: 1px solid var(--border-color-base--lighter);
color: var(--color-primary);
font-size: 0.875rem;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
user-select: none;
flex-shrink: 0;
transition: background 0.15s;
}
.portal-ep-btn:hover { background: var(--background-color-quiet--hover); }
.portal-ep-dots {
display: flex;
gap: 4px;
align-items: center;
flex: 1;
flex-wrap: wrap;
}
.portal-ep-dot {
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--background-color-icon);
cursor: pointer;
transition: background 0.2s;
flex-shrink: 0;
}
.portal-ep-dot.is-active { background: var(--color-primary); }
.portal-ep-count {
font-size: 0.6875rem;
color: var(--color-base--subtle);
white-space: nowrap;
flex-shrink: 0;
}
@media screen and (max-width: 500px) {
.portal-ep-thumb { width: 110px; height: 62px; }
}