/* Shared BOOM Trainer Portal finish: existing feature markup, one visual contract. */
.portal-stage :where(a, button, input, select, textarea):focus-visible {
  outline: 0;
  box-shadow: var(--focus-ring);
}

.portal-stage :where(button, [role="button"], a.portal-primary-action, .portal-world-action) {
  min-height: var(--touch-target);
}

:where(
  .boom-adventure-card,
  .trainer-utility,
  .dex-entry,
  .inventory-item,
  .progress-support-card,
  .society-operation,
  .society-achievement,
  .activity-pokemon-card,
  .activity-signal-card,
  .portal-estate__frame-shell
) {
  box-shadow: var(--shadow-card);
}

:where(
  .boom-adventure-card,
  .trainer-utility,
  .dex-entry,
  .inventory-item,
  .progress-support-card,
  .society-operation,
  .society-achievement,
  .activity-pokemon-card,
  .activity-signal-card
) {
  transition: transform var(--motion-fast) var(--ease-out), border-color var(--motion-fast), box-shadow var(--motion-fast), background var(--motion-fast);
}

@media (hover: hover) {
  :where(
    .trainer-utility,
    .inventory-item,
    .progress-support-card,
    .society-operation,
    .society-achievement,
    .activity-pokemon-card,
    .activity-signal-card
  ):hover {
    transform: translateY(-2px);
    border-color: color-mix(in srgb, var(--region-accent) 42%, var(--border));
    box-shadow: var(--shadow-float);
  }
}

.portal-stage :where(.portal-link-status, .progress-link-warning, .society-warning, .inventory-link-error, .progress-link-error, .society-link-error) {
  border-radius: var(--radius-md);
  border-inline-start-width: 3px;
}

.portal-stage :where(.portal-empty-message, .inventory-empty, .progress-empty, .society-empty) {
  color: var(--text-secondary);
}

.portal-stage :where(.portal-shiny, .dex-entry__shiny-signal, .activity-status, .portal-estate-visit__resident small) {
  letter-spacing: .1em;
  font-weight: 900;
}

@media (max-width: 767px) {
  .portal-stage :where(.boom-adventure-card, .activity-pokemon-card, .activity-signal-card, .progress-support-card) {
    min-height: 152px;
  }

  .portal-stage :where(.portal-estate, .portal-inventory, .portal-progress, .portal-society) {
    padding-inline: max(.15rem, env(safe-area-inset-left));
  }
}

/* Morning Step 4: one coherent, intent-led Trainer OS navigation. */
@media (min-width: 901px) {
  .portal-shell { grid-template-columns: 220px minmax(0, 1fr); }
  .portal-rail { align-items: stretch; }
  .portal-brand { grid-template-columns: 44px 1fr; gap: .65rem; justify-items: start; padding: 0 1rem; }
  .portal-brand__word { display: grid; }
  .portal-brand__word b { font-size: 1.05rem; letter-spacing: .08em; }
  .portal-brand__word small { color: var(--text-muted); font-size: .55rem; letter-spacing: .13em; }
  #portal-desktop-nav { align-content: start; gap: .25rem; overflow-y: auto; padding: .65rem .55rem; scrollbar-width: thin; }
  #portal-desktop-nav .portal-nav-group { gap: .14rem; }
  #portal-desktop-nav .portal-nav-group + .portal-nav-group { margin-top: .25rem; padding-top: .35rem; }
  #portal-desktop-nav .portal-nav-group h2 { display: block; margin: .18rem .65rem; font-size: .5rem; }
  #portal-desktop-nav .portal-nav-item { min-height: 32px; grid-template-columns: 26px minmax(0, 1fr); place-items: center start; gap: .55rem; padding: .1rem .55rem; border-radius: 10px; }
  #portal-desktop-nav .portal-nav-item i { width: 25px; height: 25px; font-size: .82rem; }
  #portal-desktop-nav .portal-nav-item span { min-width: 0; overflow: hidden; font-size: .68rem; text-overflow: ellipsis; white-space: nowrap; text-transform: none; }
}

.trainer-quick-actions {
  display: grid;
  grid-template-columns: repeat(9, minmax(92px, 1fr));
  gap: .55rem;
  margin: 0 0 1rem;
}
.trainer-quick-actions a {
  min-width: 0;
  min-height: 68px;
  display: flex;
  align-items: center;
  gap: .55rem;
  padding: .65rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: color-mix(in srgb, var(--surface-raised) 88%, var(--region-atmosphere));
  text-decoration: none;
  box-shadow: var(--shadow-card);
}
.trainer-quick-actions i { width: 30px; height: 30px; display: grid; place-items: center; flex: 0 0 30px; border-radius: 50%; background: color-mix(in srgb, var(--region-accent) 13%, transparent); color: var(--region-secondary); font-style: normal; }
.trainer-quick-actions span { min-width: 0; display: grid; }
.trainer-quick-actions b, .trainer-quick-actions small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.trainer-quick-actions b { font-size: .69rem; letter-spacing: .05em; }
.trainer-quick-actions small { margin-top: .15rem; color: var(--text-muted); font-size: .49rem; letter-spacing: .08em; }
@media (max-width: 1500px) { .trainer-quick-actions { grid-template-columns: repeat(5, minmax(110px, 1fr)); } }
@media (max-width: 900px) { .trainer-quick-actions { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .45rem; } .trainer-quick-actions a { min-height: 58px; padding: .5rem; } .trainer-quick-actions small { display: none; } }
@media (max-width: 380px) { .trainer-quick-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

.portal-party { width: min(1320px, 100%); margin: 0 auto; }
.portal-party__hero { display: flex; align-items: end; justify-content: space-between; gap: 1.5rem; padding: clamp(1.25rem, 4vw, 3rem); border: 1px solid var(--border-luminous); border-radius: var(--radius-xl); background: radial-gradient(circle at 86% 20%, color-mix(in srgb, var(--region-accent) 22%, transparent), transparent 32%), linear-gradient(145deg, var(--surface-elevated), var(--surface-inset)); box-shadow: var(--shadow-float); }
.portal-party__hero h1 { margin: .3rem 0 .5rem; font-size: clamp(2rem, 5vw, 4.2rem); line-height: .9; }
.portal-party__hero p { max-width: 58ch; margin: 0; color: var(--text-secondary); }
.portal-party__count { display: grid; flex: 0 0 auto; text-align: right; }
.portal-party__count strong { color: var(--region-secondary); font-size: 3rem; line-height: 1; }
.portal-party__count span { color: var(--text-muted); font-size: .62rem; font-weight: 900; letter-spacing: .14em; }
.portal-party__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .8rem; margin: 1rem 0; padding: 0; list-style: none; }
.portal-party__grid .portal-party-slot { min-height: 240px; aspect-ratio: auto; display: flex; flex-direction: column; justify-content: center; padding: 1rem; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface-raised); }
.portal-party__grid .portal-party-slot img { width: min(130px, 55%); height: 130px; object-fit: contain; }
.portal-party__grid .portal-party-slot > span { display: grid; }
.portal-context-actions { display: flex; flex-wrap: wrap; gap: .65rem; }
.portal-context-actions a { min-height: var(--touch-target); display: inline-flex; align-items: center; gap: 1rem; padding: .7rem 1rem; border: 1px solid var(--border-luminous); border-radius: var(--radius-md); background: var(--surface-inset); text-decoration: none; font-size: .68rem; font-weight: 900; letter-spacing: .08em; }
.portal-context-actions a span { color: var(--region-accent); }
.tower-shell { max-width: 100%; overflow-x: clip; }
.tower-shell :where(.tower-hero, .tower-panel, .tower-zone, .tower-battle, .tower-layout) { min-width: 0; }
.portal-national-v2 { max-width: 100%; overflow-x: clip; }
@media (max-width: 700px) { .portal-party__hero { align-items: start; flex-direction: column; } .portal-party__count { text-align: left; } .portal-party__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .portal-party__grid .portal-party-slot { min-height: 145px; } }
@media (max-width: 430px) { .trainer-hero { min-height: min(680px, calc(100svh - 120px)) !important; } .trainer-hero h1 { max-width: 100%; font-size: clamp(1.75rem, 8.5vw, 2.1rem); line-height: .95; overflow-wrap: anywhere; } }

/* Morning Step 4 course correction: desktop game client shell. */
@media (min-width: 901px) {
  .portal-shell { grid-template: 76px 54px minmax(0, 1fr) / minmax(0, 1fr); }
  .portal-rail { display: none; }
  .portal-topbar { grid-column: 1; grid-row: 1; gap: 1rem; padding-inline: clamp(1rem, 2.2vw, 2.25rem); }
  .portal-stage { grid-column: 1; grid-row: 3; }
  .portal-primary-nav { min-width: 0; display: flex; align-items: stretch; align-self: stretch; justify-content: center; gap: .18rem; }
  .portal-primary-nav__item { min-width: 88px; display: flex; align-items: center; justify-content: center; gap: .45rem; padding: 0 .75rem; border-inline: 1px solid transparent; color: var(--text-muted); text-decoration: none; font-size: .66rem; font-weight: 900; letter-spacing: .09em; }
  .portal-primary-nav__item i { color: var(--region-secondary); font-size: .95rem; font-style: normal; }
  .portal-primary-nav__item:hover, .portal-primary-nav__item[aria-current] { color: var(--text-primary); background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--region-accent) 12%, transparent)); border-inline-color: color-mix(in srgb, var(--region-accent) 16%, transparent); box-shadow: inset 0 -3px var(--region-accent); }
  .portal-command-dock { grid-column: 1; grid-row: 2; position: sticky; top: 0; z-index: var(--layer-hud); min-width: 0; display: flex; align-items: center; justify-content: center; gap: .4rem; padding: .45rem 1rem; border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--surface-inset) 93%, var(--region-atmosphere)); box-shadow: 0 12px 30px rgba(0,0,0,.16); }
  .portal-command-dock__label { margin-right: .35rem; color: var(--text-muted); font-size: .5rem; font-weight: 900; letter-spacing: .14em; }
  .portal-command-dock a { min-height: 36px; display: inline-flex; align-items: center; gap: .42rem; padding: .35rem .75rem; border: 1px solid transparent; border-radius: 10px; color: var(--text-secondary); text-decoration: none; font-size: .66rem; font-weight: 850; }
  .portal-command-dock a i { color: var(--region-secondary); font-style: normal; }
  .portal-command-dock a:hover, .portal-command-dock a[aria-current] { color: #fff; border-color: color-mix(in srgb, var(--region-accent) 34%, transparent); background: color-mix(in srgb, var(--region-accent) 10%, transparent); }
}

.portal-primary-nav, .portal-command-dock { display: none; }
@media (min-width: 901px) { .portal-primary-nav { display: flex; } .portal-command-dock { display: flex; } }
@media (min-width: 901px) and (max-width: 1160px) { .portal-primary-nav__item { min-width: 58px; padding-inline: .45rem; } .portal-primary-nav__item span { display: none; } .portal-command-dock__label { display: none; } .portal-command-dock a { padding-inline: .5rem; } }

.trainer-command { width: min(1680px, 100%); margin: 0 auto; }
.trainer-command__status { display: flex; align-items: center; justify-content: space-between; gap: 1.25rem; margin-bottom: .9rem; padding: .85rem 1rem; border: 1px solid var(--border); border-radius: var(--radius-lg); background: linear-gradient(110deg, color-mix(in srgb, var(--region-atmosphere) 46%, var(--surface-elevated)), var(--surface-inset)); box-shadow: var(--shadow-card); }
.trainer-command__identity { min-width: 0; display: flex; align-items: center; gap: .8rem; }
.trainer-command__avatar { width: 48px; height: 48px; display: grid; place-items: center; flex: 0 0 48px; border: 2px solid var(--region-accent); border-radius: 14px; background: color-mix(in srgb, var(--region-accent) 14%, var(--surface-inset)); color: var(--region-secondary); font-size: 1.25rem; font-weight: 950; box-shadow: 0 0 24px color-mix(in srgb, var(--region-accent) 14%, transparent); }
.trainer-command__identity h1 { max-width: 30vw; margin: .1rem 0; overflow: hidden; font-size: clamp(1.25rem, 2.2vw, 2rem); line-height: 1; text-overflow: ellipsis; white-space: nowrap; }
.trainer-command__identity p { margin: 0; color: var(--text-muted); font-size: .74rem; }
.trainer-command__stats { display: flex; align-items: stretch; gap: .45rem; }
.trainer-command__stats > span { min-width: 80px; display: grid; padding: .48rem .65rem; border-left: 2px solid color-mix(in srgb, var(--region-accent) 38%, var(--border)); background: rgba(255,255,255,.025); }
.trainer-command__stats small { color: var(--text-muted); font-size: .48rem; font-weight: 900; letter-spacing: .12em; }
.trainer-command__stats b { margin-top: .15rem; color: var(--text-primary); font-size: .9rem; }
.trainer-command__grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(360px, .85fr); gap: .9rem; }
.trainer-command__grid > * { border: 1px solid var(--border); border-radius: var(--radius-xl); background: var(--surface-raised); box-shadow: var(--shadow-card); }
.trainer-continue { position: relative; min-height: 330px; display: flex; align-items: center; overflow: hidden; padding: clamp(1.5rem, 4vw, 3.5rem); isolation: isolate; background: radial-gradient(circle at 76% 48%, color-mix(in srgb, var(--region-accent) 38%, transparent), transparent 30%), linear-gradient(135deg, color-mix(in srgb, var(--region-atmosphere) 55%, #07131a), #050b10); text-decoration: none; }
.trainer-continue::after { content: ''; position: absolute; width: 420px; aspect-ratio: 1; right: 5%; border: 1px solid color-mix(in srgb, var(--region-accent) 28%, transparent); border-radius: 50%; box-shadow: 0 0 0 50px rgba(255,255,255,.012), 0 0 0 100px rgba(255,255,255,.008); z-index: -1; }
.trainer-continue h2 { margin: .3rem 0; font-size: clamp(3rem, 6vw, 6rem); line-height: .82; }
.trainer-continue p { color: var(--text-secondary); }
.trainer-continue div > b { display: inline-flex; gap: 1.5rem; margin-top: 1rem; padding: .8rem 1rem; border-radius: 12px; background: var(--region-accent); color: #06120f; font-size: .7rem; letter-spacing: .12em; }
.trainer-continue div > b i { font-style: normal; }
.trainer-continue img { position: absolute; right: 3%; bottom: -10%; width: min(39%, 390px); max-height: 108%; object-fit: contain; filter: drop-shadow(0 30px 26px rgba(0,0,0,.42)); z-index: -1; }
.trainer-party-panel { min-width: 0; padding: 1rem; }
.trainer-party-panel header, .trainer-journey-map header, .trainer-quick-play > header, .trainer-competitive > header { display: flex; align-items: end; justify-content: space-between; gap: .8rem; }
.trainer-party-panel h2, .trainer-journey-map h2, .trainer-quick-play h2, .trainer-competitive h2 { margin: .15rem 0 0; font-size: 1.2rem; }
.trainer-party-panel header a, .trainer-journey-map header a { color: var(--region-secondary); text-decoration: none; font-size: .58rem; font-weight: 900; letter-spacing: .09em; }
.trainer-party-panel ol { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .45rem; margin: .8rem 0 0; padding: 0; list-style: none; }
.trainer-party-panel .portal-party-slot { min-width: 0; min-height: 105px; aspect-ratio: auto; padding: .35rem; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-inset); }
.trainer-party-panel .portal-party-slot img { width: 76px; height: 76px; }
.trainer-party-panel .portal-party-slot > span b { max-width: 90px; overflow: hidden; font-size: .54rem; text-overflow: ellipsis; white-space: nowrap; }
.trainer-quick-play, .trainer-competitive, .trainer-journey-map { padding: 1rem; }
.trainer-quick-play > div, .trainer-competitive > div { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .55rem; margin-top: .8rem; }
.trainer-quick-play a, .trainer-competitive a { min-width: 0; min-height: 82px; display: flex; align-items: center; gap: .65rem; padding: .75rem; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-inset); text-decoration: none; }
.trainer-quick-play a > i, .trainer-competitive a > i { width: 36px; height: 36px; display: grid; place-items: center; flex: 0 0 36px; border-radius: 50%; background: color-mix(in srgb, var(--region-accent) 14%, transparent); color: var(--region-secondary); font-style: normal; }
.trainer-quick-play a span, .trainer-competitive a span { min-width: 0; display: grid; }
.trainer-quick-play a b, .trainer-competitive a b { overflow: hidden; font-size: .65rem; text-overflow: ellipsis; white-space: nowrap; }
.trainer-quick-play a small, .trainer-competitive a small { margin-top: .18rem; overflow: hidden; color: var(--text-muted); font-size: .48rem; letter-spacing: .06em; text-overflow: ellipsis; white-space: nowrap; }
.trainer-quick-play a em { margin-left: auto; color: var(--region-secondary); font-style: normal; }
.trainer-competitive a.has-reward { border-color: color-mix(in srgb, var(--warning) 55%, var(--border)); }
.trainer-journey-map { grid-column: 1 / -1; }
.trainer-journey-map ol { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); margin: 1rem 0 0; padding: 0; list-style: none; }
.trainer-journey-map li { position: relative; display: grid; gap: .22rem; padding: .25rem 1rem; border-top: 2px solid var(--border); }
.trainer-journey-map li i { width: 14px; height: 14px; margin-top: -8px; border: 3px solid var(--surface-raised); border-radius: 50%; background: var(--text-muted); box-shadow: 0 0 0 1px var(--border); }
.trainer-journey-map li.is-unlocked { border-color: color-mix(in srgb, var(--region-accent) 55%, var(--border)); }
.trainer-journey-map li.is-unlocked i { background: var(--region-accent); box-shadow: 0 0 14px color-mix(in srgb, var(--region-accent) 50%, transparent); }
.trainer-journey-map li.is-active b { color: var(--region-secondary); }
.trainer-journey-map li b { font-size: .67rem; letter-spacing: .08em; }
.trainer-journey-map li span { color: var(--text-muted); font-size: .51rem; }

@media (max-width: 1100px) { .trainer-command__stats > span { min-width: 62px; } .trainer-command__grid { grid-template-columns: 1fr; } .trainer-party-panel ol { grid-template-columns: repeat(6, minmax(0, 1fr)); } .trainer-journey-map { grid-column: auto; } }
@media (max-width: 900px) {
  .trainer-command__status { align-items: stretch; flex-direction: column; }
  .trainer-command__identity h1 { max-width: 70vw; }
  .trainer-command__stats { overflow-x: auto; padding-bottom: .2rem; }
  .trainer-command__stats > span { min-width: 74px; }
  .trainer-command__grid { grid-template-columns: 1fr; }
  .trainer-continue { min-height: 250px; padding: 1.25rem; }
  .trainer-continue h2 { font-size: clamp(2.5rem, 14vw, 4rem); }
  .trainer-continue img { right: -4%; width: 50%; opacity: .82; }
  .trainer-party-panel ol { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .trainer-quick-play > div, .trainer-competitive > div { grid-template-columns: 1fr; }
  .trainer-quick-play a, .trainer-competitive a { min-height: 64px; }
  .trainer-journey-map { overflow: hidden; }
  .trainer-journey-map ol { grid-template-columns: repeat(5, 120px); overflow-x: auto; padding-top: .3rem; }
}
