:root { color-scheme: light; --bg: #eef1ed; --bg-soft: #f7f8f5; --surface: rgba(255, 255, 255, 0.92); --surface-solid: #ffffff; --surface-subtle: #f0f4ef; --text: #18231e; --muted: #62706a; --border: #d8dfd6; --accent: #1f665a; --accent-strong: #154d44; --accent-soft: #e2eee9; --danger: #9f3e34; --editor-bg: #0d1714; --editor-text: #eef8f3; --shadow: 0 18px 45px rgba(42, 56, 49, 0.12); background: var(--bg); color: var(--text); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-synthesis: none; text-rendering: optimizeLegibility; } @media (prefers-color-scheme: dark) { :root[data-theme="system"] { color-scheme: dark; --bg: #111614; --bg-soft: #151d1a; --surface: rgba(26, 35, 31, 0.94); --surface-solid: #1a231f; --surface-subtle: #202c27; --text: #e8eee9; --muted: #a2afa9; --border: #34413b; --accent: #65c0ad; --accent-strong: #8bd8c7; --accent-soft: #233c36; --danger: #ef8b7d; --editor-bg: #07100d; --editor-text: #f1fbf7; --shadow: 0 18px 45px rgba(0, 0, 0, 0.28); } } :root[data-theme="dark"] { color-scheme: dark; --bg: #111614; --bg-soft: #151d1a; --surface: rgba(26, 35, 31, 0.94); --surface-solid: #1a231f; --surface-subtle: #202c27; --text: #e8eee9; --muted: #a2afa9; --border: #34413b; --accent: #65c0ad; --accent-strong: #8bd8c7; --accent-soft: #233c36; --danger: #ef8b7d; --editor-bg: #07100d; --editor-text: #f1fbf7; --shadow: 0 18px 45px rgba(0, 0, 0, 0.28); } :root[data-theme="light"] { color-scheme: light; } * { box-sizing: border-box; } html, body, #root { height: 100%; } body { margin: 0; min-width: 0; overflow: hidden; background: radial-gradient(circle at 0 0, color-mix(in srgb, var(--accent) 16%, transparent), transparent 30%), var(--bg); } button, input, textarea, select { font: inherit; } button { align-items: center; border: 0; border-radius: 8px; cursor: pointer; display: inline-flex; font-size: 0.9rem; font-weight: 750; gap: 8px; justify-content: center; min-height: 36px; padding: 0 13px; transition: background 140ms ease, border-color 140ms ease, color 140ms ease, transform 140ms ease; } button:hover:not(:disabled) { transform: translateY(-1px); } button:disabled { cursor: not-allowed; opacity: 0.55; } input { background: var(--surface-solid); border: 1px solid var(--border); border-radius: 8px; color: var(--text); min-height: 36px; min-width: 0; outline: none; padding: 0 11px; } input:focus, textarea:focus { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent); } .appShell { display: grid; gap: 12px; grid-template-rows: 34px auto auto minmax(260px, 1fr) minmax(160px, 0.52fr); height: 100%; padding: 14px; padding-top: 8px; } .titlebar { align-items: center; background: color-mix(in srgb, var(--surface) 92%, var(--bg)); border: 1px solid var(--border); border-radius: 8px; display: flex; justify-content: space-between; overflow: hidden; } .titlebarDrag { -webkit-app-region: drag; align-items: center; display: flex; flex: 1; height: 100%; min-width: 0; } .titlebarBrand { align-items: center; color: var(--muted); display: flex; font-size: 0.82rem; font-weight: 800; gap: 8px; padding-left: 10px; } .titlebarMark { align-items: center; background: var(--accent-soft); border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border)); border-radius: 6px; color: var(--accent-strong); display: flex; font-size: 0.66rem; height: 20px; justify-content: center; width: 24px; } .windowControls { -webkit-app-region: no-drag; align-items: stretch; display: flex; height: 100%; padding: 3px; position: relative; z-index: 2; } .windowControls, .windowControls * { -webkit-app-region: no-drag; } .windowControls button { -webkit-app-region: no-drag; background: transparent; border: 1px solid transparent; border-radius: 6px; color: var(--muted); min-height: 0; min-width: 38px; padding: 0; } .windowControls svg { pointer-events: none; } .windowControls button:hover { background: var(--surface-subtle); border-color: var(--border); color: var(--text); transform: none; } .windowControls button:active { background: var(--accent-soft); color: var(--accent-strong); } .windowControls .closeButton:hover { background: var(--danger); border-color: var(--danger); color: #fff; } .toolbar { align-items: center; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow); display: flex; gap: 16px; justify-content: space-between; min-height: 64px; padding: 10px 12px; } .brand { align-items: center; display: flex; gap: 11px; min-width: 220px; } .brandMark { align-items: center; background: var(--accent); border-radius: 8px; color: #fff; display: flex; font-size: 0.78rem; font-weight: 850; height: 38px; justify-content: center; width: 38px; } h1, h2, p { margin: 0; } h1 { font-size: 1.15rem; letter-spacing: 0; line-height: 1.1; } h2 { font-size: 0.98rem; letter-spacing: 0; } .brand p, .panelHeader p, .panelHeading p, .settingsHeader p, .statItem p { color: var(--muted); font-size: 0.82rem; line-height: 1.35; margin-top: 3px; } .toolbarActions, .buttonRow { align-items: center; display: flex; gap: 8px; } .primary { background: var(--accent); color: #fff; box-shadow: 0 10px 22px color-mix(in srgb, var(--accent) 18%, transparent); } .primary:hover:not(:disabled) { background: var(--accent-strong); } .secondary, .iconButton, .segmented { background: var(--surface-solid); border: 1px solid var(--border); color: var(--text); } .iconButton { min-width: 36px; padding: 0; } .iconButton.subtle { color: var(--muted); } .segmented { border-radius: 8px; display: flex; overflow: hidden; padding: 2px; } .segmented button { background: transparent; border-radius: 6px; color: var(--muted); min-height: 30px; min-width: 42px; padding: 0 10px; } .segmented button.active { background: var(--accent-soft); color: var(--accent-strong); } .statusStrip { display: grid; gap: 10px; grid-template-columns: repeat(4, minmax(0, 1fr)); } .statItem { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; } .statItem span { color: var(--danger); display: block; font-size: 1.08rem; font-weight: 850; line-height: 1; } .workbench { display: grid; gap: 12px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); min-height: 0; } .editorPanel, .dataPanel { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow); min-width: 0; } .editorPanel { display: flex; flex-direction: column; min-height: 0; overflow: hidden; } .panelHeader, .panelHeading { align-items: center; border-bottom: 1px solid var(--border); display: flex; gap: 12px; justify-content: space-between; min-height: 62px; padding: 11px 12px; } textarea { background: var(--editor-bg); border: 0; color: var(--editor-text); flex: 1; font-family: "Cascadia Code", "Fira Code", Consolas, monospace; font-size: 0.92rem; line-height: 1.55; min-height: 0; outline: none; padding: 15px; resize: none; white-space: pre; } textarea::selection { background: var(--accent); color: #fff; } .lowerGrid { display: grid; gap: 12px; grid-template-columns: minmax(320px, 0.72fr) minmax(0, 1.28fr); min-height: 0; } .dataPanel { display: flex; flex-direction: column; min-height: 0; padding-bottom: 12px; } .panelHeading { border-bottom: 0; } .defaultsList { display: flex; flex-direction: column; gap: 8px; min-height: 0; overflow: auto; padding: 0 12px 10px; } .defaultRow { display: grid; gap: 8px; grid-template-columns: minmax(120px, 0.9fr) minmax(140px, 1.1fr) 36px; } .fullWidth { margin: 0 12px; } .requirementsTable { border: 1px solid var(--border); border-radius: 8px; margin: 0 12px; min-height: 0; overflow: auto; } .tableHeader, .tableRow { display: grid; gap: 12px; grid-template-columns: minmax(180px, 0.95fr) minmax(160px, 1fr) minmax(150px, 0.8fr); min-width: 620px; } .tableHeader { background: var(--surface-subtle); color: var(--muted); font-size: 0.75rem; font-weight: 850; padding: 9px 12px; text-transform: uppercase; } .tableRow { align-items: center; border-top: 1px solid var(--border); padding: 10px 12px; } .tableRow code { color: var(--text); font-family: "Cascadia Code", Consolas, monospace; font-size: 0.82rem; overflow-wrap: anywhere; } .tableRow span { color: var(--muted); font-size: 0.84rem; overflow-wrap: anywhere; } .tableRow strong { color: var(--accent-strong); font-size: 0.82rem; text-align: right; } .empty { color: var(--muted); padding: 0 12px 12px; } .settingsOverlay { align-items: stretch; background: rgba(0, 0, 0, 0.2); display: flex; inset: 0; justify-content: flex-end; padding: 14px; position: fixed; z-index: 10; } .settingsPanel { background: var(--surface-solid); border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow); display: flex; flex-direction: column; max-width: 380px; min-width: 320px; padding: 14px; width: 28vw; } .settingsHeader { align-items: flex-start; display: flex; justify-content: space-between; } .settingsGroup { border-top: 1px solid var(--border); margin-top: 18px; padding-top: 18px; } .settingsGroup label { align-items: center; display: flex; font-size: 0.9rem; font-weight: 800; gap: 8px; margin-bottom: 10px; } .languageGrid { display: grid; gap: 8px; grid-template-columns: 1fr 1fr; } .languageGrid button { background: var(--surface-subtle); border: 1px solid var(--border); color: var(--text); } .languageGrid button.selected { background: var(--accent-soft); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); color: var(--accent-strong); } .settingsMeta { border-top: 1px solid var(--border); color: var(--muted); display: flex; flex-direction: column; font-size: 0.78rem; gap: 6px; margin-top: auto; padding-top: 14px; } @media (max-width: 1100px) { .appShell { grid-template-rows: 34px auto auto minmax(420px, 1fr) minmax(320px, auto); overflow: auto; } body { overflow: auto; } .toolbar, .toolbarActions { align-items: stretch; flex-wrap: wrap; } .workbench, .lowerGrid { grid-template-columns: 1fr; } } @media (max-width: 720px) { .appShell { padding: 10px; } .statusStrip { grid-template-columns: 1fr 1fr; } .toolbarActions { width: 100%; } .toolbarActions .secondary, .toolbarActions .segmented { flex: 1; } .defaultRow { grid-template-columns: 1fr 1fr 36px; } .settingsPanel { max-width: none; width: 100%; } }