/* 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; }