konpeki 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,17 +19,13 @@
19
19
  gap: 10px;
20
20
  padding: 8px 10px;
21
21
  border-bottom: 1px solid var(--ui-border);
22
+ transition: border-bottom-color var(--panel-duration) var(--panel-easing);
22
23
  }
23
24
 
24
25
  .left-collapsed .document-island {
25
26
  border-bottom-color: transparent;
26
27
  }
27
28
 
28
- .left-collapsed .document-title,
29
- .left-collapsed .document-title-error {
30
- visibility: hidden;
31
- }
32
-
33
29
  .document-island img {
34
30
  flex: none;
35
31
  width: 25px;
@@ -77,9 +73,19 @@
77
73
  flex: none;
78
74
  display: inline-flex;
79
75
  align-items: center;
76
+ width: 6px;
80
77
  gap: 5px;
81
78
  color: var(--ui-muted);
82
79
  font-size: 10px;
80
+ transition: opacity var(--panel-duration) var(--panel-easing),
81
+ width var(--panel-duration) var(--panel-easing),
82
+ margin-right var(--panel-duration) var(--panel-easing), visibility 0s;
83
+ }
84
+
85
+ .left-collapsed .file-status {
86
+ width: 0;
87
+ margin-right: -10px;
88
+ transition-delay: 0s, 0s, 0s, var(--panel-duration);
83
89
  }
84
90
 
85
91
  .file-status::before {
@@ -147,23 +153,49 @@
147
153
  min-width: 0;
148
154
  }
149
155
 
156
+ .browser-menu::details-content {
157
+ opacity: 0;
158
+ transition: opacity 120ms ease-in, content-visibility 120ms allow-discrete;
159
+ }
160
+
161
+ .browser-menu[open]::details-content {
162
+ opacity: 1;
163
+ transition: opacity 180ms ease-out, content-visibility 180ms allow-discrete;
164
+ }
165
+
150
166
  .browser-menu > summary {
151
167
  display: flex;
152
168
  align-items: center;
153
169
  justify-content: center;
154
170
  height: 40px;
171
+ gap: 6px;
155
172
  padding: 0 12px;
156
173
  border-radius: 7px;
157
174
  cursor: pointer;
158
175
  font-size: 13px;
159
176
  font-weight: 500;
160
177
  list-style: none;
178
+ white-space: nowrap;
161
179
  }
162
180
 
163
181
  .browser-menu > summary::-webkit-details-marker {
164
182
  display: none;
165
183
  }
166
184
 
185
+ .browser-menu > summary svg {
186
+ width: 14px;
187
+ height: 14px;
188
+ fill: none;
189
+ stroke: currentColor;
190
+ stroke-width: 1.5;
191
+ stroke-linecap: round;
192
+ stroke-linejoin: round;
193
+ }
194
+
195
+ .browser-menu[open] > summary svg {
196
+ transform: rotate(180deg);
197
+ }
198
+
167
199
  .browser-menu > summary:hover,
168
200
  .browser-menu[open] > summary {
169
201
  background: var(--ui-hover);
@@ -171,16 +203,47 @@
171
203
 
172
204
  .browser-menu-popover {
173
205
  position: absolute;
206
+ z-index: 3;
174
207
  bottom: calc(100% + 14px);
175
- left: -95px;
208
+ left: -88px;
176
209
  display: grid;
177
- width: 304px;
178
- gap: 12px;
210
+ width: 320px;
211
+ max-width: calc(100vw - 56px);
212
+ max-height: calc(100dvh - var(--panel-top) - 164px);
213
+ overflow-y: auto;
214
+ overscroll-behavior: contain;
215
+ scrollbar-width: thin;
216
+ scrollbar-color: #d4d4d8 transparent;
217
+ gap: 16px;
179
218
  padding: 16px;
180
219
  border: 1px solid var(--ui-border);
181
220
  border-radius: 12px;
182
221
  background: var(--ui-surface);
183
222
  box-shadow: var(--ui-shadow);
223
+ transform: translateY(6px) scale(0.98);
224
+ transform-origin: bottom center;
225
+ transition: transform 120ms ease-in;
226
+ }
227
+
228
+ .browser-menu[open] .browser-menu-popover {
229
+ transform: none;
230
+ transition: transform 180ms ease-out;
231
+ }
232
+
233
+ @starting-style {
234
+ .browser-menu[open]::details-content {
235
+ opacity: 0;
236
+ }
237
+
238
+ .browser-menu[open] .browser-menu-popover {
239
+ transform: translateY(6px) scale(0.98);
240
+ }
241
+ }
242
+
243
+ .browser-menu-intro,
244
+ .browser-agent-handoff {
245
+ display: grid;
246
+ gap: 6px;
184
247
  }
185
248
 
186
249
  .browser-menu-popover strong {
@@ -188,34 +251,58 @@
188
251
  font-weight: 600;
189
252
  }
190
253
 
254
+ .browser-menu-intro > strong {
255
+ font-size: 14px;
256
+ }
257
+
191
258
  .browser-menu-popover p {
192
259
  color: var(--ui-muted);
193
260
  font-size: 12px;
194
261
  line-height: 1.5;
262
+ overflow-wrap: anywhere;
195
263
  }
196
264
 
197
265
  .browser-menu-actions {
198
266
  display: grid;
199
- grid-template-columns: 1fr 1fr;
267
+ grid-template-columns: repeat(2, minmax(0, 1fr));
200
268
  gap: 6px;
201
269
  }
202
270
 
203
271
  .action-island .browser-menu-actions button {
204
- justify-content: flex-start;
272
+ justify-content: center;
205
273
  min-width: 0;
274
+ min-height: 40px;
275
+ height: auto;
276
+ padding: 8px;
206
277
  border-color: var(--ui-border);
207
278
  background: var(--ui-surface);
208
279
  font-size: 12px;
209
280
  }
210
281
 
282
+ .action-island .browser-menu-actions button.secondary {
283
+ color: var(--ui-muted);
284
+ }
285
+
286
+ .action-island .browser-menu-actions button:hover {
287
+ background: var(--ui-hover);
288
+ color: var(--ui-text);
289
+ }
290
+
211
291
  .browser-agent-handoff {
212
- padding-top: 10px;
213
- border-top: 1px solid var(--ui-border);
292
+ padding: 12px 12px 4px;
293
+ border-radius: 8px;
294
+ background: var(--ui-hover);
214
295
  }
215
296
 
216
297
  .browser-agent-handoff a {
298
+ display: flex;
299
+ align-items: center;
300
+ justify-self: start;
301
+ min-height: 40px;
217
302
  color: var(--accent);
303
+ font-size: 12px;
218
304
  font-weight: 500;
305
+ text-underline-offset: 3px;
219
306
  }
220
307
 
221
308
  .action-island button.primary {
@@ -303,6 +390,10 @@
303
390
  }
304
391
 
305
392
  @media (prefers-reduced-motion: reduce) {
393
+ .browser-menu::details-content {
394
+ transition: none !important;
395
+ }
396
+
306
397
  .build-button.building .build-label,
307
398
  .build-orb.active circle,
308
399
  .build-orb.nebula circle,
@@ -1,42 +1,78 @@
1
- .toast {
1
+ .feedback-notice {
2
2
  position: fixed;
3
- top: 20px;
4
- bottom: auto;
5
3
  left: 50%;
6
- transform: translateX(-50%);
7
- transform-origin: center top;
8
- display: none;
9
- align-items: center;
10
- gap: 12px;
4
+ z-index: 50;
5
+ opacity: 0;
6
+ visibility: hidden;
7
+ pointer-events: none;
8
+ transform: translate(-50%, -3px);
9
+ transition: opacity 120ms ease-in, transform 120ms ease-in,
10
+ visibility 0s 120ms;
11
11
  background: var(--ui-surface);
12
12
  color: var(--ui-text);
13
- border: 1px solid var(--ui-border);
14
- box-shadow: 0 4px 16px #0000000a, 0 1px 3px #00000008;
15
- padding: 10px 14px;
13
+ border: 1px solid transparent;
16
14
  border-radius: 12px;
15
+ box-shadow: var(--ui-floating-shadow);
17
16
  font-size: 13px;
18
17
  line-height: 1.5;
18
+ }
19
+ .feedback-notice.visible {
20
+ opacity: 1;
21
+ visibility: visible;
22
+ pointer-events: auto;
23
+ transform: translate(-50%, 0);
24
+ transition: opacity 180ms ease-out, transform 180ms ease-out,
25
+ visibility 0s;
26
+ }
27
+ @starting-style {
28
+ .feedback-notice.visible {
29
+ opacity: 0;
30
+ transform: translate(-50%, -6px);
31
+ }
32
+ }
33
+ .toast {
34
+ top: 20px;
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 12px;
38
+ padding: 10px 14px;
19
39
  width: max-content;
20
- max-width: min(520px, max(240px, calc(100vw - 744px)), calc(100vw - 40px));
21
- z-index: 50;
40
+ max-width: min(560px, calc(100vw - 40px));
22
41
  }
23
- .toast > span {
42
+ .toast > span,
43
+ .recovery > span,
44
+ .parameter-error {
24
45
  min-width: 0;
25
46
  overflow-wrap: anywhere;
47
+ text-wrap: pretty;
26
48
  }
27
- .toast.visible {
28
- display: flex;
29
- animation: toast-enter 180ms ease-out both;
49
+ .toast > button {
50
+ flex: none;
51
+ min-height: 36px;
52
+ font-size: 12px;
53
+ border: 0;
30
54
  }
31
- .toast.visible.closing {
32
- pointer-events: none;
33
- animation: toast-exit 180ms ease-in both;
55
+ .toast > button,
56
+ .recovery-actions button {
57
+ border-radius: 6px;
58
+ background: transparent;
59
+ }
60
+ .toast > button:hover:not(:disabled),
61
+ .recovery-actions button:hover:not(:disabled) {
62
+ background: var(--ui-hover);
63
+ }
64
+ .toast-dismiss {
65
+ width: 36px;
66
+ padding: 0;
67
+ border: 0;
68
+ background: transparent;
69
+ font-size: 20px !important;
70
+ color: inherit;
34
71
  }
35
72
  .toast.error {
36
- border-color: #e4b5b5;
37
73
  background: #fff7f7;
38
74
  color: #8d1717;
39
- box-shadow: 0 0 0 1px #b13d3d14, 0 4px 16px #5f11110d;
75
+ box-shadow: 0 0 0 1px #b13d3d33, 0 4px 16px #5f11110d;
40
76
  }
41
77
  .toast.error::before {
42
78
  display: grid;
@@ -50,52 +86,51 @@
50
86
  content: "!";
51
87
  font-weight: 600;
52
88
  }
53
- @keyframes toast-enter {
54
- from {
55
- opacity: 0;
56
- transform: translate(-50%, -6px);
57
- }
58
- to {
59
- opacity: 1;
60
- transform: translate(-50%, 0);
61
- }
62
- }
63
- @keyframes toast-exit {
64
- from {
65
- opacity: 1;
66
- transform: translate(-50%, 0);
67
- }
68
- to {
69
- opacity: 0;
70
- transform: translate(-50%, -6px);
71
- }
72
- }
73
89
  .recovery {
74
- position: fixed;
75
90
  bottom: 100px;
76
- left: 50%;
77
- transform: translateX(-50%);
78
- z-index: 50;
79
- display: flex;
80
- justify-content: center;
81
- align-items: center;
91
+ display: grid;
82
92
  gap: 12px;
83
93
  width: max-content;
84
- max-width: min(520px, max(240px, calc(100vw - 744px)), calc(100vw - 40px));
85
- background: var(--ui-surface);
86
- border: 1px solid var(--ui-border);
87
- border-radius: 12px;
88
- box-shadow: var(--ui-shadow);
94
+ max-width: min(420px, calc(100vw - 40px));
89
95
  padding: 12px;
90
- font-size: 13px;
91
- line-height: 1.5;
92
96
  }
93
- .recovery > span {
94
- min-width: 0;
95
- overflow-wrap: anywhere;
97
+ .recovery-actions {
98
+ display: flex;
99
+ flex-wrap: wrap;
100
+ justify-content: flex-end;
101
+ gap: 8px;
96
102
  }
97
- .recovery > button {
98
- flex: none;
103
+ .recovery-actions button {
104
+ min-height: 36px;
105
+ font-size: 12px;
106
+ border: 1px solid var(--ui-border);
107
+ }
108
+ .recovery-actions button:hover:not(:disabled) {
109
+ border-color: var(--ui-control);
110
+ }
111
+ input[aria-invalid="true"] {
112
+ border-color: #b13d3d;
113
+ box-shadow: none;
114
+ }
115
+ input[aria-invalid="true"]:focus-visible {
116
+ outline: 2px solid #b13d3d;
117
+ outline-offset: -1px;
118
+ }
119
+ .parameter-error {
120
+ position: fixed;
121
+ z-index: 60;
122
+ width: 260px;
123
+ padding: 10px 12px;
124
+ border: 1px solid #e4b5b5;
125
+ border-radius: 8px;
126
+ background: #fff7f7;
127
+ color: #8d1717;
128
+ box-shadow: 0 4px 16px #0000000a;
129
+ font-size: 12px;
130
+ line-height: 1.5;
131
+ }
132
+ @media (max-width: 900px) {
133
+ .toast { top: calc(var(--panel-top) + 68px); }
99
134
  }
100
135
  @media (prefers-reduced-motion: reduce) {
101
136
  *,
@@ -37,7 +37,6 @@
37
37
  .revision-note-target > span { color: var(--ui-muted); }
38
38
  .revision-note-list p { font-size: 12px; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; }
39
39
  .revision-note-remove { display: inline-flex; align-items: center; min-height: 40px; border: 0; padding: 6px 0; background: none; color: var(--ui-muted); font-size: 11px; }
40
- .revision-note-error { color: #a02020; font-size: 12px; }
41
40
 
42
41
  .slide-list {
43
42
  flex: 1;
@@ -53,10 +52,14 @@
53
52
  position: relative;
54
53
  }
55
54
 
55
+ .slide-thumbnail-item + .slide-thumbnail-item {
56
+ margin-top: 8px;
57
+ }
58
+
56
59
  .slide-thumbnail {
57
60
  display: grid;
58
61
  width: 100%;
59
- gap: 9px;
62
+ gap: 0;
60
63
  padding: 8px;
61
64
  border-color: transparent;
62
65
  font-size: 12px;
@@ -78,13 +81,17 @@
78
81
  }
79
82
 
80
83
  .slide-thumbnail > span:last-child {
81
- padding-right: 30px;
84
+ display: flex;
85
+ align-items: center;
86
+ min-height: 40px;
87
+ padding-right: 48px;
88
+ overflow-wrap: anywhere;
82
89
  }
83
90
 
84
91
  .remove-slide {
85
92
  position: absolute;
86
- right: 2px;
87
- bottom: 0;
93
+ right: 9px;
94
+ bottom: 9px;
88
95
  width: 40px;
89
96
  height: 40px;
90
97
  padding: 0;
@@ -94,12 +101,26 @@
94
101
  color: var(--ui-muted);
95
102
  }
96
103
 
104
+ .remove-slide::before {
105
+ position: absolute;
106
+ inset: 5px;
107
+ border-radius: 5px;
108
+ background: transparent;
109
+ pointer-events: none;
110
+ transition: background-color 120ms ease-out;
111
+ content: "";
112
+ }
113
+
97
114
  .remove-slide:hover:not(:disabled) {
98
115
  border-color: transparent;
99
- background: #ffe9e9;
116
+ background: transparent;
100
117
  color: #9d2020;
101
118
  }
102
119
 
120
+ .remove-slide:hover:not(:disabled)::before {
121
+ background: #ffe9e9;
122
+ }
123
+
103
124
  .add-slide {
104
125
  display: flex;
105
126
  align-items: center;
@@ -14,8 +14,69 @@
14
14
  margin-bottom: 7px;
15
15
  }
16
16
 
17
- .field-error {
18
- color: #a02020 !important;
17
+ .overflow-trigger {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ gap: 4px;
22
+ width: 48px;
23
+ height: 40px;
24
+ padding: 0;
25
+ color: #8a5409;
26
+ border: 0;
27
+ background: #fff5dd;
28
+ font-size: 12px;
29
+ }
30
+ .overflow-trigger:disabled {
31
+ visibility: hidden;
32
+ }
33
+ .overflow-trigger svg {
34
+ width: 18px;
35
+ height: 18px;
36
+ fill: none;
37
+ stroke: currentColor;
38
+ stroke-width: 1.5;
39
+ stroke-linecap: round;
40
+ stroke-linejoin: round;
41
+ }
42
+ .overflow-popover {
43
+ position: fixed;
44
+ inset: calc(var(--panel-top) + var(--panel-header-height) + 6px) 20px auto auto;
45
+ margin: 0;
46
+ width: min(328px, calc(100vw - 40px));
47
+ max-height: calc(100dvh - var(--panel-top) - 100px);
48
+ overflow: auto;
49
+ padding: 16px;
50
+ border: 1px solid var(--ui-border);
51
+ border-radius: 10px;
52
+ background: var(--ui-surface);
53
+ color: var(--ui-text);
54
+ box-shadow: 0 8px 32px #0000001a;
55
+ font-size: 13px;
56
+ line-height: 1.5;
57
+ }
58
+ .overflow-popover p {
59
+ margin: 8px 0 12px;
60
+ color: var(--ui-muted);
61
+ font-size: 12px;
62
+ }
63
+ .overflow-popover ul {
64
+ list-style: none;
65
+ padding: 0;
66
+ margin: 0;
67
+ }
68
+ .overflow-popover button {
69
+ display: grid;
70
+ gap: 4px;
71
+ width: 100%;
72
+ padding: 10px;
73
+ text-align: left;
74
+ white-space: normal;
75
+ overflow-wrap: anywhere;
76
+ font-size: 12px;
77
+ }
78
+ .overflow-popover li + li {
79
+ margin-top: 8px;
19
80
  }
20
81
 
21
82
  .custom-visual-summary p {
@@ -142,7 +203,7 @@
142
203
  gap: 3px;
143
204
  padding: 3px;
144
205
  background: #f4f4f5;
145
- border-radius: 7px;
206
+ border-radius: 8px;
146
207
  }
147
208
 
148
209
  .segmented-options button {
@@ -245,9 +306,11 @@
245
306
  .layer-list {
246
307
  display: grid;
247
308
  gap: 4px;
309
+ padding-block: 3px;
248
310
  }
249
311
 
250
312
  .layer-row {
313
+ position: relative;
251
314
  display: grid;
252
315
  grid-template-columns: 16px minmax(0, 1fr) auto;
253
316
  align-items: center;
@@ -266,6 +329,26 @@
266
329
  opacity: 0.45;
267
330
  }
268
331
 
332
+ .layer-row[data-drop-edge]::after {
333
+ position: absolute;
334
+ z-index: 1;
335
+ left: -1px;
336
+ right: -1px;
337
+ height: 2px;
338
+ border-radius: 1px;
339
+ background: var(--accent);
340
+ pointer-events: none;
341
+ content: "";
342
+ }
343
+
344
+ .layer-row[data-drop-edge="before"]::after {
345
+ top: -4px;
346
+ }
347
+
348
+ .layer-row[data-drop-edge="after"]::after {
349
+ bottom: -4px;
350
+ }
351
+
269
352
  .layer-drag {
270
353
  color: var(--ui-muted);
271
354
  font-size: 13px;