/* target-layout shell rebuild.
   Hand-authored from a historical reference implementation extract; do not paste
   reference implementation compiled CSS or brand assets here. */

:root {
  /* Agents layout-shell locals only. The color-system tokens this shell once
     referenced (--color-bg-container / --color-border-tertiary /
     --color-text-quaternary) were consolidated into maka-tokens.css alongside
     the --background family they alias; the dead --color-* / --color-fill-* /
     settings-nav strata were removed (Round C, zero consumers). See the token
     README at the top of maka-tokens.css. */

  /* Flat neutral shell/backplate. This must never be a gradient; the
     white content surface reads through radius + shadow on top. */
  --agents-layout-bg: var(--surface-canvas);
  /* Visual System 2.0 (T2): the three floating plates (.mainColumn,
     .maka-session-workbar, .settingsMainPane) all read this one handle, so
     pointing it at the ladder's `raised` tier is what "the plates are raised"
     means in one edit rather than three. It used to route through
     `--color-bg-container`, whose darwin-dark override lifted the card a
     hand-rolled +0.035L: measured L 0.240 against a `--surface-overlay` of
     0.223, i.e. the content plate outranked the tier that floats ABOVE it and
     the ladder was non-monotonic at the top. See maka-tokens.css for why that
     lift is gone rather than retuned. */
  --agents-content-area-bg: var(--surface-raised);
  /* reference layout-derived values (2026-06-20 WAWQAQ ef6b2852).
     The original 8px/12px we shipped at 7013f0f read too loose vs the
     real bundle's 4px gap + 6px radius.
     PR-CHAT-CHROME-FIX-1 (WAWQAQ msg `4a1b8c13`): bumped radius
     6 → 12 so the floating surface's bottom corners actually read.
     6px was geometrically present but optically invisible against a
     same-color shell. */
  --agents-content-area-gap: 4px;
}

[data-agents-page] {
  --sidebar-width: 240px;
  position: relative;
}

.agents-layout-root {
  height: 100dvh;
  background: var(--agents-layout-bg);
}

.agents-layout-body {
  min-height: 0;
}

/* Justified: the Agents shell reuses shared sidebar/session-panel primitives,
   but this surface must read as a transparent rail. Keep these `!important`
   resets until the primitive chrome is split from layout. */
.agents-sidebar {
  background: transparent !important;
  contain: layout paint style;
  flex-shrink: 0;
}

.agents-sidebar[data-resizing="true"] {
  box-shadow: none !important;
}

.agents-layout-root aside[data-settings-nav-column].agents-sidebar > div {
  background: transparent;
}

.maka-session-panel.agents-sidebar {
  background: transparent !important;
  contain: layout paint style;
}

/* `.agents-parchment-paper-surface` is reused by the composer body. The bare
   class drops its border; Astryx ChatComposer owns composer chrome. */
.agents-parchment-paper-surface {
  border: 0;
  background-color: var(--agents-content-area-bg);
  box-shadow: none;
}

.agents-chat-panel {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
}

.agents-chat-view-root {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
}
