/* Vestibule admin wizard — production styling. * Clean, professional, accessible. This is an operator-facing tool, not * a patient-facing UI — favor clarity over decoration. */ * { box-sizing: border-box; } html, body { margin: 0; padding: 0; background: #0f1116; color: #e8eaed; font-family: -apple-system, "Segoe UI", system-ui, sans-serif; font-size: 14px; line-height: 1.5; min-height: 100vh; } /* ─── Auth views ─── */ .auth-view { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px; } .auth-card { background: #1a1d24; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 32px 40px; max-width: 480px; width: 100%; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5); } .auth-card h1 { margin: 0 0 8px; font-size: 22px; font-weight: 600; color: #fff; } .auth-sub { margin: 0 0 24px; color: #b8bcc4; font-size: 13px; } .auth-warn { margin: 16px 0 24px; padding: 12px 16px; background: rgba(251, 191, 36, 0.08); border: 1px solid rgba(251, 191, 36, 0.25); border-radius: 8px; font-size: 12px; color: #fbbf24; } .auth-warn code { background: rgba(0, 0, 0, 0.3); padding: 1px 6px; border-radius: 4px; font-family: "SF Mono", "Cascadia Mono", Consolas, monospace; font-size: 11px; } .auth-actions { display: flex; justify-content: flex-end; gap: 8px; } /* ─── Form controls ─── */ label { display: block; margin: 12px 0; } label > span { display: block; margin-bottom: 4px; font-size: 13px; color: #b8bcc4; } label > span em { color: #6b7280; font-style: italic; font-weight: normal; } label small { display: block; margin-top: 4px; font-size: 11px; color: #6b7280; line-height: 1.4; } input[type="text"], input[type="url"], input[type="password"], input[type="number"], textarea { width: 100%; padding: 8px 12px; background: #0f1116; border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; color: #e8eaed; font: inherit; font-size: 13px; transition: border-color 120ms ease, box-shadow 120ms ease; } input[type="text"]:focus, input[type="url"]:focus, input[type="password"]:focus, input[type="number"]:focus, textarea:focus { outline: none; border-color: #3b82f6; box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15); } textarea { font-family: "SF Mono", "Cascadia Mono", Consolas, monospace; font-size: 12px; resize: vertical; min-height: 80px; } fieldset { margin: 16px 0; padding: 12px 16px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; } legend { padding: 0 8px; color: #b8bcc4; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; } label.radio { display: flex; align-items: flex-start; gap: 10px; margin: 8px 0; cursor: pointer; } label.radio input[type="radio"] { margin-top: 3px; accent-color: #3b82f6; } label.radio span { color: #e8eaed; font-size: 13px; } label.radio span strong { color: #fff; font-weight: 600; } label.radio input:disabled + span { color: #6b7280; cursor: not-allowed; } label.radio input:disabled + span strong { color: #9ca3af; } .field-error { color: #ef4444; font-size: 12px; margin: 8px 0; } /* ─── Buttons ─── */ button { padding: 8px 20px; border: 1px solid transparent; border-radius: 6px; font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; transition: background 120ms ease, border-color 120ms ease; } button.primary { background: #3b82f6; color: #fff; border-color: #3b82f6; } button.primary:hover { background: #2563eb; border-color: #2563eb; } button.primary:active { background: #1d4ed8; border-color: #1d4ed8; } button.primary:disabled { background: #1e3a5f; border-color: #1e3a5f; color: #6b7280; cursor: not-allowed; } button.secondary { background: transparent; color: #b8bcc4; border-color: rgba(255, 255, 255, 0.15); } button.secondary:hover { background: rgba(255, 255, 255, 0.06); color: #fff; } /* ─── Wizard layout ─── */ #wizard-view, #view-wizard { min-height: 100vh; display: flex; flex-direction: column; } .wizard-header { background: #1a1d24; border-bottom: 1px solid rgba(255, 255, 255, 0.08); padding: 16px 32px; } .wizard-header h1 { margin: 0 0 12px; font-size: 18px; font-weight: 600; color: #fff; } .wizard-steps ol { list-style: none; margin: 0; padding: 0; display: flex; gap: 4px; flex-wrap: wrap; } .wizard-steps li { padding: 6px 12px; font-size: 12px; color: #6b7280; border: 1px solid transparent; border-radius: 4px; cursor: default; } .wizard-steps li.active { color: #3b82f6; border-color: rgba(59, 130, 246, 0.3); background: rgba(59, 130, 246, 0.08); } .wizard-steps li.completed { color: #10b981; } .wizard-body { flex: 1; padding: 24px 32px; max-width: 720px; width: 100%; margin: 0 auto; } .step h2 { margin: 0 0 8px; font-size: 18px; font-weight: 600; color: #fff; } .step-intro { margin: 0 0 20px; color: #b8bcc4; font-size: 13px; line-height: 1.6; } .step-intro code { background: rgba(0, 0, 0, 0.3); padding: 1px 6px; border-radius: 4px; font-family: "SF Mono", "Cascadia Mono", Consolas, monospace; font-size: 11px; color: #fbbf24; } .step-intro strong { color: #fff; } .review-output { background: #0a0c10; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; padding: 16px; font-family: "SF Mono", "Cascadia Mono", Consolas, monospace; font-size: 12px; color: #b8bcc4; line-height: 1.6; white-space: pre-wrap; word-break: break-word; max-height: 400px; overflow-y: auto; } .review-actions { display: flex; gap: 8px; margin: 20px 0; } .save-result { padding: 12px 16px; border-radius: 8px; font-size: 13px; } .save-result.success { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.3); color: #10b981; } .save-result.error { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); color: #ef4444; } /* ─── Wizard nav footer ─── */ .wizard-nav { background: #1a1d24; border-top: 1px solid rgba(255, 255, 255, 0.08); padding: 12px 32px; display: flex; justify-content: space-between; align-items: center; } .wizard-progress { font-size: 12px; color: #6b7280; } /* ─── Homepage × safelist status (wizard step 1) ─── */ .domain-status { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: -4px 0 16px; padding: 10px 14px; border-radius: 8px; font-size: 12px; } .domain-status.ok { background: rgba(16, 185, 129, 0.08); border: 1px solid rgba(16, 185, 129, 0.25); color: #10b981; } .domain-status.warn { background: rgba(251, 191, 36, 0.08); border: 1px solid rgba(251, 191, 36, 0.25); color: #fbbf24; } .domain-status .add-domain { padding: 4px 12px; font-size: 11px; margin: 0; }