/* Full theme editor page */ .theme-editor-page { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 1.5rem; max-width: 100rem; } @media (min-width: 60rem) { .theme-editor-page { grid-template-columns: 1fr 400px; } } /* Left column: controls */ .theme-editor-controls { display: flex; flex-direction: column; gap: 1.5rem; } /* Right column: preview */ .theme-editor-preview { position: sticky; top: 1rem; align-self: start; max-height: calc(100vh - 2rem); overflow-y: auto; } /* Section styling */ .theme-editor-section { display: flex; flex-direction: column; gap: 0.75rem; padding: 1rem; background: var(--color-surface); border: 1px solid var(--color-border); } .theme-editor-section-header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; } .theme-editor-scheme-preset { padding: 0.375rem 0.5rem; padding-right: 1.75rem; border: 1px solid var(--color-border); background: var(--color-base); color: var(--color-text); font-family: var(--font-ui); font-size: 0.75rem; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M6 8L2 4h8z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.375rem center; cursor: pointer; } .theme-editor-scheme-preset:focus { outline: none; border-color: var(--color-primary); } .theme-editor-scheme-preset option { background: var(--color-surface); color: var(--color-text); } .theme-editor-section h3 { margin: 0; font-size: 1rem; font-weight: 600; color: var(--color-text); } /* Colour grid - 4 columns */ .theme-editor-colours { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.75rem; } @media (min-width: 30rem) { .theme-editor-colours { grid-template-columns: repeat(4, 1fr); } } /* Colour groups */ .theme-editor-colour-group { display: flex; flex-direction: column; gap: 0.5rem; } .theme-editor-colour-group-label { font-size: 0.75rem; font-weight: 600; color: var(--color-muted); text-transform: uppercase; letter-spacing: 0.05em; } .theme-editor-colour-group-items { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; } @container (min-width: 30rem) { .theme-editor-colour-group-items { grid-template-columns: repeat(4, 1fr); } } /* Fonts section */ .theme-editor-fonts { display: grid; grid-template-columns: 1fr; gap: 0.75rem; } @container (min-width: 30rem) { .theme-editor-fonts { grid-template-columns: repeat(3, 1fr); } } .theme-editor-font-field { display: flex; flex-direction: column; gap: 0.25rem; } .theme-editor-font-field label { font-size: 0.875rem; color: var(--color-muted); } .theme-editor-font-field input, .theme-editor-font-field select { padding: 0.5rem; border: 1px solid var(--color-border); background: var(--color-base); color: var(--color-text); font-family: var(--font-ui); font-size: 0.875rem; } .theme-editor-font-field input:focus, .theme-editor-font-field select:focus { outline: none; border-color: var(--color-primary); } /* Spacing section */ .theme-editor-spacing { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; } .theme-editor-spacing-field { display: flex; flex-direction: column; gap: 0.25rem; } .theme-editor-spacing-field label { font-size: 0.875rem; color: var(--color-muted); } .theme-editor-spacing-field input { padding: 0.5rem; border: 1px solid var(--color-border); background: var(--color-base); color: var(--color-text); font-family: var(--font-mono); font-size: 0.875rem; text-align: center; } .theme-editor-spacing-field input:focus { outline: none; border-color: var(--color-primary); } /* Code themes */ .theme-editor-code-themes { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; } .theme-editor-code-theme { display: flex; flex-direction: column; gap: 0.25rem; } .theme-editor-code-theme label { font-size: 0.875rem; color: var(--color-muted); } .theme-editor-code-theme select { padding: 0.5rem; border: 1px solid var(--color-border); background: var(--color-base); color: var(--color-text); font-family: var(--font-ui); font-size: 0.875rem; } .theme-editor-code-theme select:focus { outline: none; border-color: var(--color-primary); } /* Mode toggle */ .theme-editor-mode { display: flex; align-items: center; gap: 1rem; } .theme-editor-mode label { font-size: 0.875rem; color: var(--color-muted); } /* Actions row */ .theme-editor-actions { display: flex; justify-content: flex-end; gap: 0.75rem; padding-top: 1rem; border-top: 1px solid var(--color-border); } /* Preview header */ .theme-editor-preview-header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 0.5rem; } .theme-editor-preview-header h3 { margin: 0; font-size: 1rem; font-weight: 600; color: var(--color-muted); } .theme-editor-preview .theme-preview { padding: 1rem; border: 1px solid var(--color-border); max-width: none; } .theme-editor-preview .theme-preview--loading, .theme-editor-preview .theme-preview--error { padding: 2rem; text-align: center; color: var(--color-muted); } /* Preset selector */ .theme-editor-preset { display: flex; flex-direction: column; gap: 0.25rem; } .theme-editor-preset label { font-size: 0.875rem; color: var(--color-muted); } .theme-editor-preset select { padding: 0.5rem; border: 1px solid var(--color-border); background: var(--color-base); color: var(--color-text); font-family: var(--font-ui); font-size: 0.875rem; } .theme-editor-preset select:focus { outline: none; border-color: var(--color-primary); } /* Back link */ .theme-editor-back { display: inline-flex; align-items: center; gap: 0.5rem; color: var(--color-link); text-decoration: none; font-size: 0.875rem; margin-bottom: 1rem; } .theme-editor-back:hover { text-decoration: underline; } /* Select dropdown styling */ .theme-editor-section select, .theme-editor-preset select, .theme-editor-code-theme select { appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M6 8L2 4h8z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.5rem center; padding-right: 2rem; cursor: pointer; } .theme-editor-section select option, .theme-editor-preset select option, .theme-editor-code-theme select option { background: var(--color-surface); color: var(--color-text); padding: 0.5rem; }