html { box-sizing: border-box; margin: 0; padding: 0; background: black; overflow: hidden; } *, *:before, *:after { box-sizing: inherit; } body { user-select: none; -webkit-touch-callout: none; } html { font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; font-size: 100%; } body { margin: 0; padding: 0; overflow: hidden; } main { width: 100dvw; height: 100dvh; } #canvasContainer { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 0; } #controls { position: fixed; top: 0; left: 0; background: rgba(0, 0, 0, 0.5); color: #fff; padding: 8px 12px 8px 8px; border-radius: 0 0 4px 0; font-size: 13px; z-index: 2; } input[type="range"] { max-width: 80px; } .CheckboxField, .LabelledButton { display: flex; align-items: center; gap: 6px; } .Field { display: flex; align-items: center; gap: 6px; } #controls, .Controls-dropdown, .Controls-group { display: flex; align-items: center; justify-content: center; gap: 20px; } @media (max-width: 1279px) { .Controls-dropdown[data-open="false"] { display: none; } .Controls-dropdown { position: absolute; top: calc(100% + 2px); left: 2px; right: 2px; display: flex; overflow: auto; max-height: calc(100dvh - 56px); flex-direction: column; align-items: center; gap: 12px; background: rgba(0, 0, 0, 0.8); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 4px; padding: 12px; box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); } .Controls-group { flex-wrap: wrap; gap: 12px 20px; } } @media (max-width: 639px) { #controls { right: 0; border-radius: 0; } #controls > .MissionSelect-inputWrapper { flex: 1 1 0; min-width: 0; } #controls > .MissionSelect-inputWrapper .MissionSelect-input { width: 100%; } .Controls-toggle { flex: 0 0 auto; } } .IconButton { position: relative; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; margin: 0 0 0 -12px; font-size: 15px; padding: 0; border-top: 1px solid rgba(255, 255, 255, 0.3); border-left: 1px solid rgba(255, 255, 255, 0.3); border-right: 1px solid rgba(200, 200, 200, 0.3); border-bottom: 1px solid rgba(200, 200, 200, 0.3); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); border-radius: 4px; background: rgba(3, 82, 147, 0.6); color: #fff; cursor: pointer; transform: translate(0, 0); transition: background 0.2s, border-color 0.2s; } .ButtonLabel { font-size: 12px; } .IconButton svg { pointer-events: none; } @media (hover: hover) { .IconButton:hover { background: rgba(0, 98, 179, 0.8); border-color: rgba(255, 255, 255, 0.4); } } .IconButton:active, .IconButton[aria-expanded="true"] { background: rgba(0, 98, 179, 0.7); border-color: rgba(255, 255, 255, 0.3); transform: translate(0, 1px); } .Controls-toggle { margin: 0; } @media (max-width: 1279px) { .LabelledButton { width: auto; padding: 0 10px; } } @media (min-width: 1280px) { .Controls-toggle { display: none; } .LabelledButton .ButtonLabel { display: none; } .MapInfoButton { display: none; } } .CopyCoordinatesButton[data-copied="true"] { background: rgba(0, 117, 213, 0.9); border-color: rgba(255, 255, 255, 0.4); } .CopyCoordinatesButton .ClipboardCheck { display: none; opacity: 1; } .CopyCoordinatesButton[data-copied="true"] .ClipboardCheck { display: block; animation: showClipboardCheck 220ms linear infinite; } .CopyCoordinatesButton[data-copied="true"] .MapPin { display: none; } .StaticShapeLabel { background: rgba(0, 0, 0, 0.5); color: #fff; font-size: 11px; white-space: nowrap; padding: 1px 3px; border-radius: 1px; text-align: center; } .StatsPanel { left: auto !important; top: auto !important; right: 0; bottom: 0; } .AxisLabel { font-size: 12px; pointer-events: none; } .AxisLabel[data-axis="x"] { color: rgb(255, 153, 0); } .AxisLabel[data-axis="y"] { color: rgb(153, 255, 0); } .AxisLabel[data-axis="z"] { color: rgb(0, 153, 255); } /* MissionSelect combobox styles */ .MissionSelect-inputWrapper { position: relative; display: flex; align-items: center; } .MissionSelect-shortcut { position: absolute; right: 7px; font-family: system-ui, sans-serif; font-size: 11px; padding: 1px 4px; border-radius: 3px; background: rgba(255, 255, 255, 0.15); color: rgba(255, 255, 255, 0.6); pointer-events: none; } .MissionSelect-input[aria-expanded="true"] ~ .MissionSelect-shortcut { display: none; } .MissionSelect-input { width: 280px; padding: 6px 36px 6px 8px; font-size: 14px; border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 3px; background: rgba(0, 0, 0, 0.6); color: #fff; outline: none; user-select: text; } .MissionSelect-input[aria-expanded="true"] { padding-right: 8px; } .MissionSelect-input:focus { border-color: rgba(255, 255, 255, 0.6); } .MissionSelect-input::placeholder { color: transparent; } .MissionSelect-selectedValue { position: absolute; left: 8px; right: 36px; display: flex; align-items: center; gap: 6px; pointer-events: none; overflow: hidden; } .MissionSelect-input[aria-expanded="true"] ~ .MissionSelect-selectedValue { display: none; } .MissionSelect-selectedName { color: #fff; font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex-shrink: 1; min-width: 0; } .MissionSelect-selectedValue > .MissionSelect-itemType { flex-shrink: 0; } .MissionSelect-popover { z-index: 100; min-width: 320px; max-height: var(--popover-available-height, 90vh); overflow-y: auto; overscroll-behavior: contain; background: rgba(20, 20, 20, 0.95); border: 1px solid rgba(255, 255, 255, 0.5); border-radius: 3px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6); } .MissionSelect-list { padding: 4px 0; } .MissionSelect-list:has(> .MissionSelect-group:first-child) { padding-top: 0; } .MissionSelect-group { padding-bottom: 4px; } .MissionSelect-groupLabel { position: sticky; top: 0; padding: 6px 8px 6px 12px; font-size: 13px; font-weight: 600; color: rgb(198, 202, 202); background: rgba(58, 69, 72, 0.95); border-bottom: 1px solid rgba(255, 255, 255, 0.3); z-index: 1; } .MissionSelect-group:not(:last-child) { border-bottom: 1px solid rgba(255, 255, 255, 0.3); } .MissionSelect-item { display: flex; flex-direction: column; gap: 1px; margin: 4px 4px 0; padding: 6px 8px; border-radius: 4px; cursor: pointer; outline: none; scroll-margin-top: 32px; } .MissionSelect-list > .MissionSelect-item:first-child { margin-top: 0; } .MissionSelect-item[data-active-item] { background: rgba(255, 255, 255, 0.15); } .MissionSelect-item[aria-selected="true"] { background: rgba(100, 150, 255, 0.3); } .MissionSelect-itemHeader { display: flex; align-items: center; gap: 6px; } .MissionSelect-itemName { font-size: 14px; font-weight: 600; color: #fff; } .MissionSelect-itemTypes { display: flex; gap: 3px; } .MissionSelect-itemType { font-size: 10px; font-weight: 600; padding: 2px 5px; border-radius: 3px; background: rgba(255, 157, 0, 0.4); color: #fff; } .MissionSelect-itemType:hover { background: rgba(255, 157, 0, 0.7); } .MissionSelect-itemMissionName { font-size: 12px; color: rgba(255, 255, 255, 0.5); } .MissionSelect-noResults { padding: 12px 8px; font-size: 13px; color: rgba(255, 255, 255, 0.5); text-align: center; } .LoadingSpinner { width: 48px; height: 48px; border: 4px solid rgba(255, 255, 255, 0.2); border-top-color: white; border-radius: 50%; animation: LoadingSpinner-spin 1s linear infinite; } @keyframes LoadingSpinner-spin { to { transform: rotate(360deg); } } #loadingIndicator { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center; gap: 16px; pointer-events: none; z-index: 1; opacity: 0.8; } #loadingIndicator[data-complete="true"] { animation: loadingComplete 0.3s ease-out forwards; } @keyframes loadingComplete { 0% { opacity: 1; } 100% { opacity: 0; } } .LoadingProgress { width: 200px; height: 4px; background: rgba(255, 255, 255, 0.2); border-radius: 2px; overflow: hidden; } .LoadingProgress-bar { height: 100%; background: white; border-radius: 2px; transition: width 0.1s ease-out; } .LoadingProgress-text { font-size: 14px; color: rgba(255, 255, 255, 0.7); font-variant-numeric: tabular-nums; } @keyframes showClipboardCheck { 0% { opacity: 1; } 100% { opacity: 0.2; } } .KeyboardOverlay { position: fixed; bottom: 16px; left: 50%; transform: translateX(-50%); display: flex; align-items: flex-end; gap: 10px; pointer-events: none; z-index: 1; } .KeyboardOverlay-column { display: flex; gap: 4px; flex-direction: column; justify-content: center; } .KeyboardOverlay-row { display: flex; gap: 4px; justify-content: stretch; } .KeyboardOverlay-spacer { width: 32px; } .KeyboardOverlay-key { min-width: 32px; height: 32px; display: flex; flex: 1 0 0; align-items: center; justify-content: center; padding: 0 8px; border-radius: 4px; background: rgba(0, 0, 0, 0.4); border: 1px solid rgba(255, 255, 255, 0.2); color: rgba(255, 255, 255, 0.5); font-size: 11px; font-weight: 600; white-space: nowrap; } .KeyboardOverlay-key[data-pressed="true"] { background: rgba(52, 187, 171, 0.6); border-color: rgba(35, 253, 220, 0.5); color: #fff; } .KeyboardOverlay-arrow { margin-right: 3px; } .MapInfoDialog-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); z-index: 10; display: flex; align-items: center; justify-content: center; padding: 20px; } .MapInfoDialog { position: relative; width: 800px; height: 600px; max-width: calc(100dvw - 40px); max-height: calc(100dvh - 40px); display: grid; grid-template-columns: 100%; grid-template-rows: 1fr auto; background: rgba(20, 37, 38, 0.8); border: 1px solid rgba(65, 131, 139, 0.6); border-radius: 3px; box-shadow: 0 0 0 1px rgba(0, 190, 220, 0.12), 0 0 60px rgba(0, 140, 180, 0.12), inset 0 0 60px rgba(1, 7, 13, 0.6); color: #bccec3; font-size: 14px; line-height: 1.5; outline: none; user-select: text; -webkit-touch-callout: default; } .MapInfoDialog-inner { display: grid; grid-template-columns: 1fr auto; grid-template-rows: 100%; min-height: 0; overflow: hidden; } .MapInfoDialog-left { width: 100%; overflow-y: auto; padding: 24px 28px; } .MapInfoDialog-right { border-left: 1px solid rgba(0, 190, 220, 0.3); height: 100%; width: auto; margin-left: auto; margin-right: 0; } .MapInfoDialog-preview { display: block; height: 100%; width: auto; overflow: hidden; } .MapInfoDialog-preview--floated { float: right; clear: right; margin: 0 0 16px 20px; max-height: 260px; max-width: 30%; width: auto; display: block; } .MapInfoDialog-title { font-size: 26px; font-weight: 500; color: #7dffff; margin: 0; text-shadow: 0 1px 6px rgba(0, 0, 0, 0.4); } .MapInfoDialog-meta { display: flex; flex-wrap: wrap; gap: 8px 16px; margin-bottom: 4px; font-size: 15px; font-weight: 400; /* text-transform: uppercase; */ } .MapInfoDialog-planet { color: rgba(219, 202, 168, 0.7); } .MapInfoDialog-quote { margin: 16px 0; padding: 0 0 0 14px; border-left: 2px solid rgba(0, 190, 220, 0.35); font-style: italic; } .MapInfoDialog-quote p { margin: 0 0 4px; } .MapInfoDialog-quote cite { font-style: normal; font-size: 12px; color: rgba(255, 255, 255, 0.45); display: block; } .MapInfoDialog-blurb { font-size: 13px; margin: 0 0 16px; } .MapInfoDialog-section { margin-top: 20px; } .MapInfoDialog-sectionTitle { font-size: 16px; font-weight: 500; color: #7dffff; margin: 0 0 8px; letter-spacing: 0.04em; text-transform: uppercase; text-shadow: 0 0 16px rgba(0, 210, 240, 0.25); } .MapInfoDialog-musicTrack { margin-top: 16px; font-size: 14px; color: rgba(202, 208, 172, 0.5); font-style: italic; display: flex; align-items: center; gap: 6px; } .MapInfoDialog-musicTrack[data-playing="true"] { color: rgba(247, 253, 216, 0.7); } .MapInfoDialog-musicBtn { display: grid; place-content: center; background: transparent; border: 0; padding: 0; cursor: pointer; color: rgb(85, 118, 99); width: 32px; height: 32px; border-radius: 20px; font-size: 20px; font-style: normal; line-height: 1; flex-shrink: 0; opacity: 0.5; } .MapInfoDialog-musicTrack[data-playing="true"] .MapInfoDialog-musicBtn { color: rgb(109, 255, 170); opacity: 1; } .MapInfoDialog-musicTrack[data-playing="true"] .MapInfoDialog-musicBtn:hover { opacity: 0.7; } .MapInfoDialog-footer { display: flex; align-items: center; gap: 16px; padding: 10px 12px; border-top: 1px solid rgba(0, 190, 220, 0.25); background: rgba(2, 20, 21, 0.7); flex-shrink: 0; } .MapInfoDialog-closeBtn { padding: 4px 18px; background: linear-gradient( to bottom, rgba(41, 172, 156, 0.7), rgba(0, 80, 65, 0.7) ); border: 1px solid rgba(41, 97, 84, 0.6); border-top-color: rgba(101, 185, 176, 0.5); border-radius: 3px; box-shadow: inset 0 1px 0 rgba(120, 220, 195, 0.2), inset 0 -1px 0 rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.4); color: rgba(154, 239, 225, 0.9); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.5); font-size: 14px; font-weight: 500; cursor: pointer; } .MapInfoDialog-closeBtn:active { transform: translate(0, 1px); } .MapInfoDialog-hint { font-size: 12px; color: rgba(201, 220, 216, 0.3); margin-left: auto; } @media (max-width: 719px) { .MapInfoDialog-inner { display: block; overflow: auto; } .MapInfoDialog-hint { display: none; } .MapInfoDialog-left { width: 100%; height: auto; margin: 0; overflow: auto; padding: 16px 20px; } .MapInfoDialog-right { width: 100%; height: auto; margin: 0; overflow: auto; border-left: 0; } .MapInfoDialog-preview { width: auto; height: auto; margin: 16px auto; } .MapInfoDialog-closeBtn { width: 220px; height: 36px; margin: 0 auto; } } .GuiMarkup-line { margin-bottom: 1px; } .GuiMarkup-spacer { height: 0.6em; } .GuiMarkup-bulletLine { display: flex; align-items: baseline; gap: 5px; margin-bottom: 3px; } .GuiMarkup-bulletIcon { flex-shrink: 0; display: flex; align-items: center; } .GuiMarkup-bulletText { flex: 1; min-width: 0; } .GuiMarkup-bitmap { max-height: 1em; vertical-align: middle; } .GuiMarkup-bullet { opacity: 0.8; } .TouchJoystick { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); width: 140px; height: 140px; z-index: 1; } .TouchJoystick--left { left: 20px; transform: none; } .TouchJoystick--right { left: auto; right: 20px; transform: none; } .TouchJoystick .back { background: rgba(3, 79, 76, 0.6) !important; border: 1px solid rgba(0, 219, 223, 0.5) !important; box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.7) !important; } .TouchJoystick .front { background: radial-gradient( circle at 50% 50%, rgba(23, 247, 198, 0.9) 0%, rgba(9, 184, 170, 0.95) 100% ) !important; border: 2px solid rgba(255, 255, 255, 0.4) !important; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15), inset 0 -1px 2px rgba(0, 0, 0, 0.3) !important; } .MusicTrackName { text-transform: capitalize; }