/* 社区副本：沿用任务大厅 hall/q-card 视觉骨架，不新增 token。 */
.camp-list,
.camp-task-groups,
.camp-task-group-list,
.camp-board-list,
.camp-phase-tasks-list {
  display: flex;
  flex-direction: column;
}
.camp-list { gap: 0; padding-bottom: var(--g-pad-lg); }
.camp-task-groups,
.camp-task-group-list,
.camp-board-list,
.camp-phase-tasks-list { gap: var(--g-gap); }
.camp-phase-tasks-head,
.camp-task-group-head,
.camp-board-head {
  color: var(--g-text-sub);
  font-size: var(--g-font-size-sm);
  font-weight: 700;
}
.camp-phase-tasks-head { padding: var(--g-pad-xs) 0; }
.camp-task-meta {
  color: var(--g-text-dim);
  font-size: var(--g-font-size-xs);
}

.camp-hub-refresh { margin-left: auto; }
.camp-hub-section { margin-bottom: var(--g-gap-lg); }
.camp-hub-section-head { min-height: 32px; }
.camp-hub-section-body { display: flex; flex-direction: column; gap: var(--g-gap); }
.camp-hub-link {
  border: 0; background: none; padding: var(--g-pad-xs) 0;
  color: var(--g-accent); font-family: inherit; font-size: var(--g-font-size-xs);
  cursor: pointer;
}
.camp-hub-card {
  width: 100%; box-sizing: border-box; margin: 0;
  color: var(--g-text); font-family: inherit; text-align: left; cursor: pointer;
  border-left-color: var(--g-accent);
  transition: transform var(--g-trans), background var(--g-trans), box-shadow var(--g-trans);
}
.camp-hub-card:hover,
.camp-hub-card:focus-visible { background: var(--g-card-hover); }
.camp-hub-icon--accent { background: var(--g-accent-bg); color: var(--g-accent); }
.camp-hub-icon--green { background: var(--g-green-bg); color: var(--g-green); }
.camp-hub-icon--dim { background: var(--g-card-hover); color: var(--g-text-dim); }
.camp-hub-summary {
  margin-top: var(--g-pad-xs); color: var(--g-text-sub);
  font-size: var(--g-font-size-xs); line-height: 1.5;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
}
.camp-hub-empty {
  padding: var(--g-pad-sm) var(--g-pad);
  border-radius: var(--g-radius-sm); background: var(--g-card-hover);
  color: var(--g-text-dim); font-size: var(--g-font-size-xs); line-height: 1.5;
}
.camp-terminal { margin-top: var(--g-gap); margin-bottom: var(--g-gap-lg); }
.camp-terminal-toggle {
  width: 100%; display: flex; align-items: center; justify-content: space-between; gap: var(--g-gap);
  padding: var(--g-pad); border: 1px dashed var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-text); font-family: inherit; cursor: pointer;
}
.camp-terminal-toggle[aria-expanded="true"] { border-radius: var(--g-radius-sm) var(--g-radius-sm) 0 0; }
.camp-terminal-title { font-size: var(--g-font-size-sm); font-weight: 700; }
.camp-terminal-title i { color: var(--g-accent); }
.camp-terminal-sub { color: var(--g-text-dim); font-size: var(--g-font-size-xs); }
.camp-terminal-panel {
  padding: var(--g-pad); border: 1px dashed var(--g-card-border); border-top: 0;
  border-radius: 0 0 var(--g-radius-sm) var(--g-radius-sm); background: var(--g-card);
}
.camp-terminal-note {
  margin: 0 0 var(--g-gap); color: var(--g-text-sub);
  font-size: var(--g-font-size-xs); line-height: 1.6;
}

/* 活动入口：进行中优先；公开窗口与成员页共用工作台尺寸的紧凑顶栏。 */
/* #app 默认 content-box 会把左右内边距加到屏宽之外；只在社区三页改为 border-box。 */
#app:has(> .camp-list),
#app:has(> .camp-public-page),
#app:has(> .camp-workbench-page) { box-sizing: border-box; }
.camp-hub-section,
.camp-hub-section-body,
.camp-public-page,
.camp-public-body { min-width: 0; }
.camp-hub-card--active {
  border-left-width: 4px;
  background: var(--g-card);
  box-shadow: var(--g-shadow);
}
.camp-hub-progress {
  height: 6px; margin-top: var(--g-gap); overflow: hidden;
  border-radius: var(--g-radius-sm); background: var(--g-card-hover);
}
.camp-hub-progress-bar { height: 100%; border-radius: inherit; background: var(--g-accent); }
.camp-hub-card-cta {
  margin-top: var(--g-gap); color: var(--g-accent);
  font-size: var(--g-font-size-xs); font-weight: 700; text-align: right;
}
.camp-compact-top {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; gap: var(--g-gap);
  box-sizing: border-box; min-height: var(--g-touch-min);
  padding: var(--g-pad-sm) var(--g-pad);
  padding-top: max(var(--g-pad-sm), env(safe-area-inset-top, 0px));
  border-bottom: 1px solid var(--g-card-border);
  background: var(--g-topbar-bg);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
}
.stack-sm > .camp-compact-top { margin: calc(var(--g-pad) * -1) calc(var(--g-pad) * -1) 0; }
.camp-compact-back,
.camp-compact-refresh {
  flex: none; min-width: var(--g-touch-min); min-height: var(--g-touch-min);
  padding: 0; border: 0; background: transparent; color: var(--g-accent);
  font-family: inherit; font-size: var(--g-font-size-lg); cursor: pointer;
}
.camp-compact-refresh { margin-left: auto; font-size: var(--g-font-size); }
.camp-compact-title {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--g-text); font-size: var(--g-font-size); font-weight: 700;
}
.camp-public-page {
  min-height: 100vh; margin: calc(var(--g-pad) * -1);
  background: var(--g-content); color: var(--g-text);
}
.camp-public-body {
  display: flex; flex-direction: column; gap: var(--g-gap-lg);
  padding: var(--g-pad); padding-bottom: var(--g-pad-lg);
}
.camp-public-hero,
.camp-public-card {
  padding: var(--g-pad); border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius); background: var(--g-card); box-shadow: var(--g-shadow-sm);
}
.camp-public-hero { border-left: 4px solid var(--g-accent); }
.camp-public-hero-top { display: flex; align-items: center; justify-content: space-between; gap: var(--g-gap); }
.camp-public-emoji { font-size: var(--g-font-size-xl); }
.camp-public-name { margin: var(--g-gap) 0 var(--g-pad-xs); font-size: var(--g-font-size-lg); line-height: 1.4; }
.camp-public-theme { margin: 0; color: var(--g-accent-dark); font-size: var(--g-font-size-sm); font-weight: 700; }
.camp-public-desc { margin: var(--g-gap) 0 0; color: var(--g-text-sub); font-size: var(--g-font-size-sm); line-height: 1.7; }
.camp-public-card-title { margin: 0 0 var(--g-gap); font-size: var(--g-font-size); }
.camp-public-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--g-gap-lg); }
.camp-public-fact { display: flex; align-items: flex-start; gap: var(--g-gap); min-width: 0; color: var(--g-accent); }
.camp-public-fact-text { display: flex; min-width: 0; flex-direction: column; gap: var(--g-pad-xs); }
.camp-public-fact-label { color: var(--g-text-dim); font-size: var(--g-font-size-xs); }
.camp-public-fact-value { overflow-wrap: anywhere; color: var(--g-text); font-size: var(--g-font-size-sm); }
.camp-public-progress-label {
  display: flex; justify-content: space-between; gap: var(--g-gap); margin-top: var(--g-gap-lg);
  color: var(--g-text-sub); font-size: var(--g-font-size-xs);
}
.camp-public-progress { margin-top: var(--g-gap); }
.camp-public-note { margin: 0 0 var(--g-gap); color: var(--g-text-sub); font-size: var(--g-font-size-sm); line-height: 1.6; }
.camp-public-enter { width: 100%; }
@media (max-width: 30rem) {
  .camp-public-facts { grid-template-columns: 1fr; }
}

/* 🅅 ViewTabs：通用类，样式随营地外壳接入，后续其他视图复用同一元件。 */
.ui-view-tabs {
  display: flex;
  gap: var(--g-gap-lg);
  overflow-x: auto;
  border-bottom: 1px solid var(--g-sep);
}
.ui-view-tab {
  flex: none;
  min-height: var(--g-touch-min);
  padding: 0 var(--g-pad-sm);
  border: 0;
  border-bottom: 2px solid transparent;
  background: transparent;
  color: var(--g-text-sub);
  font-family: inherit;
  font-size: var(--g-font-size-sm);
  cursor: pointer;
}
.ui-view-tab.is-active {
  color: var(--g-accent);
  border-bottom-color: var(--g-accent);
  font-weight: 700;
}

/* 🅄 可点节点是 options 签名专用；旧 detail 五步条不挂这些类，画法不变。 */
.q-steps--pickable { overflow-x: auto; padding-bottom: var(--g-pad-xs); }
.q-step--selectable {
  position: relative;
  min-height: var(--g-touch-min);
  padding: 0;
  border: 0;
  background: transparent;
  font-family: inherit;
  cursor: pointer;
}
.q-step--selected::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-bottom: 6px solid var(--g-accent);
}
.q-step-name-short { display: none; }

.camp-phase-tasks { display: flex; flex-direction: column; gap: var(--g-gap); }
.camp-task-row {
  overflow: hidden;
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  background: var(--g-card);
}
.camp-task-row-main {
  width: 100%;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: var(--g-pad-xs) var(--g-gap);
  align-items: center;
  padding: var(--g-pad-sm);
  border: 0;
  background: transparent;
  color: var(--g-text);
  font-family: inherit;
  text-align: left;
  cursor: pointer;
}
.camp-task-state { font-size: var(--g-font-size-sm); white-space: nowrap; }
.camp-task-title { min-width: 0; font-size: var(--g-font-size); }
.camp-task-meta { grid-column: 2; }
.camp-task-row > .q-exp,
.camp-task-row > div:has(> .q-exp) { border-top: 1px solid var(--g-sep); }
.camp-task-row[data-state='active'] .camp-task-state { color: var(--g-green); }
.camp-task-row[data-state='review'] .camp-task-state { color: var(--g-warn); }
.camp-task-row[data-state='pending'] .camp-task-state { color: var(--g-text-muted); }
.camp-task-row[data-state='done'] .camp-task-state { color: var(--g-text-dim); }
.camp-task-group { display: flex; flex-direction: column; gap: var(--g-pad-xs); }
.camp-board {
  display: flex;
  gap: var(--g-gap-lg);
  overflow-x: auto;
  padding-bottom: var(--g-pad-sm);
}
.camp-board-col {
  flex: 0 0 13rem;
  display: flex;
  flex-direction: column;
  gap: var(--g-gap);
  padding: var(--g-pad-sm);
  border-radius: var(--g-radius);
  background: var(--g-card-hover);
}
.camp-board-head { color: var(--g-text); }
.camp-board-list:empty::after {
  content: '暂无任务';
  color: var(--g-text-muted);
  font-size: var(--g-font-size-xs);
  text-align: center;
  padding: var(--g-pad);
}

@media (max-width: 30rem) {
  .q-steps--pickable .q-step { min-width: 3rem; }
  .q-steps--pickable .q-step-name-full { display: none; }
  .q-steps--pickable .q-step-name-short { display: inline; }
  .camp-task-row-main { grid-template-columns: 1fr; }
  .camp-task-meta { grid-column: 1; }
  .camp-board-col { flex-basis: 11rem; }
}

/* 社区副本批 1：世界终端七屏共享件。全部限定页面或组件根类，不改既有列表/看板画法。 */
.camp-wizard,
.camp-budget,
.camp-batch,
.camp-meeting,
.camp-schedule,
.camp-opening {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  color: var(--g-text);
  font-family: var(--g-font-family);
}
.camp-wizard.camp-stack,
.camp-budget.camp-stack,
.camp-batch.camp-stack,
.camp-meeting.camp-stack,
.camp-schedule.camp-stack,
.camp-opening.camp-stack,
.page-world-terminal .camp-stack {
  display: flex;
  flex-direction: column;
  gap: var(--g-gap-lg);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-section-title {
  margin: 0;
  color: var(--g-text);
  font-size: var(--g-font-size-lg);
  line-height: 1.4;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-section-desc {
  margin: 0;
  color: var(--g-text-sub);
  font-size: var(--g-font-size-sm);
  line-height: 1.6;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-card {
  min-width: 0;
  box-sizing: border-box;
  padding: var(--g-pad);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius);
  background: var(--g-card);
  box-shadow: var(--g-shadow-sm);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-card--flat {
  background: var(--g-content-warm);
  box-shadow: none;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-card-head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--g-gap);
  margin-bottom: var(--g-gap);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-card-title {
  margin: 0 0 var(--g-gap);
  color: var(--g-text);
  font-size: var(--g-font-size);
  line-height: 1.5;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-card-head .camp-card-title {
  margin-bottom: 0;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-form {
  display: flex;
  flex-direction: column;
  gap: var(--g-gap-lg);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-form .camp-card-title {
  margin-bottom: 0;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fields,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--g-gap-lg);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-grid--facts {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-field {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: var(--g-pad-xs);
  color: var(--g-text);
  font-size: var(--g-font-size-sm);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-field-label {
  color: var(--g-text-sub);
  font-size: var(--g-font-size-xs);
  font-weight: 700;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-field-hint,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-meta {
  color: var(--g-text-dim);
  font-size: var(--g-font-size-xs);
  line-height: 1.5;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-input, .camp-select, .camp-textarea),
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-field :is(input, select, textarea) {
  width: 100%;
  min-width: 0;
  min-height: var(--g-touch-min);
  box-sizing: border-box;
  padding: var(--g-pad-sm);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  background: var(--g-card);
  color: var(--g-text);
  font: inherit;
  font-size: var(--g-font-size-sm);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-textarea,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-field textarea {
  resize: vertical;
  line-height: 1.6;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-input, .camp-select, .camp-textarea):focus,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-field :is(input, select, textarea):focus {
  border-color: var(--g-accent);
  outline: 2px solid var(--g-accent-light-alpha);
  outline-offset: 0;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--g-gap);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-button,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-actions button {
  min-height: var(--g-touch-min);
  box-sizing: border-box;
  padding: var(--g-pad-sm) var(--g-pad);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  background: var(--g-card);
  color: var(--g-text);
  font-family: inherit;
  font-size: var(--g-font-size-sm);
  font-weight: 700;
  cursor: pointer;
  transition: background var(--g-trans), border-color var(--g-trans);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-button--primary,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-actions button.camp-button--primary {
  border-color: var(--g-accent);
  background: var(--g-accent);
  color: var(--g-card);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-button, .camp-actions button):hover:not(:disabled) {
  border-color: var(--g-accent);
  background: var(--g-card-hover);
  color: var(--g-accent-dark);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-button, .camp-actions button):disabled {
  cursor: not-allowed;
  opacity: 0.55;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-status, .camp-error, .camp-success) {
  box-sizing: border-box;
  padding: var(--g-pad-sm);
  border-radius: var(--g-radius-sm);
  background: var(--g-tint-blue);
  color: var(--g-blue);
  font-size: var(--g-font-size-sm);
  line-height: 1.6;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-status, .camp-error, .camp-success):empty {
  display: none;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-status--warn {
  background: var(--g-tint-warn);
  color: var(--g-warn);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-status--muted {
  background: var(--g-card-hover);
  color: var(--g-text-dim);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-status--ok,
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-success {
  background: var(--g-tint-blue);
  color: var(--g-green);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-error {
  background: var(--g-tint-red);
  color: var(--g-red);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-gate {
  border-color: var(--g-accent-light-alpha);
  background: var(--g-tint-blue);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-money {
  color: var(--g-accent-dark);
  font-size: var(--g-font-size-lg);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fact {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: var(--g-pad-xs);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fact-label {
  color: var(--g-text-dim);
  font-size: var(--g-font-size-xs);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fact-value {
  overflow-wrap: anywhere;
  color: var(--g-text);
  font-size: var(--g-font-size);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fact--warn .camp-fact-value { color: var(--g-warn); }
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fact--ok .camp-fact-value { color: var(--g-green); }
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-timeline {
  display: flex;
  flex-direction: column;
  gap: var(--g-gap);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-timeline-row {
  min-width: 0;
  padding: var(--g-pad-sm);
  border-left: 2px solid var(--g-accent-light-alpha);
  border-radius: var(--g-radius-sm);
  background: var(--g-card);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-timeline-title {
  margin-bottom: var(--g-gap);
  color: var(--g-accent-dark);
  font-size: var(--g-font-size-sm);
  font-weight: 700;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-list-row {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: var(--g-pad-xs);
  padding: var(--g-pad-sm);
  border-radius: var(--g-radius-sm);
  background: var(--g-card);
  overflow-wrap: anywhere;
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-publication {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: var(--g-pad-xs);
}
:is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-empty {
  margin: 0;
  padding: var(--g-pad);
  color: var(--g-text-dim);
  font-size: var(--g-font-size-sm);
  text-align: center;
}
.camp-opening .camp-opening-ceremony { text-align: center; }
.camp-opening .camp-gate-event { overflow-wrap: anywhere; }

@media (min-width: 48rem) {
  :is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-fields,
  :is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  :is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-grid--facts {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (max-width: 30rem) {
  :is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-actions {
    flex-direction: column;
  }
  :is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) :is(.camp-button, .camp-actions button) {
    width: 100%;
  }
  :is(.page-world-terminal, .camp-wizard, .camp-budget, .camp-batch, .camp-meeting, .camp-schedule, .camp-opening) .camp-publication {
    align-items: flex-start;
  }
}
