.filter-section { background: var(--ion-background-color); padding: 5px 0; ion-item { --background: transparent; } } .loading-container { display: flex; flex-direction: column; align-items: center; margin-top: 50px; color: var(--ion-color-medium); } .empty-state { text-align: center; padding: 30px 20px; color: var(--ion-color-medium); } .error-state { text-align: center; padding: 30px 20px; color: var(--ion-color-danger); font-weight: bold; } // Header styles .header-container-flex { display: flex; align-items: center; justify-content: space-between; padding: 0 8px; width: 100%; } .header-logo-section { display: flex; align-items: center; cursor: pointer; padding: 8px 0; .header-logo { height: 38px; background: white; padding: 4px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } } .user-avatar-small { width: 32px; height: 32px; border-radius: 50%; overflow: hidden; border: 2px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.2); display: flex; align-items: center; justify-content: center; img { width: 100%; height: 100%; object-fit: cover; } } // Footer replica styles .footer-toolbar { --background: var(--ion-background-color); --border-width: 0; padding: 8px 14px; padding-bottom: calc(8px + var(--ion-safe-area-bottom, 0px)); } .modern-footer-btn { display: flex; align-items: center; background: linear-gradient(135deg, var(--ion-color-primary), var(--ion-color-secondary)); border-radius: 16px; padding: 12px 16px; color: white; box-shadow: 0 4px 15px rgba(var(--ion-color-primary-rgb), 0.3); transition: transform 0.2s, box-shadow 0.2s; cursor: pointer; &:active { transform: scale(0.97); box-shadow: 0 2px 8px rgba(var(--ion-color-primary-rgb), 0.2); } .location-icon { font-size: 24px; margin-right: 12px; background: rgba(255, 255, 255, 0.2); padding: 8px; border-radius: 12px; flex-shrink: 0; } .footer-text-column { flex: 1; display: flex; flex-direction: column; .footer-title { font-size: 14px; font-weight: 700; letter-spacing: 0.5px; margin-bottom: 2px; } .footer-address { font-size: 12px; opacity: 0.9; } } .nav-icon { font-size: 28px; opacity: 0.95; margin-left: 10px; flex-shrink: 0; } } .view-segment { background: var(--ion-background-color); padding: 10px 0; display: flex; justify-content: center; align-items: center; width: 100%; ion-segment { width: 100%; padding: 0 10px; &.ios { width: 85% !important; max-width: 85% !important; margin-left: auto !important; margin-right: auto !important; padding: 0 !important; } } } :host-context(.ios) .view-segment ion-segment { width: 85% !important; max-width: 85% !important; margin-left: auto !important; margin-right: auto !important; padding: 0 !important; } .card-header-flex { display: flex; justify-content: space-between; align-items: flex-start; .header-titles { flex: 1; margin-right: 15px; } .fav-icon { font-size: 28px; cursor: pointer; flex-shrink: 0; } } .aula-container { margin: 15px 0; .aula-tag { color: #682cad; font-size: 1.3em; font-weight: bold; display: inline-block; } } ion-card { margin: 8px 10px; ion-card-header { padding: 10px 14px 0; ion-card-title { font-size: 1.15rem; } } ion-card-content { padding: 10px 14px 14px; p { margin-top: 0; margin-bottom: 4px; font-size: 0.9em; } .aula-container { margin: 8px 0; .aula-tag { font-size: 1.2em; } } } } ion-card.subject-card { margin: 8px 12px; position: relative; overflow: hidden; transition: transform 0.1s; &:active { transform: scale(0.98); } } .card-actions { display: flex; align-items: center; gap: 12px; .share-icon, .menu-icon { font-size: 1.6rem; cursor: pointer; transition: transform 0.2s; &:active { transform: scale(0.9); } } } .link-container { margin-top: 10px; ion-button { --border-radius: 8px; font-weight: 600; letter-spacing: 0.3px; } } .schedule-text { color: #7B2049; /* Secondary Uva color */ font-size: 0.98rem !important; font-weight: bold !important; margin-top: 8px !important; margin-bottom: 8px !important; } .highlight-card { border: 2px solid var(--ion-color-secondary) !important; animation: pulse-border 1s alternate infinite; } @keyframes pulse-border { from { box-shadow: 0 0 5px var(--ion-color-secondary); } to { box-shadow: 0 0 20px var(--ion-color-secondary); } } /* Dark mode overwrites for custom colored text */ @media (prefers-color-scheme: dark) { .aula-container .aula-tag { color: #ae7fff; /* Lighter vivid purple for dark background */ } .schedule-text { color: #ff8ab6 !important; /* Lighter magenta for dark background */ } .highlight-card { border-color: var(--ion-color-primary) !important; animation: pulse-border-dark 1s alternate infinite; } @keyframes pulse-border-dark { from { box-shadow: 0 0 5px var(--ion-color-primary); } to { box-shadow: 0 0 20px var(--ion-color-primary); } } .proxima-clase-card { background: linear-gradient(135deg, #1e2a4a, #1a1f3c) !important; border-color: rgba(var(--ion-color-primary-rgb), 0.6) !important; .proxima-label { color: rgba(255, 255, 255, 0.6); } .proxima-asignatura { color: #fff; } .proxima-detalles { color: rgba(255, 255, 255, 0.75); } } .evento-badge { --background: rgba(var(--ion-color-secondary-rgb), 0.15); color: var(--ion-color-secondary-contrast); } } // ─── Hitos Académicos (Agenda) ────────────────────────────────────── .evento-badge-container { margin-top: 5px; padding: 0 0 10px; } .evento-badge { font-size: 0.8rem; padding: 6px 10px; border-radius: 6px; display: inline-flex; align-items: center; gap: 6px; font-weight: 600; letter-spacing: 0.3px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); ion-icon { font-size: 0.95rem; } } // ─── Banner: Próxima Clase ─────────────────────────────────────────── .proxima-clase-container { padding: 8px 12px 0; } .proxima-clase-card { margin: 0; border-radius: 14px; border: 1.5px solid rgba(var(--ion-color-primary-rgb), 0.35); background: linear-gradient(135deg, #eef2ff, #f5f0ff); box-shadow: 0 4px 18px rgba(var(--ion-color-primary-rgb), 0.15); transition: border-color 0.3s, box-shadow 0.3s; ion-card-content { padding: 14px 16px; } &.urgente { border-color: rgba(var(--ion-color-danger-rgb), 0.5); background: linear-gradient(135deg, #fff0f3, #ffe8ed); box-shadow: 0 4px 18px rgba(var(--ion-color-danger-rgb), 0.18); animation: pulse-urgente 1.4s ease-in-out infinite; } } @keyframes pulse-urgente { 0%, 100% { box-shadow: 0 4px 18px rgba(var(--ion-color-danger-rgb), 0.15); } 50% { box-shadow: 0 4px 28px rgba(var(--ion-color-danger-rgb), 0.35); } } .proxima-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; .proxima-label { display: flex; align-items: center; gap: 5px; font-size: 0.78rem; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; color: var(--ion-color-medium); ion-icon { font-size: 1rem; } } } .countdown-chip { font-weight: 700; font-size: 0.82rem; height: 28px; --padding-start: 10px; --padding-end: 10px; ion-icon { margin-right: 4px; } } @keyframes pulse-chip { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.75; transform: scale(1.05); } } .pulse-chip { animation: pulse-chip 1s ease-in-out infinite; } .proxima-asignatura { font-size: 1.1rem; font-weight: 700; color: var(--ion-color-dark); margin: 0 0 10px; line-height: 1.3; } .proxima-detalles { display: flex; gap: 16px; flex-wrap: wrap; span { display: flex; align-items: center; gap: 4px; font-size: 0.88rem; color: var(--ion-color-medium-shade); font-weight: 500; ion-icon { font-size: 1rem; flex-shrink: 0; } } } // ─── Recorrido Académico (Plan de Estudios) ─────────────────────────── /* --- Vista: Mi Carrera (Plan de Estudios) --- */ .content-plan { background: var(--ion-color-light); } .carrera-selector-card { margin: 10px 0 20px 0; border-radius: 12px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); ion-card-content { padding: 16px; } .selector-title { display: block; font-size: 1.15rem; font-weight: 700; color: var(--ion-color-dark); margin-bottom: 6px; } .selector-desc { font-size: 0.88rem; color: var(--ion-color-medium); margin-bottom: 16px; line-height: 1.4; } .carrera-item { --background: var(--ion-color-light); border-radius: 8px; --padding-start: 10px; --inner-padding-end: 10px; ion-select { font-weight: 600; color: var(--ion-color-primary); width: 100%; } } } .fade-in { animation: fadeIn 0.3s ease-in; } @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } .recorrido-table { width: 100%; border-collapse: collapse; font-size: 0.70rem; /* Fuente más chica para nombres largos */ th { background: var(--ion-color-primary); color: white; padding: 8px 4px; text-align: center; font-weight: 600; border-radius: 4px 4px 0 0; } td { padding: 4px; vertical-align: top; width: 33.33%; } .materia-cell { padding: 6px 4px; width: 100%; aspect-ratio: 1 / 0.65; /* Reducimos 15% el alto respecto al ancho */ background: var(--ion-color-light); border-radius: 6px; text-align: center; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); cursor: pointer; transition: all 0.2s ease; user-select: none; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 1.5px solid transparent; .m-name { display: flex; flex: 1; align-items: center; } .siu-cell-badge { margin-top: 4px; font-size: 0.75rem; padding: 3px 8px; border-radius: 4px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25); &.custom-badge-success { --background: rgba(255, 255, 255, 0.95); color: #a31c62; /* Rosa oscuro legible sobre blanco */ font-weight: 800; letter-spacing: 0.5px; } &.custom-badge-warning { --background: rgba(255, 255, 255, 0.95); color: #0b5f7e; /* Azul/Cyan oscuro legible sobre blanco */ font-weight: 800; letter-spacing: 0.5px; } &.custom-badge-danger { --background: rgba(var(--ion-color-danger-rgb), 0.15); color: var(--ion-color-danger); } } &:active { transform: scale(0.95); } &.aprobada { background: #682cad; color: white; font-weight: 600; box-shadow: 0 2px 6px rgba(104, 44, 173, 0.3); border-color: rgba(0, 0, 0, 0.1); } &.encurso { background: rgba(var(--ion-color-secondary-rgb), 0.15); // Subtono Cyan/Celeste color: var(--ion-color-secondary); font-weight: 600; border: 1.5px solid var(--ion-color-secondary); } &.optativa-cell:not(.aprobada):not(.encurso) { border: 1.5px dashed var(--ion-color-medium); color: var(--ion-color-primary); background: transparent; font-weight: 600; } } } .instruccion-marcar { text-align: center; color: var(--ion-color-medium); margin-top: 12px; font-style: italic; } // ─── SIU Guaraní ─────────────────────────────────────────── .siu-container { padding: 10px 0; .siu-header { padding: 0 10px; } .ultima-sync { padding: 0 10px; } } .siu-card { margin: 10px 0; border-radius: 12px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06); ion-card-header { padding: 12px 16px 4px; ion-card-title { color: var(--ion-color-dark); font-weight: 700; } } .siu-card-content { padding: 10px 16px 16px; ion-badge { font-size: 0.9rem; padding: 6px 10px; border-radius: 6px; text-transform: uppercase; letter-spacing: 0.5px; } } } .siu-login-modal { --border-radius: 16px 16px 0 0; .siu-logo-container { padding-top: 20px; h2 { font-weight: 800; color: var(--ion-color-primary); } } .siu-form-list { background: transparent; ion-item { --background: rgba(var(--ion-color-light-rgb), 0.5); --border-radius: 8px; margin-bottom: 10px; --padding-start: 12px; ion-input { margin-left: 10px; font-weight: 500; } } } ion-button[expand="block"] { margin-top: 20px; height: 48px; --border-radius: 12px; font-weight: bold; font-size: 1.05rem; letter-spacing: 0.5px; } } @media (prefers-color-scheme: dark) { .siu-card { background: var(--ion-color-step-100); } .siu-login-modal { .siu-form-list ion-item { --background: var(--ion-color-step-100); } .siu-info { background: var(--ion-color-step-100) !important; } } /* Mejorar el contraste de los botones de Optativa en modo oscuro */ .recorrido-table .materia-cell.optativa-cell:not(.aprobada):not(.encurso) { border-color: rgba(255, 255, 255, 0.45); color: #ff8ab6; /* Lighter magenta for dark background */ } /* Mejorar íconos y bordes de encabezado (botones SIU/Guardar) */ ion-button.header-btn { --border-width: 1.5px; } ion-button.header-btn[color="primary"] { --color: #ff8ab6 !important; --border-color: #ff8ab6 !important; } ion-button.header-btn[color="tertiary"] { --color: #ae7fff !important; --border-color: #ae7fff !important; } ion-button.header-btn[color="success"] { --color: #68f4a1 !important; --border-color: #68f4a1 !important; } }