Files
mdg-filius/packages/editor/src/desktop/desktop.css
T
julian.kiedaischandClaude Opus 5.5 2c7733b575 feat: F4.6f2 the text editor on the document's Y.Text, files both ways while the simulation runs
Oracle TextEditorWindowRun uses Java's text editor window and its file
dialog as a person does. The open file's text is its Y.Text in the
document (plan 7.3): typed is in the file at once, for everyone and for
the running engine. Core openText/saveTextAs without Java's mistakes
(lost saves after save-as onto a file or a removed file, files named
'ordner/d.txt' or ''); doc files.ts (changeFiles, fileText, nodeFiles,
readFilesInto); the room takes a person's files into the engine at once
and writes the engine's files back at the tick they changed; the editor's
window, Java's dialog, the text area following others' changes with the
caret in place, its own undo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 17:50:27 +00:00

908 lines
16 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.
/* A computer's desktop after Java's GUIDesktopPanel: 640 × 460 pixels below
* the title bar, a grey taskbar at the bottom (180, 180, 180; 44 pixels high
* for a finger, Java's has 30), icons of 120 × 96 with white names on Java's
* background. On a phone it fills the surface. Java's colours stay in both
* themes: the screen is the simulated computer's, not the editor's. */
.desktop-window {
position: absolute;
z-index: 5;
display: flex;
flex-direction: column;
width: 640px;
max-width: 100%;
height: calc(460px + 14px + 36px);
max-height: 100%;
box-sizing: border-box;
border: 1px solid var(--border-strong);
border-radius: 8px;
overflow: hidden;
background: var(--surface-card);
box-shadow: 0 8px 24px color-mix(in srgb, var(--shadow-color) 25%, transparent);
}
/* Below the mode buttons, which stay in reach. */
@media (max-width: 639px) {
.desktop-window {
inset: 72px 0 0 0 !important;
width: auto;
height: auto;
border-radius: 0;
}
}
.desktop-titlebar {
display: flex;
align-items: center;
gap: 8px;
min-height: 36px;
padding: 0 0 0 8px;
background: var(--surface-raised);
border-bottom: 1px solid var(--border-default);
cursor: move;
touch-action: none;
user-select: none;
}
.desktop-titlebar img {
width: 24px;
height: 24px;
object-fit: contain;
}
.desktop-titlebar h2 {
flex: 1;
margin: 0;
font-size: 15px;
font-weight: 600;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: var(--text-primary);
}
.desktop-close {
min-width: 44px;
min-height: 36px;
border: none;
background: transparent;
color: var(--text-secondary);
font: inherit;
font-size: 22px;
cursor: pointer;
}
.desktop-screen {
position: relative;
flex: 1;
min-height: 0;
overflow: auto;
background-size: cover;
background-position: top left;
}
.desktop-icons {
display: flex;
flex-wrap: wrap;
gap: 10px 5px;
margin: 0;
padding: 10px 5px;
list-style: none;
}
.desktop-icon {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
width: 120px;
height: 96px;
padding: 0;
border: none;
border-radius: 6px;
background: transparent;
color: #ffffff;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.desktop-icon[aria-disabled='true'] {
cursor: default;
}
.desktop-icon:focus-visible {
outline: 2px solid #ffffff;
}
.desktop-icon img {
width: 64px;
height: 64px;
}
.desktop-info-layer {
position: absolute;
inset: 0;
display: flex;
justify-content: flex-end;
align-items: flex-end;
}
.desktop-network {
margin: 0;
padding: 8px 12px;
border: 2px inset #c0c0c0;
background: #eeeeee;
color: #000000;
font: 13px Dialog, sans-serif;
}
.desktop-network div {
display: grid;
grid-template-columns: 110px 140px;
align-items: center;
min-height: 26px;
}
.desktop-network dt,
.desktop-network dd {
margin: 0;
}
.desktop-network dd {
padding: 2px 6px;
background: #ffffff;
border: 1px solid #b0b0b0;
font-variant-numeric: tabular-nums;
user-select: text;
}
.desktop-taskbar {
display: grid;
grid-template-columns: 52px 1fr 52px;
align-items: stretch;
height: 44px;
flex: none;
background: rgb(180 180 180);
}
.desktop-home,
.desktop-network-icon {
border: none;
background: transparent;
color: #000000;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.desktop-home {
justify-self: center;
padding: 0 12px;
}
.desktop-network-icon img {
width: 18px;
height: 18px;
}
/* A program's window over the desktop (GUIApplicationWindow): Java's dark
* grey title bar of 30 pixels with the icon at 16. */
.program-window {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
background: #ffffff;
}
.program-titlebar {
display: grid;
grid-template-columns: 30px 1fr 30px;
align-items: center;
height: 30px;
flex: none;
background: rgb(64 64 64);
}
.program-titlebar img {
justify-self: center;
width: 16px;
height: 16px;
}
.program-titlebar h3 {
margin: 0;
text-align: center;
font: 13px Dialog, sans-serif;
color: rgb(225 225 225);
}
.program-content {
position: relative;
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
}
/* The command line (GUIApplicationTerminalWindow): grey on black, the input
* line right after the text in the same scrolling area. 16 pixels in the
* input: Safari on the iPad zooms into smaller fields. */
.terminal {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
background: #000000;
}
.terminal-screen {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 5px 5px 5px;
color: rgb(222 222 222);
font: 14px ui-monospace, Menlo, Consolas, 'Courier New', monospace;
cursor: text;
}
.terminal-text {
margin: 0;
font: inherit;
white-space: pre-wrap;
overflow-wrap: anywhere;
user-select: text;
}
.terminal-input {
display: flex;
align-items: baseline;
}
.terminal-prompt {
white-space: pre;
}
.terminal-input input {
flex: 1;
min-width: 0;
padding: 0;
border: none;
outline: none;
background: transparent;
color: rgb(222 222 222);
caret-color: rgb(222 222 222);
font: 16px ui-monospace, Menlo, Consolas, 'Courier New', monospace;
}
.terminal-keys {
display: flex;
gap: 6px;
flex: none;
overflow-x: auto;
padding: 6px;
background: rgb(32 32 32);
}
.terminal-chip {
flex: none;
min-width: 44px;
min-height: 44px;
padding: 0 12px;
border: 1px solid rgb(90 90 90);
border-radius: 8px;
background: rgb(48 48 48);
color: rgb(222 222 222);
font: 14px ui-monospace, Menlo, Consolas, monospace;
cursor: pointer;
}
/* The software installation (GUIInstallationsDialog): two lists of 170
* pixels in Java, the arrows between them, "apply changes" below. */
.installation {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
padding: 10px;
background: #eeeeee;
color: #000000;
font: 13px Dialog, sans-serif;
}
.installation-lists {
flex: 1;
min-height: 0;
width: 100%;
display: grid;
grid-template-columns: minmax(0, 1fr) 52px minmax(0, 1fr);
gap: 8px;
}
.installation-column {
min-height: 0;
display: flex;
flex-direction: column;
gap: 6px;
}
.installation-list {
flex: 1;
min-height: 0;
overflow-y: auto;
margin: 0;
padding: 0;
list-style: none;
background: #ffffff;
border: 1px solid #a0a0a0;
}
.installation-list li {
display: flex;
align-items: center;
min-height: 44px;
padding: 0 8px;
cursor: pointer;
user-select: none;
}
.installation-list li[aria-selected='true'] {
background: rgb(184 207 229);
}
.installation-list li:focus-visible {
outline: 2px solid rgb(99 130 191);
outline-offset: -2px;
}
.installation-arrows {
display: flex;
flex-direction: column;
justify-content: center;
gap: 10px;
}
.installation-arrows button,
.installation-apply {
min-width: 44px;
min-height: 44px;
border: 1px solid #a0a0a0;
border-radius: 6px;
background: #f8f8f8;
color: #000000;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.installation-apply {
padding: 0 16px;
flex: none;
}
/* The web browser (GUIApplicationWebBrowserWindow): the address line with
* its button above the page, five pixels around each as in Java; the page
* in a frame of its own on white. */
.browser {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
background: #eeeeee;
font: 13px Dialog, sans-serif;
}
.browser-address {
display: flex;
gap: 5px;
flex: none;
padding: 5px;
}
.browser-address input {
flex: 1;
min-width: 0;
min-height: 36px;
padding: 0 6px;
border: 1px solid #a0a0a0;
background: #ffffff;
color: #000000;
font: 16px Dialog, sans-serif;
}
.browser-address button,
.web-server-bar button {
min-width: 44px;
min-height: 36px;
padding: 0 14px;
border: 1px solid #a0a0a0;
border-radius: 6px;
background: #f8f8f8;
color: #000000;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.browser-page {
flex: 1;
min-height: 0;
margin: 0 5px 5px;
display: flex;
background: #ffffff;
border: 1px solid #a0a0a0;
}
.browser-page iframe {
flex: 1;
width: 100%;
border: none;
background: #ffffff;
}
.browser-start {
flex: 1;
display: flex;
justify-content: center;
align-items: flex-start;
}
.browser-start img {
max-width: 100%;
}
/* The web server (GUIApplicationWebServerWindow): the button and the check
* box above, the virtual hosts' table while it is ticked, the lines below. */
.web-server {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
gap: 10px;
padding: 5px 10px 10px;
background: #eeeeee;
color: #000000;
font: 13px Dialog, sans-serif;
}
.web-server-bar {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px 24px;
flex: none;
}
.web-server-bar label {
display: flex;
align-items: center;
gap: 6px;
min-height: 44px;
cursor: pointer;
}
.web-server-bar input[type='checkbox'] {
width: 20px;
height: 20px;
}
.web-server-hosts {
display: flex;
flex-direction: column;
gap: 5px;
flex: none;
}
.web-server-hosts table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
background: #ffffff;
}
.web-server-hosts th {
padding: 4px;
border: 1px solid #a0a0a0;
background: #e4e4e4;
font-weight: normal;
text-align: left;
}
.web-server-hosts td {
padding: 0;
border: 1px solid #c0c0c0;
}
.web-server-hosts td input {
width: 100%;
min-height: 32px;
box-sizing: border-box;
padding: 0 5px;
border: none;
background: transparent;
color: #000000;
font: 16px Dialog, sans-serif;
}
.web-server-log {
flex: 1;
min-height: 120px;
margin: 0;
overflow: auto;
padding: 4px;
border: 1px solid #a0a0a0;
background: #ffffff;
font: 12px ui-monospace, Menlo, Consolas, monospace;
white-space: pre-wrap;
overflow-wrap: anywhere;
user-select: text;
}
/* The e-mail program and server (GUIApplicationEmailAnwendungWindow,
* GUIApplicationEmailServerWindow): buttons above, Java's tabs as a row,
* a list, below the mail chosen or the page's form; writing and the account
* as a window over the program (Java's showModularWindow), Java's dialogs as
* a notice with its buttons. */
.mail-client,
.mail-server {
position: relative;
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
gap: 5px;
padding: 5px;
background: #eeeeee;
color: #000000;
font: 13px Dialog, sans-serif;
}
.mail-toolbar,
.mail-server-bar,
.mail-dialog-buttons {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 5px 10px;
flex: none;
}
.mail-toolbar button,
.mail-server-bar button,
.mail-dialog button,
.mail-question button,
.mail-form button,
.mail-accounts > button {
min-width: 44px;
min-height: 40px;
padding: 0 12px;
border: 1px solid #a0a0a0;
border-radius: 6px;
background: #f8f8f8;
color: #000000;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.mail-toolbar img {
display: block;
width: 32px;
height: 32px;
}
.mail-server-bar label {
flex: 1;
display: flex;
align-items: center;
gap: 6px;
min-width: 200px;
}
.mail-server-bar input,
.mail-form input,
.mail-dialog input,
.mail-dialog select {
flex: 1;
min-width: 0;
min-height: 32px;
padding: 0 6px;
border: 1px solid #a0a0a0;
background: #ffffff;
color: #000000;
font: 16px Dialog, sans-serif;
}
.mail-client [aria-invalid='true'],
.mail-server [aria-invalid='true'] {
border-color: #ff0000;
color: #ff0000;
}
.mail-tabs {
display: flex;
gap: 2px;
flex: none;
border-bottom: 1px solid #a0a0a0;
}
.mail-tabs button {
display: flex;
align-items: center;
gap: 6px;
min-height: 40px;
padding: 0 12px;
border: 1px solid #a0a0a0;
border-bottom: none;
border-radius: 6px 6px 0 0;
background: #e0e0e0;
color: #000000;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.mail-tabs button[aria-selected='true'] {
background: #ffffff;
}
.mail-list,
.mail-accounts {
flex: 1;
min-height: 80px;
overflow: auto;
background: #ffffff;
border: 1px solid #a0a0a0;
}
.mail-accounts {
display: flex;
flex-direction: column;
gap: 5px;
padding-bottom: 5px;
}
.mail-accounts > button {
align-self: flex-start;
margin-left: 5px;
}
.mail-list table,
.mail-accounts table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
.mail-list th,
.mail-accounts th {
padding: 4px 6px;
border-bottom: 1px solid #a0a0a0;
background: #e4e4e4;
font-weight: normal;
text-align: left;
}
.mail-list td,
.mail-accounts td {
height: 30px;
padding: 0 6px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
cursor: pointer;
}
.mail-list tr[aria-selected='true'] td,
.mail-accounts tr[aria-selected='true'] td {
background: rgb(184 207 229);
}
.mail-preview {
flex: 1;
min-height: 80px;
overflow: auto;
padding: 4px;
border: 1px solid #a0a0a0;
background: #ffffff;
}
.mail-preview pre,
.mail-log {
margin: 0;
font: 12px ui-monospace, Menlo, Consolas, monospace;
white-space: pre-wrap;
overflow-wrap: anywhere;
user-select: text;
}
.mail-welcome {
display: flex;
align-items: flex-start;
gap: 8px;
margin: 0;
font-family: Arial, sans-serif;
}
.mail-log {
flex: 1;
min-height: 80px;
overflow: auto;
padding: 4px;
border: 1px solid #a0a0a0;
background: #ffffff;
}
.mail-form {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 6px;
max-width: 420px;
}
.mail-form label,
.mail-dialog label {
display: flex;
align-items: center;
gap: 6px;
}
.mail-form label span,
.mail-dialog label span {
flex: none;
width: 140px;
}
.mail-form > button {
align-self: flex-start;
}
.mail-notice {
margin: 0;
}
.mail-dialog {
position: absolute;
inset: 0;
z-index: 2;
display: flex;
flex-direction: column;
gap: 6px;
overflow: auto;
padding: 0 8px 8px;
background: #eeeeee;
}
.mail-dialog h4 {
margin: 0 -8px;
padding: 6px;
background: rgb(100 100 100);
color: rgb(250 250 250);
font: 13px Dialog, sans-serif;
text-align: center;
}
.mail-dialog textarea {
flex: 1;
min-height: 120px;
padding: 4px;
border: 1px solid #a0a0a0;
font: 16px ui-monospace, Menlo, Consolas, monospace;
}
.mail-question {
position: absolute;
left: 50%;
top: 30%;
z-index: 3;
transform: translateX(-50%);
width: min(90%, 380px);
padding: 12px;
border: 1px solid #808080;
border-radius: 6px;
background: #ffffff;
box-shadow: 0 4px 16px rgb(0 0 0 / 30%);
}
.mail-question p {
margin: 0 0 10px;
}
.mail-question button + button {
margin-left: 8px;
}
/* The text editor (GUIApplicationTextEditorWindow): Java's four buttons
* above, the text below in Courier; 16 pixels, as Safari on the iPad zooms
* into smaller fields. */
.text-editor {
position: relative;
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
gap: 5px;
padding: 5px;
background: #eeeeee;
}
.text-editor-bar {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 5px;
flex: none;
}
.text-editor-bar button,
.file-dialog-folder button {
min-width: 44px;
min-height: 40px;
padding: 0 12px;
border: 1px solid #a0a0a0;
border-radius: 6px;
background: #f8f8f8;
color: #000000;
font: 13px Dialog, sans-serif;
cursor: pointer;
}
.text-editor-bar button:disabled,
.file-dialog-folder button:disabled {
color: #a0a0a0;
cursor: default;
}
.text-editor-text {
flex: 1;
min-height: 0;
resize: none;
padding: 4px;
border: 1px solid #a0a0a0;
background: #ffffff;
color: #000000;
font: 16px 'Courier New', Courier, monospace;
}
/* Java's file dialog (DMTNFileChooser) over the program. */
.file-dialog-folder {
display: flex;
align-items: center;
gap: 10px;
flex: none;
}
.file-dialog-folder span {
flex: 1;
min-width: 0;
overflow-wrap: anywhere;
}
.file-dialog-entries {
flex: 1;
min-height: 96px;
margin: 0;
padding: 0;
overflow: auto;
border: 1px solid #a0a0a0;
background: #ffffff;
list-style: none;
}
.file-dialog-entries button {
display: flex;
align-items: center;
gap: 6px;
width: 100%;
min-height: 32px;
padding: 0 6px;
border: 0;
background: transparent;
color: #000000;
font: 13px Dialog, sans-serif;
text-align: left;
cursor: pointer;
}
.file-dialog-entries button[aria-pressed='true'] {
background: #b8cfe5;
}