@font-face { font-family: "Comic Code"; src: url(fonts/ComicCode-Regular.ttf); font-weight: normal; } @font-face { font-family: "Comic Code"; src: url(fonts/ComicCode-Bold.ttf); font-weight: 700; } @font-face { font-family: "Comic Code"; src: url(fonts/ComicCode-Italic.ttf); font-weight: normal; font-style: italic; } @font-face { font-family: "Comic Code"; src: url(fonts/ComicCode-BoldItalic.ttf); font-weight: 700; font-style: italic; } * { box-sizing: border-box; } html, body { font-family: "Lato", sans-serif; font-size: 15px; background: #181926; color: #cad3f5; height: 100%; width: 100%; margin: 0; } body { display: flex; overflow: hidden; } #page { display: flex; flex-direction: column; gap: 25px; background: #1e2030; margin: auto; margin-top: 30px; width: 100%; max-width: 1100px; height: calc(100% - 30px); border-top-left-radius: 6px; border-top-right-radius: 6px; } .hidden { opacity: 0 !important; pointer-events: none !important; } #messages { display: flex; flex-direction: column; gap: 40px; height: 100%; overflow-y: auto; padding: 14px 12px; } #messages:empty::before { content: "no messages"; color: #a5adcb; font-style: italic; align-self: center; } #message, .message { border: none; border-radius: 6px; background: #24273a; font: inherit; color: inherit; } .message { position: relative; max-width: 700px; min-width: 200px; width: max-content; padding-top: 28px; background: #363a4f; overflow: hidden; flex-shrink: 0; } .message.user { align-self: end; } .message.system { align-self: center; } .message .role { position: absolute; font-family: "Comic Code", ui-monospace, "Cascadia Mono", "Segoe UI Mono", "Ubuntu Mono", "Roboto Mono", Menlo, Monaco, Consolas, monospace; font-size: 12px; line-height: 12px; top: 8px; left: 6px; padding-left: 20px; } #messages .message .role::before { content: ""; width: 16px; height: 16px; position: absolute; top: -1px; left: 0; } .message.user .role::before { background-image: url(icons/user.svg); } .message.system .role::before { background-image: url(icons/system.svg); } .message.assistant .role::before { background-image: url(icons/assistant.svg); } .message.assistant { max-width: 800px; } .message .reasoning, .message .text { display: block; background: transparent; padding: 10px 12px; width: 100%; } .message .text { padding-bottom: 10px; } .message:not(.editing) textarea.text, .message.editing div.text { display: none; } .message div.text { background: #24273a; } .message textarea.text { background: #181926; } .message .reasoning-text { --height: auto; height: calc(var(--height) + 20px); background: #1e2030; border-radius: 6px; transition: 150ms; padding: 10px 12px; } .message:not(.expanded) .reasoning-text { height: 0; padding: 0 12px; overflow: hidden; } .message.expanded .reasoning-text { margin-top: 10px; } .message:not(.has-reasoning) .reasoning { display: none; } .reasoning .toggle { position: relative; padding: 0 20px; font-weight: 600; font-size: 14px; margin-top: 2px; } .reasoning .toggle::after, .reasoning .toggle::before { content: ""; background-image: url(icons/reasoning.svg); position: absolute; top: 0; left: -2px; width: 20px; height: 20px; } .reasoning .toggle::after { background-image: url(icons/chevron.svg); left: unset; right: -2px; top: 1px; transition: 150ms; } .message.expanded .reasoning .toggle::after { transform: rotate(180deg); } .message .options { display: flex; gap: 4px; position: absolute; top: 4px; right: 6px; opacity: 0; pointer-events: none; transition: 150ms; } .message:hover .options { opacity: 1; pointer-events: all; } .message.waiting .options, .message.reasoning .options, .message.receiving .options { display: none; } .message.reasoning .reasoning button.toggle::before { animation: rotating 2s linear infinite; background-image: url(icons/loading.svg); } .message .text::before { font-style: italic; } .message:empty.receiving .text::before, .message.waiting .text::before { content: ". . ."; } #chat { display: flex; position: relative; justify-content: center; padding: 0 12px; height: 240px; } #chat::after { content: ""; position: absolute; bottom: 0; left: 12px; right: 12px; height: 36px; background: #24273a; } #message { border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; width: 100%; height: 100%; padding: 14px 16px; padding-bottom: 30px; } textarea, button, input, select { border: none; font: inherit; color: inherit; outline: none; margin: 0; } textarea { resize: none; } button { background: transparent; cursor: pointer; } input, select { background: #363a4f; } #chat button { position: absolute; } #chat .options { position: absolute; bottom: 6px; left: 20px; width: max-content; display: flex; align-items: center; gap: 12px; z-index: 10; } #chat .option { display: flex; align-items: center; gap: 4px; } #chat .option+.option::before { content: ""; display: block; width: 2px; height: 12px; background: #5b6078; margin-right: 4px; } .reasoning .toggle::before, .reasoning .toggle::after, #bottom, .message .role::before, #scrolling, #clear, #add, #send, .pre-copy, .message .copy, .message .edit, .message .delete, #chat .option label { display: block; width: 20px; height: 20px; background-position: center; background-size: contain; background-repeat: no-repeat; } .pre-copy, .message .copy { background-image: url(icons/copy.svg); } .pre-copy.copied, .message .copy.copied { background-image: url(icons/check.svg); } .message .edit { background-image: url(icons/edit.svg); } .message.editing .edit { background-image: url(icons/save.svg); } .message .delete { background-image: url(icons/delete.svg); } #chat .option label { background-size: 18px; } #model { width: 180px; padding: 2px 4px; } #temperature { appearance: textfield; width: 50px; padding: 2px 4px; text-align: right; } label[for="role"] { background-image: url(icons/user.svg); } label[for="model"] { background-image: url(icons/model.svg); } label[for="prompt"] { background-image: url(icons/prompt.svg); } label[for="temperature"] { background-image: url(icons/temperature.svg); } #bottom { top: -38px; left: 50%; transform: translateX(-50%); width: 28px; height: 28px; background-image: url(icons/down.svg); transition: 150ms; } #add, #send { bottom: 4px; right: 20px; width: 28px; height: 28px; background-image: url(icons/send.svg); z-index: 10; } #add { bottom: 4px; right: 52px; background-image: url(icons/add.svg); } #scrolling { position: unset !important; background-image: url(icons/screen-slash.svg); } #scrolling.on { background-image: url(icons/screen.svg); } #clear { position: unset !important; background-image: url(icons/trash.svg); } .completing #add { display: none; } .completing #send { background-image: url(icons/stop.svg); } @keyframes rotating { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }