:root { --bg: #f7f6f3; --bg-subtle: #efeee8; --bg-card: #ffffff; --fg: #0e0e0f; --fg-muted: #6b6b6f; --accent: #c03a28; --accent-hover: #a0301f; --border: #e4e3dc; --danger: #b00020; --success: #2e7d32; --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; } @media (prefers-color-scheme: dark) { :root { --bg: #0d0d0f; --bg-subtle: #17171a; --bg-card: #1c1c20; --fg: #ececee; --fg-muted: #8a8a90; --accent: #ff6b56; --accent-hover: #ff8b78; --border: #2a2a2e; --danger: #ff6b6b; --success: #6bcf6b; } } * { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; background: var(--bg); color: var(--fg); font-family: var(--font-sans); font-size: 1.0625rem; line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; display: flex; flex-direction: column; min-height: 100vh; } .container { max-width: 44rem; margin-inline: auto; padding-inline: 1.5rem; width: 100%; } main.container { flex: 1; padding-block: 2.5rem 4rem; } a { color: var(--accent); text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--accent) 35%, transparent); text-underline-offset: 3px; } a:hover { color: var(--accent-hover); } /* ── Header ─────────────────────────────────────────────────── */ .site-header { border-bottom: 1px solid var(--border); padding-block: 1rem; } .site-header .container { display: flex; align-items: center; gap: 1rem; } .site-title { display: inline-flex; align-items: center; gap: 0.5rem; text-decoration: none; color: inherit; margin-right: auto; } .gate-mark { color: var(--accent); width: 1.15em; height: 1.15em; vertical-align: -0.15em; } .wordmark { font-weight: 600; letter-spacing: 0.14em; color: var(--fg); text-transform: uppercase; font-size: 0.78rem; } .wordmark .sep { color: var(--fg-muted); margin: 0 0.4em; } .step-indicator { font-family: var(--font-sans); font-weight: 500; font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-muted); } /* ── Page heading ───────────────────────────────────────────── */ h1 { font-family: var(--font-sans); font-weight: 800; font-size: clamp(2rem, 5vw, 2.75rem); line-height: 1.05; letter-spacing: -0.025em; margin: 0 0 0.5rem; } .lede { color: var(--fg-muted); margin: 0 0 2rem; font-size: 1.05rem; } /* ── Forms ──────────────────────────────────────────────────── */ form { margin: 0; } .field { display: block; margin-bottom: 1.25rem; } .field > label { display: block; font-weight: 600; font-size: 0.92rem; margin-bottom: 0.35rem; color: var(--fg); } .field .hint { display: block; font-size: 0.82rem; color: var(--fg-muted); margin-top: 0.3rem; } input[type="text"], input[type="password"], select { width: 100%; padding: 0.65rem 0.85rem; font-family: var(--font-sans); font-size: 1rem; background: var(--bg-card); color: var(--fg); border: 1px solid var(--border); border-radius: 6px; transition: border-color 120ms, box-shadow 120ms; } input[type="text"]:focus, input[type="password"]:focus, select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent); } /* ── Drive radio cards ──────────────────────────────────────── */ .drive-list { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 1.5rem; } .drive { display: flex; align-items: center; gap: 0.85rem; padding: 0.85rem 1rem; background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; cursor: pointer; transition: border-color 120ms, background 120ms; } .drive:hover { border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); } .drive input[type="radio"] { accent-color: var(--accent); width: 1.1rem; height: 1.1rem; margin: 0; } .drive:has(input:checked) { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 6%, var(--bg-card)); } .drive .name { font-family: var(--font-mono); font-weight: 600; font-size: 0.95rem; } .drive .meta { margin-left: auto; display: flex; gap: 0.5rem; align-items: center; font-size: 0.85rem; color: var(--fg-muted); } .drive .score { background: var(--bg-subtle); padding: 0.15rem 0.5rem; border-radius: 999px; font-family: var(--font-mono); font-size: 0.78rem; } /* ── Summary table (overview) ───────────────────────────────── */ .summary { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; margin-bottom: 1.5rem; } .summary table { width: 100%; border-collapse: collapse; } .summary td { padding: 0.65rem 1rem; border-bottom: 1px solid var(--border); font-size: 0.95rem; } .summary tr:last-child td { border-bottom: none; } .summary td:first-child { color: var(--fg-muted); width: 12rem; text-transform: capitalize; } .summary td:last-child { font-family: var(--font-mono); font-size: 0.9rem; } /* ── Buttons ────────────────────────────────────────────────── */ .actions { display: flex; align-items: center; gap: 1rem; margin-top: 1.5rem; flex-wrap: wrap; } .btn { display: inline-block; padding: 0.7rem 1.25rem; font-family: var(--font-sans); font-size: 0.95rem; font-weight: 600; letter-spacing: 0.01em; border: 1px solid transparent; border-radius: 6px; cursor: pointer; text-decoration: none; transition: background 120ms, border-color 120ms, color 120ms; } .btn-primary { background: var(--accent); color: #fff; } .btn-primary:hover { background: var(--accent-hover); color: #fff; } .btn-primary:disabled { background: var(--bg-subtle); color: var(--fg-muted); cursor: not-allowed; } .btn-danger { background: var(--danger); color: #fff; } .btn-danger:hover { filter: brightness(1.1); color: #fff; } .btn-link { background: transparent; color: var(--fg-muted); padding: 0.7rem 0; border: none; text-decoration: none; } .btn-link:hover { color: var(--accent); } /* ── Alerts ─────────────────────────────────────────────────── */ .alert { padding: 0.85rem 1rem; border-radius: 6px; margin-bottom: 1.5rem; border: 1px solid; font-size: 0.92rem; } .alert-error { background: color-mix(in srgb, var(--danger) 8%, var(--bg-card)); border-color: color-mix(in srgb, var(--danger) 35%, transparent); color: var(--danger); } .alert-warn { background: color-mix(in srgb, var(--accent) 8%, var(--bg-card)); border-color: color-mix(in srgb, var(--accent) 35%, transparent); color: var(--accent); } .alert ul { margin: 0.4rem 0 0; padding-left: 1.2rem; } .alert li { margin-bottom: 0.2rem; } /* ── Log pane ───────────────────────────────────────────────── */ .log { background: #0d0d0f; color: #e0e0e3; border: 1px solid var(--border); border-radius: 8px; padding: 1rem 1.2rem; font-family: var(--font-mono); font-size: 0.82rem; line-height: 1.5; max-height: 65vh; overflow: auto; white-space: pre-wrap; word-break: break-word; margin: 0; } .progress { background: var(--bg-subtle); border: 1px solid var(--border); border-radius: 999px; height: 12px; overflow: hidden; margin: 1.5rem 0 0.5rem; } .progress-bar { height: 100%; background: linear-gradient( 90deg, var(--accent), color-mix(in srgb, var(--accent) 55%, #fff) ); transition: width 0.6s ease; border-radius: 999px; } .progress-bar-error { background: var(--danger); } .progress-bar-done { background: var(--success); } .progress-phase { margin: 0.3rem 0 1.5rem; color: var(--fg-muted); font-size: 0.95rem; } .log-details { margin-top: 1.5rem; } .log-details summary { cursor: pointer; font-size: 0.9rem; color: var(--fg-muted); user-select: none; padding: 0.25rem 0; } .log-details summary:hover { color: var(--fg); } .log-details[open] summary { margin-bottom: 0.6rem; } /* ── Footer ─────────────────────────────────────────────────── */ .site-footer { margin-top: auto; border-top: 1px solid var(--border); padding-block: 1rem; } .site-footer .container { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; flex-wrap: wrap; } .site-footer .kicker { font-family: var(--font-sans); font-weight: 500; font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-muted); margin: 0; } /* ── Selection + focus ──────────────────────────────────────── */ ::selection { background: var(--accent); color: var(--bg); } :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 2px; }