* { box-sizing: border-box; } :root { --trim-bg: #e9eef0; --trim-panel: #fffdf8; --trim-panel-soft: #f3f6f4; --trim-ink: #1d2b32; --trim-muted: #617077; --trim-deep: #173943; --trim-accent: #bd5f37; --trim-accent-hover: #9f4827; --trim-border: #c8d3d5; --trim-focus: #2d7888; --trim-status-height: 38px; } html { height: 100%; } body { background: radial-gradient(circle at 8% 5%, rgba(189, 95, 55, 0.16), transparent 28rem), linear-gradient(145deg, #f5f1e9 0%, var(--trim-bg) 58%, #dce6e7 100%); color: var(--trim-ink); font-family: "Trebuchet MS", "Lucida Sans", Geneva, sans-serif; height: 100vh; height: 100dvh; margin: 0; overflow: hidden; padding: 8px 10px calc(var(--trim-status-height) + 8px); } td { white-space: normal; } button, input, select { font: inherit; } input[type="text"], input[type="number"], select { background: #fff; border: 1px solid #aebdc0; border-radius: 5px; color: var(--trim-ink); min-height: 29px; padding: 3px 7px; } input[type="text"]:focus, input[type="number"]:focus, select:focus, button:focus-visible, input[type="button"]:focus-visible { border-color: var(--trim-focus); box-shadow: 0 0 0 3px rgba(45, 120, 136, 0.17); outline: none; } input:disabled { background: #e8edef; color: #59676d; cursor: not-allowed; } button, input[type="button"] { background: #fff; border: 1px solid #8da5aa; border-radius: 5px; color: var(--trim-deep); cursor: pointer; font-weight: 700; padding: 6px 11px; } button:hover, input[type="button"]:hover { background: #eaf1f1; } .app-shell { height: 100%; margin: 0 auto; max-width: 1240px; min-height: 0; width: 100%; } .app-card { background: linear-gradient(180deg, var(--trim-panel) 0%, #fafbf8 100%); border: 1px solid rgba(97, 112, 119, 0.3); border-radius: 13px; box-shadow: 0 18px 45px rgba(29, 43, 50, 0.17); display: flex; flex-direction: column; height: 100%; min-height: 0; overflow: hidden; } .tab { background: var(--trim-deep); display: flex; flex: 0 0 auto; gap: 3px; overflow-x: auto; padding: 4px 6px; } .tab button { background: transparent; border: 0; border-radius: 6px; color: #dce8e9; font-size: 0.93rem; padding: 6px 11px; transition: background 0.16s ease, color 0.16s ease; white-space: nowrap; } .tab button:hover { background: rgba(255, 255, 255, 0.13); color: #fff; } .tab button.active { background: var(--trim-panel); color: var(--trim-deep); } .tab .help-button { align-items: center; border: 1px solid rgba(255, 255, 255, 0.28); border-radius: 50%; display: inline-flex; flex: 0 0 30px; font-size: 16px; height: 30px; justify-content: center; margin-left: auto; padding: 0; width: 30px; } .tab .help-button:hover { background: rgba(255, 255, 255, 0.18); } .tab .share-button { margin-left: 2px; } .tab .share-icon { fill: none; height: 17px; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; width: 17px; } .main-action-bar { align-items: center; background: var(--trim-panel-soft); border-bottom: 1px solid var(--trim-border); box-shadow: 0 5px 15px rgba(29, 43, 50, 0.07); display: flex; flex: 0 0 auto; gap: 16px; justify-content: space-between; padding: 7px 12px; z-index: 10; } .action-bar-title { align-items: center; display: flex; gap: 10px; min-width: 0; } .app-brand-icon { border-radius: 7px; flex: 0 0 auto; height: 32px; width: 32px; } .action-bar-title strong { color: var(--trim-deep); display: block; font-family: Georgia, "Times New Roman", serif; font-size: 1rem; } .action-bar-eyebrow { color: var(--trim-muted); display: block; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; } .run-action { background: var(--trim-accent); border-color: var(--trim-accent); color: #fff; flex: 0 0 auto; min-width: 145px; padding: 8px 14px; } .run-action:hover { background: var(--trim-accent-hover); } .tabcontent { background: var(--trim-panel); border: 0; flex: 1 1 auto; min-height: 0; overflow: auto; padding: 10px 12px 14px; } /* Compact configuration panels keep the default window free of scrollbars. */ .output-settings { align-items: end; display: grid; gap: 10px; grid-template-columns: minmax(180px, 0.8fr) minmax(320px, 1.8fr); margin-bottom: 9px; } .compact-field, .settings-field { min-width: 0; } .compact-field > span, .compact-field > label, .settings-field > span { color: var(--trim-muted); display: block; font-size: 0.75rem; font-weight: 700; margin-bottom: 2px; } .compact-field > input, .settings-field > input, .settings-field > select { width: 100%; } .field-with-action { display: flex; gap: 6px; } .field-with-action input[type="text"] { flex: 1 1 auto; min-width: 0; } .layers-workspace { align-items: start; display: grid; gap: 10px; grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.85fr); } .settings-panel, .reference-panel { background: #fff; border: 1px solid var(--trim-border); border-radius: 9px; min-width: 0; padding: 9px 10px; } .section-heading { align-items: center; display: flex; justify-content: space-between; margin-bottom: 6px; min-height: 32px; } .section-heading h2, .reference-panel h2 { color: var(--trim-deep); font-family: Georgia, "Times New Roman", serif; font-size: 1rem; line-height: 1.15; margin: 0; } .section-eyebrow { color: var(--trim-accent); display: block; font-size: 0.67rem; font-weight: 700; letter-spacing: 0.08em; margin-bottom: 1px; text-transform: uppercase; } .layer-count { align-items: center; color: var(--trim-muted); display: flex; font-size: 0.75rem; font-weight: 700; gap: 6px; } .layer-count input { width: 58px; } .layer-table-wrap { overflow-x: auto; } .projectile-grid { display: grid; gap: 6px 9px; grid-template-columns: repeat(2, minmax(0, 1fr)); } #LTable { border: 0; border-collapse: separate; border-spacing: 0; overflow: hidden; width: 100%; } #LTable td { border-bottom: 1px solid var(--trim-border); border-left: 0; border-right: 0; border-top: 0; padding: 5px 6px; } #LTable tr:first-child td { background: #e7eeed; color: var(--trim-deep); font-size: 0.84rem; } #LTable tr:not(:first-child):hover td { background: #f5f8f5; } .scan-panel { margin: 0 auto; max-width: 900px; padding: 12px 14px; } .scan-heading { align-items: center; display: flex; justify-content: space-between; margin-bottom: 12px; } .scan-heading h2 { color: var(--trim-deep); font-family: Georgia, "Times New Roman", serif; font-size: 1.08rem; margin: 0; } .scan-enable { align-items: center; background: var(--trim-panel-soft); border: 1px solid var(--trim-border); border-radius: 999px; cursor: pointer; display: flex; font-size: 0.8rem; font-weight: 700; gap: 7px; padding: 6px 10px; } .scan-enable input { accent-color: var(--trim-accent); height: 16px; margin: 0; width: 16px; } .scan-controls-grid { display: grid; gap: 9px; grid-template-columns: minmax(160px, 0.8fr) minmax(240px, 1.4fr) minmax(100px, 0.5fr); } .scan-values-panel { background: var(--trim-panel-soft); border: 1px solid var(--trim-border); border-radius: 8px; display: grid; gap: 9px; margin-top: 10px; padding: 10px; } .scan-range-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .scan-list-grid { grid-template-columns: minmax(260px, 1.5fr) minmax(220px, 1fr); } .scan-summary { background: #eef4f4; border-left: 3px solid var(--trim-focus); border-radius: 5px; color: #31515a; font-size: 0.8rem; margin-top: 11px; min-height: 31px; padding: 7px 10px; } .scan-summary[data-level="idle"] { border-left-color: #91a3a7; color: var(--trim-muted); } .scan-summary[data-level="warning"] { background: #fff1c9; border-left-color: #c79824; color: #674c0a; } .results-grid { display: grid; gap: 10px; grid-template-columns: repeat(2, minmax(0, 1fr)); height: 100%; min-height: 340px; width: 100%; } .result-plot-panel { background: #fff; border: 1px solid var(--trim-border); border-radius: 8px; min-width: 0; overflow: hidden; padding: 4px; } .result-plot { height: 100%; min-height: 330px; width: 100%; } .advanced-layout { align-items: start; display: grid; gap: 10px; grid-template-columns: minmax(560px, 2.2fr) minmax(240px, 0.8fr); } .advanced-parameters > table { border-collapse: separate; border-spacing: 5px 2px; width: 100%; } .advanced-parameters { padding: 7px 9px; } .advanced-parameters .section-heading { margin-bottom: 2px; } .advanced-parameters > table td { padding: 2px 3px; } .advanced-parameters > table td:nth-child(odd) { color: var(--trim-deep); font-size: 0.8rem; font-weight: 700; } .advanced-parameters input { min-height: 27px; max-width: 94px; width: 100%; } .reference-panel { background: linear-gradient(145deg, rgba(189, 95, 55, 0.08), transparent 55%), var(--trim-panel-soft); color: #46565d; font-size: 0.75rem; line-height: 1.32; padding: 8px 9px; } .reference-panel p { margin: 6px 0; } .reference-link { color: #1f6675; display: block; overflow-wrap: anywhere; } .reference-divider { border-top: 1px solid var(--trim-border); margin: 7px 0 6px; } .reference-label { color: var(--trim-deep); display: block; font-size: 0.7rem; font-weight: 700; margin-bottom: 3px; text-transform: uppercase; } .tooltip { cursor: help; position: relative; } .tooltip .tooltiptext { background: #142d35; border-radius: 7px; box-shadow: 0 8px 24px rgba(17, 34, 40, 0.25); color: #fff; font-weight: 400; left: 0; line-height: 1.35; padding: 9px 11px; position: absolute; text-align: left; top: calc(100% + 5px); display: none; width: 330px; z-index: 100; } .tooltip:hover .tooltiptext, .tooltip:focus-within .tooltiptext { display: block; } .transient-warning { background: #fff1c9; border: 1px solid #c79824; border-radius: 7px; box-shadow: 0 7px 20px rgba(29, 43, 50, 0.17); color: #523c08; line-height: 1.35; box-sizing: border-box; max-width: min(380px, calc(100vw - 24px)); opacity: 0; padding: 9px 12px; pointer-events: none; position: fixed; transition: opacity 0.2s ease; z-index: 1000; } .transient-warning.visible { opacity: 1; } .estimated-density { background: #fff1c9 !important; border-color: #c79824 !important; } .status-bar { align-items: center; background: #edf2f2; border-top: 1px solid #aebec1; bottom: 0; box-shadow: 0 -3px 12px rgba(29, 43, 50, 0.1); color: var(--trim-ink); display: flex; flex-wrap: nowrap; font-size: 0.82rem; gap: 14px; left: 0; min-height: var(--trim-status-height); padding: 5px 12px; position: fixed; right: 0; z-index: 900; } .status-item { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .status-item strong { color: var(--trim-deep); } .status-progress { flex: 1 1 220px; min-width: 150px; } .status-progress-track { background: #d3dcde; border: 1px solid #aebec1; border-radius: 999px; height: 18px; overflow: hidden; width: 100%; } .status-progress-fill { background: linear-gradient(90deg, #2d7888, #45a0a6); color: #fff; font-size: 0.72rem; font-weight: 700; height: 100%; line-height: 16px; padding: 0 4px; text-align: center; transition: width 0.2s ease; width: 0%; } .status-actions { align-items: center; display: flex; flex: 0 0 auto; gap: 6px; } /* Output downloads and CGI diagnostics exist only in the browser backend. */ .status-actions[hidden] { display: none; } .status-action-link, .status-details-button { border: 1px solid #8da5aa; border-radius: 5px; font-size: 0.76rem; font-weight: 700; line-height: 1; padding: 5px 8px; text-decoration: none; } .status-action-link { animation: output-ready 0.5s ease-out; background: var(--trim-accent); border-color: var(--trim-accent); color: #fff; } .status-action-link:hover { background: var(--trim-accent-hover); border-color: var(--trim-accent-hover); } .status-details-button { background: #fff; color: var(--trim-deep); } .status-details-button:hover { background: #e3eeee; } @keyframes output-ready { 0% { box-shadow: 0 0 0 0 rgba(189, 95, 55, 0.5); opacity: 0; transform: translateY(4px); } 100% { box-shadow: 0 0 0 7px rgba(189, 95, 55, 0); opacity: 1; transform: translateY(0); } } @media (prefers-reduced-motion: reduce) { .status-action-link { animation: none; } } .run-details-dialog { background: var(--trim-panel); border: 1px solid var(--trim-border); border-radius: 11px; box-shadow: 0 18px 55px rgba(20, 42, 48, 0.3); color: var(--trim-ink); max-height: min(78vh, 680px); max-width: min(90vw, 820px); padding: 16px; width: 760px; } .run-details-dialog::backdrop { background: rgba(18, 37, 43, 0.48); } .quick-start-dialog { background: var(--trim-panel); border: 1px solid var(--trim-border); border-radius: 11px; box-shadow: 0 18px 55px rgba(20, 42, 48, 0.3); color: var(--trim-ink); height: min(78vh, 720px); margin: 0; max-height: calc(100vh - var(--trim-status-height) - 36px); max-width: min(720px, calc(100vw - 24px)); padding: 0; position: fixed; width: min(680px, calc(100vw - 24px)); z-index: 1100; } .quick-start-dialog[open] { display: flex; flex-direction: column; } .quick-start-dialog-header { align-items: center; background: var(--trim-deep); color: #fff; cursor: move; display: flex; flex: 0 0 auto; justify-content: space-between; padding: 8px 10px; touch-action: none; } .quick-start-dialog-header button { background: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.35); color: #fff; cursor: pointer; padding: 4px 8px; } .quick-start-frame { background: var(--trim-panel); border: 0; flex: 1 1 auto; min-height: 0; width: 100%; } body.quick-start-document { background: var(--trim-panel); display: block; height: 100%; min-height: 100%; overflow: hidden; padding: 0; } .quick-start-document .quick-start-body { height: 100%; } .quick-start-body { min-height: 0; overflow-y: auto; padding: 10px 16px 16px; } .quick-start-section { border-left: 3px solid transparent; border-radius: 5px; padding: 8px 10px; scroll-margin-top: 8px; } .quick-start-section + .quick-start-section { margin-top: 4px; } .quick-start-section h3 { color: var(--trim-deep); font-family: Georgia, "Times New Roman", serif; font-size: 1.05rem; margin: 0 0 6px; } .quick-start-section p, .quick-start-section ol { line-height: 1.45; margin: 5px 0; } .quick-start-section ol { padding-left: 22px; } .quick-start-section-active { background: rgba(189, 95, 55, 0.1); border-left-color: var(--trim-accent); } .run-details-heading { align-items: center; display: flex; justify-content: space-between; } .run-details-heading h2 { color: var(--trim-deep); font-family: Georgia, "Times New Roman", serif; font-size: 1.15rem; margin: 0; } .run-details-note { color: var(--trim-muted); font-size: 0.82rem; margin: 8px 0; } .run-details-log { background: #162a31; border-radius: 7px; color: #e6f0ef; font-family: "Courier New", monospace; font-size: 0.76rem; line-height: 1.4; margin: 0; max-height: 52vh; overflow: auto; padding: 11px; white-space: pre-wrap; } @media only screen and (max-width: 760px) { body { padding: 0 0 var(--trim-status-height); } .app-card { border: 0; border-radius: 0; } .main-action-bar { align-items: stretch; flex-direction: column; gap: 8px; } .run-action { width: 100%; } .output-settings, .layers-workspace, .projectile-grid, .scan-controls-grid, .scan-range-grid, .scan-list-grid { grid-template-columns: 1fr; } .advanced-layout { grid-template-columns: 1fr; } .advanced-parameters { overflow-x: auto; } .results-grid { grid-template-columns: 1fr; height: auto; } .result-plot-panel { height: min(420px, 55vh); min-height: 300px; } .result-plot { height: 100%; min-height: 0; } .status-item:nth-child(-n+3) { display: none; } .status-progress { min-width: 120px; } .status-actions { gap: 4px; } .status-action-link, .status-details-button { padding: 5px 6px; } } @media only screen and (min-width: 761px) and (max-width: 900px) { .advanced-layout { grid-template-columns: 1fr; } .reference-panel { display: grid; gap: 8px 14px; grid-template-columns: 1fr 1fr; } .reference-panel .section-eyebrow, .reference-panel h2, .reference-divider { grid-column: 1 / -1; } }