/* QPang Repainted - the 2012 portal look: concrete background, one centred column, black menu bar
   with magenta stripes, grey paper panels, a right-hand sidebar of widgets, Verdana body text and a
   stencil-mono face for panel titles. One light look on purpose; every colour is set explicitly. */

/* Served from the site itself, so a visit sends nothing to Google. Licence: fonts/share-tech-mono-OFL.txt */
@font-face {
  font-family: 'Share Tech Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/share-tech-mono-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  color-scheme: light;
  --pink: #e5007d;
  --pink-dark: #b80064;
  --ink: #252525;
  --paper: #ecebe6;
  --row: #dcdad2;
  --row-alt: #e7e6e0;
  --text: #2a2a2a;
  --muted: #66655f;
  --concrete: #b7b6b1;
  --blue: #1f74c9;
  --yellow: #e2b100;
  --green: #3a9a2b;
  --mono: 'Share Tech Mono', Consolas, monospace;
  --body: Verdana, Tahoma, 'DejaVu Sans', sans-serif;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--concrete) url(../img/concrete.jpg) repeat;
  color: var(--text);
  font: 13px/1.5 var(--body);
}
img { max-width: 100%; }
a { color: var(--pink); }
:focus-visible { outline: 2px dashed var(--pink); outline-offset: 2px; }
.r-visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* ---------- logo ---------- */
.qp-logo { display: block; max-width: 100%; height: auto; }

/* ---------- frame ---------- */
.r-app { padding: 0 max(16px, env(safe-area-inset-right, 0px)) 30px max(16px, env(safe-area-inset-left, 0px)); }
.r-site { max-width: 980px; margin: 0 auto; }

/* ---------- header ---------- */
.r-header { display: grid; grid-template-columns: 320px minmax(0, 1fr); gap: 18px; align-items: stretch; padding-top: 12px; }
.r-brand { display: grid; align-content: space-between; justify-items: start; gap: 6px; padding-bottom: 12px; }
.r-lang { display: flex; gap: 6px; font-size: 11px; color: var(--ink); }
.r-lang a { color: var(--ink); }
.r-lang a[aria-current="true"] { color: var(--pink); font-weight: bold; text-decoration: none; }
.r-logo { display: block; margin-left: -10px; }
.r-dl { display: inline-block; background: #111; color: #fff; font: 20px/1 var(--mono); padding: 9px 22px 10px; border-radius: 999px; border: 2px solid #444; text-decoration: none; box-shadow: inset 0 2px 0 rgba(255, 255, 255, 0.15); }
.r-dl:hover { background: var(--pink); }
.r-banner { position: relative; background: var(--pink); border-radius: 14px 0 0 14px; min-height: 196px; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; padding-left: 28px; }
.r-banner::before { content: ''; position: absolute; inset: 0; background: radial-gradient(circle at 78% 22%, rgba(0, 0, 0, 0.18) 0 2px, transparent 3px) 0 0 / 23px 19px; pointer-events: none; }
.r-banner-copy { position: relative; align-self: center; display: grid; gap: 10px; padding-block: 16px; }
.r-banner-shout { font: 46px/1 var(--mono); color: #fff; margin: 0; }
.r-banner-line { margin: 0; color: #fff; font-size: 14px; max-width: 30ch; }
.r-banner-ken { position: relative; width: 230px; height: 230px; max-width: none; margin: 0 6px -26px 0; filter: drop-shadow(-5px 3px 0 rgba(0, 0, 0, 0.22)); }

/* ---------- menu ---------- */
.r-menu { position: relative; background: var(--ink); border-bottom: 6px solid var(--pink); }
.r-menu::before { content: ''; position: absolute; left: 0; top: -12px; width: 220px; height: 12px; background: repeating-linear-gradient(-60deg, var(--ink) 0 9px, transparent 9px 18px); }
.r-menu ul { list-style: none; margin: 0; padding: 0 8px; display: flex; overflow-x: auto; scrollbar-width: none; }
.r-menu ul::-webkit-scrollbar { display: none; }
.r-menu a { display: block; padding: 11px 11px 10px; color: #fff; font: bold 14px var(--body); text-decoration: none; white-space: nowrap; }
.r-menu a:hover { color: #ffb3da; }
.r-menu a.active { background: var(--pink); color: #fff; }

/* ---------- columns ---------- */
.r-cols { display: grid; grid-template-columns: minmax(0, 1fr) 290px; gap: 18px; align-items: start; margin-top: 14px; }
.r-main { background: var(--paper); position: relative; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.06), 2px 3px 0 rgba(0, 0, 0, 0.12); min-width: 0; }
.r-strip { position: relative; min-height: 78px; background: linear-gradient(180deg, #d7d6d0, #ecebe6); border-bottom: 2px solid #c9c7bf; overflow: hidden; display: flex; align-items: flex-end; padding: 22px 130px 12px 22px; }
.r-strip::before { content: ''; position: absolute; left: -10px; top: 0; width: 100%; height: 10px; background: var(--pink); }
.r-strip::after { content: ''; position: absolute; right: 18px; top: 10px; width: 96px; height: 36px; background: repeating-linear-gradient(-62deg, var(--pink) 0 12px, transparent 12px 22px); }
.r-strip-title { position: relative; margin: 0; font: 32px/1.05 var(--mono); color: #1d1d1d; font-weight: normal; overflow-wrap: anywhere; }
.r-strip-arrow { position: absolute; left: 0; bottom: -2px; width: 0; height: 0; border-left: 12px solid var(--pink); border-top: 9px solid transparent; border-bottom: 9px solid transparent; }
.r-content { padding: 16px 20px 26px; display: grid; gap: 16px; }
.r-content > * { min-width: 0; }
.r-content p { margin: 0; max-width: 72ch; }
.r-h2 { font: bold 15px/1.3 var(--body); margin: 0; color: #222; }
.r-meta { font-size: 11px; color: var(--muted); }
.r-more { font-size: 12px; }
.r-sep { border: 0; border-top: 1px dashed #b9b7ae; margin: 0; width: 100%; }
.r-row { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.r-figure { margin: 0; }
.r-figure img { height: auto; border: 1px solid #888; display: block; }
.r-list, .r-steps { margin: 0; padding-left: 20px; display: grid; gap: 8px; }
.r-steps li::marker { font-weight: bold; color: var(--pink); }
.r-step-btn { margin-top: 6px; }

/* ---------- sidebar ---------- */
.r-side { display: grid; gap: 18px; min-width: 0; }
.r-widget { background: rgba(120, 119, 114, 0.55); padding: 8px; border-radius: 0 0 10px 10px; position: relative; }
.r-widget::after { content: ''; display: block; clear: both; }
.r-widget-title { font: 26px/1 var(--mono); color: #fff; margin: 0 0 8px; padding: 2px 4px; font-weight: normal; }
.r-widget--paper { background: var(--paper); padding: 0 0 6px; border-radius: 0; box-shadow: 2px 3px 0 rgba(0, 0, 0, 0.12); }
.r-widget--paper .r-widget-title { color: #111; padding: 10px 12px 6px; border-top: 8px solid var(--pink); margin: 0; }
.r-widget--paper .r-widget-title::after { content: ''; position: absolute; right: 10px; top: 8px; width: 64px; height: 28px; background: repeating-linear-gradient(-62deg, var(--pink) 0 10px, transparent 10px 18px); }
.r-widget-body { padding: 0 8px; }
.r-pad { padding: 6px 4px; }
.r-login { background: repeating-linear-gradient(-55deg, #2a2a2a 0 22px, #333 22px 44px); padding: 10px 12px; color: #fff; display: grid; gap: 7px; }
.r-login strong { font-size: 12px; }
.r-login-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; gap: 6px; }
.r-login input[type="text"], .r-login input[type="password"] { min-width: 0; font: 11px var(--body); padding: 3px 4px; border: 1px solid #000; background: #e6e6e6; color: #222; }
.r-login label { font-size: 11px; display: flex; gap: 5px; align-items: center; }
.r-go { width: 22px; height: 20px; border: 1px solid #000; background: var(--pink); color: #fff; font: bold 12px/1 var(--body); padding: 0; }
.r-go[disabled] { opacity: 0.6; cursor: not-allowed; }
.r-note { font-size: 11px; color: #f1f1f1; background: rgba(0, 0, 0, 0.25); padding: 6px 8px; margin: 0; }
.r-qlinks { display: grid; gap: 4px; margin-top: 6px; }
.r-qlinks a { display: flex; justify-content: space-between; align-items: center; background: var(--paper); color: #222; text-decoration: none; padding: 6px 6px 6px 10px; font-size: 12px; }
.r-qlinks a:hover { background: #fff; }
.r-qlinks a span:last-child { width: 20px; height: 18px; display: inline-grid; place-items: center; border: 1px solid #888; background: #ddd; color: var(--pink); font-weight: bold; }
.r-mini { width: 100%; border-collapse: collapse; font-size: 12px; font-variant-numeric: tabular-nums; }
.r-mini th { background: #2a2a2a; color: #fff; text-align: left; padding: 6px 8px; }
.r-mini td { padding: 6px 8px; border-top: 3px solid var(--paper); background: var(--row-alt); }
.r-mini tr:nth-child(even) td { background: var(--row); }
.r-mini .r { text-align: right; }
.r-mini a { color: #222; text-decoration: none; }
.r-mini a:hover { color: var(--pink); }
.r-tab-btn { display: inline-flex; gap: 8px; align-items: center; float: right; margin-top: 8px; background: var(--pink); color: #fff; text-decoration: none; font: bold 12px var(--body); padding: 5px 6px 5px 22px; clip-path: polygon(12px 0, 100% 0, 100% 100%, 0 100%); }
.r-tab-btn span { background: #fff; color: var(--pink); width: 16px; height: 16px; display: inline-grid; place-items: center; font-size: 11px; }
.r-srv div { display: flex; justify-content: space-between; gap: 8px; padding: 6px 10px; background: var(--row-alt); border-top: 3px solid var(--paper); font-size: 12px; }
.r-srv div:nth-child(even) { background: var(--row); }
.r-srv b { font-variant-numeric: tabular-nums; text-align: right; }
.r-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; background: var(--green); margin-right: 6px; }
.r-dot--waiting { background: var(--yellow); }
.r-dot--down { background: #c62828; }
/* Staff dashboard: sections side by side where they fit, the server and log tables across the width. */
.r-dash { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 18px 16px; }
.r-dash > section { display: grid; gap: 8px; align-content: start; min-width: 0; }
.r-dash > .r-dash-full { grid-column: 1 / -1; }
.r-dash .r-srv a { color: #222; }
.r-dash-runtime { margin: 0; overflow-wrap: anywhere; }
.r-dash-log td:first-child { white-space: nowrap; }
.r-dot--live { background: var(--pink); animation: r-blink 1.4s steps(2, start) infinite; }
@keyframes r-blink { to { visibility: hidden; } }

/* ---------- tables ---------- */
.r-tabs { display: flex; flex-wrap: wrap; gap: 3px; border-bottom: 3px solid var(--pink); }
.r-tabs a { padding: 6px 11px; font: bold 12px var(--body); background: #cfcdc5; color: #333; text-decoration: none; }
.r-tabs a[aria-current="page"] { background: var(--pink); color: #fff; }
.r-table-wrap { overflow-x: auto; }
.r-table { width: 100%; border-collapse: collapse; font-size: 12px; font-variant-numeric: tabular-nums; }
.r-table th { text-align: left; padding: 5px 6px; font-weight: bold; border-bottom: 1px solid #9c9a92; white-space: nowrap; }
.r-table td { padding: 5px 6px; white-space: nowrap; vertical-align: middle; }
.r-table tbody tr:nth-child(odd) td { background: #dedcd5; }
.r-table tr.r-gap td { padding: 0; height: 12px; background: transparent; border-bottom: 1px solid #9c9a92; }
.r-table .r { text-align: right; }
.r-table a { color: #222; text-decoration: none; }
.r-table a:hover { color: var(--pink); text-decoration: underline; }
.r-table .r-main-col { font-weight: bold; }
.r-table td.r-empty { white-space: normal; padding: 12px 8px; }
/* A table that wraps its cells instead of scrolling sideways (the game servers on the status page). */
.r-table--fit th, .r-table--fit td { white-space: normal; overflow-wrap: anywhere; }
.r-table th.r-nowrap, .r-table td.r-nowrap { white-space: nowrap; overflow-wrap: normal; }
/* The status page's graphs: two side by side where there is room, one under the other on a phone. */
.r-charts { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 12px 16px; }
.r-chart { margin: 0; background: var(--row-alt); padding: 8px 10px 4px; min-width: 0; }
.r-chart figcaption { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: center; font-size: 12px; }
.r-chart figcaption b { margin-right: auto; }
.r-chart-key { display: inline-flex; align-items: center; gap: 4px; color: var(--muted); }
.r-chart-key i { display: inline-block; width: 12px; height: 3px; border-radius: 2px; }
.r-chart svg { display: block; width: 100%; height: auto; }
.r-chart-grid { stroke: #b9b7af; stroke-width: 1; }
.r-chart-label { font-size: 13px; fill: var(--muted); font-variant-numeric: tabular-nums; }
/* Long addresses and Discord names wrap so a table fits its panel; ordinary ones stay on one line. */
.r-table td.r-wrap { white-space: normal; overflow-wrap: anywhere; min-width: 18ch; }
.r-table td .r-meta { white-space: normal; }
.r-who { display: inline-flex; align-items: center; gap: 6px; }
.lvl-ico { display: inline-block; vertical-align: middle; flex: none; background-repeat: no-repeat; image-rendering: pixelated; }
.r-map { width: 64px; height: 37px; object-fit: cover; display: block; border: 1px solid #777; }
.r-lock { vertical-align: -1px; margin-right: 3px; color: #444; }
.r-state { font: bold 11px var(--body); padding: 2px 6px; color: #fff; display: inline-block; }
.r-state--waiting { background: var(--green); }
.r-state--playing { background: var(--pink); }
.r-detail td { background: #f4f3ef; white-space: normal; padding: 8px 10px 12px; }
.r-table tbody tr.r-detail td { background: #f4f3ef; }
.r-detail-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px; }
.r-plist, .r-rules { margin: 0; padding: 0; display: grid; gap: 3px; }
.r-plist { list-style: none; }
.r-rules { padding-left: 16px; }
.r-plist li { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.r-tm { width: 8px; height: 8px; display: inline-block; background: #f7a21b; }
.r-tm-1 { background: var(--blue); }
.r-tm-2 { background: var(--yellow); }
.r-expand { font: 11px var(--body); background: #fff; border: 1px solid #999; color: #333; cursor: pointer; padding: 1px 7px; }
.r-feed td:first-child { width: 90px; }
.r-form-row { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; font-size: 12px; }
.r-form-row select, .r-input { font: 12px var(--body); padding: 3px 4px; border: 1px solid #888; background: #fff; color: #222; }
.r-search { display: flex; gap: 6px; align-items: center; margin-left: auto; flex-wrap: wrap; }
.r-btn { font: bold 12px var(--body); background: var(--pink); color: #fff; border: 1px solid var(--pink-dark); padding: 4px 12px; text-decoration: none; cursor: pointer; display: inline-block; }
.r-btn[disabled] { background: #b5b3ab; border-color: #999; cursor: not-allowed; }
.r-btn--small { font-size: 11px; padding: 3px 9px; }
.r-btn--quiet { background: #8d8b84; border-color: #6d6b65; }
.r-inline-form { display: inline-block; margin: 0 0 0 8px; }
.r-staff-actions { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.r-staff-actions form { margin: 0; }
.r-form-hint { margin: -4px 0 0 158px; }
/* A sign-up field people never see: off-screen rather than display:none, which some bots skip. */
.r-trap { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
/* Cloudflare's widget stays invisible unless it needs the visitor; then it takes its 300 by 65 here. */
.r-turnstile { display: grid; gap: 4px; }
.r-turnstile .r-meta { margin: 0; }
.r-login form { margin: 0; }
.r-login > span { font-size: 12px; overflow-wrap: anywhere; }

/* ---------- reconnect notice: Blazor toggles the state classes on it ---------- */
.r-reconnect { position: fixed; z-index: 100; left: 50%; bottom: 16px; transform: translateX(-50%); width: max-content; max-width: calc(100vw - 32px); display: none; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 11px 14px; background: #1c1c1c; color: #fff; border-top: 4px solid var(--pink); box-shadow: 0 8px 22px rgba(0, 0, 0, 0.35); font-size: 13px; }
.r-reconnect p { margin: 0; }
.r-reconnect > p, .r-reconnect > button { display: none; }
.r-reconnect.components-reconnect-show, .r-reconnect.components-reconnect-failed, .r-reconnect.components-reconnect-paused, .r-reconnect.components-reconnect-resume-failed { display: flex; }
.r-reconnect.components-reconnect-show:not(.components-reconnect-retrying) .r-rc-first,
.r-reconnect.components-reconnect-retrying .r-rc-retry,
.r-reconnect.components-reconnect-failed .r-rc-failed,
.r-reconnect.components-reconnect-paused .r-rc-paused,
.r-reconnect.components-reconnect-resume-failed .r-rc-resume-failed { display: block; }
.r-reconnect-spin { width: 14px; height: 14px; flex: none; border: 2px solid rgba(255, 255, 255, 0.25); border-top-color: var(--pink); border-radius: 50%; animation: r-spin 0.8s linear infinite; }
.r-reconnect:not(.components-reconnect-show) .r-reconnect-spin { display: none; }
@keyframes r-spin { to { transform: rotate(360deg); } }

/* ---------- profile, news, misc ---------- */
.r-profile { display: grid; grid-template-columns: 124px minmax(0, 1fr); gap: 16px; align-items: start; }
.r-portrait { border: 1px solid #888; background: #f7a21b; display: block; }
.r-profile-main { display: grid; gap: 10px; min-width: 0; }
.r-profile-name { font-size: 22px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.r-kv { width: 100%; border-collapse: collapse; font-size: 12px; font-variant-numeric: tabular-nums; }
.r-kv th { text-align: left; font-weight: normal; color: var(--muted); padding: 4px 8px 4px 0; width: 45%; }
.r-kv td { padding: 4px 0; font-weight: bold; }
.r-kv tr + tr th, .r-kv tr + tr td { border-top: 1px dotted #b9b7ae; }
.r-two { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; }
.r-box { background: #fff; border: 1px solid #c4c2ba; padding: 10px 12px; display: grid; gap: 6px; align-content: start; }
.r-box--pink { border-left: 6px solid var(--pink); }
.r-news-item { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 12px; align-items: start; padding-bottom: 12px; border-bottom: 1px dashed #b9b7ae; }
.r-news-item:last-of-type { border-bottom: 0; padding-bottom: 0; }
.r-news-item img { width: 120px; height: 77px; object-fit: cover; border: 1px solid #888; display: block; }
.r-news-copy { display: grid; gap: 4px; }
.r-news-title { font: bold 15px/1.3 var(--body); color: var(--pink); }
.r-article { display: grid; gap: 12px; }
.r-article-title { font: 22px/1.2 var(--body); margin: 0; color: #222; }
.r-article h2 { font: bold 16px var(--body); margin: 4px 0 0; }
.r-article h3 { font: bold 14px var(--body); margin: 4px 0 0; }
.r-article ul { margin: 0; padding-left: 20px; }
.r-keys { width: 100%; border-collapse: collapse; font-size: 12px; }
.r-keys td { padding: 4px 6px; border-top: 1px dotted #b9b7ae; vertical-align: top; }
.r-keys td:first-child { white-space: nowrap; }
.r-key { display: inline-block; font: bold 11px var(--body); padding: 1px 5px; border: 1px solid #777; border-bottom-width: 2px; background: #fff; margin-right: 2px; }
.r-form { display: grid; gap: 8px; max-width: 440px; }
.r-form label { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 8px; align-items: center; font-size: 12px; }
.r-form label.r-check { display: flex; }
.r-form .r-input { width: 100%; }
.r-form .r-input:disabled { background: #e6e6e6; }
.r-footer { margin-top: 18px; background: rgba(70, 70, 68, 0.78); color: #eee; padding: 14px 18px; text-align: center; font-size: 11px; display: grid; gap: 6px; }
.r-footer p { margin: 0; }
.r-footer a { color: #ff6ab8; }
.r-footer nav { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }

@media (max-width: 860px) {
  .r-header { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .r-brand { grid-template-columns: minmax(0, 1fr) auto; align-items: center; padding: 0; }
  .r-lang { grid-column: 1 / -1; }
  .r-logo { max-width: 260px; }
  .r-banner { border-radius: 0; min-height: 150px; }
  .r-banner-ken { width: 170px; height: 170px; margin-bottom: -20px; }
  .r-cols { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 560px) {
  .r-banner { padding-left: 14px; }
  .r-banner-shout { font-size: 30px; }
  .r-banner-line { font-size: 12px; }
  .r-banner-ken { width: 130px; height: 130px; margin-bottom: -16px; }
  .r-logo { max-width: 200px; }
  .r-dl { font-size: 16px; padding: 7px 16px; }
  .r-content { padding: 14px 12px 20px; }
  .r-strip { padding: 18px 96px 10px 14px; min-height: 66px; }
  .r-strip::after { width: 70px; }
  .r-strip-title { font-size: 24px; }
  .r-profile, .r-news-item, .r-two, .r-detail-grid { grid-template-columns: minmax(0, 1fr); }
  .r-news-item img { width: 100%; max-width: 260px; height: auto; }
  .r-form label { grid-template-columns: minmax(0, 1fr); }
  .r-form-hint { margin-left: 0; }
  .r-search { margin-left: 0; }
  .r-hide-sm { display: none; }
}
@media (prefers-reduced-motion: reduce) { .r-dot--live, .r-reconnect-spin { animation: none; } }
