[data-fui-comp="ui-pane-host"] {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--ui-pane-host-gap, var(--spacing-lg, 24px));
  align-items: start;
  position: relative;
}
[data-fui-comp="ui-pane-host"] .ui-pane-host__pane { min-width: 0; }
/* hidden must win over any pane display rule so a closed pane never
   claims a grid track or paints at first paint. */
[data-fui-comp="ui-pane-host"] [data-fui-pane][hidden] { display: none; }

/* Column count is driven by open-state modifier classes on the root,
   not inline style (strict CSP, Hard Rule 9b). */
[data-fui-comp="ui-pane-host"].ui-pane-host--secondary-open {
  grid-template-columns: minmax(0, 1fr) var(--ui-pane-host-secondary-w, 360px);
}
[data-fui-comp="ui-pane-host"].ui-pane-host--tertiary-open:not(.ui-pane-host--secondary-open) {
  grid-template-columns: minmax(0, 1fr) var(--ui-pane-host-tertiary-w, 300px);
}
[data-fui-comp="ui-pane-host"].ui-pane-host--secondary-open.ui-pane-host--tertiary-open {
  grid-template-columns: minmax(0, 1fr) var(--ui-pane-host-secondary-w, 360px) var(--ui-pane-host-tertiary-w, 300px);
}

[data-fui-comp="ui-pane-host"] .ui-pane-host__pane--secondary,
[data-fui-comp="ui-pane-host"] .ui-pane-host__pane--tertiary {
  background: var(--color-surface, transparent);
  border: 1px solid var(--color-border, rgba(0, 0, 0, 0.10));
  border-radius: var(--radii-md, 8px);
  padding: var(--spacing-md, 16px);
}

/* Narrow viewport: the grid collapses to a single column. An open side
   pane renders as a fixed overlay drawer when the runtime sets
   data-fui-pane-mode="overlay" on the host (it does so once
   matchMedia(max-width: 768px) matches AND a pane is open). The
   breakpoint literal here MUST match the MQ in runtime/src/panehost.js. */
@media (max-width: 768px) {
  [data-fui-comp="ui-pane-host"],
  [data-fui-comp="ui-pane-host"].ui-pane-host--secondary-open,
  [data-fui-comp="ui-pane-host"].ui-pane-host--tertiary-open,
  [data-fui-comp="ui-pane-host"].ui-pane-host--secondary-open.ui-pane-host--tertiary-open {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* Drawer chrome while an open pane is in overlay mode. */
[data-fui-pane-mode="overlay"] [data-fui-pane="secondary"]:not([hidden]),
[data-fui-pane-mode="overlay"] [data-fui-pane="tertiary"]:not([hidden]) {
  position: fixed;
  inset-block: 0;
  inset-inline-end: 0;
  block-size: 100dvh;
  inline-size: min(90vw, var(--ui-pane-host-drawer-w, 420px));
  z-index: var(--z-modal, 300);
  border-radius: 0;
  border-inline-start: 1px solid var(--color-border, rgba(0, 0, 0, 0.10));
  box-shadow: var(--shadow-md, 0 10px 30px rgba(0, 0, 0, 0.18));
  overflow: auto;
}

/* Backdrop scrim while a drawer is open. The host's ::before covers the
   viewport; a click on it lands on the host itself, which the runtime
   treats as a dismiss (backdrop-click closes the topmost pane). It sits
   one step BELOW the drawer's modal tier: on the framework token scale
   --z-popover (400) is ABOVE --z-modal (300), so the scrim must key off
   --z-modal, not --z-popover, or it would paint over the drawer and eat
   every click inside it. */
[data-fui-pane-mode="overlay"]::before {
  content: "";
  position: fixed;
  inset: 0;
  background: var(--ui-pane-host-scrim, rgba(10, 9, 15, 0.42));
  z-index: calc(var(--z-modal, 300) - 1);
}