:root { --bg: #f5f7fb; --ink: #172033; --muted: #667085; --line: #d8deea; --panel: #ffffff; --accent: #0f766e; --accent-2: #2563eb; --warn: #b45309; --fail: #b91c1c; --ok: #15803d; --code: #101827; --code-ink: #d7e2f3; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; background: var(--bg); color: var(--ink); font-family: Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif; letter-spacing: 0; } button, textarea, input { font: inherit; } .app-shell { display: grid; grid-template-columns: 310px minmax(0, 1fr); min-height: 100vh; } .sidebar { display: flex; flex-direction: column; gap: 22px; padding: 24px 20px; background: #101827; color: #edf3ff; border-right: 1px solid #0b1220; } .brand { display: flex; align-items: center; gap: 12px; } .brand-mark { width: 44px; height: 44px; display: grid; place-items: center; border: 1px solid #2e3b56; background: #162238; color: #8be4d3; font-weight: 800; border-radius: 8px; } .brand h1 { margin: 0; font-size: 18px; line-height: 1.2; } .brand p { margin: 4px 0 0; color: #9aa8c2; font-size: 12px; } .steps { display: grid; gap: 10px; } .step { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 10px; align-items: start; min-height: 54px; padding: 10px; border: 1px solid #24314a; background: #121e33; border-radius: 8px; } .step-dot { width: 12px; height: 12px; margin-top: 4px; border-radius: 50%; border: 2px solid #64748b; background: transparent; } .step-copy { min-width: 0; } .step strong { display: block; font-size: 13px; line-height: 1.25; } .step span { display: block; margin-top: 4px; color: #9aa8c2; font-size: 12px; line-height: 1.3; overflow-wrap: anywhere; } .step.running { border-color: #48c6b5; background: #122d3a; } .step.running .step-dot { border-color: #5eead4; box-shadow: 0 0 0 5px rgba(94, 234, 212, 0.12); } .step.done .step-dot { background: var(--ok); border-color: var(--ok); } .step.failed { border-color: #e16a6a; } .step.failed .step-dot { background: var(--fail); border-color: var(--fail); } .toolbox { display: grid; gap: 10px; margin-top: auto; } button { min-height: 40px; border: 1px solid transparent; border-radius: 8px; cursor: pointer; font-weight: 700; } button:disabled { opacity: 0.55; cursor: wait; } .primary { background: var(--accent); color: white; } .secondary { background: #1c2940; color: #edf3ff; border-color: #34425e; } .status-line { min-height: 36px; padding: 9px 10px; border: 1px solid #263752; background: #0d1525; color: #c8d5eb; border-radius: 8px; font-size: 12px; } .workspace { display: grid; grid-template-rows: minmax(260px, 36vh) minmax(0, 1fr); gap: 14px; padding: 18px; min-width: 0; } .input-band, .panel { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; } .input-band { display: grid; grid-template-rows: auto minmax(0, 1fr); min-height: 0; } .section-head, .panel header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 14px; border-bottom: 1px solid var(--line); } .section-head h2, .panel h3 { margin: 0; font-size: 15px; } .section-head p { margin: 4px 0 0; color: var(--muted); font-size: 12px; } .file-control { position: relative; flex: 0 0 auto; min-width: 140px; } .file-control input { position: absolute; inset: 0; opacity: 0; cursor: pointer; } .file-control span { display: block; padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; color: var(--ink); background: #f8fafc; font-weight: 700; text-align: center; font-size: 13px; } textarea { width: 100%; height: 100%; min-height: 160px; resize: none; border: 0; outline: 0; padding: 14px; color: var(--ink); background: #ffffff; font-family: "Cascadia Mono", Consolas, monospace; font-size: 13px; line-height: 1.5; } .result-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: minmax(280px, 1fr); gap: 14px; min-height: 0; } .panel { display: grid; grid-template-rows: auto minmax(0, 1fr); min-height: 0; overflow: hidden; } .panel header span, .tabs .tab { border: 1px solid var(--line); background: #f8fafc; color: var(--muted); padding: 5px 8px; border-radius: 8px; font-size: 12px; font-weight: 700; } .tabs { display: flex; gap: 6px; } .tabs .tab { min-height: 28px; } .tabs .tab.active { background: #e7f7f3; color: var(--accent); border-color: #a7ded3; } pre { margin: 0; padding: 12px 14px; overflow: auto; white-space: pre-wrap; word-break: break-word; font-family: "Cascadia Mono", Consolas, monospace; font-size: 12px; line-height: 1.45; } .code-view, #checkerLog, #simulationLog, #intentView { background: var(--code); color: var(--code-ink); } .hidden { display: none; } .metric-row { display: grid; grid-template-columns: repeat(2, 1fr); border-bottom: 1px solid var(--line); } .metric-row div { padding: 10px 14px; border-right: 1px solid var(--line); } .metric-row div:last-child { border-right: 0; } .metric-row span { display: block; color: var(--muted); font-size: 12px; } .metric-row strong { display: block; margin-top: 2px; font-size: 16px; } .pass { color: var(--ok); } .fail { color: var(--fail); } @media (max-width: 980px) { .app-shell { grid-template-columns: 1fr; } .sidebar { min-height: auto; } .workspace { grid-template-rows: minmax(300px, 44vh) auto; } .result-grid { grid-template-columns: 1fr; } }