.layout { display: flex; width: 100%; height: 100svh; } .chat { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; height: 100svh; max-width: 800px; margin: 0 auto; padding: 24px; box-sizing: border-box; } .header { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 24px; h1 { font-size: 32px; margin: 0; } p { color: var(--text); margin: 0; } } .headerActions { display: flex; align-items: center; gap: 12px; } .userName { font-size: 14px; font-weight: 600; color: var(--text-h); } .logoutButton { padding: 8px 14px; font-size: 13px; font-weight: 600; border: 1px solid var(--border); border-radius: 10px; background: var(--bg); color: var(--text-h); cursor: pointer; transition: background 0.2s; &:hover { background: #f0f0f0; } } .messages { flex: 1 1 auto; overflow-y: auto; display: flex; flex-direction: column; gap: 16px; padding-bottom: 16px; } .message { display: flex; &.user { justify-content: flex-end; } &.agent { justify-content: flex-start; } } .bubble { max-width: 70%; padding: 12px 16px; border-radius: 16px; background: #f5f5f5; color: #111; text-align: left; word-break: break-word; .role { display: block; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; color: #777; } .content { margin: 0; line-height: 1.5; /* Markdown rendering styles (agent messages) */ p { margin: 0 0 12px; &:last-child { margin-bottom: 0; } } h1, h2, h3, h4, h5, h6 { margin: 16px 0 8px; line-height: 1.3; &:first-child { margin-top: 0; } } h1 { font-size: 1.5em; } h2 { font-size: 1.35em; } h3 { font-size: 1.2em; } h4 { font-size: 1.1em; } ul, ol { margin: 0 0 12px; padding-left: 24px; } li { margin: 4px 0; } code { background: rgba(0, 0, 0, 0.06); padding: 2px 6px; border-radius: 4px; font-size: 0.9em; font-family: var(--mono, ui-monospace, monospace); } pre { background: rgba(0, 0, 0, 0.06); padding: 12px; border-radius: 8px; overflow-x: auto; margin: 0 0 12px; code { background: none; padding: 0; } } table { border-collapse: collapse; width: 100%; margin: 0 0 12px; font-size: 0.95em; } th, td { border: 1px solid var(--border, #e5e5e5); padding: 6px 10px; text-align: left; } th { background: rgba(0, 0, 0, 0.04); font-weight: 600; } hr { border: none; border-top: 1px solid var(--border, #e5e5e5); margin: 12px 0; } blockquote { margin: 0 0 12px; padding-left: 12px; border-left: 3px solid var(--border, #e5e5e5); color: #555; } a { color: #2563eb; text-decoration: underline; } } } .user .bubble { background: #222; color: #fff; .role { color: #aaa; } } .inputArea { display: flex; gap: 12px; padding-top: 16px; border-top: 1px solid var(--border); input { flex: 1 1 auto; padding: 12px 16px; font-size: 16px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg); color: var(--text-h); outline: none; transition: border-color 0.2s, box-shadow 0.2s; &:focus { border-color: #999; box-shadow: 0 0 0 3px #e5e5e5; } &:disabled { opacity: 0.6; cursor: not-allowed; } } button { flex: 0 0 auto; padding: 12px 24px; font-size: 16px; font-weight: 600; border: none; border-radius: 12px; background: #111; color: #fff; cursor: pointer; transition: opacity 0.2s, transform 0.1s; &:hover:not(:disabled) { opacity: 0.85; } &:active:not(:disabled) { transform: scale(0.98); } &:disabled { opacity: 0.5; cursor: not-allowed; } } .pauseButton { background: #b91c1c; } } .loading { display: flex; align-items: center; gap: 10px; color: var(--text); font-size: 14px; } .spinner { width: 16px; height: 16px; border: 2px solid #ddd; border-top-color: #111; border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .error { padding: 12px 16px; border-radius: 12px; background: #f5f5f5; color: #111; font-size: 14px; text-align: left; } .usageBanner { padding: 12px 16px; border-radius: 12px; background: #fff4e5; border: 1px solid #ffd8a8; color: #8a4b00; font-size: 14px; text-align: left; } .timeTravelToggle { padding: 8px 14px; font-size: 13px; font-weight: 600; border: 1px solid var(--border); border-radius: 10px; background: var(--bg); color: var(--text-h); cursor: pointer; transition: background 0.2s; &:hover:not(:disabled) { background: #f0f0f0; } &[aria-pressed='true'] { background: #111; color: #fff; border-color: #111; } &:disabled { opacity: 0.5; cursor: not-allowed; } } .cursor { display: inline-block; width: 2px; height: 1em; background: currentColor; margin-left: 2px; vertical-align: text-bottom; animation: blink 1s step-end infinite; } @keyframes blink { 50% { opacity: 0; } } @media (max-width: 640px) { .chat { padding: 16px; } .bubble { max-width: 85%; } }