automata/web/root/editor.css
Parker TenBroeck f1b8c08e8f added web UI
2025-12-24 19:11:32 -05:00

372 lines
No EOL
6.3 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.

html,
body {
height: 100%;
width: 100%;
margin: 0;
font-family: system-ui, sans-serif;
background: #909090;
}
.wrap {
height: 100vh;
width: 100vw;
display: grid;
grid-template-rows: var(--topH, 50vh) 8px 1fr;
/* top pane, splitter, editor */
overflow: hidden;
}
/* Top pane: terminal area */
.topPane {
display: grid;
grid-template-columns: var(--termW, 50vw) 8px 1fr;
/* terminal, splitter, filler */
min-height: 80px;
overflow: hidden;
}
/* Bottom pane: editor */
.bottomPane {
min-height: 120px;
overflow: hidden;
}
/* Make editor fill its pane */
#editor {
height: 100%;
width: 100%;
}
.terminal {
background: #0b0f14;
color: #c9d1d9;
padding: 1em;
margin: 0px;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
font-size: 12.5px;
line-height: 1.35;
white-space: pre-wrap;
word-break: break-word;
}
/* ANSI text styles */
.ansi-bold { font-weight: 700; }
.ansi-dim { opacity: 0.7; }
/* Foreground colors (standard + bright) */
.ansi-fg-30 { color: #0b0f14; } /* black */
.ansi-fg-31 { color: #ff7b72; } /* red */
.ansi-fg-32 { color: #7ee787; } /* green */
.ansi-fg-33 { color: #f2cc60; } /* yellow */
.ansi-fg-34 { color: #79c0ff; } /* blue */
.ansi-fg-35 { color: #d2a8ff; } /* magenta */
.ansi-fg-36 { color: #a5d6ff; } /* cyan */
.ansi-fg-37 { color: #c9d1d9; } /* white */
.ansi-fg-90 { color: #6e7681; } /* bright black / gray */
.ansi-fg-91 { color: #ffa198; }
.ansi-fg-92 { color: #a6f3a6; }
.ansi-fg-93 { color: #ffe082; }
.ansi-fg-94 { color: #a5d6ff; }
.ansi-fg-95 { color: #e3b8ff; }
.ansi-fg-96 { color: #c7f0ff; }
.ansi-fg-97 { color: #ffffff; }
/* Background colors (optional) */
.ansi-bg-40 { background: #0b0f14; }
.ansi-bg-41 { background: rgba(255, 123, 114, 0.22); }
.ansi-bg-42 { background: rgba(126, 231, 135, 0.18); }
.ansi-bg-43 { background: rgba(242, 204, 96, 0.18); }
.ansi-bg-44 { background: rgba(121, 192, 255, 0.18); }
.ansi-bg-45 { background: rgba(210, 168, 255, 0.18); }
.ansi-bg-46 { background: rgba(165, 214, 255, 0.18); }
.ansi-bg-47 { background: rgba(201, 209, 217, 0.10); }
html,
body {
height: 100%;
margin: 0;
overflow: hidden;
}
/* App layout */
.app {
height: 100vh;
width: 100vw;
display: grid;
grid-template-rows: var(--canvasH, 35vh) 8px 1fr;
overflow: hidden;
}
/* ---------- Canvas ---------- */
.canvasPane {
position: relative;
overflow: hidden;
background: #111;
}
#canvas {
width: 100%;
height: 100%;
display: block;
}
/* ---------- Bottom area (terminal + editor) ---------- */
/* Bottom area (terminal + editor) */
.bottomPane {
height: 100%;
display: grid;
grid-template-columns: 1fr 8px var(--termW, 40vw);
overflow: hidden;
/* IMPORTANT */
}
/* Terminal side */
.terminalPane {
height: 100%;
overflow: hidden;
}
.terminal {
height: 100%;
width: 100%;
overflow-y: auto;
/* terminal scrolls */
overflow-x: auto;
}
/* Editor side */
.editorPane {
height: 100%;
overflow: hidden;
/* let CodeMirror scroll */
}
/* CodeMirror mount point */
#editor {
height: 100%;
width: 100%;
}
/* VERY IMPORTANT: force CodeMirror to respect container height */
.cm-editor {
height: 100%;
}
/* CodeMirrors internal scroller (this is where the scrollbar lives) */
.cm-scroller {
overflow-y: auto !important;
}
/* ---------- Splitters ---------- */
.hSplit {
cursor: row-resize;
background: rgba(255, 255, 255, 0.06);
}
.vSplit {
cursor: col-resize;
background: rgba(255, 255, 255, 0.06);
}
.hSplit:hover,
.vSplit:hover {
background: rgba(121, 192, 255, 0.25);
}
.diag {
margin: 0;
padding-left: 18px;
}
.diag li {
margin: 6px 0;
}
/* --- Syntax colors via CSS classes applied by decorations --- */
.tok-comment {
color: #1a7b24;
}
.tok-keyword {
color: #b99400;
font-weight: 600;
}
.tok-error {
color: #ff0505;
font-weight: 1000;
}
.tok-ident {
color: #90d4e0;
}
.tok-brace {
color: #d73a49;
font-weight: 600;
}
.tok-punc {
color: #ffffff;
}
.tok-string {
color: #03621e;
}
/* Rainbow bracket depth classes */
.rb-0 {
color: #a35;
font-weight: 700;
}
.rb-1 {
color: #ed0;
font-weight: 700;
}
.rb-2 {
color: #9d5;
font-weight: 700;
}
.rb-3 {
color: #2cb;
font-weight: 700;
}
.rb-4 {
color: #36b;
font-weight: 700;
}
.rb-5 {
color: #639;
font-weight: 700;
}
/* Severity underline styles */
.cm-diag-error {
text-decoration: underline wavy #d73a49;
/* red */
text-underline-offset: 2px;
}
.cm-diag-warning {
text-decoration: underline wavy #ffd33d;
/* yellow */
text-underline-offset: 2px;
}
.cm-diag-info {
text-decoration: underline wavy #79c0ff;
/* cyan-ish */
text-underline-offset: 2px;
}
/* Tooltip title coloring by severity */
.tipTitle.error {
color: #d73a49;
}
.tipTitle.warning {
color: #ffd33d;
}
.tipTitle.info {
color: #79c0ff;
}
/* Optional: diagnostics panel coloring */
.diag li.error {
color: #d73a49;
}
.diag li.warning {
color: #b08800;
}
.diag li.info {
color: #0366d6;
}
/* Tooltip styling */
.cm-tooltip.cm-tooltip-hover {
border: 1px solid #ddd;
background: black;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
border-radius: 10px;
padding: 8px 10px;
max-width: 420px;
font-size: 13px;
line-height: 1.35;
}
.tipTitle {
font-weight: 700;
margin-bottom: 4px;
}
.tipBody {
white-space: pre-wrap;
}
/* Loading screen */
.centered {
margin-right: auto;
margin-left: auto;
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #f0f0f0;
font-size: 24px;
font-family: Ubuntu-Light, Helvetica, sans-serif;
text-align: center;
}
.lds-dual-ring {
display: inline-block;
width: 24px;
height: 24px;
}
.lds-dual-ring:after {
content: " ";
display: block;
width: 24px;
height: 24px;
margin: 0px;
border-radius: 50%;
border: 3px solid #fff;
border-color: #fff transparent #fff transparent;
animation: lds-dual-ring 1.2s linear infinite;
}
@keyframes lds-dual-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}