525 lines
8.7 KiB
CSS

:root {
color-scheme: dark;
}
body {
font-family: system-ui;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
height: 100vh;
background-color: #333;
}
main {
display: flex;
flex-direction: row;
height: 100vh;
padding: 2rem;
gap: 2rem;
}
.section-header {
background-color: #bdbdbd;
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
border: 1px solid #222;
padding: 0.25rem;
padding-left: 0.5rem;
color: #424242;
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.1);
}
section {
border-radius: 0.5rem;
width: 100%;
flex: 1;
display: flex;
flex-direction: column;
background-color: black;
}
section canvas {
margin-left: auto;
margin-right: auto;
}
section {
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.1);
}
section > :last-child {
flex: 1;
border-bottom-left-radius: 0.5rem;
border-bottom-right-radius: 0.5rem;
}
div#buttons {
width: 100%;
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
div#buttons > * {
flex: 1;
}
div#buttons button {
width: 100%;
height: 100%;
white-space: nowrap;
}
.column {
display: flex;
flex-direction: column;
gap: 0.3rem;
justify-content: space-evenly;
align-items: flex-start;
gap: 2rem;
flex: 1;
min-width: 0;
}
#canvas-area {
background-color: black;
aspect-ratio: 480 / 360;
width: 100%;
}
#console-section {
min-height: 0;
flex: 0 1 100%;
}
#console {
display: flex;
flex-direction: column;
overflow-y: hidden;
}
#console pre {
color: white;
background-color: black;
margin: 0;
width: 100%;
overflow-wrap: break-word;
word-break: break-all;
font-size: 1rem;
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
scroll-behavior: smooth;
}
#console pre {
width: 100%;
white-space: pre-wrap;
}
#console p, #console summary {
margin: 0;
padding: 0.125rem 0.5rem 0.125rem 0;
}
#console summary {
white-space: nowrap;
}
#console a {
color: #2196f3;
}
#console p {
padding: 0.25rem 0.5rem;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0.5rem;
}
#console p ~ p {
border-top: 1px solid #242424;
}
#console p + .warn, #console .warn + p {
border-color: #fbc02d;
}
#console p.warn:last-child,
#console p.error:last-child {
border-bottom-style: solid;
border-bottom-width: 1px;
}
#console p + .error, #console .error + p, #console .error:last-child {
border-color: #d32f2f;
}
#console p > *:last-child {
flex: 1;
}
#console p > details {
min-width: 130px;
overflow-x: hidden;
}
#console p > details[open] {
min-width: 100%;
}
#console .error {
background-color: #4a1305;
}
#console [data-type="error"] {
color: #ff8a65;
background-color: #4a1305;
}
#console .warn {
color: #fff176;
background-color: #413d07;
}
#console .input:before {
content: ">";
}
#console .input {
color: #bdbdbd;
font-style: italic;
}
#console .info,
#console .debug,
#console .prototype,
#console [data-type="undefined"],
#console [data-type="object"],
#console [data-type="function"] {
color: #bdbdbd;
}
#console [data-type="boolean"],
#console [data-type="null"] {
color: #ff9800;
}
#console .log .value:hover,
#console .info .value:hover,
#console .debug .value:hover {
background-color: #242424;
}
#console .value {
display: flex;
}
#console .base-value {
display: list-item; /* Re-add arrow that was removed by applying flex on <summary> */
overflow-x: hidden;
text-overflow: ellipsis;
}
#console .property + .base-value,
#console .prototype + .base-value {
white-space: nowrap;
}
#console .property, #console .prototype {
white-space: nowrap;
}
#console .property {
color: #9c27b0;
}
#console .property + [data-type="string"]:before,
#console .property + [data-type="string"]:after {
content: '"';
}
#console .property + [data-type="string"] {
color: #4caf50;
}
#console [data-type="number"] {
color: #2196f3;
}
#console input {
width: 100%;
margin: 0;
outline: none;
color: white;
border: none;
background-color: #222;
padding: 0.25rem 0.5rem;
font-family: monospace;
font-size: 1rem;
flex-grow: 0;
}
#editor-area {
width: 100%;
overflow-y: auto;
}
#editor {
margin: 0;
width: 100%;
height: 100%;
font-size: 1rem;
}
#editor * {
border-radius: 0;
box-shadow: none;
}
button {
background-color: #087aaf;
border: none;
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);
padding: 0.5rem 1rem;
border-radius: 0.5rem;
cursor: pointer;
transition-duration: 200ms;
white-space: nowrap;
}
button:hover {
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);
}
button:active {
background-color: #06577e;
}
button.secondary {
background-color: #616161;
}
button.secondary:active {
background-color: #424242;
}
#run-button {
transition-duration: 0s;
background-color: #388e3c;
}
#run-button.running {
background-color: #d32f2f;
}
footer {
position: absolute;
bottom: 1px;
left: 1px;
}
#toggle-asset-editor-button {
color: white;
cursor: pointer;
font-size: 32px;
align-self: center;
padding: 0.25rem 0.5rem;
border-radius: 0.5rem;
}
#toggle-asset-editor-button[expanded] {
background-color: #242424;
border-radius: 0.5rem 0 0 0.5rem;
}
#asset-editor {
background-color: #242424;
display: none;
}
#asset-editor-container {
flex-direction: row;
align-items: stretch;
gap: 0;
min-width: min-content;
}
#asset-editor-preview {
display: flex;
flex-direction: column;
margin-bottom: 2rem;
}
#asset-editor-preview-title {
margin: 1rem;
overflow-wrap: break-word;
font-weight: bold;
}
#asset-editor-preview-title:empty {
display: none;
}
#asset-editor-preview-image {
background-color: #1d2021;
object-fit: contain;
width: 100%;
border-radius: 0;
max-height: min(40vh, 400px);
}
#asset-editor-asset-list-title {
font-weight: bold;
text-align: center;
}
#asset-editor-asset-list {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 1px;
background-color: #131313;
list-style-type: none;
}
#asset-editor-asset-list:not(:empty) {
border-top: 1px solid #131313;
border-bottom: 1px solid #131313;
}
#asset-editor-asset-list li {
display: flex;
cursor: pointer;
background-color: #242424;
transition: background-color 50ms ease-in-out;
padding: 0.5rem 1.5rem;
justify-content: space-between;
align-items: center;
gap: 1rem;
}
#asset-editor-asset-list li:hover, #asset-editor-asset-list li[previewed] {
background-color: #131313;
}
#asset-editor-asset-list .delete-button {
background-color: #c83e4d;
padding: 0.25rem 0.75rem;
}
#asset-editor-asset-list .delete-button:hover {
background-color: #9f2d3a;
}
#asset-editor-asset-list .delete-button:active {
background-color: #7f242f;
}
#asset-editor-upload-button {
display: block;
margin: 1rem auto;
}
#asset-editor-preview-snippet {
background-color: #1d2021;
border: 1px solid black;
border-radius: 0.25rem;
padding: 0.125rem 0.25rem;
margin: 0.5rem;
white-space: pre;
}
#asset-editor-preview-snippet .str {
color: #b8ba37;
}
#asset-editor-preview-snippet:empty {
display: none;
}
#project-header {
display: flex;
justify-content: space-between;
align-items: center;
align-self: stretch;
gap: 0.5rem;
}
#project-header-left {
display: flex;
align-items: center;
gap: 0.5rem;
}
#project-name {
background-color: inherit;
border: none;
font-size: 1.5rem;
font-weight: bold;
border-bottom: 1px solid #bdbdbd;
transition: border-color 200ms ease-in-out;
margin-right: 1rem;
width: 100%;
max-width: 400px;
}
#project-name:hover, #project-name:focus {
border-color: white;
outline: none;
}
#save-status {
white-space: nowrap;
font-size: 0.8rem;
margin-left: 0.5rem;
padding: 0.125rem 0.75rem;
border-radius: 0.5rem;
}
#export-button {
justify-self: flex-end;
}
#buttons > a:has(button) {
text-decoration: none;
}
.icon-button {
display: flex;
gap: 0.5ch;
align-items: center;
justify-content: center;
}
#persistent-storage-overlay {
display: none;
position: absolute;
inset: 0;
padding: 0 20rem;
height: 100vh;
background-color: rgba(0, 0, 0, 0.8);
flex-direction: column;
justify-content: center;
align-items: flex-start;
z-index: 100;
transition: opacity 200ms ease-in-out;
}
#persistent-storage-overlay p {
color: #bdbdbd;
}
#persistent-storage-overlay a {
color: #2196f3;
}