Main Page: Difference between revisions

No edit summary
Fix remaining broken arrow characters on main page
 
(10 intermediate revisions by 2 users not shown)
Line 6: Line 6:
--vu-border: var(--border-color-base, #a2a9b1);
--vu-border: var(--border-color-base, #a2a9b1);
--vu-text: var(--color-base, #202122);
--vu-text: var(--color-base, #202122);
--vu-muted: #54595d;
--vu-surface: var(--background-color-neutral-subtle, #f8f9fa);
--vu-surface: var(--background-color-neutral-subtle, #f8f9fa);
--vu-accent: var(--background-color-progressive-subtle, #eaf3ff);
--vu-accent: var(--background-color-progressive-subtle, #eaf3ff);
--vu-link: var(--color-progressive, #36c);
--vu-link: var(--color-progressive, #36c);
--vu-header: #1B223D;
--vu-red: var(--color-destructive, #d33);
--vu-header-border: #3a506b;
--vu-navy: #1B223D;
--vu-header-text: #e0f0ff;
--vu-navy-light: #2b3d60;
 
--vu-blue: #78c7ff;
max-width: 1200px;
max-width: 1180px;
margin: 0 auto 36px;
margin: 0 auto 30px;
color: var(--vu-text);
color: var(--vu-text);
}
}
Line 24: Line 23:
}
}


.vu-main h2 {
.vu-main a {
margin: 34px 0 17px;
color: var(--vu-link);
padding-bottom: 9px;
text-decoration: none;
border-bottom: 2px solid var(--vu-border);
}
color: var(--vu-text);
 
font-size: 1.65rem;
.vu-main a:hover {
line-height: 1.3;
text-decoration: underline;
}
 
.vu-main a.new,
.vu-main a.new:visited {
color: var(--vu-red) !important;
}
}


/* Header */
/* Header */


.vu-hero {
.vu-header {
position: relative;
display: grid;
display: grid;
grid-template-columns: minmax(0, 1fr) 230px;
grid-template-columns: 240px minmax(0, 1fr);
align-items: center;
min-height: 285px;
gap: 38px;
padding: 44px;
margin-bottom: 25px;
border: 1px solid var(--vu-header-border);
border-radius: 14px;
background:
linear-gradient(
125deg,
#1B223D 0%,
#263654 58%,
#304a69 100%
);
color: var(--vu-header-text);
box-shadow: 0 5px 18px rgba(0, 0, 0, 0.18);
overflow: hidden;
overflow: hidden;
border: 1px solid #3a506b;
background: linear-gradient(118deg, #151b30 0%, #1B223D 55%, #2b3d60 100%);
color: #e0f0ff;
}
}


.vu-hero-title {
.vu-header::before {
margin-bottom: 16px;
content: "";
color: #ffffff;
position: absolute;
font-size: clamp(2.8rem, 7vw, 5rem);
right: -130px;
font-weight: 700;
top: -210px;
line-height: 1;
width: 520px;
letter-spacing: -0.04em;
height: 520px;
border: 90px solid rgba(255,255,255,0.035);
transform: rotate(18deg);
}
 
.vu-header::after {
content: "";
position: absolute;
right: 0;
bottom: 0;
width: 44%;
height: 7px;
background: var(--vu-blue);
clip-path: polygon(13px 0, 100% 0, 100% 100%, 0 100%);
}
}


.vu-hero-text {
.vu-logo-panel {
max-width: 720px;
position: relative;
margin-bottom: 24px;
z-index: 2;
color: #dbe7f5;
display: flex;
font-size: 1.08rem;
align-items: center;
line-height: 1.6;
justify-content: center;
padding: 31px;
background: linear-gradient(145deg, rgba(255,255,255,0.065), rgba(0,0,0,0.22));
border-right: 1px solid rgba(255,255,255,0.15);
}
}


.vu-hero-logo {
.vu-logo-panel::after {
text-align: center;
content: "";
position: absolute;
right: -36px;
top: 50%;
width: 70px;
height: 70px;
background: #1B223D;
border-top: 1px solid rgba(255,255,255,0.15);
border-right: 1px solid rgba(255,255,255,0.15);
transform: translateY(-50%) rotate(45deg);
}
}


.vu-hero-logo img {
.vu-logo-panel img {
position: relative;
z-index: 2;
width: 100%;
width: 100%;
max-width: 220px;
max-width: 175px;
height: auto;
height: auto;
filter: drop-shadow(0 10px 13px rgba(0, 0, 0, 0.38));
filter: drop-shadow(0 12px 16px rgba(0,0,0,0.48));
}
}


/* Header buttons */
.vu-header-copy {
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
justify-content: center;
padding: 39px 45px 39px 62px;
}


.vu-action-row {
.vu-title {
margin: 0 0 13px;
color: #fff;
font-size: clamp(3rem, 7vw, 5rem);
font-weight: 700;
line-height: 0.95;
letter-spacing: -0.045em;
}
 
.vu-subtitle {
max-width: 700px;
margin-bottom: 20px;
color: #dbe7f5;
font-size: 1.07rem;
line-height: 1.5;
}
 
.vu-header-actions {
display: flex;
display: flex;
flex-wrap: wrap;
flex-wrap: wrap;
gap: 10px;
gap: 8px;
}
}


.vu-action {
.vu-header-button {
display: inline-block;
display: inline-block;
padding: 9px 15px;
border: 1px solid rgba(255,255,255,0.58);
color: #fff !important;
font-weight: 700;
transition: background 0.15s ease, transform 0.15s ease;
}
}


.vu-action a {
.vu-header-button:first-child {
display: inline-block;
background: #fff;
padding: 10px 17px;
color: var(--vu-navy) !important;
border: 1px solid rgba(255, 255, 255, 0.65);
border-radius: 7px;
background: #ffffff;
color: #1B223D !important;
font-weight: 700;
text-decoration: none !important;
transition:
transform 0.15s ease,
box-shadow 0.15s ease;
}
}


.vu-action-secondary a {
.vu-header-button:hover {
background: transparent;
transform: translateY(-2px);
color: #ffffff !important;
background: rgba(255,255,255,0.1);
text-decoration: none !important;
}
}


.vu-action a:hover {
.vu-header-button:first-child:hover {
transform: translateY(-2px);
background: #fff;
box-shadow: 0 5px 12px rgba(0, 0, 0, 0.28);
}
}


Line 123: Line 164:


.vu-about {
.vu-about {
padding: 27px 30px;
display: grid;
border: 1px solid var(--vu-border);
grid-template-columns: 145px minmax(0, 1fr);
border-left: 6px solid var(--vu-link);
margin-top: 15px;
border-radius: 10px;
border-top: 1px solid var(--vu-border);
border-bottom: 1px solid var(--vu-border);
background: var(--vu-surface);
background: var(--vu-surface);
box-shadow: 0 2px 7px rgba(0, 0, 0, 0.07);
}
}


.vu-about h2 {
.vu-about-mark {
margin-top: 0;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
background: linear-gradient(135deg, var(--vu-accent) 0%, var(--vu-accent) 65%, transparent 65%);
border-right: 1px solid var(--vu-border);
}
 
.vu-about-mark img {
width: 95px;
height: auto;
opacity: 0.15;
}
 
.vu-about-copy {
padding: 21px 25px;
border-left: 5px solid var(--vu-link);
}
 
.vu-about-copy h2 {
margin: 0 0 10px;
color: var(--vu-text);
font-size: 1.45rem;
}
}


.vu-about p {
.vu-about-copy p {
margin: 0 0 15px;
margin: 0 0 10px;
font-size: 1rem;
line-height: 1.56;
line-height: 1.67;
}
}


.vu-about p:last-child {
.vu-about-copy p:last-child {
margin-bottom: 0;
margin-bottom: 0;
}
/* Headings */
.vu-heading {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: center;
gap: 13px;
margin: 25px 0 12px;
}
.vu-heading-title {
color: var(--vu-text);
font-size: 1.45rem;
font-weight: 700;
}
.vu-heading-line {
height: 1px;
background: var(--vu-border);
}
}


/* Explore */
/* Explore */


.vu-explore-grid {
.vu-explore {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
border-top: 1px solid var(--vu-border);
border-left: 1px solid var(--vu-border);
}
 
.vu-explore-link {
position: relative;
display: grid;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-template-columns: 72px minmax(0, 1fr) 28px;
gap: 15px;
align-items: center;
min-height: 94px;
padding-right: 18px;
overflow: hidden;
border-right: 1px solid var(--vu-border);
border-bottom: 1px solid var(--vu-border);
background: var(--vu-surface);
color: var(--vu-text) !important;
transition: background 0.15s ease, padding 0.15s ease;
}
}


.vu-explore-card {
.vu-explore-link:hover {
padding-right: 13px;
background: var(--vu-accent);
text-decoration: none !important;
}
 
.vu-explore-mark {
align-self: stretch;
display: flex;
display: flex;
flex-direction: column;
align-items: center;
min-height: 190px;
justify-content: center;
padding: 22px;
margin-right: 17px;
border: 1px solid var(--vu-border);
background: var(--vu-navy);
border-radius: 10px;
color: #fff;
background: var(--vu-surface);
font-size: 1.35rem;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07);
font-weight: 800;
transition:
clip-path: polygon(0 0, calc(100% - 17px) 0, 100% 50%, calc(100% - 17px) 100%, 0 100%);
transform 0.15s ease,
border-color 0.15s ease,
box-shadow 0.15s ease;
}
}


.vu-explore-card:hover {
.vu-explore-copy {
transform: translateY(-3px);
position: relative;
border-color: var(--vu-link);
z-index: 2;
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.13);
}
}


.vu-explore-title {
.vu-explore-title {
margin-bottom: 10px;
display: block;
font-size: 1.23rem;
margin-bottom: 4px;
color: var(--vu-link);
font-size: 1.08rem;
font-weight: 700;
font-weight: 700;
}
}


.vu-explore-title a {
.vu-explore-description {
display: block;
color: var(--vu-text);
font-size: 0.9rem;
line-height: 1.38;
}
 
.vu-explore-arrow {
position: relative;
z-index: 2;
color: var(--vu-link);
color: var(--vu-link);
text-decoration: none;
font-size: 1.55rem;
font-weight: 700;
}
 
/* Featured */
 
.vu-feature-layout {
display: grid;
grid-template-columns: minmax(0, 1.55fr) minmax(270px, 0.65fr);
gap: 14px;
}
 
.vu-feature {
position: relative;
min-height: 245px;
padding: 25px 31px;
overflow: hidden;
border-left: 6px solid var(--vu-blue);
background: linear-gradient(118deg, var(--vu-surface) 0%, var(--vu-surface) 76%, var(--vu-accent) 76%);
}
 
.vu-feature::after {
content: "";
position: absolute;
top: 0;
right: 0;
width: 52px;
height: 52px;
background: var(--vu-navy-light);
clip-path: polygon(100% 0, 100% 100%, 0 0);
opacity: 0.9;
}
 
.vu-feature-watermark {
position: absolute;
right: 22px;
bottom: -22px;
width: 150px;
opacity: 0.055;
pointer-events: none;
}
}


.vu-explore-title a:hover {
.vu-feature-label {
text-decoration: underline;
position: relative;
z-index: 2;
margin-bottom: 9px;
color: var(--vu-link);
font-size: 0.76rem;
font-weight: 700;
letter-spacing: 0.15em;
text-transform: uppercase;
}
}


.vu-explore-text {
.vu-feature h2 {
margin-bottom: 18px;
position: relative;
font-size: 0.95rem;
z-index: 2;
line-height: 1.55;
margin: 0 0 11px;
color: var(--vu-text);
font-size: 1.52rem;
}
}


.vu-card-button {
.vu-feature p {
display: block;
position: relative;
margin-top: auto;
z-index: 2;
max-width: 760px;
margin: 0 0 10px;
line-height: 1.52;
}
}


.vu-card-button a {
.vu-feature-link {
position: relative;
z-index: 2;
display: inline-block;
display: inline-block;
padding: 8px 13px;
margin-top: 4px;
border: 1px solid var(--vu-link);
padding: 8px 14px;
border-radius: 6px;
border-left: 4px solid var(--vu-link);
background: var(--vu-accent);
color: var(--vu-link) !important;
color: var(--vu-link) !important;
font-weight: 700;
font-weight: 700;
}
.vu-feature-link:hover {
text-decoration: none !important;
text-decoration: none !important;
}
}


.vu-card-button a:hover {
/* Browse */
background: var(--vu-accent);
 
.vu-browse {
position: relative;
padding: 21px;
overflow: hidden;
background: linear-gradient(145deg, var(--vu-navy) 0%, var(--vu-navy) 72%, var(--vu-navy-light) 72%);
color: #e0f0ff;
}
 
.vu-browse-watermark {
position: absolute;
right: -14px;
bottom: -24px;
width: 150px;
opacity: 0.045;
pointer-events: none;
}
 
.vu-browse h2 {
position: relative;
z-index: 2;
margin: 0 0 13px;
padding-bottom: 9px;
border-bottom: 1px solid rgba(255,255,255,0.28);
color: #fff;
font-size: 1.35rem;
}
 
.vu-browse-buttons {
position: relative;
z-index: 2;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 7px;
}
}


/* Featured */
.vu-browse-button {
display: block;
padding: 10px 11px;
border-left: 3px solid var(--vu-blue);
background: rgba(255,255,255,0.08);
color: #e0f0ff !important;
font-weight: 650;
transition: background 0.15s ease, padding 0.15s ease;
}


.vu-featured {
.vu-browse-button:hover {
padding: 23px;
padding-left: 14px;
border: 1px solid var(--vu-border);
background: rgba(255,255,255,0.15);
border-radius: 10px;
text-decoration: none !important;
background: var(--vu-surface);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
}


/* Browse buttons */
/* People slideshow */


.vu-browse {
.vu-people {
padding: 25px;
position: relative;
overflow: hidden;
border: 1px solid var(--vu-border);
border: 1px solid var(--vu-border);
border-radius: 11px;
background: var(--vu-surface);
background: var(--vu-surface);
}
}


.vu-browse-intro {
.vu-people::before {
margin-bottom: 17px;
content: "";
line-height: 1.6;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 7px;
background: linear-gradient(90deg, var(--vu-blue), var(--vu-navy-light));
z-index: 3;
}
}


.vu-button-grid {
.vu-people-stage {
display: grid;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-template-columns: minmax(290px, 38%) minmax(0, 1fr);
gap: 10px;
min-height: 390px;
}
 
.vu-person-image {
position: relative;
overflow: hidden;
background: var(--vu-navy);
}
 
.vu-person-image::after {
content: "";
position: absolute;
right: -1px;
top: 0;
width: 72px;
height: 100%;
background: var(--vu-surface);
clip-path: polygon(100% 0, 100% 100%, 0 100%);
z-index: 2;
}
}


.vu-browse-button {
.vu-person-image img {
width: 100%;
height: 100%;
min-height: 390px;
object-fit: cover;
display: block;
display: block;
transition: opacity 0.25s ease, transform 0.5s ease;
}
.vu-people.is-changing .vu-person-image img {
opacity: 0.35;
transform: scale(1.03);
}
}


.vu-browse-button a {
.vu-person-copy {
position: relative;
display: flex;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
justify-content: center;
min-height: 52px;
padding: 42px 50px 42px 34px;
padding: 11px 14px;
overflow: hidden;
border: 1px solid var(--vu-border);
}
border-radius: 7px;
 
.vu-person-copy::after {
content: "";
position: absolute;
right: -45px;
bottom: -55px;
width: 220px;
height: 220px;
border: 42px solid var(--vu-accent);
transform: rotate(18deg);
opacity: 0.8;
}
 
.vu-person-kicker {
position: relative;
z-index: 2;
margin-bottom: 9px;
color: var(--vu-link);
font-size: 0.76rem;
font-weight: 700;
letter-spacing: 0.15em;
text-transform: uppercase;
}
 
.vu-person-title {
position: relative;
z-index: 2;
margin: 0 0 13px;
color: var(--vu-text);
font-size: clamp(1.8rem, 4vw, 2.8rem);
line-height: 1.08;
}
 
.vu-person-extract {
position: relative;
z-index: 2;
max-width: 720px;
margin: 0 0 18px;
font-size: 1rem;
line-height: 1.62;
}
 
.vu-person-open {
position: relative;
z-index: 2;
align-self: flex-start;
display: inline-block;
padding: 9px 14px;
border-left: 4px solid var(--vu-link);
background: var(--vu-accent);
background: var(--vu-accent);
color: var(--vu-link) !important;
color: var(--vu-link) !important;
font-weight: 700;
font-weight: 700;
text-align: center;
}
 
.vu-person-open:hover {
text-decoration: none !important;
text-decoration: none !important;
transition:
transform 0.15s ease,
border-color 0.15s ease,
box-shadow 0.15s ease;
}
}


.vu-browse-button a:hover {
.vu-people-controls {
transform: translateY(-2px);
display: grid;
grid-template-columns: auto auto minmax(0, 1fr) auto auto;
align-items: center;
gap: 8px;
padding: 11px 14px;
border-top: 1px solid var(--vu-border);
background: var(--vu-accent);
}
 
.vu-slide-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 42px;
height: 36px;
padding: 0 12px;
border: 1px solid var(--vu-border);
background: var(--vu-surface);
color: var(--vu-link);
font: inherit;
font-weight: 700;
cursor: pointer;
}
 
.vu-slide-button:hover,
.vu-slide-button:focus {
border-color: var(--vu-link);
border-color: var(--vu-link);
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.11);
outline: none;
}
 
.vu-slide-progress {
position: relative;
height: 4px;
margin: 0 8px;
overflow: hidden;
background: var(--vu-border);
}
 
.vu-slide-progress-bar {
width: 0;
height: 100%;
background: var(--vu-link);
}
}


/* Guide and notice */
.vu-people.is-playing .vu-slide-progress-bar {
animation: vu-slide-progress 9s linear forwards;
}


.vu-guide-grid {
.vu-slide-count {
min-width: 62px;
text-align: right;
color: var(--vu-text);
font-size: 0.88rem;
font-weight: 700;
}
 
.vu-people-status {
position: absolute;
left: 15px;
top: 15px;
z-index: 5;
padding: 7px 10px;
background: rgba(27,34,61,0.88);
color: #fff;
font-size: 0.82rem;
}
 
.vu-people-status[hidden] {
display: none;
}
 
@keyframes vu-slide-progress {
from { width: 0; }
to { width: 100%; }
}
 
/* Guide */
 
.vu-guide {
display: grid;
display: grid;
grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.75fr);
grid-template-columns: minmax(0, 1.3fr) minmax(300px, 0.7fr);
gap: 16px;
border-top: 1px solid var(--vu-border);
margin-top: 27px;
border-bottom: 1px solid var(--vu-border);
}
 
.vu-guide-copy {
padding: 21px 25px 21px 0;
}
}


.vu-guide {
.vu-guide-copy h2,
padding: 24px;
.vu-family-area h2 {
border: 1px solid var(--vu-border);
margin: 0 0 10px;
border-radius: 10px;
color: var(--vu-text);
background: var(--vu-surface);
font-size: 1.3rem;
}
}


.vu-guide h2 {
.vu-guide-copy p {
margin-top: 0;
margin: 0 0 10px;
line-height: 1.53;
}
}


.vu-guide p {
.vu-guide-copy p:last-child {
line-height: 1.63;
margin-bottom: 0;
}
}


.vu-start-links,
.vu-route-buttons {
.vu-family-links {
display: flex;
display: flex;
flex-wrap: wrap;
flex-wrap: wrap;
gap: 8px;
gap: 7px;
margin: 15px 0;
margin-top: 13px;
}
}


.vu-start-link,
.vu-route-button {
.vu-family-link {
display: inline-block;
display: inline-block;
padding: 8px 11px;
border-bottom: 3px solid var(--vu-link);
background: var(--vu-accent);
color: var(--vu-link) !important;
font-weight: 650;
}
}


.vu-start-link a,
.vu-route-button:hover {
.vu-family-link a {
text-decoration: none !important;
display: inline-block;
transform: translateY(-1px);
padding: 8px 12px;
}
border: 1px solid var(--vu-border);
 
border-radius: 6px;
.vu-family-area {
padding: 21px 0 21px 25px;
border-left: 1px solid var(--vu-border);
}
 
.vu-family-links {
display: grid;
gap: 6px;
}
 
.vu-family-link {
position: relative;
display: grid;
grid-template-columns: 8px minmax(0, 1fr);
align-items: center;
gap: 10px;
padding: 8px 11px;
background: var(--vu-accent);
background: var(--vu-accent);
color: var(--vu-link) !important;
color: var(--vu-link) !important;
font-weight: 650;
font-weight: 650;
transition: padding 0.15s ease;
}
.vu-family-link::before {
content: "";
width: 8px;
height: 100%;
background: var(--vu-link);
clip-path: polygon(0 0, 100% 50%, 0 100%);
}
.vu-family-link:hover {
padding-left: 14px;
text-decoration: none !important;
text-decoration: none !important;
}
}


.vu-start-link a:hover,
/* Footer */
.vu-family-link a:hover {
 
border-color: var(--vu-link);
.vu-information {
text-decoration: underline !important;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1px;
margin-top: 15px;
border: 1px solid var(--vu-border);
background: var(--vu-border);
}
 
.vu-information section {
padding: 18px 21px;
background: var(--vu-surface);
}
 
.vu-information h2 {
margin: 0 0 7px;
color: var(--vu-text);
font-size: 1.2rem;
}
 
.vu-information p {
margin: 0;
line-height: 1.5;
}
}


.vu-notice {
.vu-notice {
padding: 24px;
display: grid;
grid-template-columns: 155px minmax(0, 1fr);
margin-top: 12px;
border: 1px solid #ab7f2a;
border: 1px solid #ab7f2a;
border-top: 5px solid #ab7f2a;
border-radius: 10px;
background: #fef6e7;
background: #fef6e7;
}
}


.vu-notice h2 {
.vu-notice-title {
margin-top: 0;
display: flex;
border-bottom-color: #ab7f2a;
align-items: center;
padding: 15px 18px;
background: #ab7f2a;
color: #fff;
font-weight: 700;
}
}


.vu-notice p {
.vu-notice-copy {
line-height: 1.6;
padding: 15px 18px;
color: var(--vu-text);
line-height: 1.5;
}
}


/* Bottom panels */
/* Missing pages */


.vu-bottom-grid {
.vu-main a.new,
display: grid;
.vu-main a.new:visited {
grid-template-columns: repeat(2, minmax(0, 1fr));
color: var(--vu-red) !important;
gap: 16px;
margin-top: 17px;
}
}


.vu-bottom-panel {
.vu-main .vu-header-button.new {
padding: 23px;
border-color: var(--vu-red);
border: 1px solid var(--vu-border);
color: #ff8b8b !important;
border-radius: 10px;
background: var(--vu-surface);
}
}


.vu-bottom-panel h2 {
.vu-main .vu-explore-link.new .vu-explore-mark {
margin-top: 0;
background: var(--vu-red);
font-size: 1.35rem;
}
}


.vu-bottom-panel p {
.vu-main .vu-explore-link.new .vu-explore-title,
margin-bottom: 0;
.vu-main .vu-family-link.new,
line-height: 1.62;
.vu-main .vu-route-button.new,
.vu-main .vu-feature-link.new {
color: var(--vu-red) !important;
}
}


Line 375: Line 797:
html.skin-theme-clientpref-night .vu-main,
html.skin-theme-clientpref-night .vu-main,
body.skin-theme-clientpref-night .vu-main {
body.skin-theme-clientpref-night .vu-main {
--vu-border: #444444;
--vu-border: #444;
--vu-text: #d0d0d0;
--vu-text: #d0d0d0;
--vu-muted: #a2a9b1;
--vu-surface: #1e1e1e;
--vu-surface: #1e1e1e;
--vu-accent: #252f42;
--vu-accent: #252f42;
--vu-link: #88ccff;
--vu-link: #88ccff;
--vu-red: #ff6b6b;
}
}


Line 390: Line 812:
@media (prefers-color-scheme: dark) {
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .vu-main {
html.skin-theme-clientpref-os .vu-main {
--vu-border: #444444;
--vu-border: #444;
--vu-text: #d0d0d0;
--vu-text: #d0d0d0;
--vu-muted: #a2a9b1;
--vu-surface: #1e1e1e;
--vu-surface: #1e1e1e;
--vu-accent: #252f42;
--vu-accent: #252f42;
--vu-link: #88ccff;
--vu-link: #88ccff;
--vu-red: #ff6b6b;
}
}


Line 403: Line 825:
}
}


/* Responsive layout */
/* Responsive */


@media (max-width: 900px) {
@media (max-width: 900px) {
.vu-explore-grid,
.vu-header {
.vu-button-grid {
grid-template-columns: 190px minmax(0, 1fr);
grid-template-columns: repeat(2, minmax(0, 1fr));
}
 
.vu-header-copy {
padding: 34px 31px 34px 48px;
}
 
.vu-feature-layout,
.vu-guide {
grid-template-columns: 1fr;
}
}


.vu-hero {
.vu-people-stage {
grid-template-columns: minmax(0, 1fr) 190px;
grid-template-columns: 42% minmax(0, 1fr);
padding: 35px;
}
 
.vu-person-copy {
padding: 36px 34px 36px 24px;
}
 
.vu-family-area {
padding: 20px 0;
border-top: 1px solid var(--vu-border);
border-left: 0;
}
 
.vu-guide-copy {
padding-right: 0;
}
}
}
}


@media (max-width: 700px) {
@media (max-width: 650px) {
.vu-hero {
.vu-header {
grid-template-columns: 1fr;
grid-template-columns: 1fr;
padding: 29px 21px;
text-align: center;
text-align: center;
}
}


.vu-hero-logo {
.vu-logo-panel {
grid-row: 1;
min-height: 145px;
border-right: 0;
border-bottom: 1px solid rgba(255,255,255,0.15);
}
 
.vu-logo-panel::after {
display: none;
}
 
.vu-logo-panel img {
max-width: 120px;
}
}


.vu-hero-logo img {
.vu-header-copy {
max-width: 165px;
padding: 27px 20px 31px;
}
}


.vu-action-row {
.vu-header-actions,
.vu-route-buttons {
justify-content: center;
justify-content: center;
}
}


.vu-guide-grid,
.vu-about {
.vu-bottom-grid {
grid-template-columns: 1fr;
}
 
.vu-about-mark {
display: none;
}
 
.vu-about-copy {
border-top: 5px solid var(--vu-link);
border-left: 0;
}
 
.vu-explore {
grid-template-columns: 1fr;
}
 
.vu-people-stage {
grid-template-columns: 1fr;
grid-template-columns: 1fr;
}
}
}


@media (max-width: 520px) {
.vu-person-image {
.vu-explore-grid,
height: 300px;
.vu-button-grid {
}
 
.vu-person-image::after {
display: none;
}
 
.vu-person-image img {
min-height: 300px;
}
 
.vu-person-copy {
padding: 28px 22px 32px;
}
 
.vu-people-controls {
grid-template-columns: auto auto minmax(50px, 1fr) auto auto;
}
 
.vu-information,
.vu-notice {
grid-template-columns: 1fr;
grid-template-columns: 1fr;
}
}
}


.vu-hero-title {
@media (max-width: 430px) {
font-size: 2.7rem;
.vu-title {
font-size: 2.75rem;
}
}


.vu-action {
.vu-header-button {
display: block;
width: 100%;
width: 100%;
text-align: center;
}
}


.vu-action a {
.vu-browse-buttons {
display: block;
grid-template-columns: 1fr;
text-align: center;
}
}


.vu-about,
.vu-explore-link {
.vu-featured,
grid-template-columns: 62px minmax(0, 1fr) 22px;
.vu-browse,
.vu-guide,
.vu-notice,
.vu-bottom-panel {
padding: 19px;
}
}
}
}
</style>
</style>
</html>


<div class="vu-main">
<div class="vu-main">


<div class="vu-hero">
<header class="vu-header">
<div class="vu-logo-panel">
<img src="/wiki/Special:Redirect/file/Vu-logo.png" alt="Vrienden Universe logo">
</div>
 
<div class="vu-header-copy">
<div class="vu-title">Vrienden Universe</div>


<div class="vu-hero-copy">
<div class="vu-subtitle">
The history of De Vrienden and the wider world recorded around them.
</div>


<div class="vu-hero-title">Vrienden Universe</div>
<div class="vu-header-actions">
<a class="vu-header-button" data-wiki-title="Timeline" href="/wiki/Timeline">Timeline</a>
<a class="vu-header-button" href="/wiki/Special:Random">Random page</a>
<a class="vu-header-button" href="/wiki/Special:RecentChanges">Recent changes</a>
</div>
</div>
</header>
 
<section class="vu-about">
<div class="vu-about-mark">
<img src="/wiki/Special:Redirect/file/Vu-logo.png" alt="">
</div>
 
<div class="vu-about-copy">
<h2>About the wiki</h2>
 
<p>
The <strong>Vrienden Universe</strong> began in 2019 as
<a data-wiki-title="De Lijers De Vrienden" href="/wiki/De_Lijers_De_Vrienden"><strong>De Lijers De Vrienden</strong></a>,
a project about <a data-wiki-title="De Vrienden" href="/wiki/De_Vrienden">De Vrienden</a>.
The project expanded as related pages were added and became a single encyclopedia covering the wider history around its original subject.
</p>
 
<p>
The wiki now contains hundreds of connected pages developed over several years.
Information established on one page is carried into related articles, allowing readers to follow the same history throughout the site.
</p>
</div>
</section>
 
<div class="vu-heading">
<div class="vu-heading-title">Explore</div>
<div class="vu-heading-line"></div>
</div>
 
<nav class="vu-explore">
<a class="vu-explore-link" data-wiki-title="Category:People" href="/wiki/Category:People">
<span class="vu-explore-mark">P</span>
<span class="vu-explore-copy">
<span class="vu-explore-title">People</span>
<span class="vu-explore-description">Biographies recorded across the wiki.</span>
</span>
<span class="vu-explore-arrow">&gt;</span>
</a>
 
<a class="vu-explore-link" data-wiki-title="Category:Locations" href="/wiki/Category:Locations">
<span class="vu-explore-mark">L</span>
<span class="vu-explore-copy">
<span class="vu-explore-title">Locations</span>
<span class="vu-explore-description">Places documented throughout the history.</span>
</span>
<span class="vu-explore-arrow">&gt;</span>
</a>
 
<a class="vu-explore-link" data-wiki-title="Category:Families" href="/wiki/Category:Families">
<span class="vu-explore-mark">F</span>
<span class="vu-explore-copy">
<span class="vu-explore-title">Families</span>
<span class="vu-explore-description">Family lines and their members.</span>
</span>
<span class="vu-explore-arrow">&gt;</span>
</a>
 
<a class="vu-explore-link" data-wiki-title="Category:Organizations" href="/wiki/Category:Organizations">
<span class="vu-explore-mark">O</span>
<span class="vu-explore-copy">
<span class="vu-explore-title">Organizations</span>
<span class="vu-explore-description">Institutions and organized groups.</span>
</span>
<span class="vu-explore-arrow">&gt;</span>
</a>
 
<a class="vu-explore-link" data-wiki-title="Category:Events" href="/wiki/Category:Events">
<span class="vu-explore-mark">E</span>
<span class="vu-explore-copy">
<span class="vu-explore-title">Events</span>
<span class="vu-explore-description">Events recorded throughout the history.</span>
</span>
<span class="vu-explore-arrow">&gt;</span>
</a>
 
<a class="vu-explore-link" data-wiki-title="Category:Eras" href="/wiki/Category:Eras">
<span class="vu-explore-mark">H</span>
<span class="vu-explore-copy">
<span class="vu-explore-title">Eras</span>
<span class="vu-explore-description">The historical periods used by the wiki.</span>
</span>
<span class="vu-explore-arrow">&gt;</span>
</a>
</nav>
 
<div class="vu-heading">
<div class="vu-heading-title">Featured and browse</div>
<div class="vu-heading-line"></div>
</div>
 
<div class="vu-feature-layout">
<section class="vu-feature">
<img class="vu-feature-watermark" src="/wiki/Special:Redirect/file/Vu-logo.png" alt="">
 
<div class="vu-feature-label">Featured page</div>
 
<h2>
<a data-wiki-title="Reichsministerium für Bergbau und Rohstoffe" href="/wiki/Reichsministerium_f%C3%BCr_Bergbau_und_Rohstoffe">
Reichsministerium f&uuml;r Bergbau und Rohstoffe
</a>
</h2>
 
<p>
The Reichsministerium f&uuml;r Bergbau und Rohstoffe was a central ministry of the
<a data-wiki-title="Government of the Tanoa Einsatzgruppen" href="/wiki/Government_of_the_Tanoa_Einsatzgruppen">Government of the Tanoa Einsatzgruppen</a>.
It administered mining and the state supply of raw materials.
</p>
 
<p>
The ministry supported the command economy of
<a data-wiki-title="Tanoa" href="/wiki/Tanoa">Tanoa</a>
and supplied the regime's industrial system.
</p>
 
<a class="vu-feature-link" data-wiki-title="Reichsministerium für Bergbau und Rohstoffe" href="/wiki/Reichsministerium_f%C3%BCr_Bergbau_und_Rohstoffe">
Open page
</a>
</section>
 
<nav class="vu-browse">
<img class="vu-browse-watermark" src="/wiki/Special:Redirect/file/Vu-logo.png" alt="">
 
<h2>Browse</h2>
 
<div class="vu-browse-buttons">
<a class="vu-browse-button" href="/wiki/Special:AllPages">All pages</a>
<a class="vu-browse-button" href="/wiki/Special:Categories">Categories</a>
<a class="vu-browse-button" href="/wiki/Special:NewPages">New pages</a>
<a class="vu-browse-button" href="/wiki/Special:RecentChanges">Recent changes</a>
<a class="vu-browse-button" href="/wiki/Special:Random">Random page</a>
<a class="vu-browse-button" href="/wiki/Special:SpecialPages">Special pages</a>
</div>
</nav>
</div>
 
<div class="vu-heading">
<div class="vu-heading-title">People</div>
<div class="vu-heading-line"></div>
</div>
 
<section class="vu-people" id="vu-people-slider" aria-label="People slideshow">
<div class="vu-people-status" id="vu-people-status" hidden></div>
 
<div class="vu-people-stage">
<div class="vu-person-image">
<img
id="vu-person-image"
src="/wiki/Special:Redirect/file/ToonioNoord.jpg"
alt="Toonio Noord">
</div>
 
<div class="vu-person-copy">
 
<h2 class="vu-person-title" id="vu-person-title">Toonio Noord</h2>
 
<p class="vu-person-extract" id="vu-person-extract">
Toonio Noord, born 4 April 1969, is a Dutch registration official and former security guard from Vriendendam. He works for the Stichting Noord Registratiebureau and is a member of the Noord family.
</p>
 
<a
class="vu-person-open"
id="vu-person-link"
href="/wiki/Toonio_Noord">
Open page
</a>
</div>
</div>
 
<div class="vu-people-controls">
<button class="vu-slide-button" id="vu-person-prev" type="button" aria-label="Previous person">&lt;</button>
<button class="vu-slide-button" id="vu-person-toggle" type="button" aria-label="Pause slideshow">Pause</button>
 
<div class="vu-slide-progress" aria-hidden="true">
<div class="vu-slide-progress-bar"></div>
</div>
 
<div class="vu-slide-count" id="vu-person-count">1 / 1</div>
 
<button class="vu-slide-button" id="vu-person-next" type="button" aria-label="Next person">&gt;</button>
</div>
</section>
<div class="vu-heading">
<div class="vu-heading-title">How to use this wiki</div>
<div class="vu-heading-line"></div>
</div>
 
<section class="vu-guide">
<div class="vu-guide-copy">
<h2>Choose a starting point</h2>
 
<p>
Most articles link directly to the subjects needed to continue through the history.
Readers can begin with <a data-wiki-title="De Vrienden" href="/wiki/De_Vrienden">De Vrienden</a>
or select a broader section above.
</p>
 
<p>
The principal family pages provide the main route from De Vrienden into family history.
Index pages provide access to the rest of the site.
</p>
 
<div class="vu-route-buttons">
<a class="vu-route-button" data-wiki-title="Timeline" href="/wiki/Timeline">Timeline</a>
<a class="vu-route-button" data-wiki-title="Factions" href="/wiki/Factions">Factions</a>
<a class="vu-route-button" data-wiki-title="List of organizations" href="/wiki/List_of_organizations">Organizations</a>
</div>
</div>
 
<div class="vu-family-area">
<h2>Principal families</h2>
 
<div class="vu-family-links">
<a class="vu-family-link" data-wiki-title="Noord family" href="/wiki/Noord_family">Noord family</a>
<a class="vu-family-link" data-wiki-title="Paap family" href="/wiki/Paap_family">Paap family</a>
<a class="vu-family-link" data-wiki-title="Van Hetten family" href="/wiki/Van_Hetten_family">Van Hetten family</a>
<a class="vu-family-link" data-wiki-title="Hoos family" href="/wiki/Hoos_family">Hoos family</a>
<a class="vu-family-link" data-wiki-title="Schroeter family" href="/wiki/Schroeter_family">Schroeter family</a>
</div>
</div>
</section>
 
<div class="vu-information">
<section>
<h2>Community</h2>
 
<p>
Information about contributing is available on the
<a data-wiki-title="Vrienden Universe:Community" href="/wiki/Vrienden_Universe:Community">community page</a>.
</p>
</section>
 
<section>
<h2>Details</h2>
 
<p>
Information about the scope of the site is available in the
<a data-wiki-title="Vrienden Universe:General disclaimer" href="/wiki/Vrienden_Universe:General_disclaimer">disclaimer</a>.
</p>
</section>
</div>
 
<div class="vu-notice">
<div class="vu-notice-title">Content notice</div>
 
<div class="vu-notice-copy">
This wiki contains material intended for mature audiences.
Some pages contain disturbing subject matter. Reader discretion is advised.
</div>
</div>


<div class="vu-hero-text">
Browse the people, places, organizations and events documented across the wiki.
</div>
</div>


<div class="vu-action-row">
<script>
<span class="vu-action">[[Timeline|Timeline]]</span>
(function () {
<span class="vu-action vu-action-secondary">[[Special:Random|Random page]]</span>
"use strict";
<span class="vu-action vu-action-secondary">[[Special:AllPages|All pages]]</span>
 
</div>
function onReady(callback) {
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", callback, { once: true });
} else {
callback();
}
}
 
onReady(function () {
var root = document.querySelector(".vu-main");
var slider = document.getElementById("vu-people-slider");
var status = document.getElementById("vu-people-status");
var image = document.getElementById("vu-person-image");
var title = document.getElementById("vu-person-title");
var extract = document.getElementById("vu-person-extract");
var pageLink = document.getElementById("vu-person-link");
var count = document.getElementById("vu-person-count");
var previous = document.getElementById("vu-person-prev");
var next = document.getElementById("vu-person-next");
var toggle = document.getElementById("vu-person-toggle");
 
if (
!root ||
!slider ||
!status ||
!image ||
!title ||
!extract ||
!pageLink ||
!count ||
!previous ||
!next ||
!toggle
) {
return;
}
 
var fallbackImage = "/wiki/Special:Redirect/file/Vu-logo.png";
var cacheKey = "vu-main-people-slides-v9";
var cacheLifetime = 6 * 60 * 60 * 1000;
var slideInterval = 9000;
var apiPath = "/wiki/api.php";
var people = [];
var currentIndex = 0;
var timer = null;
var playing = false;
 
previous.disabled = true;
next.disabled = true;
toggle.disabled = true;
count.textContent = "1 / 1";
toggle.textContent = "Play";
previous.textContent = "<";
next.textContent = ">";
 
function showStatus(message) {
if (!message) {
status.hidden = true;
status.textContent = "";
return;
}
 
status.textContent = message;
status.hidden = false;
}
 
function shuffle(items) {
var result = items.slice();
 
for (var index = result.length - 1; index > 0; index--) {
var randomIndex = Math.floor(Math.random() * (index + 1));
var temporary = result[index];
result[index] = result[randomIndex];
result[randomIndex] = temporary;
}


</div>
return result;
}


<div class="vu-hero-logo">
function cleanText(value) {
[[File:Vu-logo.png|220px|alt=Vrienden Universe logo|link=Main Page]]
return String(value || "")
</div>
.replace(/\[\s*\d+(?:\.\d+)?\s*\]/g, "")
.replace(/\s+/g, " ")
.trim();
}


</div>
function shorten(value, limit) {
var cleaned = cleanText(value);


<div class="vu-about">
if (!cleaned || cleaned.length <= limit) {
return cleaned;
}


== About the wiki ==
var cut = cleaned.slice(0, limit);
var sentenceEnd = Math.max(
cut.lastIndexOf(". "),
cut.lastIndexOf("! "),
cut.lastIndexOf("? ")
);


The '''Vrienden Universe''' is an encyclopedia website that began in 2019 as '''[[De Lijers De Vrienden]]''', a project about [[De Vrienden]]. As the project grew, it expanded to document the wider history surrounding its original subjects. The site now contains hundreds of connected pages.
if (sentenceEnd > 180) {
return cut.slice(0, sentenceEnd + 1);
}


The wiki follows one continuity. Articles are written so that dates, relationships, locations, organizations and events remain consistent across the site.
var finalSpace = cut.lastIndexOf(" ");
return cut.slice(0, finalSpace > 0 ? finalSpace : limit) + "...";
}


The site covers people, families, countries, settlements, organizations and historical events. Internal links allow readers to move between related pages and follow how subjects developed across different periods.
function getImage(page) {
if (page.thumbnail && page.thumbnail.source) {
return page.thumbnail.source;
}


Hundreds of pages and several years of work have been put into the site. Its purpose is to preserve and organize the history and stories documented across the wiki.
if (page.original && page.original.source) {
return page.original.source;
}


</div>
return "";
}


== Explore ==
function pageUrl(pageTitle) {
if (window.mw && mw.util) {
return mw.util.getUrl(pageTitle);
}


<div class="vu-explore-grid">
return "/wiki/" + encodeURIComponent(pageTitle.replace(/ /g, "_"));
}


<div class="vu-explore-card">
function normalizePages(pages) {
return shuffle(
pages
.filter(function (page) {
return page && !page.missing && page.title;
})
.map(function (page) {
var pageExtract = shorten(page.extract, 650);


<div class="vu-explore-title">[[Timeline|Timeline]]</div>
if (!pageExtract) {
pageExtract =
"This page is listed in Category:People. Open the page for the full article.";
}


<div class="vu-explore-text">
return {
Follow events in chronological order and move between the historical periods covered by the wiki.
title: page.title,
</div>
extract: pageExtract,
image: getImage(page) || fallbackImage,
url: page.fullurl || pageUrl(page.title)
};
})
);
}


<span class="vu-card-button">[[Timeline|Open timeline]]</span>
function readCache() {
try {
var cached = JSON.parse(
window.sessionStorage.getItem(cacheKey) || "null"
);


</div>
if (
cached &&
cached.savedAt &&
Date.now() - cached.savedAt < cacheLifetime &&
Array.isArray(cached.people) &&
cached.people.length > 1
) {
return cached.people;
}
} catch (error) {
return null;
}


<div class="vu-explore-card">
return null;
}


<div class="vu-explore-title">[[:Category:People|People]]</div>
function saveCache(items) {
try {
window.sessionStorage.setItem(
cacheKey,
JSON.stringify({
savedAt: Date.now(),
people: items
})
);
} catch (error) {
return;
}
}


<div class="vu-explore-text">
function preloadNext() {
Browse biographies and records of people from different countries, families, organizations and periods.
if (people.length < 2) {
</div>
return;
}


<span class="vu-card-button">[[:Category:People|Browse people]]</span>
var nextIndex = (currentIndex + 1) % people.length;
var preload = new Image();
preload.src = people[nextIndex].image;
}


</div>
function restartProgress() {
slider.classList.remove("is-playing");
void slider.offsetWidth;


<div class="vu-explore-card">
if (playing && people.length > 1) {
slider.classList.add("is-playing");
}
}


<div class="vu-explore-title">[[:Category:Locations|Locations]]</div>
function scheduleNext() {
if (timer) {
window.clearTimeout(timer);
}


<div class="vu-explore-text">
restartProgress();
Browse countries, cities, regions, settlements, buildings, rivers and other documented places.
</div>


<span class="vu-card-button">[[:Category:Locations|Browse locations]]</span>
if (!playing || people.length < 2) {
return;
}


</div>
timer = window.setTimeout(function () {
showSlide(currentIndex + 1);
}, slideInterval);
}


<div class="vu-explore-card">
function showSlide(index) {
if (!people.length) {
return;
}


<div class="vu-explore-title">[[List of organizations|Organizations]]</div>
currentIndex = (index + people.length) % people.length;
var person = people[currentIndex];


<div class="vu-explore-text">
slider.classList.add("is-changing");
Find governments, companies, institutions, military structures, political groups and criminal organizations.
</div>


<span class="vu-card-button">[[List of organizations|Browse organizations]]</span>
window.setTimeout(function () {
image.src = person.image || fallbackImage;
image.alt = person.title;
title.textContent = person.title;
extract.textContent = person.extract;
pageLink.href = person.url;
pageLink.textContent = "Open page";
count.textContent =
String(currentIndex + 1) + " / " + String(people.length);


</div>
window.setTimeout(function () {
slider.classList.remove("is-changing");
}, 40);


<div class="vu-explore-card">
preloadNext();
}, 140);


<div class="vu-explore-title">[[Factions|Factions]]</div>
scheduleNext();
}


<div class="vu-explore-text">
function setPlaying(value) {
Read about alliances, movements, rival groups and political powers documented across the wiki.
playing = Boolean(value && people.length > 1);
</div>
toggle.textContent = playing ? "Pause" : "Play";
toggle.setAttribute(
"aria-label",
playing ? "Pause slideshow" : "Play slideshow"
);


<span class="vu-card-button">[[Factions|Browse factions]]</span>
if (playing) {
scheduleNext();
} else {
if (timer) {
window.clearTimeout(timer);
}


</div>
slider.classList.remove("is-playing");
}
}


<div class="vu-explore-card">
function activateSlides(items) {
if (!Array.isArray(items) || !items.length) {
showStatus("No people pages were loaded.");
return;
}


<div class="vu-explore-title">[[Special:Categories|Categories]]</div>
people = shuffle(items);
currentIndex = 0;
previous.disabled = people.length < 2;
next.disabled = people.length < 2;
toggle.disabled = people.length < 2;
showStatus("");
showSlide(0);
setPlaying(people.length > 1);
}


<div class="vu-explore-text">
previous.addEventListener("click", function () {
Use the category index to browse subjects by type, location, organization, family or historical period.
showSlide(currentIndex - 1);
</div>
});


<span class="vu-card-button">[[Special:Categories|Open categories]]</span>
next.addEventListener("click", function () {
showSlide(currentIndex + 1);
});


</div>
toggle.addEventListener("click", function () {
setPlaying(!playing);
});


</div>
slider.addEventListener("mouseenter", function () {
if (playing && timer) {
window.clearTimeout(timer);
slider.classList.remove("is-playing");
}
});


== Featured ==
slider.addEventListener("mouseleave", function () {
if (playing) {
scheduleNext();
}
});


<div class="vu-featured">
image.addEventListener("error", function () {
if (image.src.indexOf("Vu-logo.png") === -1) {
image.src = fallbackImage;
}
});


{{Featured box}}
function buildQuery(params) {
var parts = [];


</div>
Object.keys(params).forEach(function (key) {
parts.push(
encodeURIComponent(key) +
"=" +
encodeURIComponent(params[key])
);
});


== Browse the wiki ==
return parts.join("&");
}


<div class="vu-browse">
function requestJson(params) {
return window
.fetch(apiPath + "?" + buildQuery(params), {
credentials: "same-origin"
})
.then(function (response) {
if (!response.ok) {
throw new Error("API HTTP " + response.status);
}


<div class="vu-browse-intro">
return response.json();
Use these pages to find new, recently edited or randomly selected articles.
});
</div>
}


<div class="vu-button-grid">
function copyParams(params) {
<span class="vu-browse-button">[[Special:AllPages|All pages]]</span>
var copied = {};
<span class="vu-browse-button">[[Special:Categories|All categories]]</span>
<span class="vu-browse-button">[[Special:NewPages|New pages]]</span>
<span class="vu-browse-button">[[Special:RecentChanges|Recent changes]]</span>
<span class="vu-browse-button">[[Special:Random|Random page]]</span>
<span class="vu-browse-button">[[Special:SpecialPages|Special pages]]</span>
</div>


</div>
Object.keys(params).forEach(function (key) {
copied[key] = params[key];
});


<div class="vu-guide-grid">
return copied;
}


<div class="vu-guide">
function loadCategoryMembers(params, collectedPages) {
return requestJson(params).then(function (data) {
var nextPages =
data &&
data.query &&
Array.isArray(data.query.categorymembers)
? data.query.categorymembers
: [];
var allPages = collectedPages.concat(nextPages);


== How to use this wiki ==
if (data && data.continue) {
var nextParams = copyParams(params);


The wiki can be read by starting from a broad subject page and following the links inside its articles. Pages connect to related people, families, locations, organizations and events.
Object.keys(data.continue).forEach(function (key) {
nextParams[key] = data.continue[key];
});


<div class="vu-start-links">
showStatus("Loading people... " + String(allPages.length));
<span class="vu-start-link">[[De Vrienden]]</span>
return loadCategoryMembers(nextParams, allPages);
<span class="vu-start-link">[[Timeline]]</span>
}
<span class="vu-start-link">[[Factions]]</span>
<span class="vu-start-link">[[List of organizations|Organizations]]</span>
<span class="vu-start-link">[[:Category:People|People]]</span>
<span class="vu-start-link">[[:Category:Locations|Locations]]</span>
</div>


[[De Vrienden]] is a useful starting point because the project originally focused on the group before expanding into the wider encyclopedia. The five principal family pages provide access to their members and histories.
return allPages;
});
}


<div class="vu-family-links">
function uniqueTitles(items) {
<span class="vu-family-link">[[Noord family]]</span>
var seen = {};
<span class="vu-family-link">[[Paap family]]</span>
var titles = [];
<span class="vu-family-link">[[Van Hetten family]]</span>
<span class="vu-family-link">[[Hoos family]]</span>
<span class="vu-family-link">[[Schroeter family]]</span>
</div>


Internal links show how information from one page relates to subjects documented elsewhere.
items.forEach(function (item) {
if (!item || !item.title || seen[item.title]) {
return;
}


</div>
seen[item.title] = true;
titles.push(item.title);
});


<div class="vu-notice">
return titles;
}


== Content notice ==
function loadPageDetails(titles) {
var groups = [];


This wiki contains material intended for mature audiences. Some pages include graphic violence, abuse, exploitation and other disturbing subjects.
for (var index = 0; index < titles.length; index += 1) {
groups.push(titles.slice(index, index + 1));
}


The wiki is recommended for readers aged '''18 or older'''. Reader discretion is advised.
return groups
.reduce(function (chain, group) {
return chain.then(function (pages) {
return requestJson({
action: "query",
titles: group.join("|"),
prop: "extracts|pageimages|info",
exintro: 1,
explaintext: 1,
exchars: 700,
piprop: "thumbnail|original",
pithumbsize: 1000,
inprop: "url",
redirects: 1,
formatversion: 2,
format: "json"
}).then(function (data) {
var nextPages =
data &&
data.query &&
Array.isArray(data.query.pages)
? data.query.pages
: [];


See the [[Vrienden Universe:General disclaimer|Disclaimer]] for further information.
if (
(pages.length + nextPages.length) % 10 === 0 ||
pages.length + nextPages.length === titles.length
) {
showStatus(
"Loading details... " +
String(pages.length + nextPages.length) +
" / " +
String(titles.length)
);
}
return pages.concat(nextPages);
});
});
}, Promise.resolve([]));
}


</div>
var cachedPeople = readCache();


</div>
if (cachedPeople) {
activateSlides(cachedPeople);
}


<div class="vu-bottom-grid">
if (!window.fetch) {
showStatus("This browser cannot load the people list.");
return;
}


<div class="vu-bottom-panel">
showStatus("Loading people...");
loadCategoryMembers(
{
action: "query",
list: "categorymembers",
cmtitle: "Category:People",
cmnamespace: 0,
cmtype: "page",
cmlimit: "max",
formatversion: 2,
format: "json"
},
[]
)
.then(function (members) {
var titles = uniqueTitles(members);
showStatus("Loading details... 0 / " + String(titles.length));
return loadPageDetails(titles);
})
.then(function (pages) {
var loadedPeople = normalizePages(pages);


== Community ==
saveCache(loadedPeople);
activateSlides(loadedPeople);
})
.catch(function () {
showStatus("Could not load people list.");
});


Pages explaining the purpose of the wiki and the contribution process are available through the community section. Many established pages are protected, while selected areas remain open to proposals that fit the existing history.
/*
* Raw HTML links need a separate existence check so missing pages
* keep MediaWiki's red-link appearance.
*/
if (window.mw && mw.loader) {
mw.loader
.using(["mediawiki.api", "mediawiki.util"])
.then(function () {
var api = new mw.Api();
var links = Array.prototype.slice.call(
root.querySelectorAll("a[data-wiki-title]")
);


See [[Vrienden Universe:Community|Community]] for further information.
var titles = links
.map(function (item) {
return item.getAttribute("data-wiki-title");
})
.filter(function (item, index, allItems) {
return item && allItems.indexOf(item) === index;
});


</div>
if (!titles.length) {
return;
}


<div class="vu-bottom-panel">
return api
.get({
action: "query",
titles: titles.join("|"),
formatversion: 2
})
.then(function (data) {
var missing = {};


== Details ==
if (data.query && Array.isArray(data.query.pages)) {
data.query.pages.forEach(function (page) {
if (page.missing) {
missing[page.title] = true;
}
});
}


For information about the content, structure and scope of the site, see the [[Vrienden Universe:General disclaimer|Disclaimer]].
links.forEach(function (item) {
var pageTitle =
item.getAttribute("data-wiki-title");


</div>
if (!missing[pageTitle]) {
return;
}


</div>
item.classList.add("new");
item.href = mw.util.getUrl(pageTitle, {
action: "edit",
redlink: 1
});
item.title =
pageTitle + " (page does not exist)";
});
});
});
}
});
})();
</script>


</div>
</html>


[[Category:Vrienden Universe]]
[[Category:Vrienden Universe]]