comparison 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
comparison
equal deleted inserted replaced
271:13d61401c57d 272:41a49c29a28f
1 mjj-composer {
2 --zenbu-composer-action-reserve: calc(
3 var(--zenbu-sys-control-height-sm) + var(--zenbu-sys-space-container)
4 );
5 display: block;
6 min-width: 0;
7 min-height: 0;
8 }
9
10 mjj-composer > form {
11 display: grid;
12 grid-template-columns: minmax(0, 1fr);
13 grid-template-rows: minmax(0, 1fr) auto;
14 gap: var(--zenbu-sys-space-control);
15 height: 100%;
16 min-height: 0;
17 }
18
19 mjj-composer [data-composer-control] {
20 position: relative;
21 grid-column: 1;
22 grid-row: 1;
23 min-width: 0;
24 min-height: 0;
25 }
26
27 mjj-composer [data-composer-control] > zen-field {
28 height: 100%;
29 min-height: 0;
30 }
31
32 mjj-composer [data-composer-label] {
33 position: absolute;
34 width: 1px;
35 height: 1px;
36 margin: -1px;
37 padding: 0;
38 overflow: hidden;
39 clip-path: inset(50%);
40 white-space: nowrap;
41 }
42
43 mjj-composer [data-composer-control] > zen-field:not(
44 [appearance="plain"]
45 ) > textarea {
46 box-sizing: border-box;
47 height: 100%;
48 min-height: var(--zenbu-control-height);
49 padding-inline-end: var(--zenbu-composer-action-reserve);
50 resize: none;
51 }
52
53 mjj-composer [data-composer-actions] {
54 position: absolute;
55 z-index: 1;
56 inset-inline-end: var(--zenbu-sys-padding-sm);
57 inset-block-end: var(--zenbu-sys-padding-sm);
58 display: flex;
59 flex-direction: column;
60 gap: var(--zenbu-sys-space-control);
61 }
62
63 mjj-composer [data-composer-actions] zen-button,
64 mjj-composer [data-composer-actions] button {
65 width: 100%;
66 }
67
68 mjj-composer [data-composer-meta] {
69 grid-column: 1 / -1;
70 grid-row: 2;
71 margin: 0;
72 color: var(--zenbu-sys-color-text-secondary);
73 font-size: var(--zenbu-sys-font-size-xs);
74 }
75
76 mjj-composer [data-composer-meta][hidden],
77 mjj-composer [data-composer-cancel-owner][hidden] {
78 display: none;
79 }
80
81 mjj-composer[compact] {
82 --zenbu-composer-action-size: var(--zenbu-sys-control-height-sm);
83 --zenbu-composer-action-reserve: calc(
84 var(--zenbu-composer-action-size) + var(--zenbu-sys-padding-md)
85 );
86 }
87
88 mjj-composer[compact] > form {
89 gap: var(--zenbu-sys-space-icon-label);
90 }
91
92 mjj-composer[compact] [data-composer-actions] {
93 gap: var(--zenbu-sys-space-icon-label);
94 }
95
96 mjj-composer[compact] [data-composer-actions] zen-button,
97 mjj-composer[compact] [data-composer-actions] button {
98 width: var(--zenbu-composer-action-size);
99 }
100
101 mjj-composer[compact] [data-composer-actions] button {
102 height: var(--zenbu-composer-action-size);
103 min-height: var(--zenbu-composer-action-size);
104 padding: 0;
105 }
106
107 mjj-composer[compact] [data-composer-action-label] {
108 display: none;
109 }