:root { color-scheme: dark; --bg: #111820; --panel: #20303f; --panel-2: #192633; --line: #425569; --line-soft: rgba(148, 163, 184, 0.24); --text: #eef5ff; --muted: #9aaabd; --green: #36d787; --blue: #3f9dff; --blue-dark: #1b72d8; --error: #ff6b6b; } * { box-sizing: border-box; } body { width: 322px; margin: 0; font-family: Inter, "Segoe UI", Arial, sans-serif; background: radial-gradient(circle at 20% 0%, rgba(73, 130, 190, 0.28), transparent 28%), linear-gradient(180deg, #182230 0%, #111820 100%); color: var(--text); } button, input, summary { font: inherit; } .shell { min-height: 100vh; padding-bottom: 8px; } .titlebar { padding: 8px 12px 10px; background: linear-gradient(180deg, #253244 0%, #172232 100%); border-bottom: 1px solid rgba(255, 255, 255, 0.08); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35); } .brand { display: flex; align-items: center; gap: 8px; } .brand h1 { display: inline; margin: 0; font-size: 21px; line-height: 1; font-weight: 750; letter-spacing: 0; } .brand span { margin-left: 4px; color: var(--muted); font-size: 12px; } .rocket { width: 27px; height: 27px; fill: #a9bdd2; } .panel { margin: 10px 6px; padding: 12px 14px 10px; border: 1px solid rgba(148, 163, 184, 0.24); border-radius: 8px; background: linear-gradient(145deg, rgba(42, 60, 78, 0.92), rgba(25, 38, 51, 0.94)), var(--panel); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 6px 18px rgba(0, 0, 0, 0.22); } .section-title { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; color: #f5f8fc; font-size: 17px; } .section-title::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, #7b8da1, transparent); } .switch-row { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; font-size: 15px; cursor: pointer; } .switch-row input, .option input { position: absolute; opacity: 0; pointer-events: none; } .switch { position: relative; width: 39px; height: 21px; border-radius: 999px; background: #526171; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.18); transition: background 160ms ease; } .switch::after { content: ""; position: absolute; top: 3px; left: 4px; width: 15px; height: 15px; border-radius: 50%; background: #f8fbff; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35); transition: transform 160ms ease; } .switch-row input:checked + .switch, .option input:checked + .mini-check { background: linear-gradient(180deg, #65b8ff, #227cdb); } .switch-row input:checked + .switch::after { transform: translateX(16px); } .steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 4px 12px 16px; position: relative; } .step { display: grid; justify-items: center; gap: 6px; min-height: 78px; color: var(--muted); text-align: center; font-size: 13px; line-height: 1.12; position: relative; } .step::after { content: ""; position: absolute; top: 19px; left: calc(50% + 22px); width: calc(100% - 18px); height: 3px; background: var(--line); border-radius: 999px; } .step:nth-child(2)::after { top: 19px; left: calc(50% + 22px); width: calc(100% - 18px); height: 3px; } .step:nth-child(3)::after { display: none; } .step:nth-child(3)::before { display: none; } .step.done::after, .step.running::after, .step.done::before, .step.running::before { background: var(--green); box-shadow: 0 0 8px rgba(54, 215, 135, 0.28); } .step-dot { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: #5b6470; color: rgba(255, 255, 255, 0.65); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08); } .step-dot svg { width: 23px; height: 23px; fill: currentColor; } .step.done, .step.running { color: #eefaf4; } .step.done .step-dot, .step.running .step-dot { background: linear-gradient(180deg, #46d98b, #23b86a); color: #153927; box-shadow: 0 0 14px rgba(54, 215, 135, 0.45); } .step.running .step-dot { animation: pulse 900ms ease-in-out infinite; } .step.error .step-dot { background: var(--error); color: #391414; } .step.skipped .step-dot { background: #4b5563; color: #a9b1bd; } .primary-button { width: 100%; min-height: 43px; border: 1px solid rgba(180, 220, 255, 0.38); border-radius: 7px; color: white; font-size: 18px; font-weight: 650; cursor: pointer; background: linear-gradient(180deg, #5bb2ff 0%, #267de1 100%); box-shadow: 0 0 12px rgba(63, 157, 255, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.26); } .primary-button:disabled, .secondary-button:disabled { opacity: 0.58; cursor: default; } .step-options { margin-top: 10px; color: var(--muted); font-size: 13px; } .step-options summary { cursor: pointer; list-style-position: inside; } .options-grid { display: grid; gap: 8px; margin-top: 9px; } .option { display: flex; align-items: center; gap: 8px; color: #d7e2ed; cursor: pointer; } .mini-check { display: grid; place-items: center; width: 18px; height: 18px; border-radius: 5px; background: #55616e; } .mini-check::after { content: ""; width: 8px; height: 4px; border-left: 2px solid white; border-bottom: 2px solid white; transform: rotate(-45deg) translateY(-1px); } .tools { padding-bottom: 11px; } .secondary-button { display: flex; align-items: center; justify-content: center; gap: 9px; width: 100%; min-height: 40px; margin-top: 10px; border: 1px solid rgba(148, 163, 184, 0.26); border-radius: 7px; color: #edf4fa; background: rgba(30, 46, 61, 0.78); cursor: pointer; } .secondary-button svg { width: 23px; height: 23px; fill: #d8e4ef; } .console { margin: 8px 0 0; border-top: 1px solid rgba(255, 255, 255, 0.07); background: #1b1f22; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); } .console-head { display: flex; align-items: center; justify-content: space-between; height: 28px; padding: 0 8px 0 12px; color: #d4d7da; font-size: 13px; border-bottom: 1px solid rgba(255, 255, 255, 0.07); } .console-head::before { content: ""; width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid #aab0b5; margin-right: 7px; } .console-head span { flex: 1; } .icon-button { width: 22px; height: 22px; border: 0; color: #b7bdc3; background: transparent; cursor: pointer; font-size: 18px; line-height: 1; } #logs { min-height: 76px; max-height: 130px; margin: 0; padding: 8px 12px; overflow: auto; color: #d7d7d7; font: 12px/1.22 Consolas, "Courier New", monospace; white-space: pre-wrap; } .log-success { color: #63dd8d; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.08); } }