/** * Admin Content Form Component * * Modern content form with split-screen layout option, collapsible sections, * auto-save indicator, and sticky form actions bar. * Uses BEM naming convention and design system tokens. */ .admin-content-form { display: flex; flex-direction: column; gap: var(--space-lg, 1.5rem); padding: var(--space-lg, 1.5rem); background: var(--bg, oklch(100% 0 0)); min-height: 100vh; position: relative; } /* Alerts */ .admin-content-form__alert { padding: var(--space-md, 1rem); border-radius: 8px; margin-bottom: var(--space-md, 1rem); border-left: 4px solid; transition: all 0.2s ease; } .admin-content-form__alert--error { background: oklch(95% 0.05 25 / 0.1); border-left-color: var(--accent-error, oklch(60% 0.25 25)); color: var(--accent-error, oklch(60% 0.25 25)); } .admin-content-form__alert--info { background: oklch(95% 0.05 240 / 0.1); border-left-color: var(--accent-info, oklch(58% 0.22 240)); color: var(--accent-info, oklch(58% 0.22 240)); } .admin-content-form__alert--success { background: oklch(95% 0.05 145 / 0.1); border-left-color: var(--accent-success, oklch(58% 0.22 145)); color: var(--accent-success, oklch(58% 0.22 145)); } .admin-content-form__error-list { margin: var(--space-sm, 0.75rem) 0 0 var(--space-lg, 1.5rem); padding: 0; list-style: disc; } .admin-content-form__error-item { margin-bottom: var(--space-xs, 0.5rem); } /* Auto-Save Indicator */ .admin-content-form__auto-save { display: flex; align-items: center; gap: var(--space-xs, 0.5rem); padding: var(--space-sm, 0.75rem) var(--space-md, 1rem); background: var(--bg-secondary, oklch(95% 0.01 280)); border: 1px solid var(--border-light, oklch(75% 0.02 280)); border-radius: 8px; font-size: 0.875rem; color: var(--muted, oklch(50% 0.01 280)); position: fixed; top: var(--space-md, 1rem); right: var(--space-md, 1rem); z-index: 100; box-shadow: 0 2px 8px oklch(0% 0 0 / 0.1); transition: all 0.3s ease; opacity: 0; transform: translateY(-10px); pointer-events: none; } .admin-content-form__auto-save--visible { opacity: 1; transform: translateY(0); pointer-events: auto; } .admin-content-form__auto-save-icon { width: 16px; height: 16px; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .admin-content-form__auto-save-text { font-weight: 500; } /* Form Sections Container */ .admin-content-form__sections { display: flex; flex-direction: column; gap: var(--space-lg, 1.5rem); } /* Split-Screen Layout */ .admin-content-form--split-screen { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-lg, 1.5rem); align-items: start; } .admin-content-form--split-screen .admin-content-form__sections { grid-column: 1; } .admin-content-form__preview-panel { grid-column: 2; position: sticky; top: var(--space-lg, 1.5rem); max-height: calc(100vh - var(--space-lg, 1.5rem) * 2); overflow-y: auto; background: var(--bg-secondary, oklch(95% 0.01 280)); border: 1px solid var(--border-light, oklch(75% 0.02 280)); border-radius: 8px; padding: var(--space-md, 1rem); } /* Form Section */ .admin-content-form__section { background: var(--bg-secondary, oklch(95% 0.01 280)); border-radius: 8px; padding: var(--space-lg, 1.5rem); border: 1px solid var(--border-light, oklch(75% 0.02 280)); transition: all 0.2s ease; } .admin-content-form__section--collapsed { padding: var(--space-md, 1rem); } .admin-content-form__section--collapsed .admin-content-form__section-content { display: none; } .admin-content-form__section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-md, 1rem); padding-bottom: var(--space-sm, 0.75rem); border-bottom: 2px solid var(--border-light, oklch(75% 0.02 280)); cursor: pointer; user-select: none; } .admin-content-form__section-title { font-size: 1.125rem; font-weight: 600; color: var(--text, oklch(20% 0.02 280)); margin: 0; display: flex; align-items: center; gap: var(--space-xs, 0.5rem); } .admin-content-form__section-toggle { background: none; border: none; color: var(--muted, oklch(50% 0.01 280)); cursor: pointer; padding: var(--space-xs, 0.5rem); border-radius: 4px; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; } .admin-content-form__section-toggle:hover { background: var(--bg, oklch(100% 0 0)); color: var(--text, oklch(20% 0.02 280)); } .admin-content-form__section-toggle-icon { width: 20px; height: 20px; transition: transform 0.2s ease; } .admin-content-form__section--collapsed .admin-content-form__section-toggle-icon { transform: rotate(-90deg); } .admin-content-form__section-content { display: flex; flex-direction: column; gap: var(--space-md, 1rem); } /* Form Grid */ .admin-content-form__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--space-md, 1rem); } /* Form Field */ .admin-content-form__field { display: flex; flex-direction: column; gap: var(--space-xs, 0.5rem); } .admin-content-form__field--full { grid-column: 1 / -1; } .admin-content-form__label { display: flex; align-items: center; gap: var(--space-xs, 0.5rem); font-weight: 500; color: var(--text, oklch(20% 0.02 280)); font-size: 0.875rem; } .admin-content-form__required { color: var(--accent-error, oklch(60% 0.25 25)); } .admin-content-form__badge { display: inline-block; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.75rem; font-weight: 500; } .admin-content-form__badge--info { background: oklch(95% 0.05 240 / 0.2); color: var(--accent-info, oklch(58% 0.22 240)); } .admin-content-form__badge--success { background: oklch(95% 0.05 145 / 0.2); color: var(--accent-success, oklch(58% 0.22 145)); } .admin-content-form__input-group { display: flex; flex-direction: column; gap: var(--space-xs, 0.5rem); } .admin-content-form__help { color: var(--muted, oklch(50% 0.01 280)); font-size: 0.75rem; } .admin-content-form__error { color: var(--accent-error, oklch(60% 0.25 25)); font-size: 0.75rem; display: flex; align-items: center; gap: var(--space-xs, 0.5rem); } /* Form Actions - Sticky */ .admin-content-form__actions { display: flex; gap: var(--space-md, 1rem); padding: var(--space-md, 1rem); background: var(--bg, oklch(100% 0 0)); border-top: 1px solid var(--border-light, oklch(75% 0.02 280)); position: sticky; bottom: 0; z-index: 10; box-shadow: 0 -2px 8px oklch(0% 0 0 / 0.05); margin-top: auto; } .admin-content-form__actions-button { padding: var(--space-sm, 0.75rem) var(--space-lg, 1.5rem); border: none; border-radius: 6px; cursor: pointer; font-size: 0.875rem; font-weight: 500; transition: all 0.2s ease; display: flex; align-items: center; gap: var(--space-xs, 0.5rem); } .admin-content-form__actions-button--primary { background: var(--accent-primary, oklch(60% 0.2 280)); color: var(--bg, oklch(100% 0 0)); } .admin-content-form__actions-button--primary:hover { background: oklch(55% 0.2 280); transform: translateY(-1px); box-shadow: 0 4px 8px oklch(60% 0.2 280 / 0.3); } .admin-content-form__actions-button--secondary { background: var(--bg-secondary, oklch(95% 0.01 280)); color: var(--text, oklch(20% 0.02 280)); border: 1px solid var(--border-light, oklch(75% 0.02 280)); } .admin-content-form__actions-button--secondary:hover { background: var(--bg-tertiary, oklch(92% 0.01 280)); } /* Keyboard Shortcuts Help */ .admin-content-form__shortcuts { position: fixed; bottom: var(--space-lg, 1.5rem); right: var(--space-lg, 1.5rem); z-index: 1000; } .admin-content-form__shortcuts-button { width: 48px; height: 48px; border-radius: 50%; background: var(--accent-primary, oklch(60% 0.2 280)); color: var(--bg, oklch(100% 0 0)); border: none; cursor: pointer; box-shadow: 0 4px 12px oklch(0% 0 0 / 0.2); transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; } .admin-content-form__shortcuts-button:hover { transform: scale(1.1); box-shadow: 0 6px 16px oklch(0% 0 0 / 0.3); } .admin-content-form__shortcuts-modal { position: fixed; inset: 0; background: oklch(0% 0 0 / 0.5); display: flex; align-items: center; justify-content: center; z-index: 1001; opacity: 0; pointer-events: none; transition: opacity 0.2s ease; } .admin-content-form__shortcuts-modal--visible { opacity: 1; pointer-events: auto; } .admin-content-form__shortcuts-content { background: var(--bg, oklch(100% 0 0)); border-radius: 12px; padding: var(--space-xl, 2rem); max-width: 600px; max-height: 80vh; overflow-y: auto; box-shadow: 0 8px 32px oklch(0% 0 0 / 0.3); } .admin-content-form__shortcuts-title { font-size: 1.5rem; font-weight: 700; margin: 0 0 var(--space-lg, 1.5rem) 0; color: var(--text, oklch(20% 0.02 280)); } .admin-content-form__shortcuts-list { display: flex; flex-direction: column; gap: var(--space-md, 1rem); list-style: none; padding: 0; margin: 0; } .admin-content-form__shortcuts-item { display: flex; justify-content: space-between; align-items: center; padding: var(--space-sm, 0.75rem); background: var(--bg-secondary, oklch(95% 0.01 280)); border-radius: 6px; } .admin-content-form__shortcuts-key { font-family: monospace; padding: 0.25rem 0.5rem; background: var(--bg, oklch(100% 0 0)); border: 1px solid var(--border-light, oklch(75% 0.02 280)); border-radius: 4px; font-size: 0.75rem; color: var(--text, oklch(20% 0.02 280)); } /* Responsive Design */ @media (max-width: 1024px) { .admin-content-form--split-screen { grid-template-columns: 1fr; } .admin-content-form__preview-panel { position: static; max-height: none; } } @media (max-width: 768px) { .admin-content-form { padding: var(--space-md, 1rem); } .admin-content-form__actions { flex-direction: column; } .admin-content-form__actions-button { width: 100%; justify-content: center; } .admin-content-form__grid { grid-template-columns: 1fr; } .admin-content-form__shortcuts { bottom: var(--space-md, 1rem); right: var(--space-md, 1rem); } }