/* ============================================================
   RAC App Styles — Grupo Firmas Globales
   Usa design-tokens.css como fuente de variables.
   ============================================================ */

/* === Base === */

html, body {
    font-family: var(--font-body);
    font-size: var(--font-size-base);
    color: var(--color-text-primary);
    background-color: var(--color-background);
    margin: 0;
    padding: 0;
    min-height: 100vh;
}

/* === Typography === */

h1, h2, h3, h4, h5, h6 {
    font-family: var(--font-heading);
    color: var(--color-text-primary);
    margin-top: 0;
}

h1 { font-size: var(--font-size-3xl); font-weight: 700; }
h2 { font-size: var(--font-size-2xl); font-weight: 600; }
h3 { font-size: var(--font-size-xl);  font-weight: 600; }
h4 { font-size: var(--font-size-lg);  font-weight: 500; }

h1:focus { outline: none; }

a, .btn-link {
    color: var(--gfg-dark-teal);
    text-decoration: none;
}

a:hover, .btn-link:hover {
    color: var(--gfg-turquoise);
}

/* === Buttons === */

.btn {
    font-family: var(--font-heading);
    font-weight: 500;
    font-size: var(--font-size-sm);
    border-radius: var(--border-radius-md);
    padding: var(--spacing-sm) var(--spacing-md);
    transition: background-color 0.2s, opacity 0.2s;
    cursor: pointer;
}

.btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.btn-primary {
    background-color: var(--gfg-turquoise);
    color: var(--gfg-dark-teal);
    border: none;
}

.btn-primary:hover, .btn-primary:focus {
    background-color: #5dd4bf;
    color: var(--gfg-dark-teal);
}

.btn-secondary,
.btn-outline-secondary {
    background-color: transparent;
    color: var(--gfg-dark-teal);
    border: 1px solid var(--gfg-dark-teal);
}

.btn-secondary:hover, .btn-secondary:focus,
.btn-outline-secondary:hover, .btn-outline-secondary:focus {
    background-color: var(--gfg-light-gray);
    color: var(--gfg-dark-teal);
}

.btn-danger {
    background-color: var(--color-error);
    color: var(--gfg-white);
    border: none;
}

.btn-danger:hover, .btn-danger:focus {
    background-color: #b91c1c;
    color: var(--gfg-white);
}

.btn-ghost {
    background-color: transparent;
    color: var(--gfg-dark-teal);
    border: none;
}

.btn-ghost:hover, .btn-ghost:focus {
    background-color: var(--gfg-light-gray);
}

.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
    box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem var(--gfg-turquoise);
}

/* === Cards === */

.card {
    background-color: var(--gfg-white);
    border: 1px solid var(--gfg-light-gray);
    border-radius: var(--border-radius-lg);
    padding: var(--spacing-lg);
    box-shadow: var(--shadow-sm);
}

.card-title {
    font-family: var(--font-heading);
    font-weight: 600;
    font-size: var(--font-size-lg);
    color: var(--color-text-primary);
}

/* === Tables === */

.table thead th {
    background-color: var(--gfg-dark-teal);
    color: var(--gfg-white);
    font-family: var(--font-heading);
    font-weight: 500;
    font-size: var(--font-size-sm);
    border: none;
}

.table tbody td {
    font-family: var(--font-body);
    font-size: var(--font-size-sm);
    vertical-align: middle;
    border-bottom: 1px solid var(--gfg-light-gray);
    border-left: none;
    border-right: none;
}

.table-striped > tbody > tr:nth-of-type(odd) > * {
    background-color: var(--gfg-white);
}

.table-striped > tbody > tr:nth-of-type(even) > * {
    background-color: #f5f5f4;
}

.table-hover > tbody > tr:hover > * {
    background-color: var(--gfg-light-gray);
}

/* === Forms === */

label, .form-label {
    font-family: var(--font-heading);
    font-weight: 500;
    font-size: var(--font-size-sm);
    color: var(--color-text-primary);
}

.form-control, .form-select {
    border: 1px solid var(--gfg-light-gray);
    border-radius: var(--border-radius-sm);
    padding: var(--spacing-sm);
    font-family: var(--font-body);
    font-size: var(--font-size-base);
    color: var(--color-text-primary);
}

.form-control:focus, .form-select:focus {
    border-color: var(--gfg-turquoise);
    box-shadow: 0 0 0 0.2rem rgba(113, 228, 209, 0.25);
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid var(--color-success);
}

.invalid {
    outline: 1px solid var(--color-error);
}

.validation-message {
    color: var(--color-error);
    font-size: var(--font-size-xs);
    margin-top: var(--spacing-xs);
}

.form-floating > .form-control-plaintext::placeholder,
.form-floating > .form-control::placeholder {
    color: var(--color-text-muted);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder,
.form-floating > .form-control:focus::placeholder {
    text-align: start;
}

/* === Badges / Status Tags === */

.badge-draft       { background-color: var(--gfg-light-gray); color: var(--gfg-dark-teal); }
.badge-pending     { background-color: #fef3c7; color: #92400e; }
.badge-approved    { background-color: #d1fae5; color: #065f46; }
.badge-exported    { background-color: #dbeafe; color: #1e40af; }
.badge-posted      { background-color: #d1fae5; color: #065f46; }
.badge-rejected    { background-color: #fee2e2; color: #991b1b; }
.badge-error       { background-color: #fee2e2; color: #991b1b; }
.badge-validated   { background-color: #d1fae5; color: #065f46; }

[class^="badge-"] {
    display: inline-block;
    padding: 0.2rem 0.6rem;
    border-radius: var(--border-radius-sm);
    font-family: var(--font-heading);
    font-weight: 500;
    font-size: var(--font-size-xs);
}

/* === Alerts === */

.alert {
    border-radius: var(--border-radius-md);
    border: none;
    border-left: 4px solid;
    padding: var(--spacing-md);
    font-family: var(--font-body);
}

.alert-success {
    border-left-color: var(--color-success);
    background-color: #f0fdf4;
    color: #065f46;
}

.alert-warning {
    border-left-color: var(--color-warning);
    background-color: #fefce8;
    color: #92400e;
}

.alert-danger {
    border-left-color: var(--color-error);
    background-color: #fef2f2;
    color: #991b1b;
}

.alert-info {
    border-left-color: var(--gfg-turquoise);
    background-color: #f0fdfa;
    color: var(--gfg-dark-teal);
}

/* === Modals === */

.modal-content {
    border-radius: var(--border-radius-lg);
    box-shadow: var(--shadow-lg);
    border: none;
}

.modal-header {
    font-family: var(--font-heading);
    font-weight: 600;
    border-bottom: 1px solid var(--gfg-light-gray);
}

.modal-footer {
    border-top: 1px solid var(--gfg-light-gray);
    justify-content: flex-end;
    gap: var(--spacing-sm);
}

/* === Loading Screen === */

.loading-screen {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
}

.loading-logo {
    width: 64px;
    height: 64px;
    object-fit: contain;
    margin-bottom: var(--spacing-lg);
}

.loading-progress {
    position: relative;
    display: block;
    width: 6rem;
    height: 6rem;
}

.loading-progress circle {
    fill: none;
    stroke: var(--gfg-light-gray);
    stroke-width: 0.5rem;
    transform-origin: 50% 50%;
    transform: rotate(-90deg);
}

.loading-progress circle:last-child {
    stroke: var(--gfg-turquoise);
    stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
    transition: stroke-dasharray 0.05s ease-in-out;
}

.loading-progress-text {
    text-align: center;
    font-weight: 600;
    font-family: var(--font-heading);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
    margin-top: var(--spacing-sm);
}

.loading-progress-text:after {
    content: var(--blazor-load-percentage-text, "Cargando");
}

/* === Error UI === */

#blazor-error-ui {
    color-scheme: light only;
    background: #fef2f2;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
    border-top: 3px solid var(--color-error);
    color: #991b1b;
    font-family: var(--font-body);
}

#blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 0.75rem;
    top: 0.5rem;
}

.blazor-error-boundary {
    background: var(--color-error);
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
    border-radius: var(--border-radius-md);
}

.blazor-error-boundary::after {
    content: "Ha ocurrido un error.";
}

/* === Utility === */

code {
    color: #7c3aed;
    font-size: var(--font-size-sm);
}

.content {
    padding-top: var(--spacing-md);
}

/* === Print === */

@media print {
    .navbar, .sidebar, .footer, .top-row {
        display: none !important;
    }
    body, .page, main {
        background: white !important;
        color: black !important;
    }
}
