* { box-sizing: border-box; } html, body { font-family: "Nata Sans", 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; box-shadow: 0px 0px 4px 4px #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: 65px; 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; box-shadow: 0px 0px 4px 4px #24273a; border-radius: 6px; background: #24273a; font: inherit; color: inherit; } .message { position: relative; max-width: 700px; min-width: 200px; width: max-content; } .message.user { align-self: end; } .message.system { align-self: center; } .message .role { position: absolute; line-height: 12px; font-size: 12px; top: 4px; left: 4px; 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 .text { display: block; background: transparent; padding: 10px 12px; padding-top: 28px; white-space: pre-line; width: 100%; } .message:not(.editing) textarea.text, .message.editing div.text { display: none; } textarea { border: none; resize: none; outline: none; color: inherit; font: inherit; } #chat { display: flex; position: relative; justify-content: center; padding: 0 12px; height: 240px; } #message { border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; width: 100%; height: 100%; padding: 14px 16px; } .message .options { display: flex; gap: 4px; position: absolute; top: 4px; right: 4px; 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 .text::before { font-style: italic; } .message.waiting .text::before { content: "waiting..."; } .message.reasoning .text::before { content: "reasoning..."; } .message:empty.receiving .text::before { content: "receiving..."; } button { background: transparent; border: none; color: inherit; cursor: pointer; } #chat button { position: absolute; } input, select { border: none; background: #363a4f; font: inherit; color: inherit; outline: none; } #chat .options { position: absolute; bottom: 4px; left: 12px; width: max-content; display: flex; align-items: center; gap: 12px; } #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; } #bottom, .message .role::before, #clear, #add, #send, .message .edit, .message .delete, #chat .option label { display: block; width: 20px; height: 20px; background-position: center; background-size: contain; background-repeat: no-repeat; } .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; text-align: right; } #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="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: 12px; width: 28px; height: 28px; background-image: url(icons/send.svg); } #add { bottom: 4px; right: 44px; background-image: url(icons/add.svg); } #clear { position: unset !important; background-image: url(icons/trash.svg); } .completing #add { display: none; } .completing #send { background-image: url(icons/stop.svg); }