Vestibule/extension/admin.css

401 lines
6.9 KiB
CSS
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 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;
}