| :root { |
| --bg: #1c1917; |
| --surface: #252220; |
| --surface-2: #322d29; |
| --border: #423b35; |
| --ink: #ede7df; |
| --ink-muted: #a89e92; |
| --ink-faint: #766c62; |
| --brass: #c69a4e; |
| --brass-soft: rgba(198, 154, 78, 0.14); |
| --sage: #86a97e; |
| --sage-soft: rgba(134, 169, 126, 0.14); |
| --rust: #c47a4e; |
| --rust-soft: rgba(196, 122, 78, 0.14); |
| --error: #c15a4c; |
| --error-soft: rgba(193, 90, 76, 0.14); |
| --radius: 10px; |
| --font-display: "Fraunces", ui-serif, Georgia, serif; |
| --font-body: "Inter", ui-sans-serif, system-ui, sans-serif; |
| --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", monospace; |
| } |
|
|
| * { box-sizing: border-box; } |
|
|
| html, body { |
| height: 100%; |
| margin: 0; |
| background: var(--bg); |
| color: var(--ink); |
| font-family: var(--font-body); |
| -webkit-font-smoothing: antialiased; |
| } |
|
|
| body { |
| display: flex; |
| flex-direction: column; |
| } |
|
|
| ::selection { background: var(--brass-soft); color: var(--ink); } |
|
|
| button, textarea, input { |
| font-family: inherit; |
| color: inherit; |
| } |
|
|
| |
|
|
| .topbar { |
| display: flex; |
| align-items: center; |
| gap: 14px; |
| padding: 14px 22px; |
| border-bottom: 1px solid var(--border); |
| background: linear-gradient(180deg, var(--surface), var(--bg)); |
| flex-shrink: 0; |
| } |
|
|
| .brand { display: flex; align-items: center; gap: 12px; } |
| .brand__mark { width: 34px; height: 34px; flex-shrink: 0; } |
| .brand__mark--sm { width: 20px; height: 20px; } |
|
|
| .brand__text h1 { |
| font-family: var(--font-display); |
| font-weight: 600; |
| font-size: 1.35rem; |
| margin: 0; |
| letter-spacing: 0.01em; |
| } |
|
|
| .brand__tagline { |
| margin: 1px 0 0; |
| font-size: 0.78rem; |
| color: var(--ink-muted); |
| } |
|
|
| .model-picker { |
| display: flex; |
| align-items: center; |
| gap: 6px; |
| margin-left: auto; |
| } |
| .model-picker__label { |
| font-size: 0.68rem; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| color: var(--ink-faint); |
| } |
| .model-picker__select { |
| background: var(--surface-2); |
| border: 1px solid var(--border); |
| border-radius: 6px; |
| color: var(--ink-muted); |
| font-size: 0.78rem; |
| padding: 4px 24px 4px 8px; |
| max-width: 160px; |
| cursor: pointer; |
| -webkit-appearance: none; |
| appearance: none; |
| background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1 L5 5 L9 1' stroke='%23a89e92' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); |
| background-repeat: no-repeat; |
| background-position: right 6px center; |
| } |
| .model-picker__select:hover { border-color: var(--brass); } |
| .model-picker__select:focus-visible { outline: 2px solid var(--brass); outline-offset: 1px; } |
|
|
| .status { |
| display: flex; |
| align-items: center; |
| gap: 7px; |
| font-size: 0.8rem; |
| color: var(--ink-muted); |
| text-transform: lowercase; |
| } |
|
|
| .status__dot { |
| width: 7px; |
| height: 7px; |
| border-radius: 50%; |
| background: var(--sage); |
| box-shadow: 0 0 0 3px var(--sage-soft); |
| } |
| .status__dot.busy { background: var(--brass); box-shadow: 0 0 0 3px var(--brass-soft); } |
|
|
| .bench-toggle { |
| display: none; |
| align-items: center; |
| gap: 6px; |
| background: var(--surface-2); |
| border: 1px solid var(--border); |
| color: var(--ink-muted); |
| border-radius: 8px; |
| padding: 7px 11px; |
| font-size: 0.78rem; |
| cursor: pointer; |
| } |
| .bench-toggle svg { width: 15px; height: 15px; } |
|
|
| |
|
|
| .layout { |
| flex: 1; |
| display: grid; |
| grid-template-columns: 1fr 320px; |
| min-height: 0; |
| } |
|
|
| .chat { |
| display: flex; |
| flex-direction: column; |
| min-height: 0; |
| border-right: 1px solid var(--border); |
| } |
|
|
| .chat__log { |
| flex: 1; |
| overflow-y: auto; |
| padding: 26px 26px 6px; |
| display: flex; |
| flex-direction: column; |
| gap: 16px; |
| } |
|
|
| |
|
|
| .msg { |
| max-width: 62ch; |
| line-height: 1.55; |
| font-size: 0.96rem; |
| animation: rise 0.25s ease; |
| } |
|
|
| @keyframes rise { |
| from { opacity: 0; transform: translateY(4px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
|
|
| .msg--user { |
| align-self: flex-end; |
| background: var(--brass-soft); |
| border: 1px solid var(--brass-soft); |
| color: var(--ink); |
| padding: 10px 15px; |
| border-radius: 12px 12px 3px 12px; |
| } |
|
|
| .msg--assistant { |
| align-self: flex-start; |
| padding: 2px 0 2px 0; |
| white-space: pre-wrap; |
| } |
|
|
| .msg--assistant::before { |
| content: attr(data-name); |
| display: block; |
| font-family: var(--font-display); |
| font-size: 0.72rem; |
| letter-spacing: 0.06em; |
| text-transform: uppercase; |
| color: var(--brass); |
| margin-bottom: 3px; |
| } |
|
|
| .msg--system { |
| align-self: center; |
| font-size: 0.76rem; |
| color: var(--ink-faint); |
| border-top: 1px solid var(--border); |
| border-bottom: 1px solid var(--border); |
| padding: 5px 0; |
| width: 100%; |
| text-align: center; |
| } |
|
|
| .msg--system.is-error { color: var(--error); } |
|
|
| |
|
|
| .ticket { |
| align-self: stretch; |
| position: relative; |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: var(--radius); |
| padding: 16px 18px 14px; |
| max-width: 62ch; |
| } |
|
|
| .ticket__top { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 10px; |
| } |
|
|
| .ticket__name { |
| font-family: var(--font-mono); |
| font-size: 0.92rem; |
| font-weight: 500; |
| color: var(--ink); |
| } |
|
|
| .ticket__kind { |
| font-size: 0.68rem; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| color: var(--ink-faint); |
| margin-left: 8px; |
| } |
|
|
| .stamp { |
| font-family: var(--font-display); |
| font-size: 0.65rem; |
| font-weight: 700; |
| letter-spacing: 0.08em; |
| text-transform: uppercase; |
| border: 1.5px solid var(--brass); |
| color: var(--brass); |
| padding: 3px 9px; |
| border-radius: 4px; |
| transform: rotate(-4deg); |
| white-space: nowrap; |
| flex-shrink: 0; |
| } |
| .stamp.approved { border-color: var(--sage); color: var(--sage); } |
| .stamp.rejected { border-color: var(--error); color: var(--error); } |
|
|
| .ticket__desc { |
| margin: 8px 0 4px; |
| font-size: 0.88rem; |
| color: var(--ink-muted); |
| } |
|
|
| .ticket__reason { |
| margin: 0 0 10px; |
| font-size: 0.82rem; |
| color: var(--ink-faint); |
| font-style: italic; |
| } |
|
|
| .ticket details { |
| margin: 8px 0 12px; |
| border: 1px solid var(--border); |
| border-radius: 7px; |
| overflow: hidden; |
| } |
|
|
| .ticket summary { |
| cursor: pointer; |
| padding: 7px 11px; |
| font-size: 0.76rem; |
| color: var(--ink-muted); |
| background: var(--surface-2); |
| user-select: none; |
| } |
|
|
| .ticket pre { |
| margin: 0; |
| padding: 12px 14px; |
| font-family: var(--font-mono); |
| font-size: 0.79rem; |
| line-height: 1.5; |
| color: var(--ink); |
| overflow-x: auto; |
| background: #16130f; |
| } |
|
|
| .ticket__actions { |
| display: flex; |
| gap: 8px; |
| } |
|
|
| .ticket__btn { |
| display: inline-flex; |
| align-items: center; |
| gap: 6px; |
| border-radius: 7px; |
| padding: 7px 13px; |
| font-size: 0.82rem; |
| font-weight: 500; |
| border: 1px solid transparent; |
| cursor: pointer; |
| } |
| .ticket__btn svg { width: 14px; height: 14px; } |
|
|
| .ticket__btn--approve { |
| background: var(--sage-soft); |
| border-color: var(--sage); |
| color: var(--sage); |
| } |
| .ticket__btn--approve:hover { background: var(--sage); color: #16130f; } |
|
|
| .ticket__btn--reject { |
| background: transparent; |
| border-color: var(--border); |
| color: var(--ink-muted); |
| } |
| .ticket__btn--reject:hover { border-color: var(--error); color: var(--error); } |
|
|
| .ticket__resolved { |
| font-size: 0.8rem; |
| color: var(--ink-faint); |
| } |
|
|
| |
|
|
| .thinking { |
| display: flex; |
| align-items: center; |
| gap: 8px; |
| padding: 4px 26px 10px; |
| font-size: 0.82rem; |
| color: var(--ink-muted); |
| } |
|
|
| .dots { display: inline-flex; gap: 3px; } |
| .dots i { |
| width: 4px; height: 4px; border-radius: 50%; |
| background: var(--brass); |
| animation: blink 1.1s infinite ease-in-out; |
| } |
| .dots i:nth-child(2) { animation-delay: 0.15s; } |
| .dots i:nth-child(3) { animation-delay: 0.3s; } |
|
|
| @keyframes blink { |
| 0%, 80%, 100% { opacity: 0.2; } |
| 40% { opacity: 1; } |
| } |
|
|
| @media (prefers-reduced-motion: reduce) { |
| .msg, .dots i { animation: none; } |
| } |
|
|
| |
|
|
| .composer { |
| display: flex; |
| align-items: flex-end; |
| gap: 10px; |
| padding: 14px 22px 20px; |
| border-top: 1px solid var(--border); |
| } |
|
|
| .composer textarea { |
| flex: 1; |
| resize: none; |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| padding: 11px 14px; |
| color: var(--ink); |
| font-size: 0.94rem; |
| max-height: 160px; |
| line-height: 1.4; |
| } |
| .composer textarea:focus { |
| outline: none; |
| border-color: var(--brass); |
| } |
| .composer textarea::placeholder { color: var(--ink-faint); } |
|
|
| .composer button { |
| background: var(--brass); |
| border: none; |
| color: #1c1917; |
| width: 40px; |
| height: 40px; |
| border-radius: 10px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| cursor: pointer; |
| flex-shrink: 0; |
| } |
| .composer button svg { width: 18px; height: 18px; } |
| .composer button:hover { background: #d6ab5c; } |
| .composer button:focus-visible, |
| .ticket__btn:focus-visible, |
| .bench-toggle:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; } |
|
|
| |
|
|
| .toolbench { |
| padding: 22px 20px; |
| overflow-y: auto; |
| background: var(--surface); |
| } |
|
|
| .toolbench h2 { |
| font-family: var(--font-display); |
| font-size: 1rem; |
| margin: 0 0 4px; |
| } |
|
|
| .toolbench__hint { |
| font-size: 0.78rem; |
| color: var(--ink-faint); |
| margin: 0 0 16px; |
| } |
|
|
| .toolbench__list { |
| display: flex; |
| flex-direction: column; |
| gap: 8px; |
| } |
|
|
| .tool-row { |
| display: flex; |
| align-items: center; |
| gap: 9px; |
| padding: 9px 10px; |
| border: 1px solid var(--border); |
| border-radius: 8px; |
| background: var(--surface-2); |
| } |
|
|
| .tool-row__dot { |
| width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; |
| } |
| .tool-row__dot.approved { background: var(--sage); } |
| .tool-row__dot.pending { background: var(--brass); } |
| .tool-row__dot.rejected { background: var(--error); } |
|
|
| .tool-row__name { |
| font-family: var(--font-mono); |
| font-size: 0.8rem; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| white-space: nowrap; |
| } |
|
|
| .tool-row__status { |
| margin-left: auto; |
| font-size: 0.68rem; |
| color: var(--ink-faint); |
| text-transform: uppercase; |
| letter-spacing: 0.04em; |
| } |
|
|
| .toolbench__empty { |
| font-size: 0.8rem; |
| color: var(--ink-faint); |
| font-style: italic; |
| } |
|
|
| |
|
|
| @media (max-width: 860px) { |
| .layout { grid-template-columns: 1fr; } |
| .bench-toggle { display: inline-flex; } |
| .toolbench { |
| position: fixed; |
| inset: 0 0 0 auto; |
| width: min(84vw, 340px); |
| transform: translateX(100%); |
| transition: transform 0.2s ease; |
| border-left: 1px solid var(--border); |
| z-index: 20; |
| } |
| .toolbench.open { transform: translateX(0); } |
| .chat { border-right: none; } |
| .chat__log { padding: 18px 16px 6px; } |
| .composer { padding: 12px 16px 16px; } |
| } |
|
|