gonzmart's picture
alfa version
979db68
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
:root {
--sz: 15px;
--c0: #000;
--c1: #333;
--primary: #10a37f;
--secondary: #1a7f64;
--dark: #202123;
--light: #f7f7f8;
--gray: #343541;
--success: #10a37f;
--accent: #e5e5e5;
--border-radius: 12px;
--border-radius-lg: 16px;
--box-shadow: 0 0 15px rgba(0, 0, 0, 0.05);
--transition: all 0.2s ease;
--font-main: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--bg-gradient: linear-gradient(180deg, #f0f4f9 0%, #ffffff 100%);
--message-user: #10a37f;
--message-ai: #7f56d9;
--message-ai_2: #6731db;
--message-ai_3: #5b1ae8;
--message-error: #ef4444;
}
html, body {
width: 100%;
height: 100vh;
overflow: hidden;
}
html {
margin: 0;
padding: 0;
min-height: 100vh;
width: 100vw;
background: var(--gray);
position: relative;
overflow-x: hidden;
color: var(--light);
}
html::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 30%, rgba(16, 163, 127, 0.05), transparent 40%),
radial-gradient(circle at 80% 70%, rgba(127, 86, 217, 0.05), transparent 40%);
z-index: -1;
}
body {
margin: 0;
padding: 0;
min-height: 100vh;
background-color: transparent;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
width: 100vw;
position: fixed;
top: 0;
left: 0;
overflow-x: hidden;
font-family: var(--font-main);
}
#root {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.chat-container {
font-family: var(--font-main);
width: 100%;
max-width: 1000px;
height: 100vh;
margin: 0 auto;
background: transparent;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
z-index: 1;
padding-bottom: 100px;
}
/* Header style for the container */
.chat-container::before {
content: 'Which model should I use?';
display: block;
padding: 18px;
text-align: center;
color: var(--light);
font-size: 16px;
font-weight: 600;
background: transparent;
position: relative;
letter-spacing: 0.3px;
}
.chat-container::after {
display: none;
}
.message {
width: auto;
max-width: 90%;
margin: 0;
padding: 16px 20px;
border-radius: var(--border-radius);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
transition: var(--transition);
position: relative;
overflow: hidden;
font-size: 15px;
line-height: 1.5;
}
.message p {
margin: 0 0 8px 0;
}
.message p:last-child {
margin-bottom: 0;
}
/* Add a messages container for scrolling */
.messages-container {
flex: 1;
overflow-y: auto;
padding: 20px;
display: flex;
flex-direction: column;
gap: 20px;
scroll-behavior: smooth;
height: calc(100% - 280px);
min-height: 200px;
background: transparent;
}
.messages-container::-webkit-scrollbar {
width: 6px;
}
.messages-container::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 8px;
}
.messages-container::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.1);
border-radius: 8px;
}
.messages-container::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.15);
}
.user-message {
background: var(--dark);
margin-left: auto;
border-bottom-right-radius: 4px;
color: var(--light);
padding-left: 16px;
border-left: 3px solid var(--message-user);
}
.feedback-message {
background: var(--dark);
margin-right: auto;
border-bottom-left-radius: 4px;
color: var(--light);
max-width: 90%;
padding-left: 16px;
}
/* Enhanced success animation */
@keyframes success-pulse {
0% { transform: scale(1); }
50% { transform: scale(1.03); }
100% { transform: scale(1); }
}
@keyframes success-glow {
0% { box-shadow: 0 0 0 0 rgba(16, 163, 127, 0.6); }
50% { box-shadow: 0 0 20px rgba(16, 163, 127, 0.4); }
100% { box-shadow: 0 0 0 0 rgba(16, 163, 127, 0); }
}
.feedback-message.success {
border-left: 3px solid var(--message-user);
animation: success-pulse 0.7s ease-in-out, success-glow 1.5s ease-in-out infinite;
}
/* Enhanced error animation */
@keyframes shake {
0%, 100% { transform: translateX(0) rotate(0); }
15% { transform: translateX(-8px) rotate(-1deg); }
30% { transform: translateX(7px) rotate(0.8deg); }
45% { transform: translateX(-6px) rotate(-0.6deg); }
60% { transform: translateX(5px) rotate(0.4deg); }
75% { transform: translateX(-3px) rotate(-0.2deg); }
90% { transform: translateX(2px) rotate(0.1deg); }
}
@keyframes error-glow {
0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.6); }
50% { box-shadow: 0 0 20px rgba(239, 68, 68, 0.4); }
100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
}
.feedback-message.error {
border-left: 3px solid var(--message-error);
animation: shake 0.7s ease-in-out, error-glow 1.5s ease-in-out infinite;
}
.error-explanation {
font-size: 0.9em;
opacity: 0.7;
margin-top: 10px;
font-style: italic;
}
.answer-reveal {
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.reveal-button {
margin-top: 15px;
padding: 8px 16px;
background: transparent;
border: 1px solid var(--primary);
color: var(--primary);
border-radius: var(--border-radius);
font-size: 14px;
cursor: pointer;
transition: var(--transition);
}
.reveal-button:hover {
background: rgba(16, 163, 127, 0.1);
}
button {
flex: 1;
padding: 10px 16px;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: var(--border-radius);
cursor: pointer;
font-size: 14px;
font-weight: 500;
letter-spacing: 0.3px;
transition: var(--transition);
position: relative;
overflow: hidden;
background: var(--dark);
color: var(--light);
}
button:hover {
background: rgba(255, 255, 255, 0.05);
}
button:disabled {
opacity: 0.5;
cursor: not-allowed;
background: rgba(255, 255, 255, 0.05);
}
.active {
background: var(--primary);
color: white;
border-color: var(--primary);
}
button:not(.active) {
background: var(--dark);
color: var(--light);
}
.not-matching {
position: relative;
}
.not-matching::after {
content: 'ERROR';
position: absolute;
top: -10px;
right: -10px;
background: red;
color: white;
padding: 4px 8px;
border-radius: 10px;
font-size: 12px;
font-weight: bold;
}
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.3);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
backdrop-filter: blur(3px);
animation: fadeIn 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes fadeIn {
from {
opacity: 0;
backdrop-filter: blur(0);
}
to {
opacity: 1;
backdrop-filter: blur(3px);
}
}
.modal {
background: transparent;
padding: 40px;
max-width: 600px;
width: 90%;
font-family: var(--font-main);
color: var(--light);
position: relative;
overflow: hidden;
text-align: center;
animation: slideUp 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes slideUp {
from {
transform: translateY(40px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
.modal h2 {
color: var(--light);
margin-bottom: 24px;
font-size: 24px;
font-weight: 600;
letter-spacing: 0.3px;
opacity: 0.95;
}
.modal p {
font-size: 16px;
line-height: 1.6;
margin-bottom: 32px;
opacity: 0.9;
font-weight: 400;
}
.modal button {
background: var(--primary);
color: white;
border: none;
padding: 12px 24px;
border-radius: 8px;
font-size: 15px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
width: auto;
margin: 0 auto;
display: inline-flex;
}
.modal button:hover {
background: var(--secondary);
transform: translateY(-1px);
}
/* ...existing styles... */
.answer-button {
position: absolute;
right: -75px;
top: 50%;
transform: translateY(-50%);
background: var(--primary);
color: white;
border: none;
height: 36px;
padding: 0 16px;
border-radius: 8px;
font-size: 14px;
min-width: auto;
}
.answer-button:hover {
background: var(--secondary);
}
.chat-input {
padding-right: 100px;
}
/* ...rest of existing styles... */
[data-transform-origin=bottom] .ds-fade-in-zoom-in-enter,
[data-transform-origin=bottom] .ds-fade-in-zoom-in-exit {
transform-origin: bottom;
}
[data-transform-origin=bottom\ left] .ds-fade-in-zoom-in-enter,
[data-transform-origin=bottom\ left] .ds-fade-in-zoom-in-exit {
transform-origin: 0 100%;
}
[data-transform-origin=bottom\ right] .ds-fade-in-zoom-in-enter,
[data-transform-origin=bottom\ right] .ds-fade-in-zoom-in-exit {
transform-origin: 100% 100%;
}
[data-transform-origin=top] .ds-fade-in-zoom-in-enter,
[data-transform-origin=top] .ds-fade-in-zoom-in-exit {
transform-origin: top;
}
[data-transform-origin=top\ left] .ds-fade-in-zoom-in-enter,
[data-transform-origin=top\ left] .ds-fade-in-zoom-in-exit {
transform-origin: 0 0;
}
[data-transform-origin=top\ right] .ds-fade-in-zoom-in-enter,
[data-transform-origin=top\ right] .ds-fade-in-zoom-in-exit {
transform-origin: 100% 0;
}
[data-transform-origin=left] .ds-fade-in-zoom-in-enter,
[data-transform-origin=left] .ds-fade-in-zoom-in-exit {
transform-origin: 0;
}
[data-transform-origin=right] .ds-fade-in-zoom-in-enter,
[data-transform-origin=right] .ds-fade-in-zoom-in-exit {
transform-origin: 100%;
}
[data-transform-origin=center] .ds-fade-in-zoom-in-enter,
[data-transform-origin=center] .ds-fade-in-zoom-in-exit {
transform-origin: 50%;
}
.ds-fade-in-zoom-in-enter {
opacity: 0;
transform: scale(.96);
}
.ds-fade-in-zoom-in-active {
opacity: 1;
transition: opacity var(--ds-ease-in) var(--ds-transition-duration-fast),
transform var(--ds-ease-in) var(--ds-transition-duration-fast);
transform: scale(1);
}
.ds-fade-in-zoom-in-exit {
opacity: 1;
transform: scale(1);
}
.ds-fade-in-zoom-in-exit-active {
opacity: 0;
transition: opacity var(--ds-ease-out) var(--ds-transition-duration-fast),
transform var(--ds-ease-out) var (--ds-transition-duration-fast);
transform: scale(.96);
}
.standard-button, .answer-button {
flex: 1;
max-width: 120px;
height: 44px;
padding: 0 18px;
border-radius: var(--border-radius);
font-size: 14px;
font-weight: 500;
display: flex;
align-items: center;
justify-content: center;
transition: var(--transition);
}
.standard-button {
background: rgba(64, 65, 79, 0.9);
color: var(--light);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.answer-button {
background: var(--primary);
color: white;
border: none;
}
.standard-button.active {
background: var(--primary);
color: white;
border-color: var(--primary);
box-shadow: 0 0 0 1px rgba(16, 163, 127, 0.2);
}
.chat-input-container {
position: relative;
padding: 20px;
background: transparent;
width: 100%;
display: flex;
justify-content: center;
}
.chat-input-wrapper {
position: relative;
display: flex;
flex-direction: column;
gap: 12px;
width: 100%;
max-width: 600px;
margin: 0 auto;
}
.button-group {
display: flex;
gap: 8px;
margin-bottom: 4px;
justify-content: center;
}
.input-with-button {
position: relative;
display: flex;
width: 100%;
}
.chat-input {
width: 100%;
min-height: 50px;
padding: 14px 16px;
border-radius: var(--border-radius);
border: 1px solid rgba(255, 255, 255, 0.2);
background: rgba(64, 65, 79, 0.3);
color: var(--light);
font-size: 15px;
line-height: 1.5;
resize: none;
outline: none;
transition: var(--transition);
font-family: var(--font-main);
backdrop-filter: blur(8px);
}
.chat-input:focus {
border-color: var(--primary);
background: rgba(64, 65, 79, 0.4);
box-shadow: 0 0 0 1px rgba(16, 163, 127, 0.2);
}
.chat-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.standard-button {
background: transparent;
color: var(--light);
border: 1px solid rgba(255, 255, 255, 0.2);
padding: 8px 16px;
height: 36px;
font-size: 13px;
border-radius: 8px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
flex: 0 0 auto;
min-width: 90px;
}
.standard-button:hover {
transform: translateY(-2px);
background: rgba(255, 255, 255, 0.15);
border-color: rgba(255, 255, 255, 0.4);
}
.standard-button.active {
animation: none;
}
.thinking {
display: flex;
gap: 8px;
padding: 16px 20px;
background: var(--dark);
border-radius: var(--border-radius);
margin-right: auto;
align-items: center;
position: relative;
border-left: 3px solid var(--message-ai);
padding-left: 16px;
overflow: hidden;
}
.dot {
width: 10px;
height: 10px;
background: rgba(255, 255, 255, 0.8);
border-radius: 50%;
animation: bounce 1.4s infinite cubic-bezier(0.455, 0.03, 0.515, 0.955);
}
.dot:nth-child(1) {
animation-delay: -0.32s;
background: var(--message-ai);
}
.dot:nth-child(2) {
animation-delay: -0.16s;
background: var(--message-ai);
}
.dot:nth-child(3) {
animation-delay: 0s;
background: var(--message-ai);
}
@keyframes bounce {
0%, 80%, 100% {
transform: scale(0) translateY(0);
opacity: 0.3;
}
40% {
transform: scale(1.2) translateY(-10px);
opacity: 1;
}
}
/* ...rest of existing code... */
/* Tooltip styles */
.tooltip-wrapper {
position: relative;
display: inline-block;
}
.tooltip {
position: absolute;
bottom: calc(100% + 10px);
left: 50%;
transform: translateX(-50%) translateY(15px);
background: var(--dark);
color: var(--light);
padding: 12px 16px;
border-radius: 8px;
font-size: 13px;
width: 200px;
text-align: center;
opacity: 0;
visibility: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
border: 1px solid rgba(255, 255, 255, 0.1);
pointer-events: none;
z-index: 100;
line-height: 1.4;
}
.tooltip::after {
content: '';
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
border: 6px solid transparent;
border-top-color: var(--dark);
}
.tooltip-wrapper:hover .tooltip {
transform: translateX(-50%) translateY(0);
opacity: 1;
visibility: visible;
}
/* Input typing animation */
@keyframes typing {
0% { width: 0; opacity: 0; }
100% { width: 100%; opacity: 1; }
}
/* Default state - no animation */
.chat-input {
opacity: 1;
width: 100%;
animation: none;
}
/* Only animate when new-prompt class is applied */
.chat-input.new-prompt {
animation: typing 0.8s ease-out forwards;
}
/* ...rest of existing styles... */
/* Update button styles for independent selection */
.standard-button.active {
background: var(--primary);
color: white;
border-color: var(--primary);
box-shadow: 0 0 0 1px rgba(16, 163, 127, 0.2);
}
/* Remove the pulse animation from active buttons */
.standard-button.active {
animation: none;
}
/* Message appear animation */
@keyframes messageAppear {
0% {
opacity: 0;
transform: translateY(20px) scale(0.96);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}
/* Apply message animation only to user messages */
.user-message.message-appear {
animation: messageAppear 0.5s cubic-bezier(0.2, 0.6, 0.3, 1) forwards;
}
/* Remove message-appear animation from feedback messages that have their own animations */
.feedback-message.success.message-appear {
animation: success-pulse 0.7s ease-in-out, success-glow 1.5s ease-in-out infinite;
}
.feedback-message.error.message-appear {
animation: shake 0.7s ease-in-out, error-glow 1.5s ease-in-out infinite;
}
/* Add a basic appearance for thinking animation */
.thinking.message-appear {
animation: messageAppear 0.5s cubic-bezier(0.2, 0.6, 0.3, 1) forwards;
}
/* ...rest of existing styles... */
/* Corner images */
.corner-image {
position: fixed;
z-index: 0;
pointer-events: none; /* So they don't interfere with interactions */
opacity: 0.7;
transition: opacity 0.3s ease;
}
.corner-image:hover {
opacity: 1;
}
.corner-image-top-left {
top: 20px;
left: 20px;
max-width: 120px;
max-height: 120px;
animation: floatAnimation 6s ease-in-out infinite;
}
.corner-image-bottom-right {
bottom: 20px;
right: 20px;
max-width: 140px;
max-height: 140px;
animation: floatAnimation 8s ease-in-out infinite reverse;
}
@keyframes floatAnimation {
0% {
transform: translateY(0) rotate(0deg);
}
50% {
transform: translateY(-15px) rotate(5deg);
}
100% {
transform: translateY(0) rotate(0deg);
}
}
/* Make sure images don't interfere with mobile layout */
@media (max-width: 768px) {
.corner-image {
max-width: 80px;
max-height: 80px;
}
.corner-image-top-left {
top: 10px;
left: 10px;
}
.corner-image-bottom-right {
bottom: 10px;
right: 10px;
}
}
/* Company logo in corner */
.company-logo {
position: fixed;
bottom: 20px;
max-width: 280px; /* Much larger size */
max-height: 140px; /* Much larger size */
z-index: 5;
opacity: 0.9;
transition: opacity 0.3s ease, transform 0.3s ease;
}
.company-logo:hover {
opacity: 1;
transform: scale(1.05); /* Slight grow effect on hover */
}
/* Make sure logo doesn't interfere with mobile layout */
@media (max-width: 768px) {
.company-logo {
max-width: 180px; /* Larger but still reasonable for mobile */
max-height: 90px;
bottom: 10px;
}
}
/* ...rest of existing styles... */
/* Add specific styling for the input tooltip */
.input-tooltip-wrapper {
width: 100%;
display: block;
}
.input-tooltip {
width: 250px;
bottom: calc(100% + 15px);
}
/* Ensure tooltip appears over the textarea */
.input-with-button .tooltip-wrapper {
position: relative;
width: 100%;
}
/* ...existing styles... */
/* Energy Animation at the top */
.energy-animation {
position: fixed;
top: -100px;
left: 50%;
transform: translateX(-50%);
background: var(--dark);
border-radius: var(--border-radius-lg);
padding: 15px 25px;
display: flex;
align-items: center;
gap: 15px;
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.2);
z-index: 1000;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: top 0.6s cubic-bezier(0.2, 0.9, 0.3, 1.5);
opacity: 0;
}
.energy-animation.show {
top: 20px;
opacity: 1;
}
.energy-icon {
font-size: 28px;
animation: pulse 2s infinite;
}
.energy-text {
font-size: 16px;
font-weight: 500;
color: var(--light);
max-width: 260px;
}
@keyframes pulse {
0% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.2);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* Responsive design for the animation */
@media (max-width: 768px) {
.energy-animation {
width: 90%;
padding: 12px 18px;
}
.energy-text {
font-size: 14px;
}
.energy-icon {
font-size: 24px;
}
}
/* ...existing styles... */
/* Message send animation */
@keyframes messageSend {
0% {
opacity: 0;
transform: translateY(30px) scale(0.9);
}
70% {
opacity: 1;
transform: translateY(-5px) scale(1.02);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.message-send-animation {
animation: messageSend 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
}
/* Stagger animations for multiple messages */
.messages-container > div:nth-child(2) {
animation-delay: 0.15s;
}
.messages-container > div:nth-child(3) {
animation-delay: 0.3s;
}
/* ...existing styles... */
/* Company logos in corners - both at the bottom */
.company-logo {
position: fixed;
bottom: 20px;
max-width: 280px;
max-height: 140px;
z-index: 5;
opacity: 0.9;
transition: opacity 0.3s ease, transform 0.3s ease;
}
.company-logo:hover {
opacity: 1;
transform: scale(1.05); /* Slight grow effect on hover */
}
.company-logo-right {
right: 20px;
}
.company-logo-left {
left: 20px;
}
/* Make sure logos don't interfere with mobile layout */
@media (max-width: 768px) {
.company-logo {
max-width: 180px;
max-height: 90px;
bottom: 10px;
}
.company-logo-right {
right: 10px;
}
.company-logo-left {
left: 10px;
}
}
/* ...existing styles... */