@import "tailwindcss";
@theme {
--color-brand: #c20600;
--color-bg-primary: #0a0a0a;
--color-bg-secondary: #121212;
--color-bg-tertiary: #1a1a1a;
--color-bg-elevated: #202020;
--color-text-primary: #d4d4d4;
--color-text-secondary: #a3a3a3;
--color-text-muted: #737373;
--color-border-subtle: #1a1a1a;
--color-border-default: #2a2a2a;
--color-border-highlight: #3a3a3a;
--font-mono: "Fira Code", "Courier New", Courier, monospace;
--font-sans:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--spacing-header: 48px;
--spacing-status: 32px;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: var(--font-sans);
background-color: var(--color-bg-primary);
color: var(--color-text-primary);
line-height: 1.5;
font-size: 14px;
}
#root {
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: none;
}
button {
cursor: pointer;
font-family: inherit;
font-size: inherit;
}
.tool-call {
margin-top: theme("spacing.4");
margin-bottom: theme("spacing.4");
}
.tool-call + .tool-call {
margin-top: 0;
}
input,
textarea {
font-family: inherit;
font-size: inherit;
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-bg-secondary);
}
::-webkit-scrollbar-thumb {
background: var(--color-border-default);
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-border-highlight);
}
@keyframes strobe {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0.4;
}
}
.strobe {
animation: strobe 1.2s ease-in-out infinite;
}
/* ── CodeMirror Editor Layout ─────────────────────────────── */
/* The CodeMirror component must be constrained to its flex allocation
* and scroll within it. The layout chain is:
*
* .cm-editor-container (flex-1, min-h-0 in the flex column)
* └─
(wrapper div rendered by @uiw/react-codemirror)
* └─ .cm-editor (the actual editor chrome)
* └─ .cm-scroller (the scrollable content area)
*
* Every level must have height:100% and overflow:hidden so the
* scroller is the only thing that scrolls.
*/
.cm-editor-container {
display: flex;
flex-direction: column;
min-height: 0;
overflow: hidden;
}
/* The wrapper div that @uiw/react-codemirror renders directly inside
* the container — this is NOT .cm-editor, it's the parent of .cm-editor.
* Must fill the container and pass the height constraint down. */
.cm-editor-container > div {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.cm-editor-container .cm-editor {
flex: 1;
min-height: 0;
overflow: hidden;
}
.cm-editor-container .cm-scroller {
min-height: 0;
overflow: auto;
}
/* ── Gadget Markdown Styles ─────────────────────────────────── */
/* Dense, technical display — no blog-style whitespace */
.gadget-markdown {
color: var(--color-text-primary);
line-height: 1.5;
word-break: break-word;
display: inline-block;
width: 100%;
max-width: 100%;
margin-bottom: 8px;
:last-child {
margin-bottom: 0;
}
}
.gadget-markdown h1,
.gadget-markdown h2,
.gadget-markdown h3,
.gadget-markdown h4,
.gadget-markdown h5,
.gadget-markdown h6 {
color: #e8e8e8;
font-weight: 600;
line-height: 1.25;
margin-top: 0.5rem;
margin-bottom: 0.25rem;
}
.gadget-markdown h1 {
font-size: 1.5em;
/* border-bottom: 1px solid var(--color-border-default); */
padding-bottom: 0.2em;
}
.gadget-markdown h2 {
font-size: 1.4em;
/* border-bottom: 1px solid var(--color-border-default); */
padding-bottom: 0.15em;
}
.gadget-markdown h3 {
font-size: 1.3em;
}
.gadget-markdown h4 {
font-size: 1.2em;
}
.gadget-markdown h5 {
font-size: 1.1em;
}
.gadget-markdown h6 {
font-size: 1em;
}
.gadget-markdown p {
margin-top: 0;
margin-bottom: 0.8rem;
}
.gadget-markdown a {
color: #60a5fa;
text-decoration: underline;
}
.gadget-markdown a:hover {
color: #93c5fd;
}
/* Inline code */
.gadget-markdown code:not(pre code) {
font-family: var(--font-mono);
font-size: 0.85em;
background: #1e1e1e;
color: rgb(219, 219, 7);
padding: 0.1em 0.3em;
border-radius: 3px;
border: 1px solid #2d2d2d;
}
/* Code blocks */
.gadget-markdown pre {
line-height: 1rem;
background: #0d0d0d;
border: 1px solid #2a2a2a;
border-radius: 4px;
padding: 0.5rem 0.7rem;
overflow-x: auto;
margin-bottom: 0.5rem;
max-width: 100%;
width: 100%;
}
.gadget-markdown pre code {
font-family: var(--font-mono);
font-size: 0.85em;
color: #d4d4d4;
background: transparent;
padding: 0;
border: none;
border-radius: 0;
}
/* Tables */
.gadget-markdown table {
width: auto;
max-width: 100%;
border-collapse: collapse;
margin-bottom: 0.5rem;
font-size: 0.85em;
}
.gadget-markdown th,
.gadget-markdown td {
border: 1px solid #2a2a2a;
padding: 0.35em 0.6em;
text-align: left;
}
.gadget-markdown th {
background: #1a1a1a;
color: #e8e8e8;
font-weight: 600;
}
.gadget-markdown tr:nth-child(even) td {
background: #111111;
}
.gadget-markdown tr:nth-child(odd) td {
background: #0d0d0d;
}
/* Blockquotes */
.gadget-markdown blockquote {
border-left: 2px solid #3a3a3a;
margin: 0 0 0.35rem 0;
padding: 0.25rem 0.6rem;
color: var(--color-text-muted);
background: #111111;
border-radius: 0 3px 3px 0;
}
/* Lists */
.gadget-markdown ul,
.gadget-markdown ol {
margin-bottom: 0.35rem;
padding-left: 1.2rem;
}
.gadget-markdown li {
margin-bottom: 0.15rem;
}
.gadget-markdown li::marker {
color: var(--color-text-muted);
}
/* Horizontal rule */
.gadget-markdown hr {
border: none;
border-top: 1px solid var(--color-border-default);
margin: 0.5rem 0;
}
/* Images */
.gadget-markdown img {
max-width: 100%;
border-radius: 4px;
border: 1px solid var(--color-border-default);
}
/* Strong / em */
.gadget-markdown strong {
color: #e8e8e8;
font-weight: 600;
}
.gadget-markdown em {
color: #c4c4c4;
}