/* ============================================
   GovEZ Component Library Styles
   ============================================ */

/* ============================================
   GvButton
   ============================================ */
.gv-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--gv-spacing-sm);
    font-family: var(--gv-font-family);
    font-weight: var(--gv-font-weight-medium);
    border: 1px solid transparent;
    border-radius: var(--gv-radius-sm);
    cursor: pointer;
    transition: all var(--gv-transition-fast);
    text-decoration: none;
    white-space: nowrap;
}

.gv-btn:focus-visible {
    outline: var(--gv-focus-outline-width) solid var(--gv-focus-outline-color);
    outline-offset: var(--gv-focus-outline-offset);
}

/* Button Sizes */
.gv-btn-sm {
    padding: var(--gv-spacing-xs) var(--gv-spacing-sm);
    font-size: var(--gv-font-size-sm);
    min-height: 28px;
}

.gv-btn-md {
    padding: var(--gv-spacing-sm) var(--gv-spacing-md);
    font-size: var(--gv-font-size-md);
    min-height: 36px;
}

.gv-btn-lg {
    padding: var(--gv-spacing-sm) var(--gv-spacing-lg);
    font-size: var(--gv-font-size-lg);
    min-height: 44px;
}

/* Button Appearances */
.gv-btn-default {
    background-color: var(--gv-color-surface);
    border-color: var(--gv-color-border);
    color: var(--gv-color-text-primary);
}

.gv-btn-default:hover:not(:disabled) {
    background-color: var(--gv-color-surface-hover);
    border-color: var(--gv-color-border-hover);
}

.gv-btn-primary {
    background-color: var(--gv-color-primary);
    border-color: var(--gv-color-primary);
    color: var(--gv-color-text-inverse);
}

.gv-btn-primary:hover:not(:disabled) {
    background-color: var(--gv-color-primary-hover);
    border-color: var(--gv-color-primary-hover);
}

.gv-btn-primary:active:not(:disabled) {
    background-color: var(--gv-color-primary-active);
}

.gv-btn-secondary {
    background-color: var(--gv-color-secondary);
    border-color: var(--gv-color-secondary);
    color: var(--gv-color-text-inverse);
}

.gv-btn-secondary:hover:not(:disabled) {
    background-color: var(--gv-color-secondary-hover);
}

.gv-btn-outline {
    background-color: transparent;
    border-color: var(--gv-color-primary);
    color: var(--gv-color-primary);
}

.gv-btn-outline:hover:not(:disabled) {
    background-color: var(--gv-color-primary-light);
}

.gv-btn-subtle {
    background-color: transparent;
    border-color: transparent;
    color: var(--gv-color-primary);
}

.gv-btn-subtle:hover:not(:disabled) {
    background-color: var(--gv-color-surface);
}

.gv-btn-danger {
    background-color: var(--gv-color-danger);
    border-color: var(--gv-color-danger);
    color: var(--gv-color-text-inverse);
}

.gv-btn-danger:hover:not(:disabled) {
    background-color: #b52b2e;
}

/* Button States */
.gv-btn:disabled,
.gv-btn-disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.gv-btn-full {
    width: 100%;
}

.gv-btn-icon {
    display: inline-flex;
    font-size: 1.1em;
}

/* ============================================
   GvCard
   ============================================ */
.gv-card {
    background-color: var(--gv-color-background);
    border-radius: var(--gv-radius-md);
    overflow: hidden;
}

.gv-card-elevated {
    box-shadow: var(--gv-shadow-md);
}

.gv-card-bordered {
    border: 1px solid var(--gv-color-border);
    box-shadow: none;
}

.gv-card-header {
    display: flex;
    flex-direction: column;
    border-bottom: 1px solid var(--gv-color-border);
    position: relative;
}

.gv-card-header-actions {
    position: absolute;
    top: var(--gv-spacing-md);
    right: var(--gv-spacing-md);
}

.gv-card-title {
    margin: 0;
    font-size: var(--gv-font-size-lg);
    font-weight: var(--gv-font-weight-semibold);
    color: var(--gv-color-text-primary);
}

.gv-card-subtitle {
    margin: var(--gv-spacing-xs) 0 0 0;
    font-size: var(--gv-font-size-sm);
    color: var(--gv-color-text-secondary);
}

.gv-card-body {
    /* Body styles handled by padding classes */
}

.gv-card-footer {
    border-top: 1px solid var(--gv-color-border);
    background-color: var(--gv-color-surface);
}

/* Card Padding variants */
.gv-card-p-none .gv-card-header,
.gv-card-p-none .gv-card-body,
.gv-card-p-none .gv-card-footer {
    padding: 0;
}

.gv-card-p-compact .gv-card-header,
.gv-card-p-compact .gv-card-body,
.gv-card-p-compact .gv-card-footer {
    padding: var(--gv-spacing-sm);
}

.gv-card-p-normal .gv-card-header,
.gv-card-p-normal .gv-card-body,
.gv-card-p-normal .gv-card-footer {
    padding: var(--gv-spacing-md);
}

.gv-card-p-relaxed .gv-card-header,
.gv-card-p-relaxed .gv-card-body,
.gv-card-p-relaxed .gv-card-footer {
    padding: var(--gv-spacing-lg);
}

/* ============================================
   GvTextField
   ============================================ */
.gv-textfield {
    display: inline-flex;
    flex-direction: column;
    gap: var(--gv-spacing-xs);
}

.gv-textfield-full {
    width: 100%;
}

.gv-textfield-label {
    font-size: var(--gv-font-size-sm);
    font-weight: var(--gv-font-weight-medium);
    color: var(--gv-color-text-primary);
}

.gv-textfield-required {
    color: var(--gv-color-danger);
    margin-left: 2px;
}

.gv-textfield-wrapper {
    display: flex;
    align-items: center;
    background-color: var(--gv-color-background);
    border: 1px solid var(--gv-color-border);
    border-radius: var(--gv-radius-sm);
    transition: border-color var(--gv-transition-fast), box-shadow var(--gv-transition-fast);
}

.gv-textfield-wrapper:hover:not(.gv-textfield-disabled .gv-textfield-wrapper) {
    border-color: var(--gv-color-border-hover);
}

.gv-textfield-wrapper:focus-within {
    border-color: var(--gv-color-primary);
    box-shadow: var(--gv-focus-ring);
}

.gv-textfield-error .gv-textfield-wrapper {
    border-color: var(--gv-color-danger);
}

.gv-textfield-error .gv-textfield-wrapper:focus-within {
    box-shadow: 0 0 0 2px var(--gv-color-danger-light);
}

.gv-textfield-input {
    flex: 1;
    border: none;
    background: transparent;
    font-family: var(--gv-font-family);
    font-size: var(--gv-font-size-md);
    color: var(--gv-color-text-primary);
    outline: none;
    width: 100%;
}

.gv-textfield-input::placeholder {
    color: var(--gv-color-text-disabled);
}

.gv-textfield-input:disabled {
    cursor: not-allowed;
    color: var(--gv-color-text-disabled);
}

/* TextField Size variants */
.gv-textfield-sm .gv-textfield-wrapper {
    min-height: 28px;
}

.gv-textfield-sm .gv-textfield-input {
    padding: var(--gv-spacing-xs) var(--gv-spacing-sm);
    font-size: var(--gv-font-size-sm);
}

.gv-textfield-md .gv-textfield-wrapper {
    min-height: 36px;
}

.gv-textfield-md .gv-textfield-input {
    padding: var(--gv-spacing-sm) var(--gv-spacing-sm);
}

.gv-textfield-lg .gv-textfield-wrapper {
    min-height: 44px;
}

.gv-textfield-lg .gv-textfield-input {
    padding: var(--gv-spacing-sm) var(--gv-spacing-md);
    font-size: var(--gv-font-size-lg);
}

.gv-textfield-prefix,
.gv-textfield-suffix {
    display: flex;
    align-items: center;
    padding: 0 var(--gv-spacing-sm);
    color: var(--gv-color-text-secondary);
}

.gv-textfield-helper {
    font-size: var(--gv-font-size-xs);
    color: var(--gv-color-text-secondary);
}

.gv-textfield-helper-error {
    color: var(--gv-color-danger);
}

.gv-textfield-disabled {
    opacity: 0.6;
}

.gv-textfield-disabled .gv-textfield-wrapper {
    background-color: var(--gv-color-surface);
    cursor: not-allowed;
}

/* ============================================
   GvAlert
   ============================================ */
.gv-alert {
    display: flex;
    align-items: flex-start;
    gap: var(--gv-spacing-sm);
    padding: var(--gv-spacing-md);
    border-radius: var(--gv-radius-md);
    border: 1px solid transparent;
}

.gv-alert-icon {
    flex-shrink: 0;
    font-size: 1.25em;
}

.gv-alert-content {
    flex: 1;
    min-width: 0;
}

.gv-alert-title {
    font-weight: var(--gv-font-weight-semibold);
    margin-bottom: var(--gv-spacing-xs);
}

.gv-alert-message {
    font-size: var(--gv-font-size-sm);
}

.gv-alert-dismiss {
    flex-shrink: 0;
    background: transparent;
    border: none;
    cursor: pointer;
    padding: var(--gv-spacing-xs);
    font-size: var(--gv-font-size-md);
    opacity: 0.7;
    transition: opacity var(--gv-transition-fast);
}

.gv-alert-dismiss:hover {
    opacity: 1;
}

.gv-alert-info {
    background-color: var(--gv-color-info-light, #e0f2fe);
    border-color: var(--gv-color-info, #0284c7);
    color: var(--gv-color-info-dark, #0369a1);
}

.gv-alert-success {
    background-color: var(--gv-color-success-light, #dcfce7);
    border-color: var(--gv-color-success, #16a34a);
    color: var(--gv-color-success-dark, #15803d);
}

.gv-alert-warning {
    background-color: var(--gv-color-warning-light, #fef3c7);
    border-color: var(--gv-color-warning, #d97706);
    color: var(--gv-color-warning-dark, #b45309);
}

.gv-alert-error {
    background-color: var(--gv-color-danger-light, #fee2e2);
    border-color: var(--gv-color-danger, #dc2626);
    color: var(--gv-color-danger-dark, #b91c1c);
}

/* ============================================
   GvBadge
   ============================================ */
.gv-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: var(--gv-font-weight-medium);
    border-radius: var(--gv-radius-full, 9999px);
    white-space: nowrap;
}

.gv-badge-small {
    padding: 0 var(--gv-spacing-xs);
    font-size: var(--gv-font-size-xs);
    min-height: 18px;
}

.gv-badge-medium {
    padding: var(--gv-spacing-xs) var(--gv-spacing-sm);
    font-size: var(--gv-font-size-sm);
    min-height: 22px;
}

.gv-badge-large {
    padding: var(--gv-spacing-xs) var(--gv-spacing-md);
    font-size: var(--gv-font-size-md);
    min-height: 26px;
}

.gv-badge-default {
    background-color: var(--gv-color-surface);
    color: var(--gv-color-text-secondary);
    border: 1px solid var(--gv-color-border);
}

.gv-badge-primary {
    background-color: var(--gv-color-primary-light);
    color: var(--gv-color-primary-dark, var(--gv-color-primary));
}

.gv-badge-success {
    background-color: var(--gv-color-success-light, #dcfce7);
    color: var(--gv-color-success-dark, #15803d);
}

.gv-badge-warning {
    background-color: var(--gv-color-warning-light, #fef3c7);
    color: var(--gv-color-warning-dark, #b45309);
}

.gv-badge-danger {
    background-color: var(--gv-color-danger-light, #fee2e2);
    color: var(--gv-color-danger-dark, #b91c1c);
}

.gv-badge-info {
    background-color: var(--gv-color-info-light, #e0f2fe);
    color: var(--gv-color-info-dark, #0369a1);
}

/* ============================================
   GvSpinner
   ============================================ */
.gv-spinner {
    display: inline-flex;
    align-items: center;
    gap: var(--gv-spacing-sm);
}

.gv-spinner-circle {
    border-radius: 50%;
    border: 2px solid var(--gv-color-border);
    border-top-color: var(--gv-color-primary);
    animation: gv-spin 0.8s linear infinite;
}

.gv-spinner-small .gv-spinner-circle {
    width: 16px;
    height: 16px;
}

.gv-spinner-medium .gv-spinner-circle {
    width: 24px;
    height: 24px;
}

.gv-spinner-large .gv-spinner-circle {
    width: 40px;
    height: 40px;
    border-width: 3px;
}

.gv-spinner-label {
    color: var(--gv-color-text-secondary);
    font-size: var(--gv-font-size-sm);
}

@keyframes gv-spin {
    to {
        transform: rotate(360deg);
    }
}

/* ============================================
   GvEmptyState
   ============================================ */
.gv-empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: var(--gv-spacing-xl) var(--gv-spacing-lg);
}

.gv-empty-state-icon {
    font-size: 3rem;
    color: var(--gv-color-text-disabled);
    margin-bottom: var(--gv-spacing-md);
}

.gv-empty-state-title {
    font-size: var(--gv-font-size-lg);
    font-weight: var(--gv-font-weight-semibold);
    color: var(--gv-color-text-primary);
    margin: 0 0 var(--gv-spacing-sm) 0;
}

.gv-empty-state-description {
    font-size: var(--gv-font-size-md);
    color: var(--gv-color-text-secondary);
    margin: 0 0 var(--gv-spacing-lg) 0;
    max-width: 400px;
}

.gv-empty-state-actions {
    display: flex;
    gap: var(--gv-spacing-sm);
    flex-wrap: wrap;
    justify-content: center;
}

/* ============================================
   GvInput — styled native input / select
   Applied as class="gv-input" on <input>, <select>, <textarea>
   ============================================ */
.gv-input {
    display: block;
    width: 100%;
    padding: var(--gv-spacing-sm);
    font-family: var(--gv-font-family);
    font-size: var(--gv-font-size-md);
    color: var(--gv-color-text-primary);
    background-color: var(--gv-color-background);
    border: 1px solid var(--gv-color-border);
    border-radius: var(--gv-radius-sm);
    min-height: 36px;
    transition: border-color var(--gv-transition-fast), box-shadow var(--gv-transition-fast);
    outline: none;
}

.gv-input:hover:not(:disabled) {
    border-color: var(--gv-color-border-hover);
}

.gv-input:focus {
    border-color: var(--gv-color-primary);
    box-shadow: 0 0 0 2px var(--gv-color-primary-light);
}

.gv-input:disabled {
    background-color: var(--gv-color-surface);
    color: var(--gv-color-text-disabled);
    cursor: not-allowed;
    opacity: 0.7;
}

/* ============================================
   GvIcon
   ============================================ */
.gv-icon-small {
    font-size: 12px;
}

.gv-icon-medium {
    font-size: 16px;
}

.gv-icon-large {
    font-size: 24px;
}

.gv-icon-xlarge {
    font-size: 32px;
}

