| @import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Public+Sans:ital,wght@0,100..900;1,100..900&display=swap'); |
|
|
| :root { |
| |
| --color-paper: #F6F3EE; |
| --color-ink: #262521; |
| --color-moss: #4B6358; |
| --color-clay: #9C7A5B; |
| --color-signal: #B4483C; |
|
|
| |
| --font-display: 'Fraunces', serif; |
| --font-body: 'Public Sans', sans-serif; |
| --font-utility: 'IBM Plex Mono', monospace; |
| } |
|
|
| body { |
| background-color: var(--color-paper); |
| color: var(--color-ink); |
| font-family: var(--font-body); |
| } |
|
|
| |
| h1, |
| h2, |
| h3, |
| h4, |
| h5, |
| h6 { |
| font-family: var(--font-display); |
| } |
|
|
| .font-display { |
| font-family: var(--font-display); |
| } |
|
|
| .font-utility { |
| font-family: var(--font-utility); |
| } |
|
|
| .font-body { |
| font-family: var(--font-body); |
| } |
|
|
| |
| .fade-in { |
| animation: fadeIn 0.15s ease-out; |
| } |
|
|
| @keyframes fadeIn { |
| from { |
| opacity: 0; |
| transform: translateY(4px); |
| } |
|
|
| to { |
| opacity: 1; |
| transform: translateY(0); |
| } |
| } |
|
|
| @media (prefers-reduced-motion: reduce) { |
| .fade-in { |
| animation: none; |
| } |
| } |
|
|
| .custom-scrollbar::-webkit-scrollbar { |
| width: 6px; |
| } |
|
|
| .custom-scrollbar::-webkit-scrollbar-track { |
| background: var(--color-paper); |
| } |
|
|
| .custom-scrollbar::-webkit-scrollbar-thumb { |
| background: var(--color-clay); |
| border-radius: 3px; |
| } |
|
|
| .custom-scrollbar::-webkit-scrollbar-thumb:hover { |
| background: var(--color-moss); |
| } |
|
|
| |
| #loadingScreen { |
| position: fixed; |
| top: 0; |
| left: 0; |
| width: 100%; |
| height: 100%; |
| background: var(--color-paper); |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| z-index: 9999; |
| transition: opacity 0.5s ease-out; |
| } |
|
|
| #loadingScreen.hidden { |
| opacity: 0; |
| pointer-events: none; |
| } |
|
|
| .logo-text { |
| font-family: var(--font-display); |
| font-size: clamp(3rem, 10vw, 5rem); |
| font-weight: 400; |
| color: var(--color-ink); |
| margin-bottom: 1rem; |
| } |
|
|
| .loading-dots { |
| display: flex; |
| gap: 0.5rem; |
| margin-top: 1rem; |
| } |
|
|
| .loading-dots span { |
| width: 8px; |
| height: 8px; |
| border-radius: 50%; |
| background: var(--color-ink); |
| animation: breathe 2s infinite ease-in-out both; |
| } |
|
|
| @keyframes breathe { |
|
|
| 0%, |
| 100% { |
| transform: scale(0.8); |
| opacity: 0.3; |
| } |
|
|
| 50% { |
| transform: scale(1.2); |
| opacity: 0.8; |
| } |
| } |
|
|
| |
| .panel { |
| background: var(--color-paper); |
| border: 1px solid var(--color-ink); |
| box-shadow: none; |
| } |
|
|
| |
| .chat-input-container { |
| display: flex; |
| gap: 0.5rem; |
| align-items: center; |
| background: transparent; |
| padding: 0.75rem; |
| border: 1px solid var(--color-ink); |
| border-radius: 0; |
| } |
|
|
| .chat-input { |
| flex: 1; |
| background: transparent; |
| border: none; |
| outline: none; |
| color: var(--color-ink); |
| font-family: var(--font-body); |
| font-size: 0.95rem; |
| padding: 0.5rem 1rem; |
| } |
|
|
| .chat-input::placeholder { |
| color: var(--color-clay); |
| } |
|
|
| |
| .btn-primary { |
| background: var(--color-moss); |
| color: var(--color-paper); |
| border: 1px solid var(--color-moss); |
| padding: 0.5rem 1rem; |
| font-family: var(--font-body); |
| cursor: pointer; |
| transition: background 0.2s ease, color 0.2s ease; |
| } |
|
|
| .btn-primary:hover { |
| background: transparent; |
| color: var(--color-moss); |
| } |
|
|
| .btn-primary:disabled { |
| opacity: 0.5; |
| cursor: not-allowed; |
| } |
|
|
| .btn-toggle { |
| background: transparent; |
| color: var(--color-ink); |
| border: none; |
| border-bottom: 2px solid transparent; |
| padding: 0.5rem; |
| font-family: var(--font-body); |
| cursor: pointer; |
| } |
|
|
| .btn-toggle.active { |
| border-bottom-color: var(--color-moss); |
| font-weight: 600; |
| } |
|
|
| |
| .message-user { |
| text-align: left; |
| font-family: var(--font-body); |
| color: var(--color-ink); |
| padding: 1rem 0; |
| } |
|
|
| .message-assistant { |
| text-align: left; |
| font-family: var(--font-body); |
| color: var(--color-ink); |
| padding: 1rem 0; |
| } |
|
|
| .assistant-label { |
| font-family: var(--font-utility); |
| color: var(--color-clay); |
| font-size: 0.8rem; |
| text-transform: uppercase; |
| letter-spacing: 0.05em; |
| display: block; |
| margin-bottom: 0.5rem; |
| } |
|
|
| .safety-banner { |
| background: var(--color-paper); |
| border: 1px solid var(--color-signal); |
| color: var(--color-ink); |
| padding: 1rem; |
| margin: 1rem 0; |
| } |
|
|
| .safety-banner-title { |
| color: var(--color-signal); |
| font-family: var(--font-display); |
| margin-bottom: 0.5rem; |
| } |
|
|
| .typing-indicator span { |
| display: inline-block; |
| width: 6px; |
| height: 6px; |
| border-radius: 50%; |
| background: var(--color-ink); |
| animation: breathe 1.4s infinite; |
| } |
|
|
| .typing-indicator span:nth-child(2) { |
| animation-delay: 0.2s; |
| } |
|
|
| .typing-indicator span:nth-child(3) { |
| animation-delay: 0.4s; |
| } |
|
|
| .dashboard-label { |
| font-family: var(--font-utility); |
| color: var(--color-clay); |
| font-size: 0.85rem; |
| text-transform: uppercase; |
| } |
|
|
| .dashboard-value { |
| font-family: var(--font-body); |
| color: var(--color-ink); |
| } |