/* Shared paint adapters for existing page structures; no business-state rules.
 * Geometry for specialist grids/calendars stays in its existing stylesheet.
 */
:root {
    --app-font: var(--gc-font-sans);
    --app-ink: var(--gc-color-text);
    --app-muted: var(--gc-color-text-muted);
    --app-line: var(--gc-color-border);
    --app-card-line: var(--gc-color-border);
    --app-card-bg: var(--gc-color-surface);
    --app-card-shadow: var(--gc-shadow-sm);
    --app-card-shadow-hover: var(--gc-shadow-md);
    --app-table-head-bg: var(--gc-color-primary-soft);
    --app-control-bg: var(--gc-color-surface);
    --app-control-bg-hover: var(--gc-color-surface-hover);
    --card-shadow: var(--gc-shadow-sm);
}

body:not(.gc-admin) {
    color: var(--gc-color-text);
    font-family: var(--gc-font-sans);
    font-variant-numeric: tabular-nums;
}
body:not(.gc-admin):not(.gc-auth-page):not(.gc-public-page) {
    font-size: var(--gc-font-size-md);
}
body:not(.gc-admin) :is(input, select, textarea, button) {
    font-family: var(--gc-font-sans);
}
body.gc-auth-page a,
body.gc-auth-page a:visited {
    color: var(--gc-color-primary);
}
body.gc-auth-page a:hover {
    color: var(--gc-color-primary-hover);
}
body:not(.gc-admin) :is(input, textarea)::placeholder {
    color: var(--gc-color-placeholder);
    opacity: 1;
}
body:not(.gc-admin):not(.gc-auth-page):not(.gc-public-page) :is(
    input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]),
    select, textarea
) {
    border-color: var(--gc-color-control-border);
    color: var(--gc-color-text);
}
body:not(.gc-admin) :is(input, select, textarea)[aria-invalid="true"] {
    border-color: var(--gc-color-negative);
}
body:not(.gc-admin) :is(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
    outline: var(--gc-focus-outline) !important;
    outline-offset: var(--gc-focus-offset) !important;
}
body:not(.gc-admin) :is(.app-header, .app-sidebar) :focus-visible {
    outline-color: var(--gc-color-on-primary) !important;
}
body:not(.gc-admin) .app-header {
    background: var(--gc-background-header);
    color: var(--gc-color-on-primary);
}
body:not(.gc-admin) .app-header__page-section {
    color: var(--gc-color-header-muted);
}
body:not(.gc-admin) .app-header__page-title {
    color: var(--gc-color-on-primary);
}
body:not(.gc-admin) .app-sidebar {
    border-color: var(--gc-color-border);
    color: var(--gc-color-on-primary);
}
body:not(.gc-admin) :is(.app-sidebar__brand, .app-sidebar__brand-name) {
    color: var(--gc-color-on-primary);
}
body:not(.gc-admin) .app-sidebar__item {
    border-radius: var(--gc-radius-sm);
    color: var(--gc-color-header-muted);
}
body:not(.gc-admin) .app-sidebar__item:hover {
    background: var(--gc-color-primary-soft);
    color: var(--gc-color-primary);
}
body:not(.gc-admin) .app-sidebar__item.is-active,
body:not(.gc-admin) .app-sidebar__item[aria-current="page"] {
    background: var(--gc-color-primary-soft);
    color: var(--gc-color-primary);
}
body:not(.gc-admin) :is(.panel-logo, .brand-mark, .app-sidebar__brand-logo img) {
    object-fit: contain;
    aspect-ratio: 1;
    flex-shrink: 0;
}
body:not(.gc-admin) :is(.modal-backdrop, .app-sidebar-backdrop).is-visible {
    background: var(--gc-color-overlay);
}
body:not(.gc-admin) :is(.page-title, .section-title, .chart-title, .table-title) {
    color: var(--gc-color-heading);
}
body:not(.gc-admin) :is(.field-error, .error-message, .form-error, .errorlist) {
    color: var(--gc-color-negative);
}
body:not(.gc-admin) :is(.empty-message, .empty-note, .loading-message) {
    color: var(--gc-color-text-muted);
}
body:not(.gc-admin) :is(.table-wrap, .table-scroll, .table-responsive, .ux-table-region) {
    overscroll-behavior-inline: contain;
}
body:not(.gc-admin) :is(.table-wrap, .table-scroll, .table-responsive, .ux-table-region):focus-visible {
    outline: var(--gc-focus-outline);
    outline-offset: var(--gc-focus-offset);
}

/* Only the already-supported Django administration theme may adapt to dark.
 * Native admin controls keep their own variables and theme toggle behavior. */
body.gc-admin {
    --gc-color-text: var(--body-fg);
    --gc-color-text-secondary: var(--body-fg);
    --gc-color-text-muted: var(--body-quiet-color);
    --gc-color-heading: var(--body-loud-color);
    --gc-color-surface: var(--body-bg);
    --gc-color-surface-subtle: var(--darkened-bg);
    --gc-color-border: var(--hairline-color);
    --gc-color-border-strong: var(--border-color);
}
