@font-face {
  font-family: "CW Display";
  src: url("fonts/BebasNeue-Regular.woff2") format("woff2");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

:root {
  --maroon: #54102b;
  --maroon-dark: #390a1d;
  --maroon-mid: #6c1234;
  --gold: #edc268;
  --ivory: #fff9f0;
  --paper: #faf8f5;
  --ink: #152033;
  --muted: #5f6877;
  --soft-muted: #747d89;
  --border: #e4ddd7;
  --border-strong: #d5cdc7;
  --blue-link: #07588c;
  --online: #4fc49c;
  --surface: #fff;
  --surface-alt: #f7f5f2;
  --surface-hover: #f4f1ed;
  --page-width: 1400px;
  --sidebar-width: 378px;
  --column-gap: 30px;
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  min-width: 320px;
  margin: 0;
  color: var(--ink);
  background: var(--paper);
  font-family: Arial, Helvetica, sans-serif;
  font-size: 14px;
  line-height: 1.3;
}
button, input { font: inherit; }
a { color: inherit; }
/* MyBB's own global.css sets a:link/a:visited/a:hover (specificity 0,1,1),
   which beats every plain single-class link rule in this file (.thread-title,
   .forum-title, .top-nav__link, etc. — all 0,1,0) regardless of load order.
   Neutralizing MyBB's version back to "inherit" here — early in the cascade —
   lets every one of this file's own, more specific or later-declared link
   rules win normally, exactly as authored. */
a:link, a:visited { color: inherit; }
a:hover, a:active { color: inherit; }
a:focus-visible, button:focus-visible, input:focus-visible { outline: 3px solid #2b7aa4; outline-offset: 3px; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.icon { display: block; width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }

/* Global header and navigation */
.top-nav {
  height: 70px;
  color: var(--ivory);
  background: var(--maroon-dark);
  border-bottom: 1px solid rgba(255, 249, 240, .18);
}
.top-nav__inner {
  display: flex;
  align-items: stretch;
  width: min(var(--page-width), calc(100% - 60px));
  height: 70px;
  margin-inline: auto;
}
.top-nav__brand {
  display: flex;
  align-items: center;
  flex: 0 0 355px;
  padding-right: 30px;
  border-right: 1px solid rgba(255, 249, 240, .08);
}
.top-nav__brand img { display: block; width: 286px; height: auto; }
.top-nav__links { display: flex; height: 100%; }
.top-nav__link {
  position: relative;
  display: flex;
  align-items: center;
  padding: 0 22px;
  color: var(--ivory);
  font-size: 16px;
  text-decoration: none;
  white-space: nowrap;
}
.top-nav__link:hover { background: rgba(255, 249, 240, .06); }
.top-nav__link.is-active { background: rgba(255, 249, 240, .06); }
.top-nav__link.is-active::after {
  position: absolute;
  right: 0;
  bottom: -1px;
  left: 0;
  height: 3px;
  background: var(--gold);
  content: "";
}
.search {
  display: flex;
  align-items: center;
  width: 292px;
  height: 40px;
  margin: auto 24px auto auto;
  padding: 0 12px;
  color: var(--ivory);
  border: 1px solid rgba(255, 249, 240, .42);
  border-radius: 5px;
}
.search .icon { width: 21px; height: 21px; flex: none; }
.search input { min-width: 0; width: 100%; margin-left: 10px; padding: 0; color: var(--ivory); background: transparent; border: 0; outline: 0; }
.search input::placeholder { color: rgba(255, 249, 240, .74); }
.icon-button, .mobile-menu {
  position: relative;
  display: grid;
  place-items: center;
  width: 38px;
  padding: 0;
  color: var(--ivory);
  background: transparent;
  border: 0;
  border-radius: 6px;
  cursor: pointer;
}
/* Override the generic light-surface button:hover further down this file —
   these sit on the dark maroon nav bar, so a near-white hover background
   makes their ivory icon disappear instead of standing out. */
.icon-button:hover, .mobile-menu:hover { background: rgba(255, 249, 240, .12); }
.notification-button { margin-right: 14px; }
.notification-button .icon { width: 25px; height: 25px; }
.notification-count {
  position: absolute;
  top: 13px;
  right: -1px;
  display: grid;
  place-items: center;
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  color: var(--ivory);
  background: #bd2449;
  border-radius: 50%;
  font-size: 11px;
}
.account { display: flex; align-items: center; gap: 10px; padding-left: 2px; text-decoration: none; white-space: nowrap; background: none; border: 0; border-radius: 6px; font: inherit; color: inherit; cursor: pointer; }
.account:hover { background: rgba(255, 249, 240, .12); }
.account__name { font-size: 15px; }
.account .icon--chevron { width: 17px; height: 17px; margin-left: 2px; transition: transform .15s ease; }
.account-menu { position: relative; display: flex; align-items: center; height: 100%; }
.account-menu[data-open] .icon--chevron { transform: rotate(180deg); }
.account-menu__panel {
  position: absolute;
  top: calc(100% + 12px);
  right: 0;
  z-index: 60;
  display: flex;
  flex-direction: column;
  min-width: 210px;
  padding: 6px;
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: 0 12px 30px rgba(21, 32, 51, .18);
}
.account-menu__panel[hidden] { display: none; }
.account-menu__item {
  display: block;
  padding: 10px 12px;
  border-radius: 6px;
  color: inherit;
  text-decoration: none;
  font-size: 14px;
  white-space: nowrap;
}
.account-menu__item:hover, .account-menu__item:focus-visible { background: var(--surface-hover); }
/* The base .notification-count rule's `display: grid` is block-level by
   default — fine when `position: absolute` takes it out of flow (the bell
   icon badge), but resetting only `position` here left it flowing as a
   full-width block that a 50% border-radius then stretched into an oval.
   `inline-grid` keeps it sized to its own content instead. */
.account-menu__item .notification-count { position: static; display: inline-grid; margin-left: 6px; vertical-align: middle; }
.account-menu__divider { height: 0; margin: 6px 4px; border: 0; border-top: 1px solid var(--border); }
.avatar { display: inline-grid; place-items: center; overflow: hidden; flex: none; width: 37px; height: 37px; color: #fff; border-radius: 50%; font-size: 12px; font-weight: 700; }
.avatar img { display: block; width: 100%; height: 100%; object-fit: cover; }
.avatar--account { width: 39px; height: 39px; color: var(--ivory); background: transparent; border: 1px solid rgba(255, 249, 240, .65); font-size: 14px; }
.avatar--maroon { background: #830f39; }
.avatar--teal { background: #1d6c70; }
.avatar--purple { background: #713783; }
.avatar--blue { background: #386baa; }
.avatar--orange { background: #c86d24; }
.avatar--more { color: var(--ink); background: #e7e5e1; }
.mobile-menu, .mobile-nav { display: none; }

/* Replacement people-free masthead, adapted from the supplied implementation. */
.cw-masthead, .cw-masthead * { box-sizing: border-box; }
.cw-masthead {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 160px;
  color: var(--ivory);
  background: var(--maroon) url("backgrounds/maroon-field.svg") center / cover no-repeat;
  font-family: Arial, Helvetica, sans-serif;
}
.cw-masthead__scene {
  position: absolute;
  z-index: -4;
  inset: 0 0 0 60%;
  opacity: .83;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 20%, #000 73%, transparent 100%);
  mask-image: linear-gradient(90deg, transparent, #000 20%, #000 73%, transparent 100%);
}
.cw-masthead__scene img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 56% 15%; }
.cw-masthead__seam { position: absolute; z-index: -3; width: 150px; height: 300px; top: -62px; opacity: .8; pointer-events: none; }
.cw-masthead__seam--left { left: -15px; }
.cw-masthead__seam--middle { left: calc(50% - 292px); }
.cw-masthead__map { position: absolute; z-index: -2; width: 328px; height: auto; top: -16px; left: calc(50% - 144px); opacity: .78; pointer-events: none; }
.cw-masthead__grain { position: absolute; z-index: -1; inset: 0; opacity: .3; background: url("backgrounds/grain.svg") repeat; pointer-events: none; }
.cw-masthead__inner { display: flex; align-items: center; justify-content: space-between; gap: 24px; width: min(var(--page-width), calc(100% - 60px)); min-height: 160px; margin: auto; padding: 24px 30px 20px; }
.cw-masthead__copy { position: relative; max-width: 470px; }
.cw-masthead__wordmark { display: block; width: 345px; max-width: 100%; height: auto; }
.cw-masthead__descriptor { margin: 10px 0 0; font-size: 17px; line-height: 1.2; letter-spacing: 1.3px; font-weight: 600; }
.cw-masthead__descriptor span { color: var(--gold); }
.cw-masthead__tagline { margin: 10px 0 0; font-size: 18px; line-height: 1.4; font-style: italic; }
.cw-masthead__values { margin: 0; padding: 0; list-style: none; font-size: 12px; line-height: 1.9; letter-spacing: .6px; text-transform: uppercase; }
.cw-masthead__values::after { display: block; width: 28px; height: 2px; margin-top: 7px; background: var(--gold); content: ""; }

/* Forum content */
.page-shell {
  display: grid;
  grid-template-columns: minmax(0, 1fr) var(--sidebar-width);
  gap: var(--column-gap);
  width: min(var(--page-width), calc(100% - 60px));
  min-height: 724px;
  margin: 0 auto;
  padding: 11px 0 32px;
  background: var(--paper);
}
.content-column { min-width: 0; }
.breadcrumb { display: flex; gap: 15px; align-items: center; height: 24px; color: #526071; font-size: 14px; }
.breadcrumb a { text-decoration: none; }
.breadcrumb a:hover { text-decoration: underline; }
.page-heading { display: flex; align-items: center; justify-content: space-between; min-height: 49px; }
h1, h2, p { margin-top: 0; }
.page-heading h1 { margin: 0; font-size: 34px; line-height: 1; letter-spacing: -.8px; }
.page-actions { display: flex; align-items: center; gap: 22px; }
.text-action { display: inline-flex; align-items: center; gap: 8px; padding: 7px 0; color: var(--ink); background: transparent; border: 0; cursor: pointer; }
.text-action .icon { width: 20px; height: 20px; }
.outline-button { display: inline-flex; align-items: center; min-height: 39px; padding: 0 14px; color: #273345; text-decoration: none; border: 1px solid var(--border-strong); border-radius: 4px; }
.outline-button:hover { background: var(--surface-hover); }
.forum-group { overflow: hidden; margin-bottom: 11px; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); box-shadow: 0 1px 2px rgba(21, 32, 51, .04); }
.content-column > .forum-group:last-child { margin-bottom: 0; }
.category-heading { display: flex; align-items: center; justify-content: space-between; min-height: 56px; padding: 8px 18px 8px 21px; color: #fff; background: var(--maroon); }
.category-heading h2 { margin: 0; font-size: 20px; line-height: 1.1; letter-spacing: .25px; text-transform: uppercase; }
.category-heading p { margin: 2px 0 0; font-size: 13px; line-height: 1.2; }
/* min-height: 32px, not just height — the generic `button, input.button`
   base rule (further down this file) sets min-height:35px, which wins as a
   floor over a plain `height` declaration no matter the selector
   specificity, so every collapse/expand chevron on the site (category
   headers, sidebar cards) was rendering 3px taller/off-center than
   intended until this was added. */
.collapse-button { display: grid; place-items: center; width: 32px; height: 32px; min-height: 32px; padding: 0; color: currentColor; background: transparent; border: 0; cursor: pointer; }
.collapse-button .icon { width: 19px; height: 19px; }
.category-heading .collapse-button { margin-right: -7px; }
.forum-table { width: 100%; }
.forum-columns, .forum-row { display: grid; grid-template-columns: minmax(0, 1fr) 70px 70px 280px; }
.forum-columns { align-items: center; min-height: 29px; padding: 0 20px; color: #3e4652; background: var(--surface-alt); border-bottom: 1px solid var(--border); }
.forum-columns span:nth-child(2), .forum-columns span:nth-child(3) { text-align: left; }
.forum-row { min-height: 65px; padding: 14px 20px; border-bottom: 1px solid var(--border); }
.forum-row:last-child { border-bottom: 0; }
.forum-name, .latest-post { display: flex; align-items: center; min-width: 0; }
.forum-name { gap: 24px; }
.board-icon { width: 32px; height: 32px; flex: none; color: #465467; fill: none; stroke: currentColor; stroke-width: 1.55; stroke-linecap: round; stroke-linejoin: round; }
.forum-name > div { min-width: 0; }
.forum-title { color: var(--ink); font-size: 16px; font-weight: 700; line-height: 1.15; text-decoration: none; }
.forum-title:hover, .latest-post > div > a:hover { color: var(--blue-link); text-decoration: underline; }
.forum-name p { max-width: 430px; margin: 2px 0 0; color: #394352; font-size: 13px; line-height: 1.18; }
.new-badge { display: inline-flex; align-items: center; height: 17px; margin-left: 8px; padding: 0 5px; color: #fff; background: #ac1743; border-radius: 3px; font-size: 10px; font-weight: 700; vertical-align: 2px; }
.stat { align-self: center; color: #253247; font-size: 16px; }
.mobile-label { display: none; }
.latest-post { gap: 13px; }
.latest-post > div { min-width: 0; flex: 1; }
.latest-post > div > a { display: block; max-width: 255px; color: var(--blue-link); font-size: 14px; font-weight: 700; line-height: 1.17; text-decoration: none; }
/* Direct child only — not a bare descendant `span` — because my_date('relative', ...)
   wraps its own output in <span title="exact date"> for posts under 12h old
   (older posts get plain text, no span). A broad `.latest-post span` also
   matches that inner tooltip span and forces it onto its own line, splitting
   "author · time" into three lines instead of one. */
/* nowrap + ellipsis, not just display:block — the exact pixel width where
   "author · date" wraps depends on the font actually available (Arial vs.
   whatever a given browser/OS substitutes it with), so a fit that holds in
   one environment can still wrap in another. Truncating instead of
   wrapping keeps this to one line unconditionally, everywhere. */
.latest-post > div > span { display: block; overflow: hidden; margin-top: 2px; color: #394352; font-size: 13px; line-height: 1.15; white-space: nowrap; text-overflow: ellipsis; }
/* The real fix for the bold/multi-line byline: {$lastpost_profilelink}'s
   <a> sits inside this span, and .latest-post a used to match it too —
   handing it the TITLE link's display:block, 255px max-width, larger
   font-size and bold weight. A block-level element forced into the middle
   of an inline run breaks the flow around itself, which is what actually
   produced the "title / username / · time" three-line split — not a wrap
   width issue. Scoping the title rule to .latest-post > div > a (below)
   fixes that; this just keeps the now-plain nested link from picking up a
   browser-default underline. */
.latest-post > div > span a { text-decoration: none; }

@media (min-width: 701px) {
}

/* Sidebar modules */
.sidebar { min-width: 0; }
.side-card { overflow: hidden; border: 1px solid var(--border); border-radius: 5px; background: var(--surface); box-shadow: 0 1px 2px rgba(21, 32, 51, .04); }
.shoutbox-card { border-color: transparent; }
.side-card__heading { display: flex; align-items: center; justify-content: space-between; min-height: 67px; padding: 10px 18px; color: #fff; background: var(--maroon); }
.side-card__heading h2 { display: flex; align-items: center; gap: 20px; margin: 0; font-size: 20px; line-height: 1.05; }
.side-card__heading p { margin: 5px 0 0; font-size: 14px; }
.live { display: inline-flex; align-items: center; gap: 6px; color: #8fe0bc; font-size: 12px; font-weight: 700; letter-spacing: .1px; }
.live-dot, .online-dot { display: inline-block; width: 10px; height: 10px; background: var(--online); border-radius: 50%; }
.side-card__heading-actions { display: flex; align-items: center; gap: 2px; }
.side-card__heading .collapse-button { margin-right: -7px; }
.shoutbox-body { padding: 7px 17px 13px; }
/* Trailing "auto auto" (not just one "auto"), even though most rows never
   fill the 4th column — a regular member's row only has 3 children (avatar,
   body, time) and simply leaves it unused, but a mod/admin's row adds the
   delete button as a real 4th grid item, and redefining the template per-row
   would need a :has() check repeated at every breakpoint below instead. */
.shout-message { display: grid; grid-template-columns: 38px minmax(0, 1fr) auto auto; gap: 12px; align-items: center; min-height: 57px; padding: 6px 0; border-bottom: 1px solid var(--border); }
.shout-message > div { min-width: 0; }
.shout-message strong { display: block; color: #113e67; font-size: 14px; line-height: 1.1; }
.shout-message p { margin: 3px 0 0; color: var(--ink); font-size: 13px; line-height: 1.15; }
.shout-message time { align-self: start; padding-top: 1px; color: #7d8490; font-size: 12px; white-space: nowrap; }
/* min-height: 22px, not just height — the generic `button, input.button`
   base rule sets min-height:35px, which wins as a floor over a plain
   `height` declaration regardless of selector specificity (that's how the
   two properties combine, not a cascade conflict) unless overridden here. */
.shout-message__delete { display: grid; place-items: center; align-self: start; width: 22px; height: 22px; min-height: 22px; margin-top: -1px; padding: 0; color: var(--soft-muted); background: transparent; border: 0; border-radius: 4px; cursor: pointer; }
.shout-message__delete .icon { width: 14px; height: 14px; }
.shout-message__delete:hover, .shout-message__delete:focus-visible { color: #fff; background: #c0392b; }
.shout-composer { display: grid; grid-template-columns: minmax(0, 1fr) 39px 45px; gap: 8px; margin-top: 13px; }
.shout-composer input { width: 100%; min-width: 0; height: 42px; padding: 0 10px; color: var(--ink); border: 1px solid var(--border-strong); border-radius: 4px; outline: 0; }
.shout-composer input::placeholder { color: #717984; }
.composer-button, .send-button { display: grid; place-items: center; height: 42px; padding: 0; cursor: pointer; }
.composer-button { width: 100%; color: #445063; background: var(--surface); border: 1px solid var(--border-strong); border-radius: 4px; }
.composer-button .icon { width: 20px; height: 20px; }
.composer-button[aria-expanded="true"] { color: var(--maroon); border-color: var(--maroon); }
.emoji-picker-wrap { position: relative; }
/* :not([hidden]), not a bare .emoji-picker { display: grid } — a plain
   class and the browser's own [hidden]{display:none} are equal specificity
   (0,1,0 each), and this file loads after the UA stylesheet, so an
   unscoped display here would always win and the picker could never
   actually close. */
.emoji-picker:not([hidden]) {
  position: absolute;
  right: 0;
  bottom: calc(100% + 8px);
  z-index: 20;
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 2px;
  width: 216px;
  padding: 8px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(21, 32, 51, .16);
}
.emoji-picker button {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  padding: 0;
  background: transparent;
  border: 0;
  border-radius: 5px;
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
}
.emoji-picker button:hover, .emoji-picker button:focus-visible { background: var(--surface-hover); }
.send-button { color: #fff; background: #831039; border: 1px solid #831039; border-radius: 4px; }
.send-button .icon { width: 22px; height: 22px; }
.grounds-card { margin-top: 12px; }
.grounds-body { padding: 10px 18px 17px; }
.grounds-body h2 { margin: 0; font-size: 20px; line-height: 1.2; }
.online-count { display: flex; align-items: center; gap: 8px; margin: 9px 0 12px; color: #3f4855; font-size: 14px; }
.member-avatars { display: flex; gap: 6px; }
.member-avatars .avatar { width: 38px; height: 38px; font-size: 11px; }
.member-names { margin: 14px 0 0; color: #404a58; font-size: 13px; white-space: nowrap; }

.news-card { margin-top: 12px; }
.news-body { padding: 14px 18px 17px; }
.news-body h2 { margin: 0 0 12px; font-size: 20px; line-height: 1.2; }
.news-list { display: flex; flex-direction: column; gap: 12px; margin: 0; padding: 0; list-style: none; }
.news-item a { display: flex; gap: 10px; align-items: flex-start; text-decoration: none; }
.news-item__thumb { flex: none; width: 56px; height: 56px; border-radius: 5px; object-fit: cover; background: var(--surface-alt); }
.news-item__copy { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.news-item__title { font-size: 13.5px; line-height: 1.35; font-weight: 600; color: var(--ink); }
.news-item a:hover .news-item__title { color: var(--blue-link); text-decoration: underline; }
.news-item__time { font-size: 12px; color: var(--muted); }
.news-item--empty { color: var(--muted); font-size: 13px; }
.news-source { margin: 14px 0 0; color: var(--muted); font-size: 12px; }
.news-source a { text-decoration: underline; }

/* Footer */
.site-footer { min-height: 70px; color: var(--ivory); background: var(--maroon); }
.site-footer__inner { display: flex; align-items: center; justify-content: space-between; gap: 25px; width: min(var(--page-width), calc(100% - 60px)); min-height: 70px; margin: auto; }
.footer-brand { display: flex; flex-direction: column; align-items: flex-start; color: var(--ivory); text-decoration: none; }
.footer-brand img { display: block; width: 213px; height: auto; }
.footer-brand span { margin-top: -1px; padding-left: 0; color: var(--ivory); font-size: 12px; line-height: 1.2; }
.footer-links { display: flex; align-items: center; gap: 18px; margin-left: auto; font-size: 13px; }
.footer-links a { text-decoration: none; }
.footer-links a:hover { color: var(--gold); }
.footer-tagline { margin: 0 0 0 34px; font-size: 13px; white-space: nowrap; }

@media (min-width: 1700px) {
  .cw-masthead__scene { inset-inline-start: calc(50% + 176px); inset-inline-end: calc(50% - 836px); }
}
@media (max-width: 1250px) {
  .top-nav__brand { flex-basis: 300px; }
  .top-nav__brand img { width: 245px; }
  .top-nav__link { padding-inline: 17px; }
  .search { width: 230px; margin-right: 12px; }
  .forum-columns, .forum-row { grid-template-columns: minmax(0, 1fr) 66px 66px 210px; }
  .forum-name { gap: 15px; }
  .latest-post { gap: 9px; }
  .latest-post > div > a { max-width: 205px; }
}
@media (max-width: 1100px) {
  .top-nav__brand { flex-basis: 245px; padding-right: 18px; }
  .top-nav__brand img { width: 220px; }
  .top-nav__link { padding-inline: 13px; font-size: 14px; }
  .search { width: 190px; }
  .account__name { display: none; }
  .cw-masthead__inner { padding-inline: 32px; }
  .cw-masthead__values { display: none; }
  .cw-masthead__scene { inset-inline-start: 48%; }
  .cw-masthead__map { left: 48%; width: 300px; opacity: .5; }
  .cw-masthead__seam--middle { display: none; }
  .page-shell { grid-template-columns: minmax(0, 1fr) 330px; gap: 20px; }
  .forum-columns, .forum-row { grid-template-columns: minmax(0, 1fr) 60px 60px 225px; padding-inline: 14px; }
  .forum-name { gap: 10px; }
  .board-icon { width: 30px; height: 30px; }
  .latest-post > div > a { max-width: 167px; }
  .shout-message { grid-template-columns: 35px minmax(0, 1fr) auto auto; gap: 8px; }
  .shout-message .avatar { width: 35px; height: 35px; }
  .member-avatars { gap: 4px; }
  .member-avatars .avatar { width: 33px; height: 33px; font-size: 10px; }
  .footer-brand img { width: 190px; }
  .footer-links { gap: 12px; }
  .footer-tagline { margin-left: 10px; }
}
@media (max-width: 900px) {
  .page-shell { display: block; width: min(100% - 40px, 760px); min-height: 0; padding-bottom: 28px; }
  .sidebar { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(245px, 1fr); gap: 18px; padding-top: 18px; }
  .grounds-card { margin-top: 0; }
  .side-card__heading h2 { gap: 12px; }
  .footer-links { margin-left: 0; }
  /* Below this width .page-shell stacks (content-column above .sidebar),
     so Recent Posts would push Shoutbox further down the page — Shoutbox
     is the higher-priority element on mobile, so hide this panel here
     rather than compete with it for scroll position. */
  .recent-activity { display: none; }
}
@media (max-width: 700px) {
  .top-nav { height: 106px; }
  .top-nav__inner { position: relative; flex-wrap: nowrap; align-items: center; width: calc(100% - 32px); height: 64px; }
  .top-nav__brand { flex: 1 1 auto; width: auto; min-width: 0; padding: 0; border: 0; }
  .top-nav__brand img { width: min(205px, 100%); }
  .top-nav__links { display: none; }
  .search { width: 32px; height: 40px; margin: 0 3px 0 5px; padding: 0; border-color: transparent; }
  .search .icon { margin: auto; }
  .search input { position: absolute; width: 1px; height: 1px; opacity: 0; }
  .notification-button { width: 32px; margin: 0 4px 0 0; }
  .notification-button .icon { width: 22px; height: 22px; }
  .notification-count { top: 6px; right: -1px; }
  .account { padding: 0; }
  .account .icon--chevron { display: none; }
  .avatar--account { width: 34px; height: 34px; font-size: 12px; }
  .mobile-menu { display: grid; width: 32px; margin-left: 5px; }
  .mobile-nav { display: flex; align-items: center; justify-content: space-between; width: calc(100% - 32px); height: 42px; margin-inline: auto; border-top: 1px solid rgba(255, 249, 240, .14); }
  .mobile-nav .top-nav__link { height: 42px; padding: 0 17px; font-size: 13px; }
  .mobile-nav .top-nav__link:first-child { padding-left: 0; }
  .mobile-nav .top-nav__link.is-active::after { right: 12px; left: 0; }
  .cw-masthead, .cw-masthead__inner { min-height: 156px; }
  .cw-masthead__inner { width: 100%; padding: 24px; }
  .cw-masthead__scene { display: none; }
  .cw-masthead__map { right: -86px; left: auto; top: -7px; width: 250px; opacity: .19; }
  .cw-masthead__seam--left { left: -40px; opacity: .45; }
  .cw-masthead__wordmark { width: min(330px, 100%); }
  .cw-masthead__descriptor { font-size: 12px; letter-spacing: .75px; }
  .cw-masthead__tagline { font-size: 16px; }
  .cw-masthead__copy { width: 100%; }
  .page-shell { width: 100%; padding: 10px 16px 28px; }
  .breadcrumb { height: 22px; font-size: 13px; }
  .page-heading { align-items: flex-start; min-height: 72px; padding-top: 8px; }
  .page-heading h1 { font-size: 30px; }
  .page-actions { gap: 9px; }
  .text-action { width: 32px; padding: 4px; }
  .text-action span { display: none; }
  .outline-button { min-height: 34px; padding: 0 9px; font-size: 12px; }
  .forum-group { margin-bottom: 12px; }
  .category-heading { min-height: 58px; padding: 8px 10px 8px 13px; }
  .category-heading h2 { font-size: 17px; }
  .category-heading p { max-width: 275px; font-size: 12px; }
  .forum-columns { display: none; }
  .forum-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-rows: auto auto auto; gap: 7px 8px; min-height: 0; padding: 11px 12px 12px; }
  .forum-name { grid-column: 1 / -1; align-items: flex-start; gap: 11px; }
  .board-icon { width: 28px; height: 28px; margin-top: 1px; }
  .forum-title { font-size: 15px; }
  .forum-name p { max-width: none; margin-top: 3px; font-size: 12px; line-height: 1.25; }
  .new-badge { height: 16px; margin-left: 6px; font-size: 9px; }
  .stat { display: flex; align-items: center; gap: 5px; color: #334154; font-size: 12px; }
  /* 39px = board-icon's 28px + .forum-name's 11px gap — lines the Topics
     stat and the latest-post row (below) up with the title/subtext text,
     instead of with the icon that sits to its left on the row above. */
  .stat:nth-child(2) { grid-column: 1; grid-row: 2; margin-left: 39px; }
  .stat:nth-child(3) { grid-column: 2; grid-row: 2; }
  .mobile-label { display: inline; color: var(--soft-muted); font-size: 11px; }
  .latest-post { grid-column: 1 / -1; grid-row: 3; align-items: flex-start; gap: 7px; max-width: none; margin-top: 1px; padding-top: 7px; padding-left: 39px; border-top: 1px solid var(--border); }
  .latest-post .avatar { width: 30px; height: 30px; font-size: 10px; }
  .latest-post > div > a { max-width: none; font-size: 13px; line-height: 1.18; }
  .latest-post > div > span { font-size: 11px; line-height: 1.15; }
  .sidebar { display: block; padding-top: 5px; }
  .grounds-card { margin-top: 12px; }
  .site-footer__inner { display: grid; grid-template-columns: 1fr auto; gap: 19px 12px; width: calc(100% - 32px); padding: 18px 0 20px; }
  .site-footer { min-height: 0; }
  .footer-brand { grid-column: 1 / -1; }
  .footer-brand img { width: 205px; }
  .footer-brand span { padding-left: 0; }
  .footer-links { gap: 10px; font-size: 11px; }
  .footer-tagline { margin: 0; font-size: 11px; text-align: right; }
}
@media (max-width: 450px) {
  .top-nav__brand img { width: 177px; }
  .mobile-nav .top-nav__link { padding-inline: 13px; }
  .page-heading { min-height: 68px; }
  .page-actions { gap: 6px; }
  .outline-button { font-size: 11px; }
  .latest-post { max-width: none; }
  .latest-post > div > a { max-width: none; }
  .shout-message { grid-template-columns: 35px minmax(0, 1fr) auto auto; gap: 8px; }
  .shout-message p { font-size: 12px; }
  .member-avatars { gap: 3px; }
  .member-avatars .avatar { width: 32px; height: 32px; }
  .member-names { font-size: 12px; }
  .footer-links { grid-column: 1 / -1; }
  .footer-tagline { grid-column: 1 / -1; text-align: left; }
}
@media (max-width: 370px) {
  .top-nav__brand img { width: 158px; }
  .mobile-nav .top-nav__link { padding-inline: 9px; }
  .page-shell { padding-inline: 12px; }
  .latest-post { max-width: none; }
  .latest-post > div > a { max-width: none; }
  .member-avatars .avatar { width: 29px; height: 29px; font-size: 9px; }
}

/* Inner-page views: the masthead is intentionally home-page only. */
.inner-page .page-shell { min-height: 879px; padding-bottom: 32px; }
.inner-page .breadcrumb { height: 25px; color: #4f5b6c; font-size: 12px; }
.inner-page .sidebar { padding-top: 21px; }
.inner-page .top-nav,
.inner-page .site-footer { background: var(--maroon); }
.inner-page .site-footer { min-height: 70px; }
.inner-page .site-footer__inner { min-height: 70px; }

/* Shared inner-page controls */
.inner-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; }
.inner-heading h1 { margin: 0; color: var(--ink); font-size: 29px; line-height: 1.08; letter-spacing: -.7px; }
.inner-heading__meta { display: flex; align-items: center; gap: 8px; margin-top: 7px; color: #5e6878; font-size: 13px; }
.inner-heading__meta .avatar { width: 21px; height: 21px; font-size: 9px; }
.inner-actions { display: flex; align-items: center; gap: 8px; flex: none; }
.small-outline-button, .maroon-button, .more-button { display: inline-flex; align-items: center; justify-content: center; min-height: 35px; padding: 0 14px; border-radius: 4px; font-size: 13px; text-decoration: none; cursor: pointer; }
.small-outline-button, .more-button { color: #25344a; background: var(--surface); border: 1px solid var(--border-strong); }
.more-button { width: 40px; padding: 0; font-weight: 700; letter-spacing: 2px; }
.maroon-button { gap: 8px; color: #fff; background: var(--maroon); border: 1px solid var(--maroon); font-weight: 700; }
.maroon-button:hover, .send-button:hover { background: var(--maroon-dark); }
.maroon-button .icon { width: 16px; height: 16px; }
.inner-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-top: 17px; }
.pagination { display: flex; align-items: center; gap: 5px; }
.pagination a, .pagination span { display: inline-flex; align-items: center; justify-content: center; min-width: 27px; height: 29px; padding: 0 8px; color: #315a80; background: var(--surface); border: 1px solid var(--border); border-radius: 3px; font-size: 12px; text-decoration: none; }
.pagination .current { color: #fff; background: var(--maroon); border-color: var(--maroon); }
.pagination .ellipsis { min-width: 20px; padding: 0; color: #667382; border-color: transparent; }
.pagination > a > span { display: inline-block; min-width: 0; width: auto; height: auto; margin-left: 4px; padding: 0; color: inherit; background: transparent; border: 0; border-radius: 0; font-size: 18px; line-height: .75; vertical-align: -1px; }
.pagination a:hover { background: var(--surface-hover); }
.page-sort { display: flex; align-items: center; gap: 8px; color: #25344a; font-size: 12px; }
.sort-select { min-width: 124px; height: 35px; padding: 0 28px 0 11px; color: var(--ink); background: var(--surface); border: 1px solid var(--border-strong); border-radius: 4px; }

/* Thread / post view */
.thread-heading { min-height: 68px; }
.thread-heading h1 { max-width: 730px; }
.thread-actions { padding-top: 2px; }
.thread-toolbar { margin-top: 8px; }
/* .post-card sets overflow:hidden (to clip the post-code block's own
   scroll region), which makes it establish a block formatting context —
   and BFC boxes use shrink-to-fit sizing for width:auto instead of filling
   their container. Nested inside this auto-sized grid, that shrink-to-fit
   calculation collapses every post-card down near its narrowest child
   instead of the available width. An explicit width forces the fr track
   back to the intended "fill the column" behavior. */
.post-list { display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; gap: 8px; margin-top: 10px; }
.post-card { display: grid; grid-template-columns: 124px minmax(0, 1fr); overflow: hidden; min-width: 0; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); }
.post-author { padding: 12px 14px; color: #4b5768; background: var(--surface-alt); border-right: 1px solid var(--border); }
.post-author .avatar { width: 47px; height: 47px; margin-bottom: 7px; font-size: 16px; }
.post-author__name { display: block; color: #123f6b; font-size: 13px; font-weight: 700; }
.post-author__role { display: block; margin-top: 2px; font-size: 12px; }
.post-author__details { display: grid; gap: 4px; margin: 11px 0 0; font-size: 11px; line-height: 1.15; }
.post-author__details div { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 3px; }
.post-author__details dt { color: #526073; }
.post-author__details dd { margin: 0; color: #4b5768; }
.post-content { display: flex; min-width: 0; flex-direction: column; padding: 11px 22px 9px; }
.post-content__topline { display: flex; justify-content: space-between; color: #697382; font-size: 11px; }
.post-content__body { flex: 1; padding-top: 10px; color: var(--ink); font-size: 14px; line-height: 1.22; }
.post-content__body p { margin: 0 0 11px; }
.post-content__body p:last-child { margin-bottom: 0; }
.post-code { overflow: auto; margin: 7px 0 11px; padding: 9px 13px; color: #142031; background: var(--surface-alt); border: 1px solid var(--border); border-radius: 4px; font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; font-size: 12px; line-height: 1.08; white-space: pre; }
.post-content__footer { display: flex; align-items: center; justify-content: space-between; gap: 15px; margin-top: 10px; padding-top: 7px; color: #153b63; border-top: 1px solid var(--border); font-size: 12px; }
.post-reaction { display: inline-flex; align-items: center; gap: 7px; color: var(--maroon-dark); }
.post-reaction .icon { width: 16px; height: 16px; fill: currentColor; stroke: currentColor; }
.reaction-count { padding: 2px 6px; color: #637184; background: var(--surface-alt); border-radius: 3px; }
.post-actions { display: flex; gap: 19px; }
.post-actions a { display: inline-flex; align-items: center; gap: 5px; color: #153b63; text-decoration: none; }
.post-actions a:hover { text-decoration: underline; }
.post-actions .icon { width: 14px; height: 14px; }
/* Mod/admin-only IP-address line ({$post['iplogged']}, postbit template) —
   was completely unwrapped raw text ("IP Address: Logged") dropped
   straight into .post-content with no element to hang styling on at all,
   reading as an injected debug line rather than part of the card (found
   live). Wrapped in <p class="post-iplogged"> in the postbit template;
   styled here to match .post-content__topline's quiet meta-text treatment
   so it reads as an intentional, secondary annotation. :empty keeps it
   from taking up space for anyone without permission to see it. */
.post-iplogged { margin-top: 6px; color: #697382; font-size: 11px; text-align: right; }
.post-iplogged:empty { display: none; margin: 0; }
.post-iplogged a { color: inherit; text-decoration: underline; }
.post-card:not(:first-child) .post-author { padding-block: 8px; }
.post-card:not(:first-child) .post-author__details { gap: 2px; margin-top: 7px; }
.post-card:not(:first-child) .post-content { padding-block: 8px; }
.post-card:not(:first-child) .post-content__body p { margin-bottom: 7px; }
.post-card:not(:first-child) .post-content__footer { margin-top: 6px; padding-top: 5px; }

/* Forum thread list view */
.forum-heading { min-height: 62px; }
.forum-heading h1 { font-size: 31px; }
.forum-heading__description { margin: 7px 0 0; color: #394352; font-size: 13px; }
.forum-toolbar { margin-top: 16px; }
.thread-list { overflow: hidden; margin-top: 13px; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); }
.thread-columns, .thread-row { display: grid; grid-template-columns: minmax(0, 1fr) 76px 76px 180px; }
.thread-columns { align-items: center; min-height: 31px; padding: 0 18px; color: #3f4959; background: var(--surface-alt); border-bottom: 1px solid var(--border); font-size: 13px; }
.thread-row { min-height: 52px; padding: 6px 18px; border-bottom: 1px solid var(--border); }
.thread-row:last-child { border-bottom: 0; }
.thread-info, .thread-latest { display: flex; align-items: center; min-width: 0; }
.thread-info { gap: 14px; }
.thread-icon { display: grid; place-items: center; width: 28px; height: 28px; flex: none; color: #5b697a; }
.thread-icon .icon { width: 27px; height: 27px; stroke-width: 1.5; }
.thread-row.is-pinned .thread-icon { color: #aa1741; }
.thread-info__copy { min-width: 0; }
.thread-title { display: inline; color: #073f72; font-size: 15px; font-weight: 700; line-height: 1.15; text-decoration: none; }
.thread-title:hover { text-decoration: underline; }
.thread-meta { display: flex; align-items: center; gap: 8px; margin-top: 3px; color: #596679; font-size: 12px; line-height: 1.1; }
.thread-pages { display: inline-flex; gap: 4px; }
.thread-pages a { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; color: #566575; background: var(--surface-alt); border: 1px solid var(--border); border-radius: 2px; font-size: 10px; text-decoration: none; }
.thread-stat { align-self: center; color: #253247; font-size: 13px; }
.thread-latest { gap: 10px; }
.thread-latest .avatar { width: 34px; height: 34px; font-size: 10px; }
.thread-latest__copy { min-width: 0; }
.thread-latest__name { display: block; color: #07588c; font-size: 13px; font-weight: 700; line-height: 1.1; }
.thread-latest__time { display: block; margin-top: 3px; color: #596679; font-size: 12px; }
.thread-bottom { margin-top: 18px; }

@media (max-width: 1100px) {
  .inner-page .page-shell { min-height: 0; }
  .thread-columns, .thread-row { grid-template-columns: minmax(0, 1fr) 60px 60px 155px; }
  .thread-latest { gap: 7px; }
  .thread-latest__copy { max-width: 105px; }
}
@media (max-width: 900px) {
  .inner-page .sidebar { padding-top: 18px; }
}
@media (max-width: 700px) {
  .inner-page .page-shell { min-height: 0; }
  .inner-page .breadcrumb { flex-wrap: wrap; align-items: center; height: auto; min-height: 25px; row-gap: 3px; }
  .inner-page .breadcrumb > :last-child { min-width: 0; flex: 1 1 100%; overflow-wrap: anywhere; }
  .inner-heading { display: block; }
  .inner-heading h1 { font-size: 25px; }
  .inner-heading__meta { margin-top: 7px; }
  .inner-actions { margin-top: 12px; }
  .inner-toolbar { margin-top: 15px; }
  .pagination a, .pagination span { min-width: 25px; height: 28px; padding-inline: 6px; }
  .page-sort { margin-left: auto; }
  .sort-select { min-width: 110px; }
  .forum-toolbar, .thread-bottom { flex-direction: column; align-items: stretch; }
  .forum-toolbar .page-sort, .thread-bottom .page-sort { align-self: flex-end; margin-left: 0; }
  .forum-toolbar .pagination, .thread-bottom .pagination { flex-wrap: wrap; }
  .post-card { display: block; }
  .post-author { display: grid; grid-template-columns: 42px minmax(0, 1fr); grid-template-rows: auto auto; column-gap: 10px; padding: 10px 12px; border-right: 0; border-bottom: 1px solid var(--border); }
  .post-author .avatar { grid-row: 1 / span 2; width: 42px; height: 42px; margin: 0; font-size: 14px; }
  .post-author__name { align-self: end; }
  .post-author__role { align-self: start; }
  .post-author__details { grid-column: 1 / -1; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 9px; }
  .post-author__details div { display: block; }
  .post-author__details dt, .post-author__details dd { display: inline; }
  .post-author__details dt::after { content: ": "; }
  .post-content { padding: 10px 12px 9px; }
  .post-content__body { padding-top: 8px; font-size: 13px; }
  .post-code { font-size: 11px; }
  .post-content__footer { margin-top: 8px; }
  .thread-columns { display: none; }
  .thread-row { display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto auto; gap: 6px 8px; min-height: 0; padding: 10px 11px; }
  .thread-info { grid-column: 1 / -1; align-items: flex-start; gap: 9px; }
  .thread-icon { width: 27px; height: 27px; }
  .thread-title { font-size: 15px; }
  .thread-meta { flex-wrap: wrap; gap: 5px; font-size: 12px; }
  .thread-stat { align-self: start; color: #526073; font-size: 12px; }
  .thread-row .thread-stat:nth-child(2) { grid-column: 1; grid-row: 2; }
  .thread-row .thread-stat:nth-child(3) { grid-column: 2; grid-row: 2; }
  .thread-latest { grid-column: 1 / -1; grid-row: 3; gap: 8px; margin-top: 1px; padding-top: 7px; border-top: 1px solid var(--border); }
  .thread-latest .avatar { width: 30px; height: 30px; }
  .thread-latest__copy { max-width: none; }
  .thread-latest__name { font-size: 13px; }
  .thread-latest__time { margin-top: 2px; font-size: 12px; }
  .thread-bottom { margin-top: 14px; }
}

/* --- MyBB integration compatibility --- */

/* MyBB's global.css (loaded above, via {$stylesheets}) is ~1800 lines of
   the stock skin: colors, fonts, table classes, buttons, form controls.
   For plain classes/elements this file already wins on source order alone
   (it loads after global.css) — no fighting needed there. #container is
   the one exception: it's an ID selector, which beats every class/element
   rule on specificity regardless of order, and it hard-codes this old
   skin's color/type/width onto every page (color, font-family, font-size,
   line-height, plus 990px/970px legacy minimum widths that alone force
   horizontal scrolling at any phone width). Reset all of it here, matching
   body's own values, so nothing nested inside it — including elements this
   file hasn't touched yet — can end up back in the old skin's look. */
#container, .wrapper { max-width: none; min-width: 0; width: auto; padding: 0; margin: 0; background: transparent; }
#container {
  color: var(--ink) !important;
  font-family: Arial, Helvetica, sans-serif !important;
  font-size: 14px !important;
  line-height: 1.3 !important;
}

/* Native MyBB controls this theme hasn't given a bespoke template to yet
   (Forum Jump, Search this Forum, quick reply, polls, moderation tools,
   thread rating, private messages, ACP-adjacent screens) still render
   through global.css's stock classes below. These are plain class/element
   selectors, so — same as above — this file wins them by load order alone;
   restyling them here means any such area picks up the theme automatically
   instead of showing the old grey/Tahoma skin until someone notices and
   gives it a real template. */
table, .tborder { color: var(--ink); font-size: 13px; }
.tborder { background: var(--surface); border: 1px solid var(--border); border-radius: 4px; }
.thead, .tcat { background: var(--maroon); color: #fff; border: 0; font-size: 13px; }
.thead a:link, .thead a:visited, .tcat a:link, .tcat a:visited { color: #fff; }
.trow1, .trow2 { background: var(--surface); border-color: var(--border); }
.tfoot { background: var(--surface-alt); color: var(--ink); border: 0; }
input.textbox, textarea, select {
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: 4px;
  padding: 6px 10px;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 13px;
}
button, input.button {
  color: #25344a;
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: 4px;
  padding: 0 14px;
  min-height: 35px;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 13px;
  font-weight: 700;
}
button:hover, input.button:hover { background: var(--surface-hover); border-color: var(--border-strong); }

/* windies_shoutbox_widget renders each shout into a #windies-shoutbox-messages
   list; give it its own scroll region so a long shout history doesn't grow
   the sidebar card indefinitely. */
.shout-list { display: block; max-height: 420px; overflow-y: auto; }

/* windies_shoutbox_forumbit_avatar / forumdisplay_thread mark new-post state
   via a `--on`/`--off` modifier (rather than omitting the badge outright) so
   the base .new-badge rule above can stay untouched — hide the off state. */
.new-badge--off { display: none; }

/* a:link/a:visited (0,1,1) above beats a single class like .maroon-button
   (0,1,0) on specificity — same trap as the #container fights, just against
   this file's own rules instead of MyBB's. Only bites when the element is a
   real, unvisited <a> (which is most of these), and only shows as a visible
   bug where the intended color actually differs from whatever it inherited
   (.maroon-button's white on maroon was the obvious one — "maroon buttons
   need white font"). Re-declaring the same colors at a.classname ties that
   specificity and wins on source order, without touching every call site. */
a.maroon-button { color: #fff; }
a.small-outline-button, a.more-button { color: #25344a; }
a.outline-button { color: #273345; }
a.thread-title { color: #073f72; }
a.forum-title { color: var(--ink); }
a.footer-brand { color: var(--ivory); }
a.top-nav__link { color: var(--ivory); }
a.text-action { color: var(--ink); }

/* ---------- Dark mode ---------- */

/* Effective theme is decided once, in JS (system preference, or a saved
   override), and written as data-theme on <html> before first paint —
   see the inline script in header.tpl. Every dark rule below keys off
   that attribute alone, rather than duplicating each one inside both a
   prefers-color-scheme media query and a manual-override selector. */
:root[data-theme="dark"] {
  --paper: #14161c;
  --ink: #e9ecf1;
  --muted: #9aa3b0;
  --soft-muted: #7d8592;
  --border: #2c303a;
  --border-strong: #3a3f4b;
  --blue-link: #6fb3e8;
  --surface: #1c1f27;
  --surface-alt: #23262f;
  --surface-hover: #2a2e38;
}

/* The tokens above cover most of the page automatically — anything already
   written as var(--ink)/var(--surface)/etc. just follows along. What's left
   is a long tail of one-off hex grays this file never routed through a
   token (mostly meta text: byline, stat labels, table headers). Rather
   than rewrite ~30 existing declarations to reference a new token (and
   risk a mistake in each one), these re-declare `color` for the same
   selectors, dark-mode only — purely additive, the light-mode rules above
   are untouched. Two tiers: general secondary text, and the more
   emphasized navy "name/link" text (thread titles, post authors, latest-
   poster names) which reads better as a lighter blue than a flat gray. */
[data-theme="dark"] .breadcrumb,
[data-theme="dark"] .outline-button,
[data-theme="dark"] a.outline-button,
[data-theme="dark"] .forum-columns,
[data-theme="dark"] .board-icon,
[data-theme="dark"] .forum-name p,
[data-theme="dark"] .latest-post > div > span,
[data-theme="dark"] .forum-heading__description,
[data-theme="dark"] .stat,
[data-theme="dark"] .thread-stat,
[data-theme="dark"] .shout-message time,
[data-theme="dark"] .shout-composer input::placeholder,
[data-theme="dark"] .composer-button,
[data-theme="dark"] .online-count,
[data-theme="dark"] .member-names,
[data-theme="dark"] .inner-page .breadcrumb,
[data-theme="dark"] .inner-heading__meta,
[data-theme="dark"] .small-outline-button,
[data-theme="dark"] .more-button,
[data-theme="dark"] a.small-outline-button,
[data-theme="dark"] a.more-button,
[data-theme="dark"] .page-sort,
[data-theme="dark"] button,
[data-theme="dark"] input.button,
[data-theme="dark"] .pagination .ellipsis,
[data-theme="dark"] .post-author,
[data-theme="dark"] .post-author__details dd,
[data-theme="dark"] .post-author__details dt,
[data-theme="dark"] .post-content__topline,
[data-theme="dark"] .post-iplogged,
[data-theme="dark"] .post-code,
[data-theme="dark"] .reaction-count,
[data-theme="dark"] .thread-columns,
[data-theme="dark"] .thread-icon,
[data-theme="dark"] .thread-meta,
[data-theme="dark"] .thread-latest__time,
[data-theme="dark"] .thread-pages a {
  color: #a9b2be;
}
[data-theme="dark"] .shout-message strong,
[data-theme="dark"] .post-author__name,
[data-theme="dark"] .post-content__footer,
[data-theme="dark"] .post-actions a,
[data-theme="dark"] .thread-title,
[data-theme="dark"] a.thread-title,
[data-theme="dark"] .thread-latest__name,
[data-theme="dark"] .pagination a,
[data-theme="dark"] .pagination span {
  color: #8ec2f2;
}
/* A handful of surfaces/borders that were never routed through --border or
   --border-strong either, plus one light-gray badge that would otherwise
   stay light-on-dark. */
[data-theme="dark"] .outline-button { border-color: var(--border-strong); }
[data-theme="dark"] .avatar--more { color: var(--ink); background: var(--surface-hover); }
[data-theme="dark"] .cw-masthead__grain { opacity: .12; }
[data-theme="dark"] .top-nav,
[data-theme="dark"] .inner-page .top-nav,
[data-theme="dark"] .site-footer,
[data-theme="dark"] .inner-page .site-footer {
  background: var(--maroon-dark);
}

/* Theme toggle button in the nav bar. */
.theme-toggle { position: relative; }
.theme-toggle .icon--moon { display: none; }
[data-theme="dark"] .theme-toggle .icon--sun { display: none; }
[data-theme="dark"] .theme-toggle .icon--moon { display: block; }

/* Auth pages (login / registration) — carries the same card/input/button
   language the rest of the site already uses, rather than a new design.
   Single narrow column instead of the usual page-shell + sidebar: these
   are focused, one-task pages, and the shoutbox has nothing to add here. */
/* display:block — .page-shell (reused here for consistent page padding/
   min-height) is display:grid with 2 columns; without this override every
   direct child here (breadcrumb, card, footer link) lands in alternating
   grid cells instead of stacking normally. */
.auth-shell { display: block; width: min(560px, calc(100% - 40px)); margin: 0 auto; padding: 11px 0 32px; }
.auth-shell.auth-shell--wide { width: min(920px, calc(100% - 40px)); }
/* Forum/thread pages get their title-to-content gap from .forum-heading's/
   .thread-heading's own min-height; the bare .inner-heading used here has
   none, so the card butts right up against the h1 without this. */
.auth-shell .inner-heading { margin-bottom: 24px; }
.auth-card { background: var(--surface); border: 1px solid var(--border); border-radius: 5px; box-shadow: 0 1px 2px rgba(21, 32, 51, .04); padding: 26px 28px; }
.auth-card + .auth-card { margin-top: 16px; }
.auth-card h2 { margin: 0 0 18px; font-size: 16px; letter-spacing: .2px; color: var(--ink); border-bottom: 1px solid var(--border); padding-bottom: 12px; }
.auth-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; align-items: start; }
.auth-field { margin-bottom: 16px; }
.auth-field:last-child { margin-bottom: 0; }
.auth-field label { display: block; margin-bottom: 6px; font-size: 13px; font-weight: 700; color: var(--ink); }
.auth-field .auth-hint { display: block; margin-top: 5px; font-size: 12px; font-weight: 400; color: var(--muted); }
.auth-field input[type="text"], .auth-field input[type="password"], .auth-field input[type="email"], .auth-field select {
  width: 100%; height: 42px; padding: 0 12px; color: var(--ink); background: var(--surface);
  border: 1px solid var(--border-strong); border-radius: 4px; outline: 0;
}
.auth-field input:focus-visible, .auth-field select:focus-visible { outline: 3px solid #2b7aa4; outline-offset: 1px; }
.auth-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.auth-check { display: flex; align-items: flex-start; gap: 9px; margin-bottom: 12px; font-size: 13px; color: var(--ink); }
.auth-check:last-child { margin-bottom: 0; }
.auth-check input { margin-top: 3px; flex: none; }
.auth-actions { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 22px; }
.auth-actions .maroon-button { min-height: 42px; padding-inline: 22px; }
.auth-footer-link { margin-top: 18px; text-align: center; font-size: 13px; color: var(--muted); }
.auth-agreement { font-size: 14px; line-height: 1.6; color: var(--ink); }
.auth-agreement p { margin: 0 0 14px; }
.auth-agreement p:last-child { margin-bottom: 0; }
.auth-errors, .auth-shell .error { margin-bottom: 16px; padding: 14px 16px; color: #7a2020; background: #fbeaea; border: 1px solid #eec6c6; border-radius: 4px; font-size: 13px; }
.auth-errors ul, .auth-shell .error ul { margin: 6px 0 0; padding-left: 18px; }
.auth-shell .error p { margin: 0; font-weight: 700; }
[data-theme="dark"] .auth-errors, [data-theme="dark"] .auth-shell .error { color: #ffb3b3; background: #3a1e1e; border-color: #5a2a2a; }
@media (max-width: 700px) {
  .auth-columns, .auth-row { grid-template-columns: 1fr; }
}

/* Member profile page. Provisional layout per the design handoff — a
   useful identity/details/activity baseline, not a final product decision
   on profile history or activity feed shape. */
.page-kicker { margin: 0 0 5px; color: var(--maroon-mid); font-size: 12px; font-weight: 700; letter-spacing: .65px; text-transform: uppercase; }
.profile-heading { min-height: 66px; }
.profile-heading h1 { font-size: 31px; }
.profile-heading__meta { margin-top: 6px; color: var(--muted); font-size: 13px; }
.profile-card { overflow: hidden; margin-top: 14px; border: 1px solid var(--border); border-radius: 5px; background: var(--surface); }
.profile-hero { display: grid; grid-template-columns: 174px minmax(0, 1fr); gap: 24px; padding: 22px 24px; background: var(--surface-alt); border-bottom: 1px solid var(--border); }
.profile-identity { display: flex; flex-direction: column; align-items: center; padding-right: 24px; border-right: 1px solid var(--border); text-align: center; }
.profile-identity .avatar { width: 94px; height: 94px; margin-bottom: 11px; font-size: 30px; }
.profile-identity__name { color: var(--blue-link); font-size: 18px; font-weight: 700; }
.profile-identity__role { margin-top: 3px; color: var(--muted); font-size: 12px; }
.profile-online { display: inline-flex; align-items: center; gap: 5px; margin-top: 11px; color: #27735e; font-size: 12px; }
.profile-online .online-dot { width: 8px; height: 8px; }
[data-theme="dark"] .profile-online { color: #7cd9b8; }
.profile-intro { min-width: 0; }
.profile-intro h2 { margin: 0; color: var(--ink); font-size: 22px; line-height: 1.1; }
.profile-intro__copy { max-width: 560px; margin: 8px 0 17px; color: var(--muted); font-size: 14px; line-height: 1.4; }
.profile-actions { display: flex; gap: 8px; }
.profile-actions .small-outline-button { min-height: 34px; }
.profile-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-bottom: 1px solid var(--border); }
.profile-stat { padding: 15px 16px 14px; border-right: 1px solid var(--border); }
.profile-stat:last-child { border-right: 0; }
.profile-stat strong { display: block; color: var(--ink); font-size: 20px; line-height: 1; }
.profile-stat span { display: block; margin-top: 5px; color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .35px; }
.profile-body { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(245px, .8fr); gap: 24px; padding: 20px 24px 22px; }
.profile-panel + .profile-panel { margin-top: 18px; }
.profile-panel h2 { margin: 0 0 11px; color: var(--ink); font-size: 17px; line-height: 1.1; }
.profile-details { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; overflow: hidden; border: 1px solid var(--border); border-radius: 4px; }
.profile-detail { min-width: 0; padding: 11px 12px; background: var(--surface); }
.profile-detail:nth-child(4n + 1), .profile-detail:nth-child(4n + 2) { background: var(--surface-alt); }
.profile-detail dt { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .35px; }
.profile-detail dd { margin: 4px 0 0; color: var(--ink); font-size: 13px; font-weight: 700; overflow-wrap: anywhere; }
.profile-about { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.45; }
.profile-activity { overflow: hidden; border: 1px solid var(--border); border-radius: 4px; }
.profile-activity__tabs { display: flex; gap: 20px; padding: 0 14px; border-bottom: 1px solid var(--border); }
.profile-activity__tabs a { position: relative; display: inline-flex; align-items: center; min-height: 39px; color: var(--muted); font-size: 12px; font-weight: 700; text-decoration: none; }
.profile-activity__tabs a.is-active { color: var(--maroon); }
.profile-activity__tabs a.is-active::after { position: absolute; right: 0; bottom: -1px; left: 0; height: 2px; background: var(--gold); content: ""; }
.profile-activity__item { display: grid; grid-template-columns: 31px minmax(0, 1fr) auto; gap: 10px; align-items: start; padding: 12px 14px; border-bottom: 1px solid var(--border); }
.profile-activity__item:last-child { border-bottom: 0; }
.profile-activity__item .avatar { width: 30px; height: 30px; font-size: 10px; }
.profile-activity__item strong { display: block; color: var(--blue-link); font-size: 13px; line-height: 1.2; }
.profile-activity__item p { margin: 4px 0 0; color: var(--muted); font-size: 12px; line-height: 1.3; }
.profile-activity__item time { color: var(--soft-muted); font-size: 11px; white-space: nowrap; }
.profile-activity__empty { margin: 0; padding: 20px 14px; color: var(--muted); font-size: 13px; }

@media (max-width: 1100px) {
  .profile-hero { grid-template-columns: 152px minmax(0, 1fr); gap: 17px; padding-inline: 18px; }
  .profile-identity { padding-right: 17px; }
  .profile-body { padding-inline: 18px; }
}
@media (max-width: 700px) {
  .profile-heading { min-height: 0; }
  .profile-heading h1 { font-size: 25px; }
  .profile-heading__meta { margin-top: 5px; }
  .profile-card { margin-top: 13px; }
  .profile-hero { grid-template-columns: 1fr; gap: 15px; padding: 16px 14px; }
  .profile-identity { display: grid; grid-template-columns: 64px minmax(0, 1fr); grid-template-rows: auto auto auto; gap: 0 11px; align-items: center; padding: 0 0 14px; border-right: 0; border-bottom: 1px solid var(--border); text-align: left; }
  .profile-identity .avatar { grid-row: 1 / span 3; width: 64px; height: 64px; margin: 0; font-size: 21px; }
  .profile-identity__name { font-size: 16px; }
  .profile-online { margin-top: 5px; }
  .profile-intro h2 { font-size: 19px; }
  .profile-intro__copy { margin: 6px 0 13px; font-size: 13px; }
  .profile-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .profile-stat:nth-child(2) { border-right: 0; }
  .profile-stat:nth-child(-n + 2) { border-bottom: 1px solid var(--border); }
  .profile-stat { padding: 12px 13px; }
  .profile-stat strong { font-size: 18px; }
  .profile-body { display: block; padding: 15px 14px 17px; }
  .profile-panel + .profile-panel { margin-top: 16px; }
  .profile-details { grid-template-columns: 1fr 1fr; }
  .profile-detail { padding: 9px 10px; }
  .profile-activity__tabs { gap: 14px; padding-inline: 11px; }
  .profile-activity__item { grid-template-columns: 30px minmax(0, 1fr); padding-inline: 11px; }
  .profile-activity__item time { grid-column: 2; margin-top: -2px; }
}
@media (max-width: 370px) {
  .profile-details { grid-template-columns: 1fr; }
  .profile-detail:nth-child(4n + 1), .profile-detail:nth-child(4n + 2) { background: var(--surface); }
  .profile-detail:nth-child(odd) { background: var(--surface-alt); }
}

/* Search page. The mock's Posts/Threads result tabs aren't wired up here —
   MyBB locks a set of results to whichever mode (posts or threads) you
   searched with, there's no live re-toggle without re-searching, so a
   decorative tab pair would just be misleading. */
.search-heading { min-height: 66px; }
.search-heading h1 { font-size: 31px; }
.search-heading__meta { margin-top: 6px; color: var(--muted); font-size: 13px; }
.search-form { margin-top: 14px; padding: 17px 18px 16px; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); }
.search-form__grid { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, .7fr); gap: 14px 18px; }
.search-field { min-width: 0; }
.search-field--wide { grid-column: 1 / -1; }
.search-field label, .search-field legend { display: block; margin-bottom: 6px; color: var(--ink); font-size: 12px; font-weight: 700; }
.search-field input, .search-field select { width: 100%; height: 36px; padding: 0 10px; color: var(--ink); background: var(--surface); border: 1px solid var(--border-strong); border-radius: 4px; }
.search-field input::placeholder { color: var(--muted); }
.search-field fieldset { display: flex; gap: 16px; min-width: 0; margin: 0; padding: 0; border: 0; }
.search-radio { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); font-size: 12px; font-weight: 400; }
.search-radio input { width: auto; height: auto; accent-color: var(--maroon); }
.search-radio-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin-top: 7px; }
.search-field select[multiple] { height: auto; padding: 6px; }
.search-form__footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); }
.search-form__hint { margin: 0; color: var(--muted); font-size: 11px; }
.search-form__footer .maroon-button { min-height: 35px; }
.search-form__footer .maroon-button .icon { width: 17px; height: 17px; }
.search-results { margin-top: 18px; }
.search-results__bar h2 { margin: 0; color: var(--ink); font-size: 18px; }
.search-results__bar p { margin: 4px 0 0; color: var(--muted); font-size: 12px; }
.result-list { overflow: hidden; margin-top: 11px; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); }
.result-row { display: grid; grid-template-columns: 32px minmax(0, 1fr) 145px; gap: 12px; align-items: start; padding: 13px 14px; border-bottom: 1px solid var(--border); }
.result-row:last-child { border-bottom: 0; }
/* Inline-mod checkbox (moderators only) is a bare <td> from a still-tabular
   core sub-template (search_results_*_inlinecheck) — not restyled this
   pass, just kept from floating oddly outside the row's 3-column grid. */
.result-row td { grid-column: 1; margin-top: 2px; text-align: center; }
/* "Select all N results" bar (moderators only). Its core sub-template is
   still a bare <tr><td> pair — browsers actually drop tr/td tags outright
   when they're not inside a <table> (not just "float free", the tags
   themselves vanish from the parsed DOM, leaving only their text/links
   behind), so it can't be targeted directly; wrapped in a real div at the
   template level (search_results_posts.tpl / search_results_threads.tpl)
   instead, matched here to the row padding below it. */
.result-selectall { padding: 13px 14px; color: var(--muted); font-size: 12px; border-bottom: 1px solid var(--border); }
.result-selectall a { color: var(--blue-link); font-weight: 700; }
.result-selectall:empty { display: none; }
.result-icon { display: grid; place-items: center; width: 30px; height: 30px; color: var(--muted); background: var(--surface-alt); border-radius: 4px; }
.result-icon .icon { width: 18px; height: 18px; }
.result-copy { min-width: 0; }
.result-copy a { display: block; color: var(--blue-link); font-size: 14px; font-weight: 700; line-height: 1.2; text-decoration: none; }
.result-copy a:hover { text-decoration: underline; }
.result-copy p { overflow: hidden; margin: 5px 0 0; color: var(--muted); font-size: 12px; line-height: 1.3; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
.result-meta { margin-top: 6px; color: var(--muted); font-size: 11px; }
.result-meta a { display: inline; color: var(--blue-link); font-size: inherit; font-weight: 700; }
.result-side { color: var(--muted); font-size: 11px; line-height: 1.35; text-align: right; }
.result-side strong { display: block; color: var(--ink); font-size: 12px; }
.result-side time { display: block; margin-top: 3px; }

@media (max-width: 1100px) {
  .result-row { grid-template-columns: 30px minmax(0, 1fr) 125px; }
}
@media (max-width: 700px) {
  .search-heading { min-height: 0; }
  .search-heading h1 { font-size: 25px; }
  .search-heading__meta { margin-top: 5px; }
  .search-form { margin-top: 13px; padding: 13px 12px 12px; }
  .search-form__grid { display: block; }
  .search-field + .search-field { margin-top: 12px; }
  .search-field--wide { margin-top: 0 !important; }
  .search-field fieldset { gap: 10px; flex-wrap: wrap; }
  .search-form__footer { display: block; margin-top: 13px; padding-top: 11px; }
  .search-form__hint { margin-bottom: 10px; }
  .search-form__footer .maroon-button { width: 100%; }
  .search-results { margin-top: 15px; }
  .result-row { grid-template-columns: 30px minmax(0, 1fr); gap: 9px; padding: 11px; }
  .result-side { grid-column: 2; text-align: left; }
  .result-side strong, .result-side time { display: inline; }
  .result-side time { margin-left: 8px; }
}
@media (max-width: 370px) {
  .search-radio { font-size: 11px; }
}

/* The "You have unread private messages" banner (and any other notice MyBB
   drops into #cw-notices — banned/board-closed/mod/pending-join warnings)
   still comes through as stock global.css's #pm_notice/.pm_alert: bright
   yellow, no dark-mode awareness at all, and full-bleed width since nothing
   here constrains #cw-notices to the page's own column width. */
#cw-notices { width: min(var(--page-width), calc(100% - 60px)); margin: 18px auto 0; }
.pm_alert { padding: 12px 16px; margin: 0 0 15px; border: 1px solid #e9cf7a; border-radius: 5px; background: #fdf6df; color: var(--ink); font-size: 13px; text-align: left; }
.pm_alert a { color: var(--blue-link); }
.pm_alert .float_right { margin-left: 12px; }
[data-theme="dark"] .pm_alert { background: rgba(237, 194, 104, .12); border-color: rgba(237, 194, 104, .35); }

/* Private messages. The reply/quick-reply editor area inside .pm-message
   deliberately keeps the plain legacy .tborder/.thead styling rather than a
   bespoke treatment here — separate mocks are already in progress for
   reply/quick-reply/new-thread, and PM's reply box shares that same core
   editor UI, so it'll pick up whatever that pass lands rather than being
   styled twice. */
.pm-heading { min-height: 66px; }
.pm-heading h1 { font-size: 31px; }
.pm-heading__meta { margin-top: 6px; color: var(--muted); font-size: 13px; }
.pm-layout { display: grid; grid-template-columns: 168px minmax(0, 1fr); gap: 14px; margin-top: 14px; }
.pm-folder-nav { align-self: start; overflow: hidden; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); }
.pm-folder-nav__heading { padding: 12px 13px 9px; color: var(--muted); background: var(--surface-alt); border-bottom: 1px solid var(--border); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .45px; }
.pm-folder-link { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 39px; padding: 0 12px; color: var(--ink); border-bottom: 1px solid var(--border); font-size: 13px; text-decoration: none; }
.pm-folder-link:last-child { border-bottom: 0; }
.pm-folder-link:hover { background: var(--surface-alt); }
.pm-folder-link.is-active { color: var(--maroon); background: rgba(84, 16, 43, .07); box-shadow: inset 3px 0 0 var(--maroon); font-weight: 700; }
.pm-folder-count { min-width: 23px; padding: 2px 5px; color: var(--muted); background: var(--surface-alt); border-radius: 10px; font-size: 10px; text-align: center; }
.pm-folder-link.is-active .pm-folder-count { color: #fff; background: var(--maroon); }
.pm-inbox, .pm-conversation { min-width: 0; overflow: hidden; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); }
.pm-inbox__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 14px; background: var(--surface-alt); border-bottom: 1px solid var(--border); }
.pm-inbox__top h2 { margin: 0; color: var(--ink); font-size: 16px; }
.pm-inbox__top .page-sort { font-size: 11px; }
.pm-inbox__top .sort-select { height: 30px; min-width: 112px; font-size: 11px; }
/* PM quota meter ({$pmspacebar}, private_pmspace template) — only rendered
   when the usergroup has a pmquota set. Severity classes (low/medium/high)
   come from private.php itself; "low" is the default/unclassed look and
   reuses the brand maroon like every other primary accent on this page,
   so only .medium/.high carry their own color. Those two are plain hex
   (no existing warning/danger token to route through), so — same as
   .auth-errors/.profile-online above — they get explicit dark-mode
   counterparts here rather than looking washed out on a dark surface. */
.pmspace { display: flex; align-items: center; gap: 7px; margin: 0; color: var(--muted); font-size: 11px; white-space: nowrap; }
.pmspace_container { display: flex; width: 110px; min-height: 16px; overflow: hidden; border: 1px solid var(--border-strong); border-radius: 3px; background: var(--surface-alt); }
.pmspace_used, .pmspace_unused { display: block; min-height: 16px; box-sizing: border-box; }
.pmspace_used { color: var(--ivory); background: var(--maroon); }
.pmspace_used.medium { background: #b7791f; }
.pmspace_used.high { background: #8b2731; }
.pmspace_unused { background: transparent; }
.pmspace_text { display: block; padding: 1px 5px; font-size: 10px; line-height: 14px; white-space: nowrap; }
[data-theme="dark"] .pmspace_used.medium { background: #d99a3a; color: #241a06; }
[data-theme="dark"] .pmspace_used.high { background: #c0495a; color: #2a0a10; }
.pm-list-heading, .pm-row { display: grid; grid-template-columns: 27px minmax(0, 1fr) 120px 86px; gap: 10px; align-items: center; }
.pm-list-heading { min-height: 31px; padding: 0 14px; color: var(--muted); background: var(--surface); border-bottom: 1px solid var(--border); font-size: 11px; text-transform: uppercase; letter-spacing: .35px; }
.pm-list-heading span:nth-child(3), .pm-list-heading span:nth-child(4) { text-align: right; }
.pm-row { position: relative; min-height: 68px; padding: 8px 14px; border-bottom: 1px solid var(--border); }
.pm-row:last-child { border-bottom: 0; }
.pm-row.is-unread { background: #fffaf5; box-shadow: inset 3px 0 0 var(--gold); }
[data-theme="dark"] .pm-row.is-unread { background: rgba(237, 194, 104, .08); }
/* private_nomessages was still the stock MyBB template — it rendered
   `<tr><td class="trow1">{$lang->nomessages}</td></tr>`, valid inside the
   stock table layout it was written for, but .pm-inbox here is a
   <section>, not a <table>. A browser's HTML parser drops table-row/cell
   tags found outside an active table insertion mode (there's nowhere
   valid to "foster-parent" them to), so that whole wrapper — .trow1's
   padding included — silently vanished on render, leaving the bare text
   as an unwrapped text node with nothing to hang CSS on at all (found
   live: text touching the card edges, and literally unstyleable until a
   real element wraps it again). Re-templated to a plain <p> — see
   private_nomessages — since that's the only way to give it padding back.
*/
.pm-inbox .pm-empty { margin: 0; padding: 20px 14px; color: var(--muted); font-size: 13px; }
.pm-check { width: 15px; height: 15px; accent-color: var(--maroon); }
.pm-subject { min-width: 0; }
.pm-subject a { display: block; overflow: hidden; color: var(--blue-link); font-size: 14px; font-weight: 700; line-height: 1.15; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; }
.pm-subject a:hover { text-decoration: underline; }
.pm-subject p { overflow: hidden; margin: 4px 0 0; color: var(--muted); font-size: 11px; line-height: 1.15; text-overflow: ellipsis; white-space: nowrap; }
.pm-sender { display: flex; align-items: center; gap: 7px; min-width: 0; color: var(--blue-link); font-size: 12px; font-weight: 700; }
.pm-sender .avatar { width: 27px; height: 27px; font-size: 9px; }
.pm-sender span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pm-time { color: var(--muted); font-size: 11px; text-align: right; white-space: nowrap; }
.pm-actions { display: flex; gap: 8px; margin-top: 14px; }
.pm-actions .small-outline-button { min-height: 33px; font-size: 12px; }
.pm-conversation { margin-top: 14px; }
.pm-conversation__head { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 14px 16px; background: var(--surface-alt); border-bottom: 1px solid var(--border); }
.pm-conversation__head h2 { margin: 0; color: var(--ink); font-size: 18px; line-height: 1.1; }
.pm-conversation__head p { margin: 5px 0 0; color: var(--muted); font-size: 12px; }
.pm-conversation__head .icon { width: 18px; height: 18px; }
.pm-message { display: grid; grid-template-columns: 112px minmax(0, 1fr); min-width: 0; border-bottom: 1px solid var(--border); }
.pm-message:last-of-type { border-bottom: 0; }
.pm-message__user { padding: 15px 12px; text-align: center; background: var(--surface-alt); border-right: 1px solid var(--border); }
.pm-message__user .avatar { width: 53px; height: 53px; margin-bottom: 7px; font-size: 16px; }
.pm-message__user strong { display: block; color: var(--blue-link); font-size: 12px; line-height: 1.15; overflow-wrap: anywhere; }
.pm-message__user span { display: block; margin-top: 3px; color: var(--muted); font-size: 10px; }
.pm-message__body { min-width: 0; padding: 14px 17px 15px; }
.pm-message__meta { display: flex; justify-content: space-between; gap: 10px; color: var(--muted); font-size: 11px; }
.pm-message__body p { margin: 13px 0 0; color: var(--ink); font-size: 13px; line-height: 1.42; }
.pm-message__body p + p { margin-top: 9px; }
.pm-message__actions { display: flex; justify-content: flex-end; gap: 15px; margin-top: 14px; }
.pm-message__actions a { color: var(--blue-link); font-size: 12px; text-decoration: none; }
.pm-message__actions a:hover { text-decoration: underline; }
.pm-reply { padding: 14px 16px 16px; background: var(--surface-alt); border-top: 1px solid var(--border); }
.pm-reply label { display: block; margin-bottom: 7px; color: var(--ink); font-size: 12px; font-weight: 700; }
.pm-reply textarea { display: block; width: 100%; min-height: 74px; resize: vertical; padding: 10px; color: var(--ink); background: var(--surface); border: 1px solid var(--border-strong); border-radius: 4px; }
.pm-reply__actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 9px; }

@media (max-width: 1100px) {
  .pm-layout { grid-template-columns: 150px minmax(0, 1fr); }
  .pm-list-heading, .pm-row { grid-template-columns: 25px minmax(0, 1fr) 105px 75px; padding-inline: 11px; }
}
@media (max-width: 700px) {
  .pm-heading { min-height: 0; }
  .pm-heading h1 { font-size: 25px; }
  .pm-heading__meta { margin-top: 5px; }
  .pm-layout { display: block; margin-top: 13px; }
  .pm-folder-nav { display: flex; overflow-x: auto; margin-bottom: 11px; }
  .pm-folder-nav__heading { display: none; }
  .pm-folder-link { flex: 0 0 auto; min-height: 37px; padding-inline: 11px; border-bottom: 0; border-right: 1px solid var(--border); font-size: 12px; }
  .pm-folder-link.is-active { box-shadow: inset 0 -3px 0 var(--maroon); }
  .pm-list-heading { display: none; }
  .pm-row { grid-template-columns: 20px minmax(0, 1fr) auto; grid-template-rows: auto auto; gap: 4px 8px; min-height: 0; padding: 11px 11px; }
  .pm-check { grid-row: 1 / span 2; }
  .pm-subject { grid-column: 2 / -1; }
  .pm-sender { grid-column: 2; grid-row: 2; }
  .pm-time { grid-column: 3; grid-row: 2; align-self: center; }
  .pm-subject a { font-size: 13px; white-space: normal; }
  .pm-subject p { margin-top: 3px; white-space: normal; }
  .pm-sender .avatar { width: 24px; height: 24px; }
  .pm-actions { margin-top: 11px; }
  .pm-conversation { margin-top: 12px; }
  .pm-conversation__head { align-items: flex-start; padding: 12px; }
  .pm-conversation__head h2 { font-size: 16px; }
  .pm-message { display: block; }
  .pm-message__user { display: grid; grid-template-columns: 37px minmax(0, 1fr); grid-template-rows: auto auto; column-gap: 9px; align-items: center; padding: 9px 11px; text-align: left; border-right: 0; border-bottom: 1px solid var(--border); }
  .pm-message__user .avatar { grid-row: 1 / span 2; width: 37px; height: 37px; margin: 0; font-size: 12px; }
  .pm-message__user strong { align-self: end; }
  .pm-message__user span { align-self: start; margin-top: 1px; }
  .pm-message__body { padding: 11px 12px 13px; }
  .pm-message__body p { margin-top: 10px; font-size: 13px; }
  .pm-reply { padding: 12px; }
}
@media (max-width: 370px) {
  .pm-folder-link { padding-inline: 9px; }
  .pm-time { font-size: 10px; }
}

/* Homepage "Recent Posts" panel — sits in the main column below {$forums}
   (index.php only, via windies_recent_activity.php). The homepage's main
   column was just the forum list, which read as empty; this fills it in
   without touching the forum-list markup itself. Card chrome mirrors
   .side-card; the avatar reuses the existing .avatar component (see
   forumbit_depth2_forum's identical last-poster avatar) rather than a new
   one. */
/* .recent-activity carries no card-chrome of its own — it reuses
   .forum-group (same border/radius/shadow/margin-bottom as every
   "RALLY AROUND WEST INDIES!"-style section) and .category-heading (same
   maroon bar, uppercase h2) as actual classes on the element, per the
   template above, rather than duplicating their values here. Only the
   list-of-rows styling below is specific to this panel. */
.recent-activity__list { display: flex; flex-direction: column; }
.recent-activity__item { display: flex; align-items: flex-start; gap: 12px; min-height: 76px; padding: 11px 18px; border-bottom: 1px solid var(--border); text-decoration: none; }
.recent-activity__item:last-child { border-bottom: 0; }
/* text-decoration: none on the base .recent-activity__item rule above only
   holds while NOT hovered: MyBB's own global.css sets `a:hover {
   text-decoration: underline }` at specificity (0,1,1), and a line added
   by that rule draws straight through every descendant regardless of what
   .recent-activity__title itself specifies — the only way to stop it is
   text-decoration: none on the <a> itself, at equal-or-higher specificity,
   which is what this rule (0,2,0) does. (First attempt at this fix wrongly
   targeted the descendant .recent-activity__title instead of the <a>
   ancestor where the underline actually originates — found live.) */
.recent-activity__item:hover { text-decoration: none; background: var(--surface-hover); }
.recent-activity__item:focus-visible { outline: 3px solid var(--gold); outline-offset: -3px; }
.recent-activity__item .avatar { width: 42px; height: 42px; font-size: 14px; }
.recent-activity__body { flex: 1 1 auto; min-width: 0; }
/* -webkit-line-clamp needs display:-webkit-box (not display:block) to
   work at all — single-line ellipsis-via-nowrap replaced with a real
   multi-line clamp so long thread titles wrap onto a second line instead
   of just truncating mid-word. Widely supported (Chromium/Safari/Firefox
   all implement the -webkit- prefixed form; it's the only cross-browser
   line-clamp mechanism as of this build). */
.recent-activity__title { display: -webkit-box; overflow: hidden; color: var(--ink); font-size: 16px; font-weight: 700; line-height: 20px; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
.recent-activity__item:hover .recent-activity__title { color: var(--blue-link); }
.recent-activity__snippet { display: -webkit-box; overflow: hidden; margin-top: 2px; color: var(--muted); font-size: 13px; line-height: 18px; -webkit-box-orient: vertical; -webkit-line-clamp: 1; }
/* Collapses cleanly when windies_recent_activity.php omits the snippet
   entirely (duplicate-of-title or URL-only post) — the item array builds
   the full <span class="recent-activity__snippet">...</span> markup (or
   an empty string) in PHP, so there's no empty wrapper left in the DOM to
   need a CSS :empty rule for; meta just follows the title directly. */
.recent-activity__meta { display: block; margin-top: 3px; color: var(--soft-muted); font-size: 12px; line-height: 16px; }
.recent-activity__author { color: var(--ink); font-weight: 700; }
.recent-activity__more { color: var(--ivory); font-size: 13px; font-weight: 700; text-decoration: none; white-space: nowrap; }
.recent-activity__more:hover { text-decoration: underline; }
.recent-activity__more:focus-visible { outline: 3px solid var(--gold); outline-offset: 2px; }
.recent-activity__empty { margin: 0; padding: 20px 18px; color: var(--muted); font-size: 13px; }

/* Thread footer tools (View Printable Version / Send to a Friend / Add
   Poll, plus moderation options + forum jump on the right) — showthread's
   own template puts {$printthread}/{$sendthread}/{$addpoll} inside
   .thread-footer-tools__left, and each of those is a stock MyBB `<li>`
   (showthread_printthread etc., core templates, unedited). That div was
   never actually a <ul>, and this component had no CSS of its own at all
   until now — so each <li>'s default browser bullet (positioned outside
   its own box, since nothing here established it as list content) bled
   left past the container edge, and with no margin-top the whole block
   sat flush against whatever preceded it (quick reply). Fixed at the
   template level too: that div is now a <ul> (see showthread template) so
   this is a real, valid list, not just a bullet-less cover-up. */
.thread-footer-tools { display: flex; flex-wrap: wrap; gap: 14px 24px; align-items: center; justify-content: space-between; margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--border); }
.thread-footer-tools__left { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 0; padding: 0; list-style: none; }
.thread-footer-tools__left li { margin: 0; }
.thread-footer-tools__left a { color: var(--blue-link); font-size: 13px; text-decoration: none; }
.thread-footer-tools__left a:hover { text-decoration: underline; }
.thread-footer-tools__right { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; }
.thread-footer-tools__right form { margin: 0; }

@media (max-width: 700px) {
  .thread-footer-tools { flex-direction: column; align-items: flex-start; gap: 12px; }
}
