/* =====================================================================
   HARVEST — BASE
   Tipografia, elementos nativos e ajustes globais dos componentes do
   Bootstrap (botões, formulários, cards, tabelas, badges, alertas).
   ===================================================================== */

html {
    -webkit-text-size-adjust: 100%;
    scroll-behavior: smooth;
}

html, body {
    font-family: var(--hv-font-sans);
    font-size: var(--hv-fs-base);
    line-height: var(--hv-lh-base);
    background-color: var(--hv-bg);
    color: var(--hv-text);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
}

body {
    transition: background-color var(--hv-anim-duration) var(--hv-ease), color var(--hv-anim-duration) var(--hv-ease);
}

::selection {
    background: rgba(var(--hv-primary-rgb), 0.2);
}

/* ---------- Tipografia ---------- */
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
    color: var(--hv-heading);
    font-weight: var(--hv-fw-bold);
    line-height: var(--hv-lh-tight);
    letter-spacing: -0.01em;
}

h1, .h1 { font-size: var(--hv-fs-3xl); }
h2, .h2 { font-size: var(--hv-fs-2xl); }
h3, .h3 { font-size: var(--hv-fs-xl); }
h4, .h4 { font-size: var(--hv-fs-lg); }
h5, .h5 { font-size: var(--hv-fs-md); }
h6, .h6 {
    font-size: var(--hv-fs-xs);
    text-transform: uppercase;
    letter-spacing: var(--hv-letter-caps);
    color: var(--hv-text-muted);
}

h1:focus, h1:focus-visible {
    outline: none;
}

small, .small {
    font-size: var(--hv-fs-sm);
}

.text-muted, .text-body-secondary {
    color: var(--hv-text-muted) !important;
}

a {
    color: var(--hv-primary-text);
    text-decoration: none;
    transition: color var(--hv-anim-fast) var(--hv-ease);
}

    a:hover {
        color: var(--hv-primary-hover);
    }

:root[data-theme="dark"] a:hover {
    color: var(--hv-text);
}

code {
    font-family: var(--hv-font-mono);
    font-size: 0.9em;
    color: var(--hv-primary-text);
    background: var(--hv-primary-soft);
    padding: 1px 6px;
    border-radius: var(--hv-radius-xs);
}

.font-monospace {
    font-family: var(--hv-font-mono) !important;
}

hr {
    border-color: var(--hv-border);
    opacity: 1;
}

:focus-visible {
    outline: 2px solid rgba(var(--hv-primary-rgb), 0.6);
    outline-offset: 2px;
}

/* Barra de rolagem discreta */
* {
    scrollbar-width: thin;
    scrollbar-color: var(--hv-border-strong) transparent;
}

*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb {
    background: var(--hv-border-strong);
    border-radius: var(--hv-radius-pill);
    border: 3px solid transparent;
    background-clip: content-box;
}
*::-webkit-scrollbar-track { background: transparent; }

/* ---------- Botões ---------- */
.btn {
    --bs-btn-font-weight: var(--hv-fw-semibold);
    --bs-btn-border-radius: var(--hv-radius-sm);
    --bs-btn-focus-box-shadow: var(--hv-shadow-focus);
    min-height: var(--hv-control-height);
    padding: 0 calc(var(--hv-control-px) + 4px);
    font-size: var(--hv-fs-base);
    font-weight: var(--hv-fw-semibold);
    line-height: 1.2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--hv-space-2);
    letter-spacing: 0.005em;
    white-space: nowrap;
    user-select: none;
}

    .btn > .bi {
        font-size: 1.05em;
        line-height: 1;
    }

.btn-sm {
    min-height: var(--hv-control-height-sm);
    padding: 0 var(--hv-control-px);
    font-size: var(--hv-fs-sm);
    border-radius: var(--hv-radius-sm);
    gap: 6px;
}

.btn-lg {
    min-height: var(--hv-control-height-lg);
    font-size: var(--hv-fs-md);
    border-radius: var(--hv-radius);
}

.btn-primary {
    --bs-btn-color: var(--hv-on-primary);
    --bs-btn-bg: var(--hv-primary);
    --bs-btn-border-color: var(--hv-primary);
    --bs-btn-hover-color: var(--hv-on-primary);
    --bs-btn-hover-bg: var(--hv-primary-hover);
    --bs-btn-hover-border-color: var(--hv-primary-hover);
    --bs-btn-active-color: var(--hv-on-primary);
    --bs-btn-active-bg: var(--hv-primary-active);
    --bs-btn-active-border-color: var(--hv-primary-active);
    --bs-btn-disabled-color: var(--hv-on-primary);
    --bs-btn-disabled-bg: var(--hv-primary);
    --bs-btn-disabled-border-color: var(--hv-primary);
    box-shadow: 0 1px 2px rgba(var(--hv-primary-rgb), 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.08);
}

.btn-secondary {
    --bs-btn-color: var(--hv-text);
    --bs-btn-bg: var(--hv-surface-3);
    --bs-btn-border-color: var(--hv-border);
    --bs-btn-hover-color: var(--hv-heading);
    --bs-btn-hover-bg: var(--hv-border);
    --bs-btn-hover-border-color: var(--hv-border-strong);
    --bs-btn-active-color: var(--hv-heading);
    --bs-btn-active-bg: var(--hv-border-strong);
    --bs-btn-active-border-color: var(--hv-border-strong);
}

.btn-outline-primary {
    --bs-btn-color: var(--hv-primary-text);
    --bs-btn-border-color: rgba(var(--hv-primary-rgb), 0.45);
    --bs-btn-hover-color: var(--hv-on-primary);
    --bs-btn-hover-bg: var(--hv-primary);
    --bs-btn-hover-border-color: var(--hv-primary);
    --bs-btn-active-color: var(--hv-on-primary);
    --bs-btn-active-bg: var(--hv-primary-active);
    --bs-btn-active-border-color: var(--hv-primary-active);
    --bs-btn-disabled-color: var(--hv-primary-text);
    --bs-btn-disabled-border-color: rgba(var(--hv-primary-rgb), 0.35);
}

.btn-outline-secondary {
    --bs-btn-color: var(--hv-text);
    --bs-btn-bg: var(--hv-surface);
    --bs-btn-border-color: var(--hv-border-strong);
    --bs-btn-hover-color: var(--hv-heading);
    --bs-btn-hover-bg: var(--hv-surface-3);
    --bs-btn-hover-border-color: var(--hv-border-strong);
    --bs-btn-active-color: var(--hv-heading);
    --bs-btn-active-bg: var(--hv-border);
    --bs-btn-active-border-color: var(--hv-border-strong);
    --bs-btn-disabled-color: var(--hv-text-subtle);
    --bs-btn-disabled-bg: var(--hv-surface);
    --bs-btn-disabled-border-color: var(--hv-border);
}

.btn-outline-danger {
    --bs-btn-color: var(--hv-danger);
    --bs-btn-border-color: rgba(var(--hv-danger-rgb), 0.45);
    --bs-btn-hover-bg: var(--hv-danger);
    --bs-btn-hover-border-color: var(--hv-danger);
    --bs-btn-active-bg: var(--hv-danger);
    --bs-btn-disabled-color: var(--hv-danger);
    --bs-btn-disabled-border-color: rgba(var(--hv-danger-rgb), 0.3);
}

.btn-outline-success {
    --bs-btn-color: var(--hv-success);
    --bs-btn-border-color: rgba(var(--hv-success-rgb), 0.45);
    --bs-btn-hover-bg: var(--hv-success);
    --bs-btn-hover-border-color: var(--hv-success);
    --bs-btn-active-bg: var(--hv-success);
}

.btn-danger {
    --bs-btn-bg: var(--hv-danger);
    --bs-btn-border-color: var(--hv-danger);
    --bs-btn-hover-bg: color-mix(in srgb, var(--hv-danger) 86%, #000);
    --bs-btn-hover-border-color: color-mix(in srgb, var(--hv-danger) 86%, #000);
}

.btn-link {
    --bs-btn-color: var(--hv-primary-text);
    --bs-btn-hover-color: var(--hv-primary-hover);
    text-decoration: none;
    font-weight: var(--hv-fw-semibold);
}

.btn-ghost {
    --bs-btn-color: var(--hv-text-muted);
    --bs-btn-bg: transparent;
    --bs-btn-border-color: transparent;
    --bs-btn-hover-color: var(--hv-heading);
    --bs-btn-hover-bg: var(--hv-surface-3);
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-bg: var(--hv-border);
    --bs-btn-active-border-color: transparent;
}

.btn-icon {
    width: var(--hv-control-height);
    padding: 0;
}

    .btn-icon.btn-sm {
        width: var(--hv-control-height-sm);
    }

.btn:disabled, .btn.disabled {
    opacity: 0.55;
    cursor: not-allowed;
    box-shadow: none;
}

.btn-close {
    border-radius: var(--hv-radius-sm);
}

:root[data-theme="dark"] .btn-close {
    filter: invert(1) grayscale(100%) brightness(200%);
}

.spinner-border-sm {
    --bs-spinner-width: 0.9rem;
    --bs-spinner-height: 0.9rem;
    --bs-spinner-border-width: 0.16em;
}

/* ---------- Formulários ---------- */
.form-label {
    display: inline-block;
    font-size: var(--hv-fs-sm);
    font-weight: var(--hv-fw-semibold);
    color: var(--hv-text-muted);
    margin-bottom: 6px;
    letter-spacing: 0.01em;
}

.form-text {
    color: var(--hv-text-subtle);
    font-size: var(--hv-fs-xs);
}

.form-control, .form-select {
    min-height: var(--hv-control-height);
    padding: 6px var(--hv-control-px);
    font-size: var(--hv-fs-base);
    color: var(--hv-text);
    background-color: var(--hv-surface);
    border: 1px solid var(--hv-border-strong);
    border-radius: var(--hv-radius-sm);
    box-shadow: var(--hv-shadow-xs);
    transition: border-color var(--hv-anim-fast) var(--hv-ease), box-shadow var(--hv-anim-fast) var(--hv-ease), background-color var(--hv-anim-fast) var(--hv-ease);
}

    .form-control:hover:not(:disabled):not([readonly]),
    .form-select:hover:not(:disabled) {
        border-color: color-mix(in srgb, var(--hv-border-strong) 60%, var(--hv-primary));
    }

    .form-control:focus, .form-select:focus {
        color: var(--hv-text);
        background-color: var(--hv-surface);
        border-color: var(--hv-primary);
        box-shadow: var(--hv-shadow-focus);
    }

    .form-control::placeholder {
        color: var(--hv-text-subtle);
    }

    .form-control:disabled, .form-select:disabled,
    .form-control[readonly] {
        background-color: var(--hv-surface-2);
        color: var(--hv-text-muted);
    }

.form-control-sm, .form-select-sm {
    min-height: var(--hv-control-height-sm);
    padding: 3px 8px;
    font-size: var(--hv-fs-sm);
}

textarea.form-control {
    min-height: calc(var(--hv-control-height) * 2);
    line-height: var(--hv-lh-base);
}

select.form-select[multiple], select.form-select[size] {
    padding: 4px;
    background-image: none;
}

    select.form-select[multiple] option {
        padding: 6px 8px;
        border-radius: var(--hv-radius-xs);
        margin-bottom: 1px;
    }

        select.form-select[multiple] option:checked {
            background: var(--hv-primary-soft-strong) linear-gradient(0deg, var(--hv-primary-soft-strong), var(--hv-primary-soft-strong));
            color: var(--hv-heading);
            font-weight: var(--hv-fw-semibold);
        }

input[type="file"].form-control {
    padding: 0;
    line-height: calc(var(--hv-control-height) - 2px);
    overflow: hidden;
}

    input[type="file"].form-control::file-selector-button {
        height: 100%;
        min-height: calc(var(--hv-control-height) - 2px);
        padding: 0 var(--hv-space-4);
        margin: 0 var(--hv-space-3) 0 0;
        border: 0;
        border-right: 1px solid var(--hv-border);
        background: var(--hv-surface-3);
        color: var(--hv-heading);
        font-weight: var(--hv-fw-semibold);
        transition: background-color var(--hv-anim-fast) var(--hv-ease);
    }

    input[type="file"].form-control:hover::file-selector-button {
        background: var(--hv-border);
    }

.form-check {
    min-height: 1.5rem;
}

.form-check-input {
    width: 1.1em;
    height: 1.1em;
    margin-top: 0.2em;
    background-color: var(--hv-surface);
    border-color: var(--hv-border-strong);
    cursor: pointer;
    transition: background-color var(--hv-anim-fast) var(--hv-ease), border-color var(--hv-anim-fast) var(--hv-ease), box-shadow var(--hv-anim-fast) var(--hv-ease);
}

    .form-check-input:checked {
        background-color: var(--hv-primary);
        border-color: var(--hv-primary);
    }

    .form-check-input:focus {
        border-color: var(--hv-primary);
        box-shadow: var(--hv-shadow-focus);
    }

.form-check-label {
    cursor: pointer;
    color: var(--hv-text);
}

.valid.modified:not([type=checkbox]) {
    border-color: rgba(var(--hv-success-rgb), 0.7);
}

.invalid {
    border-color: var(--hv-danger) !important;
    box-shadow: 0 0 0 3px rgba(var(--hv-danger-rgb), 0.15) !important;
}

.validation-message {
    color: var(--hv-danger);
    font-size: var(--hv-fs-sm);
    margin-top: 4px;
}

.validation-errors {
    list-style: none;
    padding: var(--hv-space-3) var(--hv-space-4);
    margin-bottom: var(--hv-space-4);
    border-radius: var(--hv-radius-sm);
    background: var(--hv-danger-soft);
    border: 1px solid rgba(var(--hv-danger-rgb), 0.25);
    color: var(--hv-danger);
    font-size: var(--hv-fs-sm);
}

/* ---------- Cards ---------- */
.card {
    --bs-card-bg: var(--hv-surface);
    --bs-card-border-color: var(--hv-border);
    --bs-card-border-radius: var(--hv-radius-lg);
    --bs-card-inner-border-radius: calc(var(--hv-radius-lg) - 1px);
    --bs-card-cap-bg: transparent;
    --bs-card-spacer-y: var(--hv-card-padding);
    --bs-card-spacer-x: var(--hv-card-padding);
    --bs-card-cap-padding-y: var(--hv-space-3);
    --bs-card-cap-padding-x: var(--hv-card-padding);
    color: var(--hv-text);
    box-shadow: var(--hv-shadow-sm);
    transition: box-shadow var(--hv-anim-duration) var(--hv-ease), border-color var(--hv-anim-duration) var(--hv-ease), transform var(--hv-anim-duration) var(--hv-ease), background-color var(--hv-anim-duration) var(--hv-ease);
}

.card-header {
    font-weight: var(--hv-fw-semibold);
    color: var(--hv-heading);
    border-bottom-color: var(--hv-border);
}

.card-footer {
    background: var(--hv-surface-2);
    border-top-color: var(--hv-border);
}

.shadow-sm {
    box-shadow: var(--hv-shadow-sm) !important;
}

.bg-light {
    background-color: var(--hv-surface-2) !important;
}

.bg-white {
    background-color: var(--hv-surface) !important;
}

.border, .border-top, .border-bottom, .border-start, .border-end {
    border-color: var(--hv-border) !important;
}

/* ---------- Tabelas ---------- */
.table {
    --bs-table-bg: transparent;
    --bs-table-color: var(--hv-text);
    --bs-table-border-color: var(--hv-border);
    --bs-table-hover-bg: var(--hv-primary-soft);
    --bs-table-hover-color: var(--hv-text);
    --bs-table-striped-bg: var(--hv-surface-2);
    margin-bottom: 0;
    font-size: var(--hv-fs-base);
}

    .table > :not(caption) > * > * {
        padding: var(--hv-table-cell-py) var(--hv-table-cell-px);
        vertical-align: middle;
        box-shadow: none;
    }

    .table > thead > tr > th {
        background: var(--hv-surface-2);
        color: var(--hv-text-muted);
        font-size: var(--hv-fs-xs);
        font-weight: var(--hv-fw-semibold);
        text-transform: uppercase;
        letter-spacing: var(--hv-letter-caps);
        white-space: nowrap;
        border-bottom: 1px solid var(--hv-border);
        border-top: 0;
    }

        .table > thead > tr > th:first-child { border-top-left-radius: var(--hv-radius-sm); }
        .table > thead > tr > th:last-child { border-top-right-radius: var(--hv-radius-sm); }

    .table > tbody > tr {
        transition: background-color var(--hv-anim-fast) var(--hv-ease);
    }

        .table > tbody > tr:hover > * {
            background-color: var(--hv-primary-soft);
        }

        .table > tbody > tr:last-child > * {
            border-bottom: 0;
        }

.table-sm > :not(caption) > * > * {
    padding: calc(var(--hv-table-cell-py) * 0.6) calc(var(--hv-table-cell-px) * 0.75);
}

.table-responsive {
    border: 1px solid var(--hv-border);
    border-radius: var(--hv-radius);
    background: var(--hv-surface);
}

/* ---------- Badges ---------- */
.badge {
    --bs-badge-font-size: var(--hv-fs-xs);
    --bs-badge-font-weight: var(--hv-fw-semibold);
    --bs-badge-padding-y: 4px;
    --bs-badge-padding-x: 8px;
    --bs-badge-border-radius: var(--hv-radius-pill);
    letter-spacing: 0.01em;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    line-height: 1.2;
}

.badge.text-bg-success { background-color: var(--hv-success-soft) !important; color: var(--hv-success) !important; }
.badge.text-bg-warning { background-color: var(--hv-warning-soft) !important; color: var(--hv-warning) !important; }
.badge.text-bg-danger { background-color: var(--hv-danger-soft) !important; color: var(--hv-danger) !important; }
.badge.text-bg-info { background-color: var(--hv-info-soft) !important; color: var(--hv-info) !important; }
.badge.text-bg-primary { background-color: var(--hv-primary-soft-strong) !important; color: var(--hv-primary-text) !important; }
.badge.text-bg-secondary { background-color: var(--hv-neutral-soft) !important; color: var(--hv-text-muted) !important; }
.badge.text-bg-light {
    background-color: var(--hv-surface-3) !important;
    color: var(--hv-text-muted) !important;
}

    .badge.text-bg-light.border {
        border-color: var(--hv-border) !important;
    }

:root[data-theme="dark"] .badge.text-bg-success { color: color-mix(in srgb, var(--hv-success) 55%, #fff) !important; }
:root[data-theme="dark"] .badge.text-bg-warning { color: color-mix(in srgb, var(--hv-warning) 55%, #fff) !important; }
:root[data-theme="dark"] .badge.text-bg-danger { color: color-mix(in srgb, var(--hv-danger) 55%, #fff) !important; }
:root[data-theme="dark"] .badge.text-bg-info { color: color-mix(in srgb, var(--hv-info) 55%, #fff) !important; }

/* ---------- Alertas ---------- */
.alert {
    --bs-alert-border-radius: var(--hv-radius);
    --bs-alert-padding-y: var(--hv-space-3);
    --bs-alert-padding-x: var(--hv-space-4);
    position: relative;
    padding-left: calc(var(--hv-space-4) + 26px);
    font-size: var(--hv-fs-base);
    border-width: 1px;
    border-left-width: 4px;
}

    .alert::before {
        font-family: "bootstrap-icons";
        font-size: 1.1em;
        line-height: 1.35;
        position: absolute;
        left: var(--hv-space-4);
        top: var(--hv-space-3);
    }

.alert-success { --bs-alert-bg: var(--hv-success-soft); --bs-alert-color: var(--hv-text); --bs-alert-border-color: rgba(var(--hv-success-rgb), 0.35); border-left-color: var(--hv-success); }
.alert-success::before { content: "\F26A"; color: var(--hv-success); }
.alert-danger { --bs-alert-bg: var(--hv-danger-soft); --bs-alert-color: var(--hv-text); --bs-alert-border-color: rgba(var(--hv-danger-rgb), 0.35); border-left-color: var(--hv-danger); }
.alert-danger::before { content: "\F332"; color: var(--hv-danger); }
.alert-warning { --bs-alert-bg: var(--hv-warning-soft); --bs-alert-color: var(--hv-text); --bs-alert-border-color: rgba(var(--hv-warning-rgb), 0.35); border-left-color: var(--hv-warning); }
.alert-warning::before { content: "\F33A"; color: var(--hv-warning); }
.alert-info { --bs-alert-bg: var(--hv-info-soft); --bs-alert-color: var(--hv-text); --bs-alert-border-color: rgba(var(--hv-info-rgb), 0.35); border-left-color: var(--hv-info); }
.alert-info::before { content: "\F430"; color: var(--hv-info); }
.alert-secondary { --bs-alert-bg: var(--hv-surface-3); --bs-alert-color: var(--hv-text); --bs-alert-border-color: var(--hv-border); border-left-color: var(--hv-border-strong); }
.alert-secondary::before { content: "\F431"; color: var(--hv-text-muted); }

/* ---------- Listas de definição ---------- */
dl.row dt {
    font-weight: var(--hv-fw-semibold);
    color: var(--hv-text-muted);
    font-size: var(--hv-fs-sm);
}

dl.row dd {
    color: var(--hv-text);
}

/* ---------- Diversos ---------- */
.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}
