.battleForecast, .garrisonNotice {
  margin-block: .65rem;
  padding: .7rem;
  border: 1px solid rgba(222, 192, 105, .35);
  border-radius: .5rem;
  background: rgba(16, 26, 23, .7);
  text-align: left;
  overflow-wrap: anywhere;
}
.battleForecast h4 { margin: 0 0 .35rem; color: #f0d685; font-size: .88rem; }
.battleForecast p { margin: .35rem 0 0; font-size: .78rem; line-height: 1.45; }
.battleForecast .forecastRoute { margin-bottom: .45rem; color: #eee9dc; }
.battleForecast .statLine { gap: .7rem; font-size: .8rem; align-items: baseline; }
.battleForecast .statLine strong { white-space: nowrap; }
.battleForecast .forecastAssumption { color: #c4cabb; }
.forecastDetails { margin-top: .5rem; font-size: .78rem; }
.forecastDetails summary { cursor: pointer; color: #e8d391; padding-block: .3rem; }
.garrisonNotice strong, .garrisonNotice small { display: block; font-size: .8rem; line-height: 1.45; }
.garrisonNotice small { margin-top: .35rem; color: #c4cabb; }
.garrisonNotice.isAtRisk { border-color: #dfa35e; background: rgba(86, 48, 21, .6); }
.mobileCountryIntel .battleForecast span { display: inline; }
.mobileCountryIntel:has(.battleForecast) { max-height: min(65dvh, 560px); overflow-y: auto; }
.mobileCountryIntel.isVisible:not(.compactNotice) { pointer-events: auto; }
.mobileNoticeContent { display: grid; gap: 3px; }
.mobileCountryIntel .intelDismiss { justify-self: end; padding: .35rem .65rem; font-size: .78rem; min-height: 36px; }

/* Orders must not move when a country gains facts, forecasts or unrest notices.
   Core turn controls have their own non-scrolling area. Only details (including
   the optional Grand Master tools) scroll; End Turn always occupies row one. */
#commandPanel {
  padding: 0;
  gap: 0;
  overflow: hidden;
}
#commandPanel > #actionPanel {
  flex: 0 0 auto;
  padding: 12px 14px;
  border-bottom: 1px solid var(--line);
}
#commandPanel > .commandInfo {
  flex: 1 1 auto;
  min-height: 0;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 14px;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
}
.commandInfo > * { flex-shrink: 0; }
/* Focus must not scroll the whole battlefield to reveal the footer or a lower
   information item. Each panel/dialog retains its own scrolling. */
html:has(#gameView:not(.hidden)),
body:has(#gameView:not(.hidden)),
#app:has(#gameView:not(.hidden)) { overflow: clip; }
#app:has(#gameView:not(.hidden)) > .siteLegalLinks { display: none; }
#secondaryActionPanel:empty { display: none; }
#commandInfo:focus-visible { outline: 2px solid var(--accent); outline-offset: -3px; }
.turnBriefing { padding: .7rem; border: 1px solid rgba(222, 192, 105, .35); border-radius: .5rem; background: #17221d; text-align: left; overflow-wrap: anywhere; }
.turnBriefing summary { cursor: pointer; color: #f0d685; font-weight: 700; min-height: 28px; line-height: 28px; }
.turnBriefing summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.turnBriefing p { margin: .5rem 0 0; font-size: .78rem; line-height: 1.4; }
.turnBriefing .briefingContext, .turnBriefing .briefingRule { color: #bac4b4; font-size: .7rem; }
.briefingObjective span, .briefingDraft span { display: block; margin-top: .2rem; }
.briefingDraft strong { color: #f0d685; }
.briefingDraft span { font-size: .7rem; color: #bac4b4; }
.briefingWarning { margin-top: .65rem; border-top: 1px solid var(--line); padding-top: .55rem; }
.briefingWarning > strong { font-size: .8rem; color: #f4d6a4; }
.briefingWarning p { margin-top: .25rem; }
/* Short desktop windows still retain all nine core buttons without shrinking
   click targets. Phones use their existing separate, fixed command bars. */
@media (min-width: 641px) and (hover: hover) and (pointer: fine) and (max-height: 600px) {
  #commandPanel > #actionPanel { gap: 4px; padding-block: 6px; }
  #commandPanel > #actionPanel button { min-height: 36px; padding-block: 4px; }
}
