/* SharedUI base — design tokens & reset shared across all sites */

*, *::before, *::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

:root {
    /* Spacing */
    --space-1: 0.25rem;
    --space-2: 0.5rem;
    --space-3: 0.75rem;
    --space-4: 1rem;
    --space-6: 1.5rem;
    --space-8: 2rem;
    --space-12: 3rem;
    --space-16: 4rem;

    /* Typography */
    --text-sm: 0.875rem;
    --text-base: 1rem;
    --text-lg: 1.125rem;
    --text-xl: 1.25rem;
    --text-2xl: 1.5rem;
    --text-3xl: 1.875rem;
    --text-4xl: 2.25rem;

    /* Border radius */
    --radius-sm: 0.25rem;
    --radius-md: 0.5rem;
    --radius-lg: 0.75rem;
    --radius-full: 9999px;

    /* Shadows */
    --shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
    --shadow-md: 0 4px 6px rgb(0 0 0 / 0.07), 0 2px 4px rgb(0 0 0 / 0.06);
    --shadow-lg: 0 10px 15px rgb(0 0 0 / 0.08), 0 4px 6px rgb(0 0 0 / 0.05);

    /* Transitions */
    --transition-fast: 150ms ease;
    --transition-base: 200ms ease;
    --transition-slow: 300ms ease;

    /* Z-index scale */
    --z-nav: 100;
    --z-modal: 200;
    --z-toast: 300;
}

html {
    -webkit-text-size-adjust: 100%;
    scroll-behavior: smooth;
}

body {
    min-height: 100dvh;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
}

img, video, svg {
    display: block;
    max-width: 100%;
}

input, button, textarea, select {
    font: inherit;
}

p, h1, h2, h3, h4, h5, h6 {
    overflow-wrap: break-word;
}

/* ─── Component colour fallbacks ─────────────────────────────────────────── */
/* Apps override these in their own site.css via :root { --color-accent: … }  */
:root {
    --color-accent:        #2563eb;
    --color-accent-dark:   #1d4ed8;
    --color-accent-text:   #ffffff;
    --color-surface:       #ffffff;
    --color-surface-alt:   #f3f4f6;
    --color-border:        #e5e7eb;
    --color-text:          #111827;
    --color-text-muted:    #6b7280;
    --color-danger:        #dc2626;
    --color-danger-dark:   #b91c1c;
    --color-danger-text:   #ffffff;
    --color-success:       #16a34a;
    --color-success-bg:    #f0fdf4;
    --color-success-border:#bbf7d0;
    --color-error-bg:      #fef2f2;
    --color-error-border:  #fecaca;
    --color-warning-bg:    #fffbeb;
    --color-warning-border:#fde68a;
    --color-info-bg:       #eff6ff;
    --color-info-border:   #bfdbfe;
}

/* ─── Layout utilities ────────────────────────────────────────────────────── */
.container {
    width: 100%;
    max-width: 1100px;
    margin-inline: auto;
    padding-inline: var(--space-4);
}

.stack {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
}
.stack--sm  { gap: var(--space-2); }
.stack--lg  { gap: var(--space-8); }

.cluster {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-4);
    align-items: center;
}
.cluster--sm  { gap: var(--space-2); }
.cluster--end { justify-content: flex-end; }

.grid-2 {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
    gap: var(--space-4);
}
.grid-3 {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
    gap: var(--space-4);
}

/* ─── Buttons ─────────────────────────────────────────────────────────────── */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-4);
    font-size: var(--text-base);
    font-weight: 500;
    line-height: 1.25;
    border-radius: var(--radius-md);
    border: 1px solid transparent;
    cursor: pointer;
    text-decoration: none;
    transition: background-color var(--transition-fast),
                border-color var(--transition-fast),
                opacity var(--transition-fast);
    white-space: nowrap;
    user-select: none;
}
.btn:disabled,
.btn[aria-busy="true"] {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
}
.btn[aria-busy="true"]::before {
    content: '';
    display: inline-block;
    width: 0.875em;
    height: 0.875em;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    animation: btn-spin 0.6s linear infinite;
}
@keyframes btn-spin { to { transform: rotate(360deg); } }

.btn-primary {
    background-color: var(--color-accent);
    color: var(--color-accent-text);
    border-color: var(--color-accent);
}
.btn-primary:hover { background-color: var(--color-accent-dark); border-color: var(--color-accent-dark); }

.btn-secondary {
    background-color: var(--color-surface-alt);
    color: var(--color-text);
    border-color: var(--color-border);
}
.btn-secondary:hover { background-color: var(--color-border); }

.btn-ghost {
    background-color: transparent;
    color: var(--color-accent);
    border-color: transparent;
}
.btn-ghost:hover { background-color: var(--color-surface-alt); }

.btn-danger {
    background-color: var(--color-danger);
    color: var(--color-danger-text);
    border-color: var(--color-danger);
}
.btn-danger:hover { background-color: var(--color-danger-dark); border-color: var(--color-danger-dark); }

.btn-outline {
    background-color: transparent;
    color: var(--color-accent);
    border-color: var(--color-accent);
}
.btn-outline:hover { background-color: var(--color-accent); color: var(--color-accent-text); }

.btn-sm {
    padding: var(--space-1) var(--space-3);
    font-size: var(--text-sm);
}
.btn-lg {
    padding: var(--space-3) var(--space-6);
    font-size: var(--text-lg);
}

/* ─── Cards ───────────────────────────────────────────────────────────────── */
.card {
    background-color: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
}
.card--hover {
    transition: transform var(--transition-base), box-shadow var(--transition-base);
}
.card--hover:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
}
.card-header {
    padding: var(--space-4) var(--space-6);
    border-bottom: 1px solid var(--color-border);
    font-weight: 600;
}
.card-body {
    padding: var(--space-6);
}
.card-footer {
    padding: var(--space-4) var(--space-6);
    border-top: 1px solid var(--color-border);
    background-color: var(--color-surface-alt);
}

/* ─── Alerts ──────────────────────────────────────────────────────────────── */
.alert {
    display: flex;
    align-items: flex-start;
    gap: var(--space-3);
    padding: var(--space-3) var(--space-4);
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border);
    background-color: var(--color-surface-alt);
    font-size: var(--text-sm);
    line-height: 1.5;
}
.alert--success {
    background-color: var(--color-success-bg);
    border-color: var(--color-success-border);
    color: var(--color-success);
}
.alert--error {
    background-color: var(--color-error-bg);
    border-color: var(--color-error-border);
    color: var(--color-danger);
}
.alert--warning {
    background-color: var(--color-warning-bg);
    border-color: var(--color-warning-border);
    color: #92400e;
}
.alert--info {
    background-color: var(--color-info-bg);
    border-color: var(--color-info-border);
    color: var(--color-accent-dark, #1d4ed8);
}
.alert__message { flex: 1; }
.alert__dismiss {
    background: none;
    border: none;
    cursor: pointer;
    font-size: var(--text-lg);
    line-height: 1;
    opacity: 0.6;
    padding: 0;
    color: inherit;
    flex-shrink: 0;
}
.alert__dismiss:hover { opacity: 1; }
.alert--fading {
    transition: opacity var(--transition-base);
    opacity: 0;
}

/* ─── Toast notifications ─────────────────────────────────────────────────── */
.toast-container {
    position: fixed;
    bottom: var(--space-6);
    right: var(--space-6);
    z-index: var(--z-toast);
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    pointer-events: none;
}
.toast {
    min-width: 16rem;
    max-width: 22rem;
    padding: var(--space-3) var(--space-4);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-lg);
    font-size: var(--text-sm);
    pointer-events: auto;
    animation: toast-in var(--transition-base) ease forwards;
    border: 1px solid var(--color-border);
    background-color: var(--color-surface);
    color: var(--color-text);
}
.toast--success { background-color: var(--color-success-bg); border-color: var(--color-success-border); color: var(--color-success); }
.toast--error   { background-color: var(--color-error-bg);   border-color: var(--color-error-border);   color: var(--color-danger); }
.toast--warning { background-color: var(--color-warning-bg); border-color: var(--color-warning-border); color: #92400e; }
.toast--info    { background-color: var(--color-info-bg);    border-color: var(--color-info-border);    color: var(--color-accent-dark, #1d4ed8); }
.toast--fading  { animation: toast-out var(--transition-slow) ease forwards; }
@keyframes toast-in  { from { opacity: 0; transform: translateY(0.5rem); } to { opacity: 1; transform: translateY(0); } }
@keyframes toast-out { from { opacity: 1; } to { opacity: 0; transform: translateY(0.25rem); } }

/* ─── Form primitives ─────────────────────────────────────────────────────── */
.form-group {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
}
.form-label {
    font-size: var(--text-sm);
    font-weight: 500;
    color: var(--color-text);
}
.form-label--required::after {
    content: ' *';
    color: var(--color-danger);
}
.form-control {
    width: 100%;
    padding: var(--space-2) var(--space-3);
    font-size: var(--text-base);
    line-height: 1.5;
    color: var(--color-text);
    background-color: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
    appearance: none;
}
.form-control:focus {
    outline: none;
    border-color: var(--color-accent);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 20%, transparent);
}
.form-control:disabled { opacity: 0.55; cursor: not-allowed; }
.form-control.input-validation-error { border-color: var(--color-danger); }
.form-error {
    font-size: var(--text-sm);
    color: var(--color-danger);
    min-height: 1.25em;
}
.form-hint {
    font-size: var(--text-sm);
    color: var(--color-text-muted);
}
textarea.form-control { resize: vertical; min-height: 6rem; }
select.form-control { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right var(--space-3) center; padding-right: var(--space-8); }

/* ─── Badges ──────────────────────────────────────────────────────────────── */
.badge {
    display: inline-flex;
    align-items: center;
    padding: 0.125rem var(--space-2);
    font-size: var(--text-sm);
    font-weight: 500;
    line-height: 1.25;
    border-radius: var(--radius-full);
    white-space: nowrap;
    border: 1px solid var(--color-border);
    background-color: var(--color-surface-alt);
    color: var(--color-text-muted);
}
.badge--success { background-color: var(--color-success-bg); border-color: var(--color-success-border); color: var(--color-success); }
.badge--error   { background-color: var(--color-error-bg);   border-color: var(--color-error-border);   color: var(--color-danger); }
.badge--warning { background-color: var(--color-warning-bg); border-color: var(--color-warning-border); color: #92400e; }
.badge--info    { background-color: var(--color-info-bg);    border-color: var(--color-info-border);    color: var(--color-accent-dark, #1d4ed8); }
.badge--neutral { background-color: var(--color-surface-alt); color: var(--color-text-muted); }

/* ─── Pagination ──────────────────────────────────────────────────────────── */
.pagination {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-1);
    align-items: center;
    list-style: none;
}
.pagination__item a,
.pagination__item span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.25rem;
    height: 2.25rem;
    padding-inline: var(--space-2);
    font-size: var(--text-sm);
    font-weight: 500;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border);
    text-decoration: none;
    color: var(--color-text);
    background-color: var(--color-surface);
    transition: background-color var(--transition-fast);
}
.pagination__item a:hover { background-color: var(--color-surface-alt); }
.pagination__item--active a,
.pagination__item--active span {
    background-color: var(--color-accent);
    border-color: var(--color-accent);
    color: var(--color-accent-text);
}
.pagination__item--disabled a,
.pagination__item--disabled span {
    opacity: 0.4;
    pointer-events: none;
}

/* ─── Skip link for accessibility ────────────────────────────────────────── */
.skip-link {
    position: absolute;
    top: -100%;
    left: var(--space-4);
    padding: var(--space-2) var(--space-4);
    background: var(--color-accent, #000);
    color: #fff;
    border-radius: var(--radius-md);
    font-size: var(--text-sm);
    font-weight: 600;
    text-decoration: none;
    z-index: var(--z-nav);
    transition: top var(--transition-fast);
}
.skip-link:focus {
    top: var(--space-4);
}

/* Visually hidden utility */
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* ─── Element Editor (Block Designer) ────────────────────────────────────── */
.element-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    margin-bottom: var(--space-4);
}

.element-card {
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    background: var(--color-surface);
    overflow: hidden;
    transition: box-shadow var(--transition-fast);
}

.element-card:focus-within {
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-accent) 30%, transparent);
}

.element-card__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-3);
    padding: var(--space-2) var(--space-3);
    background: var(--color-surface-alt);
    border-bottom: 1px solid var(--color-border);
}

.element-card.is-collapsed .element-card__body { display: none; }
.element-card.is-collapsed .element-card__head { border-bottom: none; }

.element-card__actions {
    display: flex;
    gap: var(--space-2);
    flex-shrink: 0;
}

.element-card__body {
    padding: var(--space-4);
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
}

.element-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    padding: var(--space-1) var(--space-3);
    border-radius: var(--radius-full);
    font-size: var(--text-sm);
    font-weight: 600;
    border: 1px solid transparent;
    cursor: pointer;
    background: none;
    color: inherit;
}

.element-badge--text      { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
.element-badge--hero      { background: #fdf4ff; color: #7e22ce; border-color: #e9d5ff; }
.element-badge--cards     { background: #f0fdf4; color: #166534; border-color: #bbf7d0; }
.element-badge--list      { background: #fff7ed; color: #9a3412; border-color: #fed7aa; }
.element-badge--cta       { background: #fefce8; color: #854d0e; border-color: #fde68a; }
.element-badge--divider   { background: var(--color-surface-alt); color: var(--color-text-muted); border-color: var(--color-border); }

.element-fields {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-3);
}

.element-field {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
}

.element-field textarea { min-height: 80px; }

/* Wide fields: eyebrow, subtitle, body */
.element-field:has(textarea),
.element-field:has([data-el-field="eyebrow"]),
.element-field:has([data-el-field="subtitle"]),
.element-field:has([data-el-field="text"]) {
    grid-column: 1 / -1;
}

.element-items {
    border-top: 1px solid var(--color-border);
    padding-top: var(--space-4);
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
}

.element-items__head {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.element-item-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
}

.element-item {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr auto;
    gap: var(--space-2);
    align-items: start;
    padding: var(--space-3);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-surface-alt);
}

.element-item textarea { min-height: 60px; }

.element-add-bar {
    display: flex;
    gap: var(--space-2);
    align-items: center;
    padding: var(--space-3);
    border: 2px dashed var(--color-border);
    border-radius: var(--radius-lg);
    background: var(--color-surface-alt);
}

.element-add-bar select { flex: 1; max-width: 220px; }

.element-empty-hint {
    padding: var(--space-6);
    text-align: center;
    color: var(--color-text-muted);
    font-size: var(--text-sm);
    border: 2px dashed var(--color-border);
    border-radius: var(--radius-lg);
}

.element-divider-hint {
    color: var(--color-text-muted);
    font-size: var(--text-sm);
    font-style: italic;
    margin: 0;
}

/* ─── Element variant picker ──────────────────────────────────────────────── */
.element-variant-row {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding-bottom: var(--space-3);
    border-bottom: 1px solid var(--color-border);
    flex-wrap: wrap;
}

.element-variant-row .form-label {
    font-size: var(--text-sm);
    color: var(--color-text-muted);
    flex-shrink: 0;
    font-weight: 600;
    margin: 0;
}

.variant-picker {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-1);
}

.variant-pill {
    display: inline-flex;
    align-items: center;
    padding: 4px 12px;
    border-radius: var(--radius-full);
    border: 1px solid var(--color-border);
    background: var(--color-surface-alt);
    font-size: var(--text-sm);
    font-weight: 500;
    cursor: pointer;
    transition: all var(--transition-fast);
    user-select: none;
    color: var(--color-text-muted);
}

.variant-pill input[type="radio"] {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
    pointer-events: none;
}

.variant-pill:hover {
    border-color: var(--color-accent);
    color: var(--color-accent);
}

.variant-pill.is-active {
    background: var(--color-accent);
    border-color: var(--color-accent);
    color: var(--color-accent-text);
    font-weight: 600;
}

@media (max-width: 640px) {
    .element-variant-row { flex-direction: column; align-items: flex-start; }
}

/* Live preview status indicator */
.preview-status {
    font-size: var(--text-sm);
    font-weight: 400;
    color: var(--color-text-muted);
    margin-left: var(--space-2);
}

/* Public element rendering */
.cms-block--composed { display: contents; }

.cms-element { display: block; }
.cms-element--divider {
    border: none;
    border-top: 1px solid var(--color-border);
    margin: var(--space-8) 0;
}

@media (max-width: 640px) {
    .element-fields { grid-template-columns: 1fr; }
    .element-item { grid-template-columns: 1fr; }
    .element-field:has(textarea),
    .element-field:has([data-el-field]) { grid-column: 1; }
}
