:root {
  --gm-bg: #0d0b0f;
  --gm-surface: #17131a;
  --gm-surface-2: #211b25;
  --gm-surface-3: #2b2330;
  --gm-line: #44384b;
  --gm-line-soft: #302735;
  --gm-text: #f2edf2;
  --gm-muted: #b9adb9;
  --gm-accent: #c23b44;
  --gm-gold: #d6ab67;
  --gm-good: #66c18c;
  --gm-warn: #dfad5e;
  --gm-danger: #e26969;
  --gm-header-height: 64px;
  --gm-shadow: 0 18px 50px rgba(0, 0, 0, .35);
}

body[data-page="gm-overview"],
body[data-page="gm-character"],
body.gm-session-page {
  margin: 0;
  min-height: 100vh;
  overflow-x: hidden;
  background: radial-gradient(circle at 50% -10%, #2a1b2d 0, transparent 34rem), var(--gm-bg);
  color: var(--gm-text);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

body[data-page^="gm-"] *, body.gm-session-page * { box-sizing: border-box; }
body[data-page^="gm-"] button,
body[data-page^="gm-"] input,
body[data-page^="gm-"] select,
body[data-page^="gm-"] textarea { font: inherit; }

.gm-skip-link {
  position: fixed;
  left: 1rem;
  top: -5rem;
  z-index: 1000;
  padding: .7rem 1rem;
  border-radius: 9px;
  background: #fff;
  color: #111;
}
.gm-skip-link:focus { top: 1rem; }

.gm-app-header,
.gm-session-page .shell-header {
  position: sticky;
  top: 0;
  z-index: 120;
  height: var(--gm-header-height);
  border: 0;
  border-bottom: 1px solid var(--gm-line);
  background: rgba(13, 11, 15, .96);
  backdrop-filter: blur(16px);
}
.gm-header-inner,
.gm-session-page .shell-header .shell-inner {
  width: 100%;
  max-width: 1640px;
  height: 100%;
  margin: 0 auto;
  padding: .45rem 1rem;
  display: grid;
  grid-template-columns: minmax(210px, auto) minmax(0, 1fr) auto;
  align-items: center;
  gap: 1rem;
}
.gm-brand {
  display: flex;
  align-items: center;
  gap: .65rem;
  min-width: 0;
  color: var(--gm-text);
  text-decoration: none;
}
.gm-brand img,
.gm-session-page .sig {
  width: 42px;
  height: 42px;
  flex: 0 0 42px;
  border: 1px solid var(--gm-line);
  border-radius: 12px;
  object-fit: contain;
}
.gm-brand span { display: grid; min-width: 0; }
.gm-brand small,
.gm-session-page .brand .subtitle {
  color: var(--gm-gold);
  font-size: .64rem;
  letter-spacing: .11em;
  text-transform: uppercase;
}
.gm-brand strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-brand .sig { width: 42px; height: 42px; flex: 0 0 42px; display: grid; place-items: center; margin: 0; border: 1px solid var(--gm-line); border-radius: 12px; background: var(--gm-surface-2); color: var(--gm-gold); }
.gm-session-page .brand h1 { margin: 0; font-size: 1rem; line-height: 1.2; }
.gm-session-page .brand h1 .muted { display: none; }
.gm-session-page .brand .subtitle { margin: .1rem 0 0; }
.gm-session-page .shell-header .brand-row { flex-wrap: nowrap; align-items: center; }
.gm-header-nav,
.gm-session-page .shell-header .nav {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: .2rem;
  min-width: 0;
}
.gm-header-nav a,
.gm-session-page .shell-header .nav a {
  width: auto;
  min-height: 40px;
  padding: .55rem .68rem;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--gm-muted);
  font-size: .82rem;
  font-weight: 750;
  text-decoration: none;
}
.gm-header-nav a:hover,
.gm-session-page .shell-header .nav a:hover,
.gm-header-nav a[aria-current="page"],
.gm-session-page .shell-header .nav a[aria-current="page"] {
  color: var(--gm-text);
  background: var(--gm-surface-2);
}
.gm-header-state { display: flex; align-items: center; justify-content: flex-end; gap: .45rem; }
.gm-status { display: inline-flex; align-items: center; gap: .35rem; color: var(--gm-muted); font-size: .72rem; white-space: nowrap; }
.gm-status-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--gm-danger); }
.gm-status-dot.online { background: var(--gm-good); }

.gm-page-shell,
.gm-session-page main.gm-main {
  width: 100%;
  max-width: 1640px;
  margin: 0 auto;
  padding: 1rem 1rem 5rem;
  display: grid;
  gap: .85rem;
}
.gm-campaign-banner,
.gm-session-page .gm-hero {
  border: 1px solid var(--gm-line);
  border-radius: 18px;
  padding: 1rem;
  background: linear-gradient(135deg, rgba(43, 29, 45, .98), rgba(20, 16, 24, .97));
  box-shadow: var(--gm-shadow);
}
.gm-banner-top { display: grid; grid-template-columns: minmax(240px, .8fr) minmax(0, 1.5fr) auto; gap: 1rem; align-items: center; }
.gm-banner-title { min-width: 0; }
.gm-banner-title .eyebrow { margin: 0 0 .15rem; color: var(--gm-gold); font-size: .68rem; letter-spacing: .13em; text-transform: uppercase; font-weight: 850; }
.gm-banner-title h1 { margin: 0; font-size: clamp(1.45rem, 2.3vw, 2.1rem); line-height: 1.1; }
.gm-banner-title p { margin: .25rem 0 0; color: var(--gm-muted); }
.gm-banner-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .45rem; }
.gm-banner-actions a,
.gm-banner-actions button,
.gm-button {
  width: auto;
  min-height: 42px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .35rem;
  margin: 0;
  padding: .55rem .75rem;
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  background: var(--gm-surface-2);
  color: var(--gm-text);
  font-weight: 800;
  text-decoration: none;
  cursor: pointer;
}
.gm-banner-actions .primary,
.gm-button.primary { border-color: #8b3944; background: #5b252b; }
.gm-banner-actions a:hover,
.gm-banner-actions button:hover,
.gm-button:hover { border-color: var(--gm-gold); }
.gm-campaign-field { display: grid; gap: .3rem; }
.gm-campaign-field label { color: var(--gm-muted); font-size: .72rem; font-weight: 800; }
.gm-campaign-field select { width: 100%; min-height: 42px; border: 1px solid var(--gm-line); border-radius: 10px; background: #0d0a0e; color: var(--gm-text); padding: .55rem .7rem; }

.gm-summary-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .55rem; margin-top: .8rem; }
.gm-summary-tile {
  min-height: 68px;
  display: grid;
  align-content: center;
  gap: .12rem;
  padding: .65rem .75rem;
  border: 1px solid var(--gm-line-soft);
  border-radius: 12px;
  background: rgba(9, 8, 11, .34);
}
.gm-summary-tile span { color: var(--gm-muted); font-size: .64rem; text-transform: uppercase; letter-spacing: .08em; }
.gm-summary-tile strong { font-size: 1.05rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.gm-workspace-tabs {
  position: sticky;
  top: var(--gm-header-height);
  z-index: 105;
  display: flex;
  align-items: center;
  gap: .2rem;
  overflow-x: auto;
  scrollbar-width: none;
  padding: .35rem;
  border: 1px solid var(--gm-line);
  border-radius: 13px;
  background: rgba(19, 15, 23, .96);
  backdrop-filter: blur(14px);
}
.gm-workspace-tabs::-webkit-scrollbar { display: none; }
.gm-workspace-tabs button {
  width: auto;
  min-width: max-content;
  min-height: 40px;
  margin: 0;
  padding: .5rem .8rem;
  border: 1px solid transparent;
  border-radius: 9px;
  background: transparent;
  color: var(--gm-muted);
  font-weight: 800;
}
.gm-workspace-tabs button.active,
.gm-workspace-tabs button.is-active { border-color: #66404a; background: #351f26; color: var(--gm-text); }
.gm-workspace-pane, .gm-workspace-panel { min-width: 0; display: grid; gap: .85rem; }
.gm-workspace-pane[hidden], .gm-workspace-panel[hidden] { display: none !important; }
.gm-pane-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .85rem; align-items: start; }
.gm-pane-grid.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gm-pane-grid.aside { grid-template-columns: minmax(270px, .7fr) minmax(0, 1.5fr); }

.gm-card,
.gm-workspace-pane > .panel,
.gm-workspace-pane .panel,
.gm-session-page .gm-roll-shell {
  min-width: 0;
  padding: 1rem;
  border: 1px solid var(--gm-line);
  border-radius: 16px;
  background: rgba(23, 19, 26, .97);
  box-shadow: 0 10px 30px rgba(0, 0, 0, .22);
}
.gm-card h2, .gm-card h3 { margin: 0 0 .25rem; }
.gm-overview-grid, .gm-activity-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .85rem; align-items: start; }
.gm-card-wide { grid-column: 1 / -1; }
.gm-kicker { display: block; margin-bottom: .15rem; color: var(--gm-gold); font-size: .64rem; font-weight: 850; letter-spacing: .1em; text-transform: uppercase; }
.gm-section-heading { display: flex; justify-content: space-between; gap: 1rem; align-items: end; }
.gm-section-heading h2 { margin: 0; }
.gm-section-heading p { margin: .25rem 0 0; color: var(--gm-muted); }
.gm-text-link, .gm-link-button { width: auto; margin: 0; padding: .3rem .45rem; border: 0; background: transparent; color: var(--gm-gold); text-decoration: none; font-weight: 800; cursor: pointer; }
.gm-card-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: .75rem; margin-bottom: .75rem; }
.gm-card-heading p { margin: .2rem 0 0; color: var(--gm-muted); font-size: .84rem; }
.gm-empty { padding: 1rem; border: 1px dashed var(--gm-line); border-radius: 12px; color: var(--gm-muted); text-align: center; }
.gm-pill-row { display: flex; flex-wrap: wrap; gap: .3rem; }
.gm-pill {
  display: inline-flex;
  align-items: center;
  gap: .25rem;
  min-height: 26px;
  padding: .18rem .5rem;
  border: 1px solid var(--gm-line);
  border-radius: 999px;
  color: var(--gm-muted);
  font-size: .72rem;
}
.gm-pill.good { border-color: #356c4c; color: #94dfb2; }
.gm-pill.warn { border-color: #765426; color: #f0c67f; }
.gm-pill.danger { border-color: #7b343c; color: #ffb8bf; }

.gm-log { display: grid; gap: .4rem; max-height: 520px; overflow: auto; }
.gm-log-entry { padding: .65rem .7rem; border: 1px solid var(--gm-line-soft); border-radius: 11px; background: rgba(0, 0, 0, .14); }
.gm-log-entry header { display: flex; justify-content: space-between; gap: .5rem; }
.gm-log-entry p { margin: .3rem 0 0; overflow-wrap: anywhere; }
.gm-log-entry small { color: var(--gm-muted); }

.gm-party-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: .7rem; }
.gm-party-card { min-width: 0; display: grid; gap: .65rem; padding: .85rem; border: 1px solid var(--gm-line); border-radius: 14px; background: rgba(17, 14, 20, .92); }
.gm-party-card header { display: flex; justify-content: space-between; align-items: flex-start; gap: .65rem; }
.gm-party-card h3 { margin: 0; }
.gm-party-card p { margin: .15rem 0 0; color: var(--gm-muted); font-size: .8rem; }
.gm-party-vitals { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .35rem; }
.gm-party-vitals div { min-width: 0; padding: .45rem; border: 1px solid var(--gm-line-soft); border-radius: 9px; background: rgba(0, 0, 0, .15); text-align: center; }
.gm-party-vitals span { display: block; color: var(--gm-muted); font-size: .58rem; text-transform: uppercase; }
.gm-party-vitals strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-party-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .4rem; }
.gm-party-actions a, .gm-party-actions button { width: 100%; min-height: 40px; display: flex; justify-content: center; align-items: center; border: 1px solid var(--gm-line); border-radius: 9px; background: var(--gm-surface-2); color: var(--gm-text); text-decoration: none; font-weight: 800; }

.gm-invite-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: .7rem; }
.gm-form-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .65rem; align-items: end; }
.gm-form-grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.gm-form-grid label { display: grid; gap: .3rem; color: var(--gm-muted); font-size: .75rem; }
.gm-form-grid input, .gm-form-grid select, .gm-form-grid textarea { width: 100%; min-width: 0; border: 1px solid var(--gm-line); border-radius: 10px; background: #0d0a0e; color: var(--gm-text); padding: .65rem .7rem; }

/* The existing live-session controls are re-parented into focused tab panes. */
.gm-session-page .gm-main { max-width: 1640px !important; }
.gm-session-page .gm-hero { padding: 1rem; }
.gm-session-page .gm-hero .panel-head { margin-bottom: .5rem; }
.gm-session-page .gm-hero h2 { font-size: 1.35rem; }
.gm-session-page .gm-hero .panel-subtitle { font-size: .82rem; }
.gm-session-page .gm-legacy-layout-empty { display: none; }
.gm-session-page .gm-workspace-pane .gm-notes-grid { display: contents; }
.gm-session-page .gm-workspace-pane .gm-content,
.gm-session-page .gm-workspace-pane .gm-sidebar { display: contents; }
.gm-session-page .gm-workspace-pane .gm-roll-shell { margin: 0; }
.gm-session-page .gm-workspace-pane .party-stack { grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); }
.gm-session-page .gm-character-card { padding: .85rem; }
.gm-session-page .gm-character-head { margin: 0; }
.gm-session-page details.gm-character-controls { margin-top: .65rem; border-top: 1px solid var(--gm-line-soft); }
.gm-session-page details.gm-character-controls > summary { cursor: pointer; padding: .7rem 0 .1rem; color: var(--gm-gold); font-weight: 850; }
.gm-session-page details.gm-character-controls[open] > summary { margin-bottom: .7rem; }
.gm-session-page .gm-character-layout { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.gm-session-page .gm-sheet-link { display: inline-flex; align-items: center; justify-content: center; min-height: 34px; padding: .35rem .55rem; border: 1px solid var(--gm-line); border-radius: 8px; background: var(--gm-surface-2); color: var(--gm-text); text-decoration: none; font-size: .76rem; font-weight: 800; }
.gm-session-page .initiative-row { grid-template-columns: 38px minmax(180px, 1fr) 76px 76px 76px; }
.gm-session-page .initiative-list { max-height: none; }
.gm-session-page .gm-mobile-tabs { display: none; }

/* Read-only GM character sheet. */
.gm-character-banner { display: grid; grid-template-columns: auto minmax(0, 1fr) minmax(340px, auto); gap: 1rem; align-items: center; padding: 1rem; border-bottom: 1px solid var(--gm-line); background: linear-gradient(135deg, #2a1c2c, #171219); }
.gm-character-portrait { width: 76px; height: 76px; display: grid; place-items: center; border: 2px solid var(--gm-line); border-radius: 18px; background: var(--gm-surface-2); color: var(--gm-gold); font-size: 1.35rem; font-weight: 900; }
.gm-character-identity h1 { margin: 0; font-size: clamp(1.6rem, 3vw, 2.4rem); }
.gm-character-identity p { margin: .25rem 0; color: var(--gm-muted); }
.gm-character-banner-stats { display: grid; grid-template-columns: repeat(4, minmax(76px, 1fr)); gap: .4rem; }
.gm-character-banner-stats div { min-height: 58px; display: grid; place-content: center; text-align: center; border: 1px solid var(--gm-line); border-radius: 10px; background: rgba(0, 0, 0, .17); }
.gm-character-banner-stats span { color: var(--gm-muted); font-size: .58rem; text-transform: uppercase; }
.gm-character-banner-stats strong { font-size: 1.05rem; }
.gm-character-layout { display: grid; grid-template-columns: 230px minmax(420px, 1fr) 280px; gap: .8rem; align-items: start; }
.gm-character-rail { display: grid; gap: .7rem; position: sticky; top: calc(var(--gm-header-height) + 60px); max-height: calc(100vh - var(--gm-header-height) - 78px); overflow: auto; }
.gm-character-main { min-width: 0; }
.gm-ability-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .35rem; }
.gm-ability { min-width: 0; padding: .5rem .35rem; border: 1px solid var(--gm-line-soft); border-radius: 10px; text-align: center; background: rgba(0, 0, 0, .14); }
.gm-ability:is(button), .gm-roll-row { width: 100%; color: inherit; font: inherit; cursor: pointer; }
.gm-ability:is(button):hover, .gm-roll-row:hover { border-color: var(--gm-gold); background: rgba(216, 174, 91, .08); }
.gm-ability span { display: block; color: var(--gm-muted); font-size: .62rem; }
.gm-ability strong { display: block; font-size: 1.15rem; }
.gm-ability small { color: var(--gm-gold); }
.gm-compact-list { display: grid; gap: .2rem; }
.gm-compact-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .4rem; padding: .32rem .2rem; border-bottom: 1px solid var(--gm-line-soft); font-size: .76rem; }
.gm-roll-row { border: 0; border-bottom: 1px solid var(--gm-line-soft); background: transparent; text-align: left; }
.gm-compact-row span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--gm-muted); }
.gm-compact-row strong { color: var(--gm-text); }
.gm-reader-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: .65rem; }
.gm-reader-card { min-width: 0; padding: .75rem; border: 1px solid var(--gm-line-soft); border-radius: 12px; background: rgba(0, 0, 0, .14); overflow-wrap: anywhere; }
.gm-reader-card h3 { margin: 0 0 .3rem; font-size: .95rem; }
.gm-reader-card p { margin: .25rem 0; color: var(--gm-muted); font-size: .78rem; white-space: pre-wrap; }
.gm-reader-section { display: grid; gap: .7rem; }
.gm-reader-section > .gm-card { padding: 1rem; }
.gm-vital-panel { display: grid; gap: .6rem; }
.gm-hp-readout { display: grid; grid-template-columns: 1fr auto; align-items: end; gap: .5rem; }
.gm-hp-readout strong { font-size: 1.8rem; }
.gm-hp-bar { height: 8px; overflow: hidden; border-radius: 999px; background: #0a080b; }
.gm-hp-bar span { display: block; height: 100%; background: linear-gradient(90deg, #7e2933, #c04450); }
.gm-prewrap { white-space: pre-wrap; overflow-wrap: anywhere; }

.gm-mobile-tabs { display: none; }
.gm-message { margin: 0; padding: .65rem .8rem; border: 1px solid var(--gm-line); border-radius: 11px; color: var(--gm-muted); background: rgba(0, 0, 0, .16); }
.gm-message.good { border-color: #356c4c; color: #9ae3b7; }
.gm-message.error { border-color: #7b343c; color: #ffb8bf; }

@media (max-width: 1180px) {
  .gm-header-inner, .gm-session-page .shell-header .shell-inner { grid-template-columns: minmax(190px, auto) minmax(0, 1fr); }
  .gm-header-state { display: none; }
  .gm-banner-top { grid-template-columns: minmax(220px, .8fr) minmax(0, 1.4fr); }
  .gm-banner-actions { grid-column: 1 / -1; justify-content: flex-start; }
  .gm-pane-grid.three { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gm-character-layout { grid-template-columns: 210px minmax(0, 1fr); }
  .gm-character-layout > .gm-character-rail:last-child { grid-column: 1 / -1; position: static; max-height: none; grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gm-session-page .gm-character-layout { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 900px) {
  :root { --gm-header-height: 58px; }
  .gm-header-inner, .gm-session-page .shell-header .shell-inner { padding: .4rem .65rem; }
  .gm-header-nav, .gm-session-page .shell-header .nav { justify-content: flex-end; overflow-x: auto; }
  .gm-header-nav a, .gm-session-page .shell-header .nav a { font-size: .75rem; padding-inline: .5rem; }
  .gm-page-shell, .gm-session-page main.gm-main { padding: .65rem .65rem calc(84px + env(safe-area-inset-bottom)); }
  .gm-banner-top { grid-template-columns: minmax(0, 1fr); }
  .gm-banner-actions { grid-column: auto; }
  .gm-summary-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gm-pane-grid, .gm-pane-grid.three, .gm-pane-grid.aside { grid-template-columns: minmax(0, 1fr); }
  .gm-form-grid, .gm-form-grid.two { grid-template-columns: minmax(0, 1fr); }
  .gm-workspace-tabs { display: none; }
  .gm-mobile-tabs {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 210;
    display: grid;
    grid-template-columns: repeat(var(--gm-mobile-tab-count, 4), minmax(0, 1fr));
    gap: .15rem;
    padding: .3rem .3rem calc(.3rem + env(safe-area-inset-bottom));
    border-top: 1px solid var(--gm-line);
    background: rgba(13, 11, 15, .97);
    backdrop-filter: blur(16px);
  }
  .gm-mobile-tabs button {
    min-width: 0;
    min-height: 52px;
    margin: 0;
    padding: .25rem;
    border: 0;
    border-radius: 8px;
    background: transparent;
    color: var(--gm-muted);
    display: grid;
    place-items: center;
    gap: .1rem;
    font-size: .68rem;
  }
  .gm-mobile-tabs button.active, .gm-mobile-tabs button.is-active { color: var(--gm-text); background: var(--gm-surface-2); }
  .gm-character-banner { grid-template-columns: auto minmax(0, 1fr); padding: .75rem; }
  .gm-character-portrait { width: 58px; height: 58px; border-radius: 14px; }
  .gm-character-banner-stats { grid-column: 1 / -1; grid-template-columns: repeat(4, minmax(78px, 1fr)); overflow-x: auto; }
  .gm-character-layout { display: block; }
  .gm-character-rail { display: none; }
  .gm-party-grid { grid-template-columns: minmax(0, 1fr); }
  .gm-overview-grid, .gm-activity-grid { grid-template-columns: minmax(0, 1fr); }
  .gm-card-wide { grid-column: auto; }
  .gm-session-page .gm-workspace-pane .party-stack { grid-template-columns: minmax(0, 1fr); }
  .gm-session-page .control-grid, .gm-session-page .scene-meta-grid { grid-template-columns: minmax(0, 1fr); }
  .gm-session-page .dice-fab { bottom: calc(78px + env(safe-area-inset-bottom)); }
}

@media (max-width: 620px) {
  .gm-app-header, .gm-session-page .shell-header { height: auto; min-height: var(--gm-header-height); }
  .gm-header-inner, .gm-session-page .shell-header .shell-inner { grid-template-columns: minmax(0, 1fr); height: auto; }
  .gm-header-nav, .gm-session-page .shell-header .nav { display: none; }
  .gm-session-page .shell-header .brand-row { flex-wrap: wrap; }
  .gm-session-page .nav-toggle { margin-left: auto; }
  .gm-party-vitals { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gm-party-actions { grid-template-columns: minmax(0, 1fr); }
  .gm-character-banner-stats { grid-template-columns: repeat(4, minmax(84px, 1fr)); }
  .gm-ability-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gm-session-page .initiative-row { grid-template-columns: 38px minmax(0, 1fr); }
  .gm-session-page .initiative-meta, .gm-session-page .initiative-flags { grid-column: 2; grid-template-columns: minmax(0, 1fr); }
  body[data-page^="gm-"] input:not([type="checkbox"]):not([type="radio"]),
  body[data-page^="gm-"] select,
  body[data-page^="gm-"] textarea,
  body.gm-session-page input:not([type="checkbox"]):not([type="radio"]),
  body.gm-session-page select,
  body.gm-session-page textarea { font-size: 16px; }
}

@media print {
  .gm-app-header, .gm-session-page .shell-header, .gm-workspace-tabs, .gm-mobile-tabs, .gm-banner-actions, .dice-fab { display: none !important; }
  body[data-page^="gm-"], body.gm-session-page { background: #fff; color: #111; }
  .gm-page-shell, .gm-session-page main.gm-main { max-width: none; padding: 0; }
  .gm-card, .gm-campaign-banner, .gm-character-banner, .gm-workspace-pane > .panel { box-shadow: none; background: #fff; color: #111; border-color: #aaa; }
}

/* B.2.M.20 Character portraits */
.gm-character-portrait.has-image{background-size:cover;background-position:center;color:transparent}

.gm-party-identity{display:flex;align-items:center;gap:.65rem;min-width:0}.gm-party-portrait{width:48px;height:48px;flex:0 0 48px;border-radius:12px;object-fit:cover;border:1px solid var(--gm-line)}
