main
html 803 lines 29.1 KB
Raw
1 <html>
2
3 <head>
4 <script type="module">
5 import { store } from "/components/welcome/welcome-store.js";
6 </script>
7 </head>
8
9 <body>
10 <div x-data>
11 <template x-if="$store.welcomeStore">
12 <div x-init="$store.welcomeStore.init(); if ($store.welcomeStore.isVisible) { $store.welcomeStore.onCreate(); } $watch('$store.welcomeStore.isVisible', (visible) => { if (visible) { $store.welcomeStore.onCreate(); } });"
13 class="welcome-container">
14 <x-extension id="welcome-screen-start"></x-extension>
15
16 <main class="welcome-shell">
17 <header class="welcome-hero">
18 <h1>Hello! I'm Agent Zero <span aria-hidden="true">&#128075;</span></h1>
19 <p x-text="$store.welcomeStore.heroSubtitle"></p>
20 </header>
21
22 <section class="welcome-composer" aria-label="Start a new chat">
23 <x-component path="chat/attachments/inputPreview.html"></x-component>
24 <x-component path="chat/input/chat-bar-input.html"></x-component>
25 </section>
26
27 <section class="welcome-alerts"
28 x-show="$store.welcomeStore.sortedBanners.length > 0 || $store.welcomeStore.hasDismissedBanners">
29 <div class="welcome-banners" x-show="$store.welcomeStore.sortedBanners.length > 0">
30 <x-extension id="welcome-banners-start"></x-extension>
31 <template x-for="banner in $store.welcomeStore.sortedBanners" :key="banner.id">
32 <article class="welcome-banner" :class="$store.welcomeStore.getBannerClass(banner.type)">
33 <div class="welcome-banner-icon">
34 <x-icon :name="$store.welcomeStore.getBannerIcon(banner.type)"></x-icon>
35 </div>
36 <div class="welcome-banner-content">
37 <div class="welcome-banner-title" x-text="banner.title"></div>
38 <div class="welcome-banner-html"
39 x-html="banner.html"
40 @click="$store.welcomeStore.handleBannerHtmlClick($event)"></div>
41 </div>
42 <button class="welcome-banner-cta"
43 type="button"
44 x-show="banner.cta_text && banner.cta_action"
45 @click.stop="$store.welcomeStore.executeBannerAction(banner.cta_action)"
46 :aria-label="banner.cta_text">
47 <span x-text="banner.cta_text"></span>
48 <x-icon aria-hidden="true" name="arrow_forward"></x-icon>
49 </button>
50 <button class="welcome-banner-dismiss"
51 type="button"
52 x-show="banner.dismissible !== false"
53 @click.stop="$store.welcomeStore.dismissBanner(banner.id)"
54 title="Dismiss"
55 aria-label="Dismiss">
56 <x-icon name="close"></x-icon>
57 </button>
58 </article>
59 </template>
60 <x-extension id="welcome-banners-end"></x-extension>
61 </div>
62
63 <button type="button"
64 class="welcome-undismiss-button"
65 x-show="$store.welcomeStore.hasDismissedBanners"
66 :disabled="$store.welcomeStore.bannersLoading"
67 @click="$store.welcomeStore.undismissBanners()">
68 <x-icon name="undo"></x-icon>
69 <span>Show dismissed notices</span>
70 </button>
71 </section>
72
73 <section class="welcome-quick-section">
74 <h2>Quick Actions</h2>
75 <div class="welcome-actions">
76 <x-extension id="welcome-actions-start"></x-extension>
77 <button type="button" class="welcome-action-card" @click="$store.welcomeStore.executeAction('projects')">
78 <x-icon class="welcome-action-icon" name="folder"></x-icon>
79 <span class="welcome-action-copy">
80 <span class="welcome-action-title">Projects</span>
81 <span class="welcome-action-description">Organize and track your work.</span>
82 </span>
83 <x-icon class="welcome-action-arrow" name="chevron_right"></x-icon>
84 </button>
85 <button type="button" class="welcome-action-card" @click="$store.welcomeStore.executeAction('memory')">
86 <x-icon class="welcome-action-icon" name="memory"></x-icon>
87 <span class="welcome-action-copy">
88 <span class="welcome-action-title">Memory</span>
89 <span class="welcome-action-description">Access saved context and knowledge.</span>
90 </span>
91 <x-icon class="welcome-action-arrow" name="chevron_right"></x-icon>
92 </button>
93 <button type="button" class="welcome-action-card" @click="$store.welcomeStore.executeAction('scheduler')">
94 <x-icon class="welcome-action-icon" name="schedule"></x-icon>
95 <span class="welcome-action-copy">
96 <span class="welcome-action-title">Tasks</span>
97 <span class="welcome-action-description">View and manage your tasks.</span>
98 </span>
99 <x-icon class="welcome-action-arrow" name="chevron_right"></x-icon>
100 </button>
101 <button type="button" class="welcome-action-card" @click="$store.welcomeStore.executeAction('files')">
102 <x-icon class="welcome-action-icon" name="folder_open"></x-icon>
103 <span class="welcome-action-copy">
104 <span class="welcome-action-title">Files</span>
105 <span class="welcome-action-description">Search and manage your files.</span>
106 </span>
107 <x-icon class="welcome-action-arrow" name="chevron_right"></x-icon>
108 </button>
109 <button type="button" class="welcome-action-card" @click="$store.welcomeStore.executeAction('settings')">
110 <x-icon class="welcome-action-icon" name="settings"></x-icon>
111 <span class="welcome-action-copy">
112 <span class="welcome-action-title">Settings</span>
113 <span class="welcome-action-description">Configure Agent Zero to your preferences.</span>
114 </span>
115 <x-icon class="welcome-action-arrow" name="chevron_right"></x-icon>
116 </button>
117 <button type="button" class="welcome-action-card" @click="$store.welcomeStore.executeAction('plugins')">
118 <x-icon class="welcome-action-icon" name="extension"></x-icon>
119 <span class="welcome-action-copy">
120 <span class="welcome-action-title">Plugins</span>
121 <span class="welcome-action-description">Extend Agent Zero with integrations.</span>
122 </span>
123 <x-icon class="welcome-action-arrow" name="chevron_right"></x-icon>
124 </button>
125 <button type="button" class="welcome-action-card is-wide" @click="$store.welcomeStore.executeAction('website')">
126 <x-icon class="welcome-action-icon" name="language"></x-icon>
127 <span class="welcome-action-copy">
128 <span class="welcome-action-title">Visit Website</span>
129 <span class="welcome-action-description">Explore Agent Zero online and resources.</span>
130 </span>
131 <x-icon class="welcome-action-arrow" name="open_in_new"></x-icon>
132 </button>
133 </div>
134 </section>
135
136 <section class="welcome-lower-grid">
137 <x-extension id="welcome-actions-end"></x-extension>
138
139 <article class="welcome-system-card"
140 x-show="$store.welcomeStore.systemResourceBanner"
141 x-transition.opacity>
142 <header class="welcome-panel-header">
143 <h2 x-text="$store.welcomeStore.systemResourceBanner?.title || 'System Resources'"></h2>
144 <div class="welcome-panel-actions">
145 <button class="welcome-panel-icon-button"
146 type="button"
147 :disabled="$store.welcomeStore.bannersLoading"
148 @click.stop="$store.welcomeStore.refreshBanners(true)"
149 title="Refresh"
150 aria-label="Refresh System Resources">
151 <x-icon name="refresh"></x-icon>
152 </button>
153 <button class="welcome-panel-icon-button"
154 type="button"
155 x-show="$store.welcomeStore.systemResourceBanner?.dismissible !== false"
156 @click.stop="$store.welcomeStore.dismissBanner($store.welcomeStore.systemResourceBanner?.id || 'system-resources')"
157 title="Dismiss"
158 aria-label="Dismiss System Resources">
159 <x-icon name="close"></x-icon>
160 </button>
161 </div>
162 </header>
163 <div class="welcome-system-body"
164 x-html="$store.welcomeStore.systemResourceBanner?.html || ''"></div>
165 </article>
166 </section>
167 </main>
168
169 <x-extension id="welcome-screen-end"></x-extension>
170 </div>
171 </template>
172 </div>
173
174 <style>
175 .welcome-container {
176 position: relative;
177 min-height: 100vh;
178 overflow: hidden;
179 padding: clamp(4.8rem, 8vh, 6.4rem) clamp(1.25rem, 5.4vw, 6.5rem) 3.5rem;
180 color: var(--color-text);
181 font-family: var(--font-family-main, "Rubik", Arial, Helvetica, sans-serif);
182 }
183
184 .welcome-container > x-extension,
185 .welcome-actions > x-extension,
186 .welcome-banners > x-extension,
187 .welcome-lower-grid > x-extension,
188 .welcome-lower-grid > x-extension > x-component,
189 .welcome-lower-grid > x-extension > x-component > div[x-data] {
190 display: contents;
191 }
192
193 .welcome-container::before {
194 content: "";
195 position: absolute;
196 inset: -6% -8% -10% 10%;
197 background-image: url("./public/darkSymbol.svg");
198 background-repeat: no-repeat;
199 background-position: center top;
200 background-size: min(78vw, 980px) auto;
201 opacity: 0.105;
202 pointer-events: none;
203 }
204
205 .light-mode .welcome-container::before {
206 filter: invert(0.55);
207 opacity: 0.055;
208 }
209
210 .welcome-shell {
211 position: relative;
212 z-index: 1;
213 display: flex;
214 flex-direction: column;
215 gap: 1.55rem;
216 width: min(100%, 1220px);
217 margin: 0 auto;
218 padding-top: 4rem;
219 }
220
221 .welcome-hero h1 {
222 margin: 0;
223 color: var(--color-text);
224 font-size: clamp(2rem, 3.4vw, 2.75rem);
225 font-weight: 440;
226 letter-spacing: 0;
227 line-height: 1.08;
228 }
229
230 .welcome-hero p {
231 margin: 0.5rem 0 0;
232 color: color-mix(in srgb, var(--color-text) 66%, transparent);
233 font-size: clamp(1.08rem, 1.8vw, 1.35rem);
234 line-height: 1.35;
235 }
236
237 .welcome-composer {
238 width: 100%;
239 min-height: 4.9rem;
240 }
241
242 .welcome-composer > x-component,
243 .welcome-composer > x-component > div[x-data],
244 .welcome-composer > x-component > div[x-data] > template + div {
245 display: contents;
246 }
247
248 .welcome-composer .input-row {
249 min-height: 4.9rem;
250 padding: 0.58rem 0.7rem 0.58rem 0.86rem;
251 border-radius: 8px;
252 background: color-mix(in srgb, var(--color-panel) 64%, var(--color-background) 36%);
253 }
254
255 .welcome-composer #chat-input {
256 min-height: 3.2rem;
257 font-size: 1.03rem;
258 }
259
260 .welcome-composer #expand-button {
261 display: none;
262 }
263
264 .welcome-composer .chat-more-panel {
265 top: calc(100% + 0.55rem);
266 bottom: auto;
267 margin-top: 0;
268 margin-bottom: 0;
269 }
270
271 .welcome-alerts {
272 display: grid;
273 gap: 0.7rem;
274 }
275
276 .welcome-banners {
277 display: grid;
278 gap: 0.75rem;
279 }
280
281 .welcome-banner,
282 .welcome-action-card,
283 .welcome-panel-card,
284 .welcome-system-card {
285 border: 1px solid color-mix(in srgb, var(--color-border) 66%, transparent);
286 background: color-mix(in srgb, var(--color-panel) 78%, var(--color-background) 22%);
287 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.026);
288 backdrop-filter: blur(18px);
289 }
290
291 .welcome-banner {
292 --welcome-banner-accent: #2f6bff;
293 position: relative;
294 display: grid;
295 grid-template-columns: auto minmax(0, 1fr) auto auto;
296 align-items: start;
297 gap: 1rem;
298 min-height: 5.45rem;
299 padding: 1rem 1.1rem;
300 border-radius: 8px;
301 text-align: left;
302 }
303
304 .welcome-banner.banner-info {
305 --welcome-banner-accent: #2f6bff;
306 }
307
308 .welcome-banner.banner-warning {
309 --welcome-banner-accent: #f59e0b;
310 }
311
312 .welcome-banner.banner-error {
313 --welcome-banner-accent: #ef4444;
314 }
315
316 .welcome-banner-icon {
317 display: inline-flex;
318 width: 2.25rem;
319 height: 2.25rem;
320 align-items: center;
321 justify-content: center;
322 border-radius: 8px;
323 color: var(--welcome-banner-accent);
324 background: color-mix(in srgb, var(--welcome-banner-accent) 9%, transparent);
325 box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--welcome-banner-accent) 12%, transparent);
326 }
327
328 .welcome-banner-icon .material-symbols-outlined {
329 font-size: 1.28rem;
330 }
331
332 .welcome-banner-content {
333 flex: 1;
334 min-width: 0;
335 padding-top: 0.05rem;
336 }
337
338 .welcome-banner-title {
339 margin-bottom: 0.28rem;
340 color: var(--color-text);
341 font-size: 1rem;
342 font-weight: 560;
343 line-height: 1.25;
344 }
345
346 .welcome-banner-html {
347 max-width: 72ch;
348 color: color-mix(in srgb, var(--color-text) 58%, transparent);
349 font-size: 0.92rem;
350 line-height: 1.45;
351 }
352
353 .welcome-banner-html a {
354 color: #5f83ff;
355 text-decoration: none;
356 }
357
358 .welcome-banner-html a:hover {
359 text-decoration: underline;
360 }
361
362 .welcome-banner-cta,
363 .welcome-banner-html .btn,
364 .welcome-banner-html button {
365 display: inline-flex;
366 align-items: center;
367 justify-content: center;
368 min-height: 2.35rem;
369 border: 0;
370 border-radius: 8px;
371 padding: 0.55rem 0.9rem;
372 background-color: #4248f1;
373 color: #fff;
374 font-family: var(--font-family-main, "Rubik", Arial, Helvetica, sans-serif);
375 font-size: 0.88rem;
376 font-weight: 460;
377 line-height: 1.2;
378 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
379 transition: background-color 0.18s ease;
380 }
381
382 .welcome-banner-cta {
383 align-self: center;
384 justify-self: end;
385 gap: 0.36rem;
386 white-space: nowrap;
387 }
388
389 .welcome-banner-cta .material-symbols-outlined {
390 font-size: 1.05rem;
391 }
392
393 .welcome-banner-cta:hover,
394 .welcome-banner-cta:focus-visible,
395 .welcome-banner-html .btn:hover,
396 .welcome-banner-html .btn:focus-visible,
397 .welcome-banner-html button:hover,
398 .welcome-banner-html button:focus-visible {
399 background-color: #353bc5;
400 outline: none;
401 }
402
403 .welcome-banner-dismiss,
404 .welcome-undismiss-button {
405 display: inline-flex;
406 align-items: center;
407 justify-content: center;
408 gap: 0.4rem;
409 border: 0;
410 background: transparent;
411 color: color-mix(in srgb, var(--color-text) 64%, transparent);
412 cursor: pointer;
413 font-family: var(--font-family-main, "Rubik", Arial, Helvetica, sans-serif);
414 }
415
416 .welcome-banner-dismiss {
417 width: 2rem;
418 height: 2rem;
419 border-radius: 8px;
420 margin: -0.2rem -0.2rem 0 0;
421 }
422
423 .welcome-banner-dismiss:hover,
424 .welcome-undismiss-button:hover {
425 color: var(--color-text);
426 background: color-mix(in srgb, var(--color-border) 45%, transparent);
427 }
428
429 .welcome-undismiss-button {
430 justify-self: start;
431 border-radius: 9px;
432 padding: 0.45rem 0.55rem;
433 font-size: 0.82rem;
434 }
435
436 .welcome-quick-section {
437 display: grid;
438 gap: 0.82rem;
439 }
440
441 .welcome-quick-section h2,
442 .welcome-panel-header h2 {
443 margin: 0;
444 color: var(--color-text);
445 font-size: 1.05rem;
446 font-weight: 520;
447 line-height: 1.2;
448 }
449
450 .welcome-actions {
451 display: grid;
452 grid-template-columns: repeat(4, minmax(0, 1fr));
453 gap: 1rem;
454 width: 100%;
455 }
456
457 .welcome-action-card {
458 display: grid;
459 grid-template-columns: auto minmax(0, 1fr) auto;
460 align-items: center;
461 gap: 1rem;
462 min-height: 6.1rem;
463 border-radius: 8px;
464 padding: 1.05rem 1rem;
465 color: inherit;
466 cursor: pointer;
467 font-family: var(--font-family-main, "Rubik", Arial, Helvetica, sans-serif);
468 text-align: left;
469 transition:
470 border-color 0.18s ease,
471 background-color 0.18s ease,
472 box-shadow 0.18s ease,
473 transform 0.18s ease;
474 }
475
476 .welcome-action-card.is-wide {
477 grid-column: span 2;
478 }
479
480 .welcome-action-card:hover,
481 .welcome-action-card:focus-visible {
482 border-color: color-mix(in srgb, var(--color-border) 88%, var(--color-text) 12%);
483 background: color-mix(in srgb, var(--color-panel) 86%, var(--color-background) 14%);
484 box-shadow:
485 inset 0 1px 0 rgba(255, 255, 255, 0.036),
486 0 16px 34px rgba(0, 0, 0, 0.18);
487 outline: none;
488 transform: translateY(-1px);
489 }
490
491 .welcome-action-icon {
492 color: #2f6bff;
493 font-size: 2.35rem;
494 line-height: 1;
495 }
496
497 .welcome-action-copy {
498 display: grid;
499 min-width: 0;
500 gap: 0.28rem;
501 }
502
503 .welcome-action-title {
504 color: var(--color-text);
505 font-size: 1rem;
506 font-weight: 520;
507 line-height: 1.25;
508 }
509
510 .welcome-action-description {
511 color: color-mix(in srgb, var(--color-text) 58%, transparent);
512 font-size: 0.92rem;
513 line-height: 1.42;
514 }
515
516 .welcome-action-arrow {
517 color: var(--color-text);
518 font-size: 1.35rem;
519 opacity: 0.8;
520 }
521
522 .welcome-lower-grid {
523 display: grid;
524 grid-template-columns: repeat(4, minmax(0, 1fr));
525 grid-template-areas:
526 "accounts accounts channels channels"
527 "system system system system";
528 gap: 1rem;
529 align-items: stretch;
530 }
531
532 .welcome-lower-grid .discovery-slot {
533 display: contents;
534 }
535
536 .welcome-lower-grid .discovery-features-panel {
537 grid-area: channels;
538 min-height: 0;
539 }
540
541 .welcome-lower-grid .discovery-account-card {
542 grid-area: accounts;
543 }
544
545 .welcome-lower-grid .discovery-undismiss {
546 grid-column: 1 / -1;
547 }
548
549 .welcome-system-card {
550 grid-area: system;
551 min-width: 0;
552 border-radius: 8px;
553 padding: 1.6rem 1.7rem;
554 text-align: left;
555 }
556
557 .welcome-panel-header {
558 display: flex;
559 align-items: center;
560 justify-content: space-between;
561 gap: 1rem;
562 margin-bottom: 1.5rem;
563 }
564
565 .welcome-panel-actions {
566 display: flex;
567 align-items: center;
568 gap: 0.35rem;
569 flex: 0 0 auto;
570 }
571
572 .welcome-panel-icon-button {
573 display: inline-flex;
574 align-items: center;
575 justify-content: center;
576 width: 2rem;
577 height: 2rem;
578 border: 0;
579 border-radius: 8px;
580 background: transparent;
581 color: color-mix(in srgb, var(--color-text) 64%, transparent);
582 cursor: pointer;
583 font-family: var(--font-family-main, "Rubik", Arial, Helvetica, sans-serif);
584 }
585
586 .welcome-panel-icon-button:hover,
587 .welcome-panel-icon-button:focus-visible {
588 color: var(--color-text);
589 background: color-mix(in srgb, var(--color-border) 45%, transparent);
590 outline: none;
591 }
592
593 .welcome-panel-icon-button:disabled {
594 cursor: default;
595 opacity: 0.45;
596 }
597
598 .welcome-panel-icon-button .material-symbols-outlined {
599 font-size: 1.18rem;
600 }
601
602 .system-resource-body {
603 display: grid;
604 gap: 1.22rem;
605 }
606
607 .system-resource-meter {
608 display: grid;
609 grid-template-columns: 8.2rem minmax(0, 1fr);
610 gap: 1rem;
611 align-items: center;
612 }
613
614 .system-resource-label {
615 display: grid;
616 gap: 0.38rem;
617 min-width: 0;
618 }
619
620 .system-resource-name,
621 .system-resource-detail-title {
622 color: color-mix(in srgb, var(--color-text) 58%, transparent);
623 font-size: 0.82rem;
624 font-weight: 430;
625 letter-spacing: 0.02em;
626 }
627
628 .system-resource-value,
629 .system-resource-detail-value {
630 color: color-mix(in srgb, var(--color-text) 76%, transparent);
631 font-size: 0.96rem;
632 font-variant-numeric: tabular-nums;
633 line-height: 1.2;
634 white-space: nowrap;
635 }
636
637 .system-resource-track {
638 height: 0.64rem;
639 overflow: hidden;
640 border-radius: 999px;
641 background: color-mix(in srgb, var(--color-border) 70%, transparent);
642 }
643
644 .system-resource-fill {
645 display: block;
646 width: var(--resource-value, 0%);
647 height: 100%;
648 border-radius: inherit;
649 background: var(--resource-color, #22c55e);
650 transition: width 0.22s ease;
651 }
652
653 .system-resource-footer {
654 display: grid;
655 grid-template-columns: 1fr 1fr;
656 gap: 1rem 1.5rem;
657 margin-top: 0.15rem;
658 padding-top: 1.02rem;
659 border-top: 1px solid color-mix(in srgb, var(--color-border) 55%, transparent);
660 }
661
662 .system-resource-detail-value {
663 margin-top: 0.48rem;
664 font-family: var(--font-family-code, "Roboto Mono", monospace);
665 font-size: 0.88rem;
666 }
667
668 @media (max-width: 1180px) {
669 .welcome-container {
670 padding-inline: clamp(1.25rem, 4vw, 3rem);
671 }
672
673 .welcome-actions {
674 grid-template-columns: repeat(2, minmax(0, 1fr));
675 }
676
677 .welcome-lower-grid {
678 grid-template-columns: 1fr;
679 grid-template-areas:
680 "accounts"
681 "channels"
682 "system";
683 }
684
685 .welcome-shell {
686 padding-top: 4rem;
687 }
688 }
689
690 @media (max-width: 720px) {
691 .welcome-container {
692 min-height: 100%;
693 padding: 4.5rem 1rem 2rem;
694 }
695
696 .welcome-shell {
697 gap: 1.2rem;
698 padding-top: 4rem;
699 }
700
701 .welcome-actions {
702 grid-template-columns: 1fr;
703 gap: 0.75rem;
704 }
705
706 .welcome-action-card,
707 .welcome-action-card.is-wide {
708 grid-column: auto;
709 min-height: 5.25rem;
710 padding: 0.85rem;
711 }
712
713 .welcome-action-icon {
714 font-size: 2rem;
715 }
716
717 .welcome-composer .input-row {
718 align-items: center;
719 flex-wrap: wrap;
720 min-height: 4.35rem;
721 row-gap: 0.55rem;
722 white-space: normal;
723 }
724
725 .welcome-composer #chat-input-container {
726 flex: 1 1 11.5rem;
727 width: auto;
728 min-width: min(11.5rem, calc(100% - 3rem));
729 }
730
731 .welcome-composer #chat-input {
732 min-height: 4.5rem;
733 padding-right: 0.35rem;
734 align-content: center;
735 }
736
737 .welcome-composer #chat-input.is-empty {
738 overflow-y: hidden;
739 scrollbar-width: none;
740 }
741
742 .welcome-composer #chat-input.is-empty::-webkit-scrollbar {
743 display: none;
744 }
745
746 .welcome-composer #chat-buttons-wrapper {
747 margin-left: auto;
748 }
749
750 .welcome-banner {
751 grid-template-columns: auto minmax(0, 1fr);
752 gap: 0.82rem;
753 padding: 0.95rem;
754 }
755
756 .welcome-banner-dismiss {
757 position: absolute;
758 top: 0.7rem;
759 right: 0.7rem;
760 margin: 0;
761 }
762
763 .welcome-banner-content {
764 padding-right: 1.9rem;
765 }
766
767 .welcome-banner-html {
768 max-width: none;
769 }
770
771 .welcome-banner-cta {
772 grid-column: 2;
773 justify-self: start;
774 margin-top: 0.25rem;
775 }
776
777 .welcome-system-card {
778 padding: 1.15rem;
779 }
780
781 .system-resource-meter {
782 grid-template-columns: 1fr;
783 gap: 0.55rem;
784 }
785
786 .system-resource-footer {
787 grid-template-columns: 1fr;
788 }
789 }
790
791 @media (max-width: 420px) {
792 .welcome-composer #chat-input.is-empty {
793 min-height: 5rem;
794 padding-top: 0.52rem;
795 padding-bottom: 0.52rem;
796 font-size: 0.96rem;
797 line-height: 1.34;
798 }
799 }
800 </style>
801 </body>
802
803 </html>