view mrjunejune/src/public/mjj-composer.css @ 272:41a49c29a28f

polish JRPG conversation experience Integrate desktop conversations into the utility panel, simplify the mobile frame, add modal destinations and a reusable Zenbu composer lab, and preserve explicit conversation resume behavior. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Fri, 07 Aug 2026 16:05:29 -0700
parents
children
line wrap: on
line source

mjj-composer {
  --zenbu-composer-action-reserve: calc(
    var(--zenbu-sys-control-height-sm) + var(--zenbu-sys-space-container)
  );
  display: block;
  min-width: 0;
  min-height: 0;
}

mjj-composer > form {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) auto;
  gap: var(--zenbu-sys-space-control);
  height: 100%;
  min-height: 0;
}

mjj-composer [data-composer-control] {
  position: relative;
  grid-column: 1;
  grid-row: 1;
  min-width: 0;
  min-height: 0;
}

mjj-composer [data-composer-control] > zen-field {
  height: 100%;
  min-height: 0;
}

mjj-composer [data-composer-label] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

mjj-composer [data-composer-control] > zen-field:not(
  [appearance="plain"]
) > textarea {
  box-sizing: border-box;
  height: 100%;
  min-height: var(--zenbu-control-height);
  padding-inline-end: var(--zenbu-composer-action-reserve);
  resize: none;
}

mjj-composer [data-composer-actions] {
  position: absolute;
  z-index: 1;
  inset-inline-end: var(--zenbu-sys-padding-sm);
  inset-block-end: var(--zenbu-sys-padding-sm);
  display: flex;
  flex-direction: column;
  gap: var(--zenbu-sys-space-control);
}

mjj-composer [data-composer-actions] zen-button,
mjj-composer [data-composer-actions] button {
  width: 100%;
}

mjj-composer [data-composer-meta] {
  grid-column: 1 / -1;
  grid-row: 2;
  margin: 0;
  color: var(--zenbu-sys-color-text-secondary);
  font-size: var(--zenbu-sys-font-size-xs);
}

mjj-composer [data-composer-meta][hidden],
mjj-composer [data-composer-cancel-owner][hidden] {
  display: none;
}

mjj-composer[compact] {
  --zenbu-composer-action-size: var(--zenbu-sys-control-height-sm);
  --zenbu-composer-action-reserve: calc(
    var(--zenbu-composer-action-size) + var(--zenbu-sys-padding-md)
  );
}

mjj-composer[compact] > form {
  gap: var(--zenbu-sys-space-icon-label);
}

mjj-composer[compact] [data-composer-actions] {
  gap: var(--zenbu-sys-space-icon-label);
}

mjj-composer[compact] [data-composer-actions] zen-button,
mjj-composer[compact] [data-composer-actions] button {
  width: var(--zenbu-composer-action-size);
}

mjj-composer[compact] [data-composer-actions] button {
  height: var(--zenbu-composer-action-size);
  min-height: var(--zenbu-composer-action-size);
  padding: 0;
}

mjj-composer[compact] [data-composer-action-label] {
  display: none;
}