/* Design System V2 / DS-03. Screen-only canonical primitives.
   Legacy selectors are aliases for existing consumers; print styles are unchanged. */

/* Button / IconButton */
.button,
.ui-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--ds-space-2);
    min-height: 48px;
    padding: 12px 22px;
    border: 1px solid var(--ds-border-control);
    border-radius: var(--ds-radius-pill);
    background: var(--ds-surface);
    color: var(--ds-ink);
    font-family: var(--ds-font-ui);
    font-size: var(--ds-type-ui);
    font-weight: var(--ds-weight-semibold);
    line-height: 1.35;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition: background-color .2s, border-color .2s, color .2s, transform .2s;
}

.button-primary,
.ui-button--primary {
    border-color: transparent;
    background: var(--ds-action-primary-bg);
    color: var(--ds-action-primary-fg);
    box-shadow: var(--ds-shadow-action);
}

.button-primary:hover,
.ui-button--primary:hover {
    background: var(--ds-action-primary-hover-bg);
    color: var(--ds-action-primary-fg);
}

.button:hover { transform: translateY(-2px); }

.button-primary :is(span, .ui-icon),
.ui-button--primary :is(span, .ui-icon) { color: inherit; }

.button-secondary,
.ui-button--secondary {
    border: 1px solid var(--ds-brand-accent);
    background: var(--ds-surface);
    color: var(--ds-link-fg);
    box-shadow: none;
}

.button-secondary:hover,
.ui-button--secondary:hover { background: var(--ds-surface-hover); }

.ui-button--compact { min-height: 44px; padding: 9px 14px; }
.button-wide { width: 100%; min-height: 50px; }
.ui-icon-button {
    display: inline-grid;
    place-items: center;
    flex: 0 0 auto;
    width: 44px;
    height: 44px;
    padding: 0;
    border-radius: var(--ds-radius-pill);
    font-size: var(--ds-type-ui);
    cursor: pointer;
}

/* Input / Select / Textarea / validation. Checkboxes and radio buttons retain native geometry. */
:is(input:not([type="checkbox"]):not([type="radio"]), select, textarea) {
    width: 100%;
    min-height: 48px;
    padding: 12px 14px;
    border: 1px solid var(--ds-border-control);
    border-radius: var(--ds-radius-control);
    background: var(--ds-surface-soft);
    color: var(--ds-ink);
    font-family: var(--ds-font-ui);
    font-size: var(--ds-type-form);
    font-weight: var(--ds-weight-regular);
    line-height: 1.45;
}

:is(input, textarea)::placeholder { color: var(--ds-text-muted); }
:is(input, select, textarea):focus { border-color: var(--ds-link-fg); background: var(--ds-surface); }
:is(input:not([type="checkbox"]):not([type="radio"]), select, textarea).ui-control--compact {
    min-height: 44px;
    padding: 9px 11px;
}

:is(input, select, textarea)[aria-invalid="true"] { border-color: var(--ds-status-error-fg); }
.field-error {
    display: block;
    margin: 6px 0 12px;
    color: var(--ds-status-error-fg);
    font-size: var(--ds-type-meta);
    font-weight: var(--ds-weight-semibold);
    line-height: 1.4;
}

/* Toolbar / Filters. Layout-specific grids remain explicit context variants. */
.ui-toolbar,
.positions-toolbar {
    display: flex;
    align-items: end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 18px;
    margin-top: 22px;
    padding: 20px;
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-panel);
    background: var(--ds-surface);
    box-shadow: var(--ds-shadow-panel);
}

.ui-toolbar--compact { gap: 10px; margin-top: 0; padding: 12px 14px; }
.ui-toolbar--plain { margin-top: 0; padding: 0; border: 0; background: transparent; box-shadow: none; }
.ui-toolbar.home-sites-toolbar,
.ui-toolbar.user-task-toolbar { display: grid; }

/* Badge / Status. A semantic state always has text supplied by the consumer. */
.ui-badge,
.style-status {
    display: inline-flex;
    align-items: center;
    width: fit-content;
    padding: 6px 9px;
    border-radius: var(--ds-radius-pill);
    background: var(--ds-status-info-bg);
    color: var(--ds-status-info-fg);
    font-size: var(--ds-type-meta);
    font-weight: var(--ds-weight-semibold);
    line-height: 1.35;
}

.ui-badge--compact { padding: 4px 8px; }
.ui-badge--dense { padding: 3px 6px; font-size: var(--ds-type-dense); line-height: var(--ds-leading-dense); }
.ui-badge--success, .style-status.is-success { background: var(--ds-status-success-bg); color: var(--ds-status-success-fg); }
.ui-badge--warning, .style-status.is-warning { background: var(--ds-status-warning-bg); color: var(--ds-status-warning-fg); }
.ui-badge--error, .style-status.is-danger { background: var(--ds-status-error-bg); color: var(--ds-status-error-fg); }
.ui-badge--info, .style-status.is-info { background: var(--ds-status-info-bg); color: var(--ds-status-info-fg); }

/* Panel / Card. Context variants retain their own layout and meaning. */
.ui-page-stack,
.ui-section-stack {
    display: grid;
    min-width: 0;
}

.ui-page-stack { gap: var(--ds-space-5); }
.ui-section-stack { gap: var(--ds-space-3); }
.ui-page-stack > *,
.ui-section-stack > * { margin-block: 0; }

.ui-panel,
.panel {
    min-width: 0;
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-panel);
    background: var(--ds-surface);
    box-shadow: var(--ds-shadow-panel);
}

.ui-panel--compact { border-radius: var(--ds-radius-card); box-shadow: var(--ds-shadow-compact); }
.ui-panel--flat { box-shadow: none; }
.ui-panel--section { padding: var(--ds-space-5); }
.ui-card {
    min-width: 0;
    border: 1px solid var(--ui-card-border, var(--ds-border));
    border-top-width: var(--ui-card-top-width, 1px);
    border-top-color: var(--ui-card-top-color, var(--ui-card-border, var(--ds-border)));
    border-left-width: var(--ui-card-left-width, 1px);
    border-left-color: var(--ui-card-left-color, var(--ui-card-border, var(--ds-border)));
    border-radius: var(--ui-card-radius, var(--ds-radius-card));
    background: var(--ui-card-bg, var(--ds-surface));
    box-shadow: var(--ui-card-shadow, var(--ds-shadow-compact));
}

.ui-card--compact { --ui-card-radius: var(--ds-radius-control); }
.ui-card--flat { --ui-card-shadow: none; }

/* Disclosure. Variants change emphasis, never the interaction contract. */
.ui-disclosure {
    min-width: 0;
    overflow: clip;
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-control);
    background: var(--ds-surface);
}

.ui-disclosure__summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ds-space-3);
    min-height: 52px;
    padding: var(--ds-space-3) var(--ds-space-4);
    color: var(--ds-ink);
    cursor: pointer;
}

.ui-disclosure__heading {
    display: flex;
    align-items: flex-start;
    gap: var(--ds-space-2);
    min-width: 0;
}

.ui-disclosure__heading > span { min-width: 0; }
.ui-disclosure__heading strong,
.ui-disclosure__heading small { display: block; }
.ui-disclosure__heading strong { font-size: var(--ds-type-ui); font-weight: var(--ds-weight-semibold); }
.ui-disclosure__heading small { margin-top: var(--ds-space-1); color: var(--ds-text-secondary); font-size: var(--ds-type-meta); font-weight: var(--ds-weight-regular); }
.ui-disclosure__body { display: grid; gap: var(--ds-space-4); padding: var(--ds-space-4); border-top: 1px solid var(--ds-border-subtle); }
.ui-disclosure__body > :first-child,
.ui-disclosure__body > :last-child { margin-block: 0; }
.ui-disclosure--primary { border-color: var(--ds-border-control); background: var(--ds-surface-soft); }
.ui-disclosure--secondary { box-shadow: none; }
.ui-disclosure--technical { border-color: var(--ds-border-subtle); background: var(--ds-surface-muted); }
.ui-disclosure--technical .ui-disclosure__summary { color: var(--ds-text-secondary); }

@media (max-width: 640px) {
    .ui-panel--section { padding: var(--ds-space-4); }
    .ui-disclosure__summary,
    .ui-disclosure__body { padding-inline: var(--ds-space-3); }
}
