view mrjunejune/src/public/mjj-composer.css @ 273:e02e2036ef84 default tip

add Layer 2 JRPG component system Add reusable content and window modals, an isolated component sandbox, shared cyberpunk scroll areas, production-safe cache freshness, and server-rendered JRPG panel state. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Sat, 08 Aug 2026 02:08:08 -0700
parents 41a49c29a28f
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;
}