@agenticmail/api 0.7.7 → 0.7.9

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.
@@ -0,0 +1,597 @@
1
+ /* ─── Brand & palette ─────────────────────────────────────────────── */
2
+ :root {
3
+ --pink: #ec4899;
4
+ --pink-soft: #fdf2f8;
5
+ --pink-rule: #fbcfe8;
6
+ --ink: #202124;
7
+ --ink-soft: #3c4043;
8
+ --muted: #5f6368;
9
+ --line: #e8eaed;
10
+ --bg: #ffffff;
11
+ --bg-soft: #f8fafd; /* Gmail-style soft sidebar bg */
12
+ --bg-hover: #f1f3f4;
13
+ --bg-selected: #fce4ec; /* light pink for selected folder */
14
+ --bg-row-hover: #f5f5f5;
15
+ --accent-strong: #be185d;
16
+ --code-bg: #f1f3f4;
17
+ --code-fg: #c5221f;
18
+ --unread-bold: #202124;
19
+ --read-text: #5f6368;
20
+ }
21
+ @media (prefers-color-scheme: dark) {
22
+ :root {
23
+ --pink-soft: #2a1726;
24
+ --pink-rule: #5b1d44;
25
+ --ink: #e8eaed;
26
+ --ink-soft: #c4c7c5;
27
+ --muted: #9aa0a6;
28
+ --line: #3c4043;
29
+ --bg: #1f1f1f;
30
+ --bg-soft: #2a2a2c;
31
+ --bg-hover: #3c4043;
32
+ --bg-selected: #3a1f30;
33
+ --bg-row-hover: #303030;
34
+ --accent-strong: #f9a8d4;
35
+ --code-bg: #2a2a2c;
36
+ --code-fg: #fb7185;
37
+ --unread-bold: #e8eaed;
38
+ --read-text: #9aa0a6;
39
+ }
40
+ }
41
+
42
+ /* ─── Icons ────────────────────────────────────────────────────────── */
43
+ /* Inline SVGs from js/icons.js. Inherit colour from the parent so a
44
+ single palette token (e.g. --ink-soft, --pink) drives every glyph. */
45
+ .icon-svg { display: inline-block; vertical-align: middle; flex-shrink: 0; }
46
+ [data-icon] { display: inline-flex; align-items: center; justify-content: center; }
47
+
48
+ * { box-sizing: border-box; }
49
+ html, body { height: 100%; margin: 0; }
50
+ body {
51
+ font: 14px/1.5 'Google Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, system-ui, sans-serif;
52
+ color: var(--ink);
53
+ background: var(--bg-soft);
54
+ overflow: hidden;
55
+ }
56
+ button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; }
57
+ a { color: var(--accent-strong); }
58
+ .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
59
+
60
+ /* ─── App shell ─────────────────────────────────────────────────────── */
61
+ .app {
62
+ display: grid;
63
+ grid-template-rows: 64px 1fr;
64
+ height: 100vh;
65
+ }
66
+
67
+ /* ─── Top bar ──────────────────────────────────────────────────────── */
68
+ .topbar {
69
+ display: flex; align-items: center; gap: 8px;
70
+ padding: 8px 16px;
71
+ background: var(--bg-soft);
72
+ position: relative; z-index: 10;
73
+ }
74
+ .menu-btn {
75
+ width: 40px; height: 40px; border-radius: 50%;
76
+ display: flex; align-items: center; justify-content: center;
77
+ color: var(--ink-soft); font-size: 20px;
78
+ }
79
+ .menu-btn:hover { background: var(--bg-hover); }
80
+ .brand {
81
+ display: flex; align-items: center; gap: 8px;
82
+ padding: 0 8px; min-width: 200px;
83
+ }
84
+ .brand-bow { font-size: 28px; line-height: 1; }
85
+ .brand-name {
86
+ font: 500 22px/1 'Google Sans', sans-serif;
87
+ color: var(--pink);
88
+ }
89
+
90
+ .search-container {
91
+ flex: 1; max-width: 720px;
92
+ position: relative;
93
+ }
94
+ .search-input {
95
+ width: 100%; height: 48px;
96
+ padding: 0 48px 0 48px;
97
+ border: none; border-radius: 8px;
98
+ background: var(--bg-hover);
99
+ color: var(--ink); font-size: 16px;
100
+ outline: none; transition: background .15s, box-shadow .15s;
101
+ }
102
+ .search-input:focus, .search-input:hover {
103
+ background: var(--bg);
104
+ box-shadow: 0 1px 3px rgba(0,0,0,.1);
105
+ }
106
+ .search-icon {
107
+ position: absolute; left: 14px; top: 50%;
108
+ transform: translateY(-50%); font-size: 18px;
109
+ color: var(--muted); pointer-events: none;
110
+ }
111
+ .search-clear-btn {
112
+ position: absolute; right: 8px; top: 50%;
113
+ transform: translateY(-50%);
114
+ width: 32px; height: 32px; border-radius: 50%;
115
+ display: none; align-items: center; justify-content: center;
116
+ color: var(--muted);
117
+ }
118
+ .search-clear-btn.show { display: flex; }
119
+ .search-clear-btn:hover { background: var(--bg-hover); color: var(--ink); }
120
+ .search-hint {
121
+ position: absolute; right: 50px; top: 50%;
122
+ transform: translateY(-50%);
123
+ font-size: 12px; color: var(--muted); pointer-events: none;
124
+ display: none;
125
+ }
126
+ .search-hint.show { display: block; }
127
+
128
+ .topbar-spacer { flex: 1; }
129
+ .icon-btn {
130
+ width: 40px; height: 40px; border-radius: 50%;
131
+ display: flex; align-items: center; justify-content: center;
132
+ color: var(--ink-soft); font-size: 18px;
133
+ }
134
+ .icon-btn:hover { background: var(--bg-hover); }
135
+
136
+ /* ─── Profile (top right) ─────────────────────────────────────────── */
137
+ .profile-trigger {
138
+ width: 40px; height: 40px; border-radius: 50%;
139
+ display: flex; align-items: center; justify-content: center;
140
+ cursor: pointer;
141
+ border: 2px solid transparent;
142
+ transition: border-color .15s;
143
+ }
144
+ .profile-trigger:hover { border-color: var(--line); }
145
+
146
+ .profile-menu {
147
+ position: absolute; top: 56px; right: 16px;
148
+ width: 360px; max-height: 80vh; overflow-y: auto;
149
+ background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
150
+ box-shadow: 0 8px 32px rgba(0,0,0,0.15);
151
+ padding: 12px 0; z-index: 25;
152
+ display: none;
153
+ }
154
+ .profile-menu.open { display: block; }
155
+ .profile-menu-section {
156
+ padding: 8px 20px 6px; font-size: 11px; font-weight: 600;
157
+ color: var(--muted); text-transform: uppercase; letter-spacing: .06em;
158
+ }
159
+ .profile-menu-item {
160
+ display: flex; align-items: center; gap: 12px;
161
+ padding: 10px 20px; cursor: pointer;
162
+ color: var(--ink);
163
+ }
164
+ .profile-menu-item:hover { background: var(--bg-hover); }
165
+ .profile-menu-item .meta { flex: 1; min-width: 0; }
166
+ .profile-menu-item .name {
167
+ font-weight: 500; font-size: 14px;
168
+ display: flex; align-items: center; gap: 6px;
169
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
170
+ }
171
+ .profile-menu-item .email {
172
+ font-size: 12px; color: var(--muted);
173
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
174
+ }
175
+ .profile-menu-item .selected-check {
176
+ color: var(--pink); font-size: 20px; font-weight: 700;
177
+ margin-left: 4px;
178
+ }
179
+ .profile-menu-divider { height: 1px; background: var(--line); margin: 8px 0; }
180
+ .profile-menu-footer {
181
+ padding: 12px 20px; font-size: 13px; color: var(--muted);
182
+ display: flex; gap: 12px;
183
+ }
184
+ .profile-menu-footer a {
185
+ color: var(--accent-strong); cursor: pointer; text-decoration: none;
186
+ }
187
+ .profile-menu-footer a:hover { text-decoration: underline; }
188
+
189
+ /* ─── Avatars ──────────────────────────────────────────────────────── */
190
+ .avatar {
191
+ width: 32px; height: 32px; border-radius: 50%;
192
+ display: flex; align-items: center; justify-content: center;
193
+ font-size: 14px; font-weight: 500; color: white;
194
+ flex-shrink: 0; position: relative;
195
+ }
196
+ .avatar-sm { width: 24px; height: 24px; font-size: 11px; }
197
+ .avatar-md { width: 40px; height: 40px; font-size: 16px; }
198
+ .avatar-lg { width: 48px; height: 48px; font-size: 20px; }
199
+ .avatar-host { background: #fce8e0; color: #cc785c; }
200
+ @media (prefers-color-scheme: dark) { .avatar-host { background: #2a1810; } }
201
+ .avatar svg { width: 60%; height: 60%; }
202
+ .avatar-check {
203
+ position: absolute; bottom: -2px; right: -2px;
204
+ width: 14px; height: 14px; border-radius: 50%;
205
+ background: #22c55e; color: white;
206
+ display: flex; align-items: center; justify-content: center;
207
+ font-size: 9px; font-weight: 700;
208
+ border: 2px solid var(--bg);
209
+ }
210
+
211
+ .role-badge {
212
+ font-size: 10px; font-weight: 600;
213
+ padding: 2px 7px; border-radius: 10px;
214
+ text-transform: uppercase; letter-spacing: .04em;
215
+ flex-shrink: 0;
216
+ }
217
+ .role-badge-host { background: #fef3c7; color: #92400e; }
218
+ .role-badge-sub { background: var(--pink-soft); color: var(--accent-strong); }
219
+ @media (prefers-color-scheme: dark) {
220
+ .role-badge-host { background: #44290c; color: #fcd34d; }
221
+ }
222
+
223
+ /* ─── Main grid: sidebar + content ──────────────────────────────── */
224
+ .main {
225
+ display: grid;
226
+ grid-template-columns: 256px 1fr;
227
+ overflow: hidden;
228
+ background: var(--bg-soft);
229
+ }
230
+ @media (max-width: 800px) {
231
+ .main { grid-template-columns: 72px 1fr; }
232
+ .sidebar-label { display: none; }
233
+ .compose-text { display: none; }
234
+ .compose-btn { justify-content: center; padding: 0; width: 56px; }
235
+ }
236
+
237
+ /* ─── Sidebar ──────────────────────────────────────────────────────── */
238
+ .sidebar {
239
+ padding: 8px 8px 16px 8px;
240
+ overflow-y: auto;
241
+ }
242
+ .compose-btn {
243
+ display: inline-flex; align-items: center; gap: 12px;
244
+ height: 56px; padding: 0 24px 0 16px;
245
+ margin-bottom: 16px;
246
+ background: var(--pink); color: white;
247
+ border-radius: 16px;
248
+ font: 500 14px/1 'Google Sans', sans-serif;
249
+ box-shadow: 0 1px 3px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.06);
250
+ transition: box-shadow .15s, background .15s;
251
+ }
252
+ .compose-btn:hover {
253
+ box-shadow: 0 2px 6px rgba(0,0,0,.15), 0 2px 4px rgba(0,0,0,.08);
254
+ background: var(--accent-strong);
255
+ }
256
+ .compose-btn .compose-icon { font-size: 20px; }
257
+
258
+ .folder-row {
259
+ display: flex; align-items: center; gap: 16px;
260
+ height: 32px; padding: 0 12px 0 26px;
261
+ border-radius: 0 16px 16px 0;
262
+ margin-right: 8px;
263
+ color: var(--ink-soft); cursor: pointer;
264
+ font-size: 14px; font-weight: 500;
265
+ }
266
+ .folder-row:hover { background: var(--bg-hover); }
267
+ .folder-row.active {
268
+ background: var(--bg-selected);
269
+ color: var(--accent-strong);
270
+ font-weight: 700;
271
+ }
272
+ .folder-row .icon { font-size: 18px; width: 20px; flex-shrink: 0; }
273
+ .folder-row .label { flex: 1; }
274
+ .folder-row .count {
275
+ font-size: 12px; font-weight: 700;
276
+ color: var(--accent-strong);
277
+ }
278
+ .folder-row .count[data-zero] { display: none; }
279
+
280
+ .sidebar-section {
281
+ padding: 16px 16px 4px;
282
+ font-size: 11px; font-weight: 600;
283
+ color: var(--muted); text-transform: uppercase; letter-spacing: .06em;
284
+ }
285
+
286
+ /* ─── Content area ─────────────────────────────────────────────────── */
287
+ .content {
288
+ background: var(--bg);
289
+ border-radius: 16px 0 0 0;
290
+ margin: 0 8px 8px 0;
291
+ overflow: hidden;
292
+ display: flex; flex-direction: column;
293
+ }
294
+
295
+ /* List header (above the list itself) */
296
+ .list-header {
297
+ display: flex; align-items: center; gap: 8px;
298
+ padding: 8px 16px; height: 48px;
299
+ border-bottom: 1px solid transparent;
300
+ position: sticky; top: 0; z-index: 5;
301
+ background: var(--bg);
302
+ flex-shrink: 0;
303
+ }
304
+ .list-header .icon-btn { width: 36px; height: 36px; font-size: 16px; }
305
+ .list-header .count-text {
306
+ margin-left: auto;
307
+ font-size: 12px; color: var(--muted);
308
+ }
309
+ .list-header .folder-title {
310
+ font: 500 18px/1 'Google Sans', sans-serif;
311
+ color: var(--ink); margin-left: 8px;
312
+ }
313
+
314
+ /* List rows */
315
+ .list-rows {
316
+ flex: 1; overflow-y: auto;
317
+ }
318
+ .list-row {
319
+ display: grid;
320
+ grid-template-columns: 24px 24px 240px 1fr 100px;
321
+ align-items: center; gap: 0;
322
+ padding: 0 16px; height: 40px;
323
+ cursor: pointer;
324
+ border-bottom: 1px solid var(--bg-soft);
325
+ position: relative;
326
+ }
327
+ @media (max-width: 1000px) { .list-row { grid-template-columns: 24px 24px 180px 1fr 80px; } }
328
+ .list-row:hover {
329
+ background: var(--bg-row-hover);
330
+ box-shadow: inset 0 0 0 1px rgba(0,0,0,.05);
331
+ z-index: 1;
332
+ }
333
+ .list-row.unread { background: var(--bg); }
334
+ .list-row.unread .from, .list-row.unread .subject {
335
+ color: var(--unread-bold); font-weight: 700;
336
+ }
337
+ .list-row:not(.unread) .from, .list-row:not(.unread) .subject {
338
+ color: var(--read-text);
339
+ }
340
+ .list-row .star {
341
+ font-size: 16px; color: #dadce0; cursor: pointer;
342
+ width: 24px; height: 24px;
343
+ display: flex; align-items: center; justify-content: center;
344
+ border-radius: 50%;
345
+ }
346
+ .list-row .star:hover { background: var(--bg-hover); }
347
+ .list-row .star.starred { color: #f4b400; }
348
+ .list-row .from {
349
+ font-size: 14px;
350
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
351
+ padding-right: 8px;
352
+ }
353
+ .list-row .subject-cell {
354
+ display: flex; gap: 8px; align-items: baseline;
355
+ overflow: hidden;
356
+ min-width: 0;
357
+ }
358
+ .list-row .subject {
359
+ font-size: 14px; flex-shrink: 0;
360
+ max-width: 50%;
361
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
362
+ }
363
+ .list-row .preview {
364
+ font-size: 14px; color: var(--muted);
365
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
366
+ flex: 1; min-width: 0;
367
+ }
368
+ .list-row .preview::before { content: '— '; opacity: .5; }
369
+ .list-row .date {
370
+ font-size: 12px; color: var(--muted); font-weight: 500;
371
+ text-align: right; padding-right: 4px;
372
+ }
373
+ .list-row.unread .date { color: var(--unread-bold); font-weight: 700; }
374
+ .list-row .dot {
375
+ width: 8px; height: 8px; border-radius: 50%;
376
+ background: var(--pink);
377
+ display: none;
378
+ margin: 0 auto;
379
+ }
380
+ .list-row.unread .dot { display: block; }
381
+
382
+ mark.search-hl {
383
+ background: #fff475; color: inherit;
384
+ padding: 0 1px;
385
+ }
386
+ @media (prefers-color-scheme: dark) {
387
+ mark.search-hl { background: #5b4d00; color: #fef9c3; }
388
+ }
389
+
390
+ .empty {
391
+ padding: 80px 24px; text-align: center;
392
+ color: var(--muted); font-size: 14px;
393
+ }
394
+ .empty .big { font-size: 48px; margin-bottom: 16px; opacity: .4; }
395
+
396
+ /* ─── Message detail view ──────────────────────────────────────── */
397
+ .message-view {
398
+ display: flex; flex-direction: column;
399
+ height: 100%; overflow-y: auto;
400
+ }
401
+ .message-toolbar {
402
+ display: flex; align-items: center; gap: 8px;
403
+ padding: 8px 16px; height: 48px;
404
+ border-bottom: 1px solid var(--line);
405
+ background: var(--bg);
406
+ position: sticky; top: 0; z-index: 5;
407
+ flex-shrink: 0;
408
+ }
409
+ .message-toolbar .icon-btn { width: 36px; height: 36px; font-size: 16px; }
410
+ .message-toolbar .toolbar-spacer { flex: 1; }
411
+
412
+ .message-header {
413
+ padding: 32px 32px 16px;
414
+ }
415
+ .message-subject {
416
+ font: 400 22px/1.3 'Google Sans', sans-serif;
417
+ color: var(--ink);
418
+ margin: 0 0 20px;
419
+ }
420
+ .message-sender-row {
421
+ display: flex; align-items: flex-start; gap: 16px;
422
+ }
423
+ .message-meta {
424
+ flex: 1; min-width: 0;
425
+ }
426
+ .message-from {
427
+ font-size: 14px; color: var(--ink);
428
+ }
429
+ .message-from .name { font-weight: 500; }
430
+ .message-from .addr { color: var(--muted); margin-left: 4px; }
431
+ .message-to { font-size: 12px; color: var(--muted); margin-top: 4px; }
432
+ .message-date {
433
+ font-size: 12px; color: var(--muted);
434
+ white-space: nowrap;
435
+ }
436
+
437
+ .message-body {
438
+ padding: 8px 32px 32px;
439
+ font-size: 14px; line-height: 1.65;
440
+ color: var(--ink);
441
+ white-space: pre-wrap; word-wrap: break-word;
442
+ max-width: 800px;
443
+ }
444
+ .message-body h1, .message-body h2, .message-body h3 {
445
+ color: var(--pink); margin: 1.2em 0 .4em;
446
+ }
447
+ .message-body h1 { font-size: 1.4em; }
448
+ .message-body h2 { font-size: 1.2em; }
449
+ .message-body h3 { font-size: 1.05em; }
450
+ .message-body code {
451
+ background: var(--code-bg); color: var(--code-fg);
452
+ padding: 1px 5px; border-radius: 4px; font-size: 13px;
453
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
454
+ }
455
+ .message-body pre {
456
+ background: var(--code-bg); padding: 12px 14px; border-radius: 8px;
457
+ overflow-x: auto; font-size: 13px;
458
+ }
459
+ .message-body pre code { background: transparent; padding: 0; color: var(--ink); }
460
+ .message-body strong { color: var(--ink); }
461
+ .message-body em { color: var(--ink-soft); }
462
+ .message-body blockquote {
463
+ border-left: 3px solid var(--pink-rule);
464
+ margin: .8em 0; padding: .2em 0 .2em 12px;
465
+ color: var(--muted); white-space: pre-wrap;
466
+ }
467
+ .message-body blockquote blockquote { border-left-color: #c084fc; }
468
+ .message-body blockquote blockquote blockquote { border-left-color: #f59e0b; }
469
+ .message-body table { border-collapse: collapse; margin: .5em 0; }
470
+ .message-body th, .message-body td { border: 1px solid var(--line); padding: 6px 10px; }
471
+ .message-body th { background: var(--bg-soft); font-weight: 600; }
472
+ .message-body ul, .message-body ol { padding-left: 24px; }
473
+ .message-body hr { border: none; border-top: 1px solid var(--line); margin: 1.2em 0; }
474
+ .message-body a { color: var(--accent-strong); }
475
+ .message-body input[type=checkbox] { margin-right: 6px; }
476
+
477
+ .message-attachments {
478
+ padding: 12px 32px; border-top: 1px solid var(--line);
479
+ display: flex; flex-wrap: wrap; gap: 8px;
480
+ }
481
+ .message-attachment {
482
+ display: inline-flex; align-items: center; gap: 8px;
483
+ padding: 8px 12px; border: 1px solid var(--line); border-radius: 8px;
484
+ font-size: 13px; color: var(--ink-soft);
485
+ }
486
+ .message-attachment .att-icon { font-size: 18px; }
487
+
488
+ /* ─── Auth gate ─────────────────────────────────────────────────────── */
489
+ .auth-gate {
490
+ position: fixed; inset: 0;
491
+ display: flex; align-items: center; justify-content: center;
492
+ background: var(--bg);
493
+ z-index: 100;
494
+ }
495
+ .auth-card {
496
+ width: 420px; padding: 36px;
497
+ background: var(--bg); border: 1px solid var(--line); border-radius: 14px;
498
+ box-shadow: 0 4px 16px rgba(0,0,0,.06);
499
+ }
500
+ .auth-card h1 { margin: 0 0 8px; font-size: 24px; color: var(--pink); font-weight: 500; }
501
+ .auth-card p { margin: 0 0 20px; color: var(--muted); font-size: 14px; line-height: 1.6; }
502
+ .auth-card input {
503
+ width: 100%; height: 44px; padding: 0 14px; margin-bottom: 12px;
504
+ border: 1px solid var(--line); border-radius: 8px;
505
+ background: var(--bg-soft); color: var(--ink); outline: none;
506
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
507
+ font-size: 13px;
508
+ }
509
+ .auth-card input:focus { border-color: var(--pink); background: var(--bg); }
510
+ .auth-card .submit {
511
+ width: 100%; height: 44px;
512
+ background: var(--pink); color: white; border-radius: 8px;
513
+ font-weight: 500; font-size: 14px;
514
+ }
515
+ .auth-card .submit:hover { background: var(--accent-strong); }
516
+ .auth-err { color: #d93025; font-size: 12px; margin-bottom: 12px; }
517
+
518
+ /* ─── Compose modal ─────────────────────────────────────────────────── */
519
+ .compose-bg {
520
+ position: fixed; inset: 0; background: rgba(0,0,0,.3);
521
+ display: flex; align-items: flex-end; justify-content: flex-end;
522
+ padding: 0 24px 0 0;
523
+ z-index: 50;
524
+ }
525
+ .compose-modal {
526
+ width: 560px; max-height: 80vh;
527
+ background: var(--bg); border-radius: 8px 8px 0 0;
528
+ box-shadow: 0 8px 24px rgba(0,0,0,.2);
529
+ display: grid; grid-template-rows: auto 1fr auto;
530
+ overflow: hidden;
531
+ }
532
+ .compose-head {
533
+ padding: 12px 16px;
534
+ background: #404040; color: white;
535
+ display: flex; justify-content: space-between; align-items: center;
536
+ font-size: 13px; font-weight: 500;
537
+ }
538
+ .compose-head button { color: white; font-size: 16px; opacity: .8; }
539
+ .compose-head button:hover { opacity: 1; }
540
+
541
+ .compose-body {
542
+ padding: 8px 16px; overflow-y: auto;
543
+ }
544
+ .compose-row {
545
+ display: grid; grid-template-columns: 60px 1fr;
546
+ border-bottom: 1px solid var(--line);
547
+ align-items: center;
548
+ padding: 4px 0;
549
+ }
550
+ .compose-row label { color: var(--muted); font-size: 13px; padding: 0 8px; }
551
+ .compose-row input, .compose-row select {
552
+ width: 100%; padding: 8px 4px;
553
+ border: none; outline: none;
554
+ background: transparent; color: var(--ink);
555
+ font: inherit; font-size: 14px;
556
+ }
557
+ .compose-row select { cursor: pointer; }
558
+ .compose-body textarea {
559
+ width: 100%; min-height: 240px;
560
+ padding: 12px 4px; margin-top: 8px;
561
+ border: none; outline: none; resize: vertical;
562
+ background: transparent; color: var(--ink);
563
+ font-family: inherit; font-size: 14px; line-height: 1.6;
564
+ }
565
+ .compose-foot {
566
+ padding: 12px 16px;
567
+ border-top: 1px solid var(--line);
568
+ display: flex; gap: 8px; align-items: center;
569
+ }
570
+ .btn-send {
571
+ background: var(--pink); color: white;
572
+ padding: 8px 24px; border-radius: 4px;
573
+ font-weight: 500; font-size: 14px;
574
+ }
575
+ .btn-send:hover { background: var(--accent-strong); }
576
+ .btn-discard {
577
+ margin-left: auto;
578
+ color: var(--muted);
579
+ padding: 8px 12px;
580
+ }
581
+ .btn-discard:hover { background: var(--bg-hover); color: var(--ink); }
582
+ .compose-hint {
583
+ font-size: 11px; color: var(--muted); padding: 0 8px;
584
+ }
585
+
586
+ /* ─── Toast ────────────────────────────────────────────────────────── */
587
+ .toast {
588
+ position: fixed; bottom: 24px; left: 24px; z-index: 60;
589
+ padding: 12px 20px; border-radius: 4px;
590
+ background: #323232; color: white; font-size: 14px;
591
+ opacity: 0; transform: translateY(8px);
592
+ transition: opacity .2s, transform .2s;
593
+ pointer-events: none;
594
+ max-width: 480px;
595
+ }
596
+ .toast.show { opacity: 1; transform: translateY(0); }
597
+ .toast.error { background: #d93025; }