claude-web-chat/static/style.css
djuka 0ce03c27e3
All checks were successful
Tests / unit-tests (push) Successful in 8s
Terminal UI stil, markdown tabele i prikaz troškova
- Dodat goldmark sa Table/Strikethrough/TaskList ekstenzijama (markdown.go)
- Prepisana CSS tema na konzolni stil (JetBrains Mono, tamna pozadina, prompt prefix)
- Prikaz troškova i trajanja posle svakog Claude odgovora (duration, cost, turns)
- Ispravljen parsing result eventa (json.RawMessage + top-level polja)
- Ispravljen concurrent write bug na WebSocket (write channel pattern)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 05:38:47 +00:00

549 lines
10 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:root {
--bg-primary: #1a1a2e;
--bg-secondary: #16213e;
--bg-tertiary: #0f3460;
--bg-input: #1e2a4a;
--text-primary: #e0e0e0;
--text-secondary: #a0a0b0;
--text-muted: #6c6c80;
--accent: #e94560;
--accent-hover: #ff6b81;
--border: #2a2a4a;
--success: #4caf50;
--warning: #ff9800;
--error: #f44336;
--code-bg: #0d1117;
--shadow: rgba(0, 0, 0, 0.3);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
min-height: 100vh;
}
a {
color: var(--accent);
text-decoration: none;
}
a:hover {
color: var(--accent-hover);
}
/* Login */
.login-container {
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.login-box {
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 12px;
padding: 2.5rem;
width: 100%;
max-width: 400px;
box-shadow: 0 8px 32px var(--shadow);
}
.login-box h1 {
text-align: center;
margin-bottom: 1.5rem;
font-size: 1.5rem;
color: var(--accent);
}
.form-group {
margin-bottom: 1rem;
}
.form-group label {
display: block;
margin-bottom: 0.4rem;
color: var(--text-secondary);
font-size: 0.9rem;
}
.form-group input {
width: 100%;
padding: 0.7rem 1rem;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text-primary);
font-size: 1rem;
outline: none;
transition: border-color 0.2s;
}
.form-group input:focus {
border-color: var(--accent);
}
.btn {
display: inline-block;
padding: 0.7rem 1.5rem;
background: var(--accent);
color: #fff;
border: none;
border-radius: 8px;
font-size: 1rem;
cursor: pointer;
transition: background 0.2s;
text-align: center;
}
.btn:hover {
background: var(--accent-hover);
}
.btn-full {
width: 100%;
}
.error-msg {
background: rgba(244, 67, 54, 0.15);
color: var(--error);
padding: 0.6rem 1rem;
border-radius: 8px;
margin-bottom: 1rem;
font-size: 0.9rem;
text-align: center;
}
/* Projects grid */
.projects-container {
max-width: 1000px;
margin: 0 auto;
padding: 2rem;
}
.projects-container h1 {
margin-bottom: 1.5rem;
color: var(--accent);
}
.projects-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.5rem;
}
.projects-header .btn {
padding: 0.5rem 1rem;
font-size: 0.85rem;
}
.projects-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1rem;
}
.project-card {
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.5rem;
cursor: pointer;
transition: border-color 0.2s, transform 0.1s;
text-decoration: none;
color: var(--text-primary);
display: block;
}
.project-card:hover {
border-color: var(--accent);
transform: translateY(-2px);
color: var(--text-primary);
}
.project-card h3 {
margin-bottom: 0.4rem;
}
.project-card p {
color: var(--text-secondary);
font-size: 0.85rem;
}
/* Chat layout — terminal style */
.chat-container {
display: flex;
height: 100vh;
}
.sidebar {
width: 280px;
background: var(--bg-secondary);
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
flex-shrink: 0;
}
.sidebar-header {
padding: 0.75rem 1rem;
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: center;
}
.sidebar-header h3 {
font-size: 0.9rem;
color: var(--text-secondary);
}
.sidebar-content {
flex: 1;
overflow-y: auto;
padding: 0.5rem;
}
.file-item {
padding: 0.4rem 0.75rem;
border-radius: 4px;
cursor: pointer;
font-size: 0.8rem;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
color: var(--text-secondary);
display: block;
text-decoration: none;
transition: background 0.15s;
}
.file-item:hover {
background: var(--bg-tertiary);
color: var(--text-primary);
}
.chat-main {
flex: 1;
display: flex;
flex-direction: column;
min-width: 0;
background: #0d1117;
}
.chat-header {
padding: 0.5rem 1rem;
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: center;
background: var(--bg-secondary);
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 0.85rem;
}
.chat-header h2 {
font-size: 0.9rem;
font-weight: normal;
color: var(--accent);
}
.chat-header .status {
font-size: 0.75rem;
color: var(--text-muted);
}
.chat-header .status.connected {
color: var(--success);
}
/* Terminal output area */
.chat-messages {
flex: 1;
overflow-y: auto;
padding: 0.75rem 1rem;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 0.85rem;
line-height: 1.6;
}
/* User input — prompt style */
.message {
padding: 0.3rem 0;
word-wrap: break-word;
max-width: 100%;
}
.message-user {
color: var(--success);
white-space: pre-wrap;
}
.message-user::before {
content: " ";
color: var(--accent);
font-weight: bold;
}
/* Claude response */
.message-assistant {
color: var(--text-primary);
padding: 0.4rem 0;
border-left: 2px solid var(--border);
padding-left: 0.75rem;
margin: 0.3rem 0;
}
.message-assistant .content {
/* rendered markdown, no pre-wrap */
}
/* System messages */
.message-system {
color: var(--text-muted);
font-size: 0.75rem;
padding: 0.15rem 0;
}
/* Tool calls — command style */
.message-tool {
color: var(--text-secondary);
font-size: 0.8rem;
padding: 0.2rem 0;
opacity: 0.7;
}
.message-tool .tool-name {
color: var(--warning);
font-weight: 600;
display: inline;
}
.message-tool .tool-name::before {
content: "⚙ ";
}
.message-tool div {
display: inline;
}
/* Typing indicator */
.typing-indicator {
color: var(--text-muted);
font-size: 0.8rem;
padding: 0.2rem 0;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
}
.typing-indicator .dots {
display: inline-block;
animation: blink 1.4s infinite;
}
@keyframes blink {
0%, 20% { opacity: 1; }
50% { opacity: 0.3; }
80%, 100% { opacity: 1; }
}
/* Input area — terminal prompt */
.chat-input-area {
padding: 0.5rem 1rem;
border-top: 1px solid var(--border);
background: #0d1117;
}
.chat-input-form {
display: flex;
gap: 0.5rem;
align-items: flex-end;
}
.chat-input {
flex: 1;
padding: 0.5rem 0.75rem;
background: transparent;
border: 1px solid var(--border);
border-radius: 4px;
color: var(--text-primary);
font-size: 0.85rem;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
outline: none;
resize: none;
min-height: 36px;
max-height: 200px;
}
.chat-input:focus {
border-color: var(--accent);
}
.chat-input-form .btn {
padding: 0.5rem 1rem;
font-size: 0.8rem;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
}
/* Markdown rendered content */
.message-assistant pre {
background: #161b22;
border: 1px solid var(--border);
border-radius: 4px;
padding: 0.6rem;
overflow-x: auto;
margin: 0.4rem 0;
font-size: 0.8rem;
}
.message-assistant code {
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 0.85em;
}
.message-assistant p code {
background: #161b22;
padding: 0.1rem 0.3rem;
border-radius: 3px;
font-size: 0.85em;
}
.message-assistant h1,
.message-assistant h2,
.message-assistant h3 {
color: var(--accent);
margin: 0.6rem 0 0.3rem;
font-size: 1em;
}
.message-assistant h1 { font-size: 1.1em; }
.message-assistant h2 { font-size: 1em; }
.message-assistant ul,
.message-assistant ol {
padding-left: 1.5rem;
margin: 0.3rem 0;
}
.message-assistant p {
margin: 0.3rem 0;
}
.message-assistant strong {
color: #fff;
}
/* Tables */
.message-assistant table,
.file-viewer-content table {
border-collapse: collapse;
margin: 0.5rem 0;
font-size: 0.8rem;
width: auto;
}
.message-assistant th,
.message-assistant td,
.file-viewer-content th,
.file-viewer-content td {
border: 1px solid var(--border);
padding: 0.3rem 0.6rem;
text-align: left;
}
.message-assistant th,
.file-viewer-content th {
background: #161b22;
color: var(--accent);
font-weight: 600;
}
.message-assistant tr:nth-child(even),
.file-viewer-content tr:nth-child(even) {
background: rgba(22, 27, 34, 0.5);
}
/* File viewer overlay */
.file-viewer {
position: fixed;
top: 0;
right: 0;
width: 50%;
height: 100vh;
background: #0d1117;
border-left: 1px solid var(--border);
z-index: 100;
display: flex;
flex-direction: column;
box-shadow: -4px 0 16px var(--shadow);
}
.file-viewer-header {
padding: 0.75rem 1rem;
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: center;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 0.85rem;
}
.file-viewer-content {
flex: 1;
overflow-y: auto;
padding: 1rem 1.5rem;
line-height: 1.6;
font-size: 0.9rem;
}
.file-viewer-content h1,
.file-viewer-content h2,
.file-viewer-content h3 {
margin: 0.8rem 0 0.4rem;
color: var(--accent);
}
.file-viewer-content pre {
background: #161b22;
border: 1px solid var(--border);
border-radius: 4px;
padding: 0.8rem;
overflow-x: auto;
}
.file-viewer-content code {
font-family: 'JetBrains Mono', 'Fira Code', monospace;
}
.file-viewer-content p {
margin: 0.4rem 0;
}
/* Scrollbar */
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: #0d1117;
}
::-webkit-scrollbar-thumb {
background: var(--border);
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-muted);
}
/* Hidden */
.hidden {
display: none !important;
}