claude-web-chat/static/style.css
djuka 6c0ca3a96f
All checks were successful
Tests / unit-tests (push) Successful in 25s
Dodato kreiranje projekta kroz UI i change-password template
- CreateProject() sa validacijom imena (regex, duplikati, prazno)
- POST /projects/create ruta sa AuthMiddleware
- Modal forma na projects stranici za unos imena
- 10 unit testova za CreateProject
- change-password.html template i testovi
- Ažuriran TESTING.md sa novom sekcijom

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 06:27:10 +00:00

672 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);
color: #fff;
}
.btn-secondary {
background: var(--bg-tertiary);
margin-right: 0.5rem;
}
.btn-secondary:hover {
background: var(--border);
color: #fff;
}
.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);
}
/* Modal */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.6);
display: flex;
align-items: center;
justify-content: center;
z-index: 200;
}
.modal-box {
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 12px;
padding: 2rem;
width: 100%;
max-width: 420px;
box-shadow: 0 8px 32px var(--shadow);
}
.modal-box h2 {
color: var(--accent);
margin-bottom: 1.2rem;
font-size: 1.2rem;
}
.modal-hint {
color: var(--text-muted);
font-size: 0.8rem;
margin-top: 0.3rem;
margin-bottom: 1rem;
}
.modal-actions {
display: flex;
justify-content: flex-end;
gap: 0.5rem;
}
/* Hidden */
.hidden {
display: none !important;
}