/* ============================================================
   Portal del paciente — identidad visual de SIADME
   ============================================================
   Identidad fija (layout, tipografía, animaciones, gradient,
   accent bar). Los 2 colores configurables por clínica vienen
   inyectados desde el template como custom properties:
   --portal-primario y --portal-accent
   ============================================================ */

/* El atributo hidden oculta, siempre. `hidden` funciona porque el navegador
   trae `[hidden] { display: none }` en SU hoja, y cualquier regla nuestra con
   `display` le gana. Sin esto, un `<button class="btn-instalar" hidden>` se ve
   igual. Misma regla que components.css, que el portal no carga. */
[hidden] { display: none !important; }

:root {
    /* Defaults (si la inyección Thymeleaf falla por alguna razón) */
    --portal-primario: #1E3A6E;          /* navy default */
    --portal-accent:   #FCD34D;          /* dorado default */

    /* Derivados del primario via color-mix() */
    --portal-id-bg-dark1: var(--portal-primario);
    --portal-id-bg-dark2: color-mix(in srgb, var(--portal-primario) 60%, #000);
    --portal-id-bg-dark3: color-mix(in srgb, var(--portal-primario) 30%, #000);
    --portal-id-accent: var(--portal-accent);
    --portal-id-accent-strong: color-mix(in srgb, var(--portal-accent) 80%, #000);

    --portal-id-text-on-dark: #ffffff;
    --portal-id-text-on-dark-soft: rgba(255,255,255,0.75);
    --portal-id-text-on-dark-muted: rgba(255,255,255,0.55);

    /* Card / panels */
    --portal-card-bg: #ffffff;
    --portal-card-fg: #0F1B36;
    --portal-card-fg-soft: #4B5570;
    --portal-card-border: rgba(15, 27, 54, 0.10);
    --portal-card-shadow: 0 1px 3px rgba(15,27,54,0.06), 0 8px 24px rgba(15,27,54,0.08);
    --portal-card-shadow-hover: 0 4px 8px rgba(15,27,54,0.08), 0 18px 40px rgba(15,27,54,0.18);

    /* Layout */
    --portal-page-bg: #F4F6FB;
    --portal-page-bg-alt: #EAEEF6;
    --portal-divider: rgba(15, 27, 54, 0.08);

    /* Estados */
    --portal-success: #047857;
    --portal-success-soft: #D1FAE5;
    --portal-warning: #B45309;
    --portal-warning-soft: #FEF3C7;
    --portal-danger: #B91C1C;
    --portal-danger-soft: #FEE2E2;

    /* Radii */
    --portal-radius-sm: 6px;
    --portal-radius-md: 12px;
    --portal-radius-lg: 18px;
    --portal-radius-xl: 24px;

    /* Tipografía */
    --portal-font: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

    /* Botón primario (CTA) */
    --portal-btn-bg: linear-gradient(135deg,
        color-mix(in srgb, var(--portal-primario) 60%, #000) 0%,
        var(--portal-primario) 100%);
    --portal-btn-fg: #ffffff;
    --portal-btn-accent-bar: linear-gradient(180deg,
        var(--portal-accent),
        color-mix(in srgb, var(--portal-accent) 80%, #000));
    --portal-btn-shadow: 0 8px 24px color-mix(in srgb, var(--portal-primario) 35%, transparent);
    --portal-btn-shadow-hover: 0 12px 32px color-mix(in srgb, var(--portal-primario) 45%, transparent);
}

/* ============================================================
   Layout shared del portal
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; min-height: 100%; }
body {
    font-family: var(--portal-font);
    background: var(--portal-page-bg);
    color: var(--portal-card-fg);
    -webkit-font-smoothing: antialiased;
}

.material-symbols-outlined {
    font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 20;
    line-height: 1; vertical-align: middle;
}

/* ---- Topbar dark unificado ---- */
.portal-topbar {
    background: radial-gradient(ellipse at top right,
        var(--portal-id-bg-dark1) 0%,
        var(--portal-id-bg-dark2) 50%,
        var(--portal-id-bg-dark3) 100%);
    color: var(--portal-id-text-on-dark);
    padding: 14px 32px;
    display: flex; align-items: center; gap: 18px;
    box-shadow: 0 4px 16px rgba(0,0,0,0.10);
    position: sticky; top: 0; z-index: 50;
}
.portal-topbar__brand {
    display: flex; align-items: center; gap: 12px;
    font-size: 14px;
}
.portal-topbar__brand img {
    height: 36px; width: auto;
    background: #fff; padding: 4px 8px;
    border-radius: var(--portal-radius-md);
}
.portal-topbar__brand strong {
    display: block;
    font-weight: 700; letter-spacing: 0.14em;
    text-transform: uppercase; font-size: 10px;
    color: var(--portal-id-text-on-dark-muted);
}
.portal-topbar__user {
    margin-left: auto;
    display: flex; align-items: center; gap: 12px;
    font-size: 13px;
}
.portal-topbar__user-name {
    display: flex; flex-direction: column;
    align-items: flex-end;
    line-height: 1.2;
}
.portal-topbar__user-name strong {
    font-weight: 600;
    color: var(--portal-id-text-on-dark);
}
.portal-topbar__user-name small {
    font-size: 10px;
    color: var(--portal-id-text-on-dark-muted);
    font-family: ui-monospace, 'JetBrains Mono', monospace;
    letter-spacing: 0.02em;
}
.portal-topbar__avatar {
    width: 38px; height: 38px;
    border-radius: 50%;
    background: rgba(255,255,255,0.10);
    border: 1.5px solid var(--portal-id-accent);
    display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: 14px;
    color: var(--portal-id-accent);
}
.portal-topbar__action {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.12);
    color: var(--portal-id-text-on-dark);
    width: 36px; height: 36px;
    border-radius: var(--portal-radius-md);
    display: inline-flex; align-items: center; justify-content: center;
    cursor: pointer; padding: 0;
    transition: all 0.15s ease;
    text-decoration: none;
}
.portal-topbar__action:hover {
    background: rgba(255,255,255,0.14);
    border-color: var(--portal-id-accent);
    color: var(--portal-id-accent);
}

/* ---- Container ---- */
.portal-container {
    max-width: 1280px;
    margin: 0 auto;
    padding: 32px;
}
@media (max-width: 768px) {
    .portal-container { padding: 18px; }
    .portal-topbar { padding: 12px 16px; gap: 12px; }
}
/* Mobile: ocultar el texto institucional (EST. 19xx / sede) del topbar — en
   pantallas angostas se amontona con el nombre del paciente y corta el botón
   de cerrar sesión. El logo queda. */
@media (max-width: 600px) {
    .portal-topbar__brand div { display: none; }
}

/* ============================================================
   Footer institucional unificado
   ============================================================ */
.portal-foot {
    margin: 0;
    padding: 14px 24px;
    border-top: 1px solid var(--portal-divider);
    background: var(--portal-card-bg);
    display: flex; align-items: center; justify-content: center;
    gap: 14px;
    font-size: 12px;
    color: var(--portal-card-fg-soft);
    flex-wrap: wrap;
    flex-shrink: 0;
}
.portal-foot__group { display: inline-flex; align-items: center; gap: 8px; }
.portal-foot__sep { color: var(--portal-card-border); font-weight: 700; }
.portal-foot__by { color: var(--portal-card-fg-soft); }
.portal-foot__brand {
    display: inline-flex; align-items: center; gap: 6px;
    color: var(--portal-card-fg);
    text-decoration: none;
    transition: opacity 0.15s ease;
}
.portal-foot__brand img {
    height: 18px; width: auto;
    border-radius: 3px;
    opacity: 0.85;
    transition: opacity 0.15s ease;
}
.portal-foot__brand:hover img { opacity: 1; }
.portal-foot__copy { color: var(--portal-card-fg-soft); }
@media (max-width: 480px) {
    .portal-foot { gap: 10px; padding: 12px; font-size: 11px; }
    .portal-foot__brand img { height: 16px; }
}

/* Animaciones */
@keyframes fadeUp {
    from { opacity: 0; transform: translateY(12px); }
    to   { opacity: 1; transform: translateY(0); }
}
.fade-up { animation: fadeUp 0.5s ease both; }
.delay-1 { animation-delay: 0.08s; }
.delay-2 { animation-delay: 0.16s; }
.delay-3 { animation-delay: 0.24s; }
