claude-web-chat/static/style.css
djuka 93dbb33198
All checks were successful
Tests / unit-tests (push) Successful in 8s
Ispravka dupliranja poruka i dodat Plan/Code mod
- Uklonjen --include-partial-messages (izazivao duple assistant evente)
- content_block_start preskače tool_use blokove (prazni divovi)
- Shift+Tab prebacuje između Code i Plan moda
- Plan mod šalje instrukciju da Claude samo planira bez izmena
- CSS za mode bar i plan poruke (plava boja, ⊞ prefix)

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

627 lines
12 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-secondary {
background: var(--bg-tertiary);
margin-right: 0.5rem;
}
.btn-secondary:hover {
background: var(--border);
}
.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;
}
.success-msg {
background: rgba(76, 175, 80, 0.15);
color: var(--success);
padding: 0.6rem 1rem;
border-radius: 8px;
margin-bottom: 1rem;
font-size: 0.9rem;
text-align: center;
}
.form-footer {
margin-top: 1rem;
text-align: center;
font-size: 0.85rem;
}
/* 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; }
}
/* Mode bar */
.mode-bar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.3rem 0;
margin-bottom: 0.3rem;
}
.mode-indicator {
display: flex;
gap: 0;
border: 1px solid var(--border);
border-radius: 4px;
overflow: hidden;
}
.mode-label {
padding: 0.2rem 0.6rem;
font-size: 0.75rem;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
color: var(--text-muted);
cursor: pointer;
transition: all 0.15s;
user-select: none;
}
.mode-label:hover {
color: var(--text-secondary);
background: rgba(255, 255, 255, 0.05);
}
.mode-label.mode-active {
background: var(--accent);
color: #fff;
}
.mode-hint {
font-size: 0.65rem;
color: var(--text-muted);
font-family: 'JetBrains Mono', 'Fira Code', monospace;
}
/* Plan mode user messages */
.message-user-plan {
color: #64b5f6 !important;
}
.message-user-plan::before {
content: "⊞ " !important;
color: #64b5f6 !important;
}
/* 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;
}