/* Shared interface, spacing and responsive behavior across Castrion. */
:root {
  --card-radius: 15px;
}
body {
  -webkit-font-smoothing: antialiased;
  background-image: radial-gradient(ellipse at 85% 0%, #15353688, transparent 55%);
  background-repeat: no-repeat;
}
main {
  min-width: 0;
}
:focus-visible {
  outline: 3px solid var(--accent);
  outline-offset: 4px;
}
main:focus {
  outline: none;
}
[hidden] {
  display: none !important;
}
h1,
h2,
h3 {
  text-wrap: balance;
}
h1,
h2,
h3,
p,
dd {
  overflow-wrap: anywhere;
}
button,
a,
input,
select,
textarea,
summary {
  -webkit-tap-highlight-color: transparent;
}
button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none;
}
.skip-link {
  position: fixed;
  z-index: 100;
  top: 8px;
  left: 12px;
  padding: 12px 18px;
  border-radius: 8px;
  background: var(--surface-strong);
  color: var(--ink);
  transform: translateY(-160%);
}
.skip-link:focus {
  transform: translateY(0);
}
.topbar {
  background: #0b1117eb;
  border-color: var(--line);
  gap: 24px;
  padding-inline: max(24px, calc((100vw - 1400px) / 2));
}
.topbar-left {
  min-width: 0;
}
.topnav {
  gap: 22px;
}
.topnav > a {
  padding-block: 10px;
  font-size: 13px;
}
.topnav > a[aria-current="page"] {
  color: var(--green);
  text-decoration: underline;
  text-decoration-color: var(--accent-border);
  text-underline-offset: 8px;
}
.server-switcher > .server-link {
  min-width: 44px;
  height: 42px;
  border-color: var(--line);
  background: var(--surface-raised);
  color: var(--muted);
  box-shadow: none;
  border-radius: 9px;
}
.server-switcher > .server-link:hover {
  transform: none;
  background: var(--surface-raised);
}
.server-switcher > .server-link.is-active {
  transform: none;
  color: var(--ink);
  background: var(--accent-soft);
  border-color: var(--green);
  box-shadow: none;
}
.server-switcher > .server-link-add {
  color: var(--muted);
  background: transparent;
  border-style: dashed;
}
.account-menu {
  position: relative;
}
.account-menu summary {
  display: flex;
  align-items: center;
  gap: 9px;
  min-height: 44px;
  padding: 4px 8px 4px 4px;
  border: 1px solid var(--soft-line);
  border-radius: 10px;
  cursor: pointer;
  list-style: none;
}
.account-menu summary::-webkit-details-marker {
  display: none;
}
.account-menu-avatar {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  background: var(--accent-soft);
  color: var(--accent);
  border-radius: 8px;
  font-size: 11px;
  font-weight: 700;
}
.account-menu-name {
  max-width: 115px;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 12px;
}
.account-menu-panel {
  position: absolute;
  z-index: 25;
  top: calc(100% + 10px);
  right: 0;
  width: 235px;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 13px;
  background: var(--surface);
  box-shadow: 0 12px 40px rgb(0 0 0 / 0.12);
}
.account-menu-label {
  display: block;
  padding: 8px 10px 12px;
  font-size: 12px;
  overflow-wrap: anywhere;
  border-bottom: 1px solid var(--soft-line);
  margin-bottom: 5px;
}
.account-menu-panel a {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 10px;
  border-radius: 7px;
  font-size: 13px;
}
.account-menu-panel a:hover {
  background: var(--soft);
}
.account-menu-panel form {
  border-top: 1px solid var(--soft-line);
  margin-top: 5px;
  padding-top: 5px;
}
.account-menu-panel button {
  padding: 12px 10px;
  width: 100%;
  text-align: left;
  font-size: 12px;
}
.server-subnav {
  background: var(--surface);
  color: var(--muted);
  border-color: var(--line);
  gap: 6px;
  padding: 10px max(24px, calc((100vw - 1400px) / 2));
  scrollbar-width: thin;
}
.server-subnav strong {
  color: var(--muted);
  letter-spacing: 0;
  font-size: 12px;
  padding-right: 14px;
}
.server-subnav a {
  padding: 11px 12px;
  font-size: 12px;
  font-weight: 500;
  border-radius: 8px;
}
.server-subnav a:hover {
  background: var(--surface-raised);
}
.server-subnav a.is-active {
  background: var(--surface-raised);
  color: var(--accent);
  font-weight: 700;
}
.server-context-badge,
.data-badge {
  background: var(--surface-raised);
  color: var(--accent);
  border: 1px solid var(--line);
  font-size: 12px;
  letter-spacing: 0;
}
.mobile-tools {
  display: none;
}
.site-footer {
  gap: 18px;
  font-size: 10px;
  letter-spacing: 0.06em;
  flex-wrap: wrap;
}
.information-links { display: flex; gap: 12px 22px; flex-wrap: wrap; font-size: 12px; line-height: 1.7; letter-spacing: 0; }
.site-footer .information-links { width: 100%; }
.information-links a, .signup-information a { text-decoration: underline; text-underline-offset: 3px; }
.signup-information { font-size: 12px; color: var(--muted); line-height: 1.7; }
.messages {
  position: relative;
  top: auto;
  right: auto;
  max-width: 1280px;
  margin: 18px auto 0;
  padding: 0 32px;
  z-index: 2;
}
.message {
  box-shadow: none;
  margin-bottom: 8px;
  border: 1px solid var(--line);
  color: var(--accent);
  background: var(--surface-raised);
  font-size: 13px;
  line-height: 1.7;
}
.message.error {
  color: var(--danger);
  background: var(--surface-raised);
  border-color: var(--line);
}
.message.warning {
  color: var(--warning);
  background: var(--surface-raised);
  border-color: var(--warning-border);
}
.button {
  min-height: 44px;
  gap: 12px;
  padding: 12px 18px;
  border-radius: 9px;
  box-shadow: none;
  font-size: 13px;
}
.button:hover {
  transform: none;
}
.button:not(.button-outline):not(.button-danger) {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--on-accent);
}
.button:not(.button-outline):not(.button-danger):hover {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
  color: var(--on-accent);
}
.button span {
  color: inherit;
}
.button-small {
  padding: 10px 14px;
  font-size: 12px;
}
.button-outline {
  width: auto;
  margin-top: 0;
  background: var(--surface-raised);
  border-color: var(--line);
  color: var(--accent);
}
.button-outline:hover {
  background: var(--surface-raised);
  color: var(--muted);
  border-color: var(--line);
}
.text-link {
  color: var(--accent);
  font-weight: 600;
  border-color: var(--line);
}
button.text-link {
  background: transparent;
  border: 0;
  cursor: pointer;
  padding: 10px 0;
}
.back-link {
  padding: 8px 0;
  margin-bottom: 14px;
  font-weight: 500;
}
.back-link:hover {
  color: var(--green);
}
.app-shell,
.ops-shell,
.page-shell {
  width: 100%;
  max-width: 1280px;
  margin: 0 auto;
  padding: 34px 32px 72px;
}
.troops-shell,
.kingdom-troops-shell {
  max-width: 1500px;
}
.wiki-shell {
  max-width: 1400px;
}
.page-heading,
.ops-header,
.offense-editor-heading,
.offense-review-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 22px;
  padding: 28px 30px;
  margin-bottom: 27px;
  border: 1px solid var(--soft-line);
  border-radius: 18px;
  background: var(--soft);
}
.page-heading > div:first-child,
.ops-header > div:first-child,
.offense-review-header > div:first-child {
  min-width: 0;
  flex: 1 1 320px;
}
.page-heading h1,
.ops-header h1,
.offense-editor-heading h1,
.offense-review-header h1 {
  font-size: clamp(27px, 3.2vw, 36px);
  line-height: 1.2;
  letter-spacing: -0.04em;
  margin: 7px 0 10px;
}
.page-heading p,
.ops-header p,
.offense-editor-heading p,
.offense-review-header p {
  max-width: 760px;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.8;
  margin: 0;
}
.offense-editor-heading {
  display: block;
}
.eyebrow,
.page-kicker,
.form-kicker {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.12em;
  color: var(--muted);
}
.panel,
.form-card,
.ops-card,
.offense-plan-card,
.offense-mission-card,
.village-card {
  min-width: 0;
  border-color: var(--line);
  border-radius: var(--card-radius);
  box-shadow: var(--shadow-soft);
}
.panel-heading {
  gap: 15px;
}
.panel-heading span {
  font-size: 10px;
  letter-spacing: 0.1em;
}
.panel-heading h2 {
  font-size: 21px;
  letter-spacing: -0.03em;
}
.stat-grid,
.kingdom-global-stats,
.kingdom-troop-stats {
  gap: 14px;
  margin-bottom: 24px;
}
.stat-grid article,
.kingdom-stat-card,
.kingdom-troop-stats article {
  border: 1px solid var(--line);
  border-radius: 13px;
  padding: 21px 23px;
  background: var(--surface);
  overflow: hidden;
}
.stat-grid article > span,
.kingdom-stat-card > span,
.kingdom-troop-stats article > span {
  font-size: 10px;
  letter-spacing: 0.08em;
  color: var(--muted);
}
.stat-grid strong,
.kingdom-stat-card > strong {
  font-size: 30px;
}
.stat-grid .alert-stat:before {
  width: 3px;
  background: var(--accent-soft);
}
.empty-state,
.ops-empty {
  max-width: none;
  padding: 38px 28px;
  border: 1px dashed var(--line);
  border-radius: 15px;
  background: var(--surface-raised);
}
.empty-state h1 {
  font-size: 32px;
}
.empty-state.compact {
  margin: 0;
  width: 100%;
}
.empty-state.compact h2,
.ops-empty h2 {
  font-size: 22px;
}
.empty-state p,
.panel-empty,
.ops-empty p {
  font-size: 13px;
  color: var(--muted);
}
.empty-state p {
  margin-bottom: 20px;
}
.empty-state p:last-child {
  margin-bottom: 0;
}
.tag,
.status-badge {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 4px 8px;
  background: var(--surface-raised);
  color: var(--accent);
  font-size: 10px;
  letter-spacing: 0;
  text-transform: none;
}
.table-panel,
.table-scroll,
.ops-table-wrap,
.building-table-scroll {
  max-width: 100%;
  scrollbar-color: var(--line-strong) var(--surface);
  scrollbar-width: thin;
}
.has-horizontal-scroll {
  background-image: linear-gradient(to right, transparent, var(--accent-soft));
  background-position: right top;
  background-size: 16px 100%;
  background-repeat: no-repeat;
}
.table-panel th,
.ops-table th {
  background: var(--surface-raised);
  font-size: 11px;
  letter-spacing: 0.025em;
  font-weight: 500;
  padding: 13px 15px;
}
.table-panel td,
.ops-table td {
  padding: 15px;
  font-size: 13px;
  line-height: 1.6;
}
.table-panel tbody tr:hover,
.ops-table tbody tr:hover {
  background: var(--surface-raised);
}
.table-panel tbody tr:last-child td {
  border-bottom: 0;
}
.table-panel td,
.ops-table td {
  font-variant-numeric: tabular-nums;
}
.table-help {
  color: var(--muted);
  font-size: 12px;
  margin: 0 0 12px;
}
.table-help span {
  display: inline-block;
  margin-right: 6px;
}
.narrow-shell {
  padding-top: 34px;
  max-width: 720px;
}
.form-card {
  padding: 30px;
}
.form-card h1,
.form-card h2 {
  font-size: clamp(25px, 3vw, 32px);
}
.form-card > p {
  font-size: 13px;
  line-height: 1.8;
}
.stacked-form {
  gap: 21px;
}
.stacked-form label,
.offense-field > label {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
}
.stacked-form input:not([type="checkbox"]):not([type="radio"]),
.stacked-form select,
.stacked-form textarea,
.offense-field input,
.offense-field select,
.offense-field textarea,
.ops-filters select,
.ops-search input,
.role-row select {
  min-width: 0;
  min-height: 44px;
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--ink);
  border-radius: 9px;
  padding: 11px 13px;
  font-size: 14px;
}
input[type="checkbox"],
input[type="radio"] {
  accent-color: var(--accent);
}
input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]),
select,
textarea {
  background-color: var(--surface);
  color: var(--ink);
  border-color: var(--line-strong);
}
/* Keep keyboard focus visible even where a module resets the native outline. */
:is(input, select, textarea, button, a, summary):focus-visible {
  outline: 2px solid var(--accent) !important;
  outline-offset: 3px;
}
input::placeholder,
textarea::placeholder {
  color: var(--muted);
  opacity: 0.85;
}
input:autofill {
  box-shadow: inset 0 0 0 100px var(--surface-raised);
  -webkit-text-fill-color: var(--ink);
  caret-color: var(--ink);
}
.stacked-form input[type="checkbox"] {
  min-width: 18px;
  min-height: 18px;
}
textarea {
  max-width: 100%;
  resize: vertical;
}
.helptext,
.form-help,
.offense-field small {
  font-size: 12px;
  line-height: 1.7;
  color: var(--muted);
}
.helptext ul {
  margin-block: 8px;
  padding-left: 20px;
}
.errorlist {
  padding: 10px 12px 10px 28px;
  border-radius: 7px;
  background: var(--surface-raised);
  font-size: 12px;
}
.stacked-form input[aria-invalid="true"],
.stacked-form select[aria-invalid="true"] {
  border-color: var(--danger-border);
}
.auth-shell {
  max-width: 1400px;
  margin: 0 auto;
  grid-template-columns: minmax(0, 1fr) minmax(0, 480px);
  gap: 60px;
  padding: 60px 48px;
  background: transparent;
}
.auth-aside {
  background: var(--surface-raised);
  border: 1px solid var(--soft-line);
  border-radius: 24px;
  padding: 45px 38px;
}
.auth-aside h1 {
  font-size: clamp(32px, 4vw, 50px);
  line-height: 1.12;
}
.auth-aside h1 em {
  color: var(--muted);
}
.auth-aside p {
  font-size: 14px;
}
.auth-links {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 15px;
  margin-top: 24px;
}
.list-search {
  display: flex;
  align-items: end;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 18px;
  padding: 16px 18px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--surface);
}
.list-search label {
  display: grid;
  gap: 7px;
  flex: 1 1 220px;
}
.list-search label span {
  font-size: 12px;
  color: var(--muted);
  font-weight: 500;
}
.list-search input {
  width: 100%;
  min-width: 0;
  min-height: 44px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface);
  padding: 10px 13px;
  font-size: 13px;
}
.list-search-reset {
  min-height: 44px;
  padding: 10px 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface-raised);
  color: var(--accent);
  cursor: pointer;
  font-size: 12px;
}
.list-search-count {
  font-size: 12px;
  color: var(--muted);
  padding-bottom: 12px;
}
.list-search-empty {
  padding: 25px;
  margin-bottom: 18px;
  text-align: center;
  background: var(--surface-raised);
  border: 1px dashed var(--line);
  border-radius: 12px;
}
.list-search-empty p {
  font-size: 13px;
  color: var(--muted);
}
.kingdom-comparison-panel {
  padding: 0;
}
.kingdom-comparison-panel > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 18px 23px;
}
.kingdom-comparison-panel > summary::-webkit-details-marker {
  display: none;
}
.kingdom-comparison-panel > summary::after {
  content: "+";
  color: var(--accent);
  font-size: 24px;
}
.kingdom-comparison-panel[open] > summary::after {
  content: "−";
}
.kingdom-comparison-panel > summary strong {
  display: block;
  font-size: 15px;
}
.kingdom-comparison-panel > summary small {
  display: block;
  font-size: 12px;
  color: var(--muted);
  margin-top: 3px;
}
.kingdom-heading,
.kingdom-troops-heading {
  background: var(--surface-raised);
  padding: 23px;
  gap: 16px;
}
.kingdom-heading h2,
.kingdom-troops-heading h2 {
  font-size: 23px;
  letter-spacing: -0.03em;
}
.kingdom-player-list {
  padding: 4px 23px 16px;
}
.kingdom-player > summary {
  padding-block: 18px;
}
.kingdom-player-name small,
.kingdom-player-metric small {
  font-size: 11px;
}
.kingdom-sort-button {
  min-height: 44px;
  font-size: 10px;
  letter-spacing: 0.05em;
}
.kingdom-player-metric strong {
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.kingdom-player-sortbar {
  padding-inline: 31px;
}
.kingdom-player-name strong {
  font-size: 14px;
}
.kingdom-villages {
  border-radius: 9px;
}
.troop-import-collapsible {
  padding: 17px 22px;
}
.troop-import-date {
  font-size: 12px;
}
.village-card-header {
  padding: 20px 23px;
  gap: 16px;
}
.village-card-title strong {
  font-size: 16px;
}
.village-card-title small,
.village-card-meta small,
.village-card-report small,
.village-card-report time {
  font-size: 11px;
}
.village-mobile-coordinates {
  display: none;
}
.village-list-toolbar {
  margin-block: 18px;
}
.village-toggle-all {
  min-height: 44px;
  border-color: var(--line);
  border-radius: 8px;
  color: var(--accent);
}
.ops-tabs,
.offense-status-tabs {
  display: flex;
  gap: 6px;
  padding: 6px;
  border: 1px solid var(--line);
  border-radius: 11px;
  background: var(--surface-raised);
  margin-bottom: 24px;
  overflow-x: auto;
}
.ops-tabs a,
.offense-status-tabs a {
  flex-shrink: 0;
  border: 0;
  border-radius: 7px;
  padding: 11px 17px;
  color: var(--muted);
  font-size: 13px;
  font-weight: 500;
}
.ops-tabs a[aria-current="page"],
.offense-status-tabs a[aria-current="page"] {
  background: var(--surface);
  box-shadow: 0 2px 5px rgb(0 0 0 / 0.12);
  color: var(--accent);
}
.ops-private {
  font-size: 12px;
  background: var(--surface-raised);
  border-color: var(--line);
  color: var(--accent);
}
.ops-card {
  padding: 24px;
}
.ops-card h2 {
  font-size: 20px;
  letter-spacing: -0.025em;
}
.ops-card p,
.ops-muted,
.ops-list,
.ops-details,
.ops-timeline p {
  font-size: 13px;
  line-height: 1.8;
}
.ops-filters,
.offense-search-bar {
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 17px 19px;
  background: var(--surface-raised);
  gap: 14px;
}
.ops-filters label,
.offense-search-bar label {
  font-size: 12px;
}
.ops-details summary {
  padding-block: 10px;
}
.ops-details .ops-skipped {
  margin: 4px 0 0;
  color: var(--muted);
  overflow-wrap: anywhere;
}
.ops-details .ops-skipped li {
  margin: 2px 0;
}
.ops-badge {
  border-radius: 7px;
  font-size: 11px;
}
.ops-advice {
  border-radius: 8px;
}
.ops-agenda-summary,
.offense-mission-summary {
  flex-wrap: wrap;
  gap: 14px;
}
.ops-timeline h3 {
  font-size: 15px;
}
.ops-remove {
  min-height: 44px;
}
.ops-table-wrap {
  padding: 0;
}
.ops-table caption {
  text-align: left;
  padding: 18px 20px;
}
.offense-plan-card {
  transition:
    border-color 0.16s,
    box-shadow 0.16s;
}
.offense-plan-card:hover {
  transform: none;
  border-color: var(--line);
  box-shadow: 0 6px 22px rgb(0 0 0 / 0.12);
}
.offense-plan-card footer {
  padding: 15px 0 0;
  font-size: 12px;
  letter-spacing: 0;
}
.offense-editor {
  max-width: 1380px;
}
.offense-steps {
  margin: 0 0 22px;
  border-radius: 12px;
  background: var(--surface-raised);
  border-color: var(--line);
  padding: 12px 16px;
}
.offense-steps > a,
.offense-steps > span {
  min-width: 0;
}
.offense-form {
  padding: 27px;
}
.offense-form h2 {
  font-size: 22px;
}
.offense-arrival {
  padding: 15px 20px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--surface-raised);
}
.offense-arrival time {
  color: var(--accent);
}
.offense-mission-card {
  padding: 23px;
}
.offense-review-notice,
.offense-calculation-note {
  border-radius: 11px;
  font-size: 13px;
}
.offense-form-actions {
  flex-wrap: wrap;
  gap: 16px;
}
.offense-archive-confirm form {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}
.offense-participant-card,
.offense-target-row {
  border-radius: 10px;
}
.offense-toggle,
.offense-fake-settings {
  border-radius: 12px;
}
.forge-console {
  border-radius: 15px;
  box-shadow: none;
  gap: 28px;
}
.training-bonuses {
  border-radius: 13px;
}
.troop-toolbar {
  border-radius: 13px 13px 0 0;
  gap: 15px;
}
.troop-table-panel {
  border-radius: 0 0 13px 13px;
  overflow: hidden;
}
.troop-table th {
  font-size: 10px;
  letter-spacing: 0.025em;
}
.troop-table td {
  font-size: 13px;
  padding-block: 16px;
}
.troop-table td:first-child {
  position: sticky;
  left: 0;
  z-index: 1;
  background: var(--surface);
  box-shadow: 1px 0 0 var(--line);
}
.troop-table th:first-child {
  position: sticky;
  left: 0;
  z-index: 3;
}
.unit-cell small,
.cost-cell small,
.time-cell small,
.unit-suffix,
.efficiency-cell small {
  font-size: 10px;
}
.filter-chip,
.server-speed-switch button {
  min-height: 44px;
  font-size: 12px;
}
.search-field,
.select-field {
  min-height: 44px;
  border-radius: 8px;
}
.search-field input,
.select-field select {
  font-size: 13px;
}
.troop-notes > div {
  border-radius: 11px;
}
.troop-notes p {
  font-size: 12px;
}
.troop-table-tools {
  padding: 13px 18px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-bottom: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
}
.troop-table-tools p {
  margin: 0;
  font-size: 12px;
  color: var(--muted);
}
.troop-filter-reset {
  border: 0;
  background: transparent;
  color: var(--accent);
  padding: 8px 0;
  min-height: 40px;
  cursor: pointer;
  font-size: 12px;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.role-list {
  display: grid;
  gap: 12px;
}
.role-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 20px;
  padding: 21px 24px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 12px;
}
.role-row > strong {
  flex: 1;
  min-width: 120px;
}
.role-row label {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 12px;
  color: var(--muted);
}
.role-row select {
  min-width: 170px;
}
.role-intro {
  color: var(--muted);
  font-size: 13px;
  margin-bottom: 25px;
}
.hero {
  max-width: 1480px;
  margin: auto;
  padding-top: 60px;
  min-height: 610px;
}
.hero h1 {
  font-size: clamp(40px, 5vw, 70px);
}
.hero .button {
  min-height: 50px;
}
.glow {
  opacity: 0.09;
  filter: blur(45px);
}
.hero-actions {
  flex-wrap: wrap;
  gap: 22px;
}
.feature-grid {
  border: 0;
  gap: 16px;
}
.feature-grid article {
  border: 1px solid var(--line);
  border-radius: 16px;
  background: var(--surface);
}
.feature-grid article:last-child {
  border: 1px solid var(--line);
  background: var(--surface-raised);
}
.feature-grid article:hover {
  transform: none;
  box-shadow: var(--shadow-soft);
}
.feature-icon {
  margin: 28px 0 20px;
}
.trust-strip {
  background: var(--surface-raised);
  color: var(--accent);
  gap: 20px;
  flex-wrap: wrap;
}
.trust-strip > span {
  color: var(--accent);
}
.trust-strip div {
  gap: 22px;
  flex-wrap: wrap;
}
.back-to-top {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 15;
  width: 44px;
  height: 44px;
  background: var(--accent-soft);
  color: var(--ink);
  border: 1px solid var(--line);
  border-radius: 12px;
  box-shadow: 0 4px 15px rgb(0 0 0 / 0.13);
  font-size: 22px;
  cursor: pointer;
}
@media (max-width: 1100px) {
  .topnav {
    gap: 14px;
  }
  .account-menu-name {
    display: none;
  }
  .auth-shell {
    gap: 30px;
    padding-inline: 32px;
  }
  .forge-console {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr);
  }
  .forge-gain {
    display: none;
  }
  .ops-header,
  .page-heading {
    gap: 18px;
  }
}
@media (max-width: 800px) {
  body:has(.mobile-tools) {
    padding-bottom: calc(74px + env(safe-area-inset-bottom));
  }
  .topbar {
    height: 70px;
    padding-inline: 18px;
    gap: 12px;
  }
  .topbar-left {
    gap: 14px;
    max-width: calc(100% - 64px);
  }
  .topnav > a {
    display: none;
  }
  body:not(:has(.mobile-tools)) .topnav > a.button {
    display: inline-flex;
  }
  .brand > span:last-child {
    display: none;
  }
  .server-switcher {
    max-width: calc(100vw - 132px);
    padding: 3px;
  }
  /* A world's code is never cut: the row scrolls instead, the current
     world first, so it stays in sight beside the departure badge. */
  .server-switcher > .server-link {
    flex-shrink: 0;
  }
  .server-switcher > .server-link.is-active {
    order: -1;
  }
  .account-menu summary {
    gap: 5px;
    padding-right: 6px;
  }
  .account-menu-panel {
    right: 0;
  }
  .mobile-tools {
    position: fixed;
    inset: auto 0 0;
    z-index: 30;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    padding: 8px 12px calc(8px + env(safe-area-inset-bottom));
    gap: 5px;
    background: var(--surface);
    backdrop-filter: blur(14px);
    border: 0;
    border-top: 1px solid var(--line);
    box-shadow: 0 -4px 20px rgb(0 0 0 / 0.12);
  }
  .mobile-tools a {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 5px;
    min-height: 51px;
    padding: 5px;
    border-radius: 9px;
    font-size: 11px;
    font-weight: 500;
    color: var(--muted);
    white-space: nowrap;
  }
  .mobile-tools svg {
    width: 20px;
    height: 20px;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
  }
  .mobile-tools a[aria-current="page"] {
    background: var(--surface-raised);
    color: var(--accent);
    font-weight: 700;
  }
  .mobile-tools a {
    text-decoration: none !important;
  }
  .server-subnav {
    padding: 8px 16px;
    gap: 5px;
  }
  .server-subnav strong {
    font-size: 11px;
  }
  .server-subnav a {
    font-size: 12px;
  }
  .server-subnav > .server-subnav-right {
    margin-left: 0;
  }
  .app-shell,
  .ops-shell,
  .page-shell {
    padding: 24px 18px 45px;
  }
  .page-heading,
  .ops-header,
  .offense-editor-heading,
  .offense-review-header {
    padding: 23px;
    border-radius: 15px;
    margin-bottom: 22px;
  }
  .page-heading > div:first-child,
  .ops-header > div:first-child,
  .offense-review-header > div:first-child {
    flex-basis: 100%;
  }
  .page-heading h1,
  .ops-header h1,
  .offense-editor-heading h1,
  .offense-review-header h1 {
    font-size: 29px;
  }
  .page-heading p,
  .ops-header p {
    font-size: 13px;
  }
  .content-grid,
  .ops-columns,
  .offense-two-columns {
    grid-template-columns: minmax(0, 1fr);
  }
  .stat-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .stat-grid article {
    padding: 17px 14px;
  }
  .stat-grid article > span {
    font-size: 9px;
    letter-spacing: 0.03em;
  }
  .stat-grid strong {
    font-size: 26px;
  }
  .kingdom-global-stats,
  .kingdom-troop-stats {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }
  .kingdom-stat-card,
  .kingdom-troop-stats article {
    padding: 17px;
  }
  .kingdom-stat-card > strong {
    font-size: 26px;
  }
  .kingdom-player-list {
    padding-inline: 15px;
  }
  .kingdom-player > summary {
    grid-template-columns: minmax(0, 1fr) 76px 82px;
    gap: 9px;
  }
  .kingdom-player-sortbar {
    grid-template-columns: minmax(0, 1fr) 76px 82px;
    gap: 9px;
    padding-inline: 19px;
  }
  .kingdom-player-metric small {
    font-size: 10px;
  }
  .kingdom-player-identity {
    flex-wrap: wrap;
    gap: 4px;
  }
  .kingdom-player-name strong {
    overflow-wrap: anywhere;
  }
  .kingdom-troop-sortbar {
    grid-template-columns: minmax(0, 1fr) auto auto;
  }
  .kingdom-comparison-panel > summary {
    padding: 18px;
  }
  .kingdom-comparison-table td,
  .kingdom-comparison-table th {
    min-width: 0;
    padding: 12px;
    font-size: 12px;
  }
  .village-card-header {
    grid-template-columns: minmax(0, 1fr) auto 24px;
    gap: 10px;
    padding: 17px;
  }
  .village-card-meta {
    display: none;
  }
  .village-card-title .village-mobile-coordinates {
    display: block;
    margin-top: 4px;
    font-size: 10px;
  }
  .village-card-title strong {
    white-space: normal;
    overflow-wrap: anywhere;
    font-size: 15px;
  }
  .village-card-report {
    min-width: 0;
    max-width: 115px;
  }
  .village-card-report time {
    font-size: 10px;
  }
  .village-card-title small {
    font-size: 11px;
  }
  .panel,
  .ops-card,
  .offense-form {
    padding: 21px;
  }
  .kingdom-panel,
  .kingdom-troops-panel,
  .kingdom-comparison-panel,
  .ops-table-wrap {
    padding: 0;
  }
  .ops-grid {
    grid-template-columns: minmax(0, 1fr);
  }
  .ops-filters,
  .offense-search-bar {
    padding: 16px;
  }
  .ops-filters > label {
    flex: 1 1 140px;
    min-width: 0;
  }
  .ops-filters select {
    width: 100%;
  }
  .ops-tabs a,
  .offense-status-tabs a {
    font-size: 12px;
    padding: 11px 13px;
  }
  .auth-shell {
    grid-template-columns: minmax(0, 1fr);
    padding: 24px 18px 45px;
    gap: 22px;
    min-height: 0;
  }
  .auth-aside {
    padding: 24px;
    border-radius: 15px;
  }
  .auth-aside h1 {
    font-size: 32px;
    margin-block: 18px;
  }
  .auth-aside p {
    margin-bottom: 0;
  }
  .form-card {
    padding: 25px;
  }
  .narrow-shell {
    padding: 24px 18px 45px;
  }
  .forge-console {
    grid-template-columns: minmax(0, 1fr);
    padding: 24px;
  }
  .forge-copy p {
    display: block;
  }
  .troop-table .unit-cell {
    min-width: 170px;
    max-width: 180px;
    padding-left: 12px;
    gap: 7px;
  }
  .unit-cell strong {
    white-space: normal;
    font-size: 12px;
  }
  .unit-cell small {
    font-size: 9px;
    white-space: normal;
  }
  .troop-table th:first-child {
    padding-left: 12px;
  }
  .troop-toolbar {
    padding: 15px;
  }
  .filter-chip {
    padding-inline: 11px;
  }
  .role-row {
    padding: 18px;
    gap: 14px;
  }
  .role-row > strong {
    flex-basis: 100%;
  }
  .role-row label {
    flex: 1;
    flex-wrap: wrap;
    gap: 7px;
  }
  .role-row select {
    width: 100%;
    min-width: 0;
  }
  .messages {
    padding-inline: 18px;
    margin-top: 15px;
  }
  .site-footer {
    /* Room below the links: the back-to-top and chat buttons float there. */
    padding: 22px 18px 96px;
    flex-direction: column;
    gap: 7px;
  }
  .back-to-top {
    bottom: calc(87px + env(safe-area-inset-bottom));
    right: 16px;
  }
  .hero {
    padding: 36px 22px;
    min-height: 0;
  }
  .hero-copy > p {
    font-size: 16px;
  }
  .feature-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .feature-grid article {
    min-height: 0;
    padding: 23px;
  }
  .section-shell {
    padding: 45px 22px;
  }
  .section-heading h2 {
    font-size: 34px;
  }
}
@media (max-width: 480px) {
  input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
  select,
  textarea {
    font-size: 16px !important;
  }
  .page-heading,
  .ops-header,
  .offense-editor-heading,
  .offense-review-header {
    padding: 22px;
  }
  .page-heading h1,
  .ops-header h1 {
    font-size: 28px;
  }
  .stat-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 9px;
  }
  .stat-grid article {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 4px 15px;
    align-items: center;
  }
  .stat-grid article strong {
    grid-column: 2;
    grid-row: 1 / 3;
    margin: 0;
  }
  .stat-grid article small {
    grid-column: 1;
  }
  .kingdom-stat-card > span {
    font-size: 9px;
  }
  .kingdom-stat-card small {
    font-size: 11px;
  }
  .kingdom-heading {
    padding: 19px;
  }
  .kingdom-summary {
    gap: 8px 14px;
  }
  .operation-row {
    grid-template-columns: 45px minmax(0, 1fr) 38px;
    gap: 12px;
  }
  .operation-count {
    grid-column: 2;
    text-align: left;
    display: flex;
    gap: 10px;
    align-items: center;
  }
  .operation-row .icon-button {
    grid-column: 3;
    grid-row: 1 / 3;
  }
  .operation-main {
    min-width: 0;
  }
  .operation-main > span {
    display: block;
  }
  .list-search {
    padding: 14px;
    gap: 8px;
  }
  .list-search label {
    flex-basis: 100%;
  }
  .list-search-count {
    margin-left: auto;
    padding: 10px 0;
  }
  .village-card-report {
    max-width: 98px;
  }
  .troop-import-collapsible {
    padding: 15px;
  }
  .troop-import-trigger {
    gap: 12px;
  }
  .troop-import-date {
    width: auto;
    flex: 1 1 200px;
  }
  .troop-import-trigger:after {
    order: 0;
  }
  .offense-steps {
    gap: 8px;
    padding-inline: 10px;
  }
  .offense-form-actions .button {
    width: 100%;
  }
  .offense-arrival {
    width: 100%;
    text-align: left;
  }
  .feature-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  *,
  *::before,
  *::after {
    animation: none !important;
    transition: none !important;
  }
}
@media print {
  .topbar,
  .server-subnav,
  .mobile-tools,
  .site-footer,
  .back-to-top,
  .skip-link {
    display: none !important;
  }
  body:has(.mobile-tools) {
    padding-bottom: 0;
  }
  .app-shell,
  .ops-shell {
    padding: 0;
    max-width: none;
  }
}

.page-heading,
.ops-header,
.offense-editor-heading,
.offense-review-header {
  text-align: left;
}

.troops-heading-actions {
  display: grid;
  justify-items: end;
  gap: 13px;
}
.training-options {
  margin-bottom: 22px;
  border: 1px solid var(--line);
  border-radius: 13px;
  background: var(--surface);
}
.training-options > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 18px 23px;
  list-style: none;
  cursor: pointer;
}
.training-options > summary::-webkit-details-marker {
  display: none;
}
.training-options > summary::after {
  content: "+";
  font-size: 24px;
  color: var(--accent);
}
.training-options[open] > summary::after {
  content: "−";
}
.training-options summary strong,
.training-options summary small {
  display: block;
}
.training-options summary strong {
  font-size: 15px;
}
.training-options summary small {
  font-size: 12px;
  color: var(--muted);
  margin-top: 4px;
}
.training-options .training-bonuses {
  margin: 0;
  border: 0;
  border-top: 1px solid var(--line);
  border-radius: 0 0 13px 13px;
}
#troop-comparison {
  scroll-margin-top: 20px;
}
@media (max-width: 800px) {
  .troops-heading-actions {
    justify-items: start;
  }
}

.offense-editor-heading {
  max-width: none;
  width: 100%;
}
.kingdom-troops-table-wrap {
  max-width: 100%;
  scrollbar-width: thin;
  scrollbar-color: var(--line-strong) var(--surface);
}

/* Server-scoped utilities live below the horizontally scrollable navigation. */
.server-tools-trigger { display: inline-flex; align-items: center; gap: 8px; }
.server-tools-trigger[aria-expanded="true"] > span { transform: rotate(180deg); }
.server-tools-menu { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding: 12px max(24px, calc((100vw - 1400px) / 2)); background: var(--surface-strong); border-bottom: 1px solid var(--line); }
.server-tools-menu[hidden] { display: none; }
.server-tools-label { color: var(--muted); font-size: 12px; margin-right: 8px; }
.server-tools-menu a { padding: 10px 14px; border-radius: 8px; color: var(--ink-2); font-size: 13px; }
.server-tools-menu a:hover { background: var(--surface-raised); }
.server-tools-menu a[aria-current="page"] { background: var(--accent-soft); color: var(--accent); font-weight: 700; }
@media (max-width: 700px) { .server-tools-menu { padding-inline: 18px; } }
.account-menu-avatar img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }
