diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mrjunejune/src/public/mjj-composer.css	Fri Aug 07 16:05:29 2026 -0700
@@ -0,0 +1,109 @@
+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;
+}