main > .container {
    padding: 70px 15px 20px;
    display: flex;
    flex-direction: column;
    min-height: 100%;
}

.not-set {
    color: var(--bs-danger);
    font-style: italic;
}
.admin-layout{background:#f4f7fb}.school-sidebar{width:270px;background:#17283b;color:#fff;position:fixed;inset:0 auto 0 0;z-index:1040;overflow-y:auto}.school-brand{display:flex;align-items:center;gap:.75rem}.school-brand small{display:block;color:#9fb0c2}.brand-mark{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,#40b3d8,#83c933);font-size:1.4rem;font-weight:800}.school-sidebar .nav-link{color:#c7d2df;border-radius:.65rem;display:flex;align-items:center;gap:.75rem;padding:.7rem .85rem}.school-sidebar .nav-link:hover,.school-sidebar .nav-link.active{background:#28405a;color:#fff}.school-sidebar .nav-link span{width:22px;text-align:center}.admin-main{margin-left:270px;min-height:100vh}.admin-topbar{height:64px;background:#fff;border-bottom:1px solid #e6ebf1;display:flex;align-items:center;gap:.75rem;padding:0 1.5rem;position:sticky;top:0;z-index:1020}.dashboard-card{border-radius:1rem}.empty-chart{height:260px;display:grid;place-items:center;color:#8492a6;background:linear-gradient(#f7f9fc,#fff);border-radius:.75rem;margin-top:1rem}.guest-layout main>.container-fluid{max-width:1200px;margin:auto}@media(max-width:991.98px){.school-sidebar{position:fixed}.admin-main{margin-left:0}}

/* add sorting icons to gridview sort links */
a.asc:after, a.desc:after {
    content: '';
    left: 3px;
    display: inline-block;
    width: 0;
    height: 0;
    border: solid 5px transparent;
    margin: 4px 4px 2px 4px;
    background: transparent;
}

a.asc:after {
    border-bottom: solid 7px var(--bs-body-color);
    border-top-width: 0;
}

a.desc:after {
    border-top: solid 7px var(--bs-body-color);
    border-bottom-width: 0;
}

.grid-view th {
    white-space: nowrap;
}

.hint-block {
    display: block;
    margin-top: 5px;
    color: var(--bs-secondary-color);
}

.error-summary {
    color: var(--bs-danger-text-emphasis);
    background: var(--bs-danger-bg-subtle);
    border-left: 3px solid var(--bs-danger-border-subtle);
    padding: 10px 20px;
    margin: 0 0 15px 0;
}

/* align navbar brand baseline with nav links */
.navbar > .container,
.navbar > .container-fluid {
    align-items: baseline;
}

/* align the logout "link" (button in form) of the navbar */
.nav li > form > button.logout {
    color: var(--bs-navbar-color);
}

@media (max-width: 767.98px) {
    .navbar-nav .nav-link.logout {
        display: block;
        text-align: left;
        width: 100%;
        padding: 10px 0;
    }
}

.navbar-nav .nav-link.logout:focus,
.navbar-nav .nav-link.logout:hover {
    color: var(--bs-navbar-hover-color);
}

/* footer logo: light logo by default (light bg-body-tertiary), dark logo for dark theme */
.footer-logo-dark { display: none; }

[data-bs-theme="dark"] .footer-logo-light { display: none; }
[data-bs-theme="dark"] .footer-logo-dark  { display: inline-block; }

/* login inputs: seamless icon inside input (Volt style) */
.login-split-card .input-group {
    border: var(--bs-border-width) solid var(--bs-border-color);
    border-radius: var(--bs-border-radius);
    overflow: hidden;
    transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}

.login-split-card .input-group .input-group-text {
    background: transparent;
    border: 0;
    padding-left: 1rem;
    padding-right: .75rem;
    display: flex;
    align-items: center;
    justify-content: center;
}

.login-split-card .input-group .form-control {
    border: 0;
    background: transparent;
}

.login-split-card .input-group .form-control:focus {
    box-shadow: none;
}

.login-split-card .input-group:focus-within {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 .25rem rgba(var(--bs-primary-rgb), .25);
}

/* validation styles for login split card (browsers with :has()) */
@supports selector(.input-group:has(.is-invalid)) {
    .login-split-card .input-group:has(.is-invalid) ~ .invalid-feedback {
        display: block;
        margin-top: .35rem;
        margin-bottom: .5rem;
    }

    .login-split-card .input-group:has(.is-invalid) {
        border-color: var(--bs-danger);
    }

    .login-split-card .input-group:has(.is-invalid):focus-within {
        box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25);
    }
}

/* fallback validation styles for login split card (browsers without :has()) */
@supports not selector(.input-group:has(.is-invalid)) {
    .login-split-card .invalid-feedback:not(:empty) {
        display: block;
        margin-top: .35rem;
        margin-bottom: .5rem;
    }

    .login-split-card .input-group .form-control.is-invalid {
        border: var(--bs-border-width) solid var(--bs-danger);
    }

    .login-split-card .input-group .form-control.is-invalid:focus {
        box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25);
    }
}

/* login split card */
.login-split-card {
    border-radius: 1rem;
    box-shadow: 0 4px 24px rgba(0, 0, 0, .10);
    background-color: var(--bs-gray-100);
    width: 100%;
    max-width: 900px;
}

.login-split-card-wide {
    max-width: 960px;
}

.login-brand-title {
    font-size: 1.75rem;
    line-height: 1.3;
}

.login-brand-text {
    font-size: .9rem;
}

.login-brand-panel {
    background: linear-gradient(135deg, #40B3D8 0%, #3a9cbd 40%, #83C933 100%);
    position: relative;
    min-height: 480px;
}

.login-brand-panel::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 20% 80%, rgba(241, 138, 42, .25) 0%, transparent 50%),
        radial-gradient(circle at 80% 20%, rgba(131, 201, 51, .2) 0%, transparent 40%);
    pointer-events: none;
}

.login-btn {
    background: linear-gradient(135deg, #40B3D8, #3a9cbd);
    border: none;
    font-weight: 600;
    letter-spacing: .02em;
    transition: opacity .2s, transform .1s;
}

.login-btn:hover {
    opacity: .9;
    transform: translateY(-1px);
}

.login-btn:active {
    transform: translateY(0);
}

/* dark mode login card */
[data-bs-theme="dark"] .login-split-card {
    background-color: var(--bs-body-bg);
    box-shadow: 0 0 0 1px var(--bs-border-color), 0 4px 24px rgba(0, 0, 0, .4);
}

[data-bs-theme="dark"] .login-mobile-logo {
    filter: invert(1);
}

/* contact form textarea height */
.site-contact textarea.form-control {
    height: 140px;
}

/* captcha: blend with card background */
.site-contact img[src*="captcha"] {
    border-radius: var(--bs-border-radius);
    mix-blend-mode: multiply;
}

/* dark mode: invert captcha for visibility on dark background */
[data-bs-theme="dark"] .site-contact img[src*="captcha"] {
    mix-blend-mode: screen;
    filter: invert(1) hue-rotate(180deg);
}

/* centered page layout */
.site-login,
.site-contact,
.site-index,
.site-error,
.site-about,
.site-contact-success {
    flex: 1;
}

.site-error .site-error-content,
.site-about .site-about-content,
.site-contact-success .site-contact-success-content {
    width: 100%;
    max-width: 90%;
}

@media (min-width: 576px) {
    .site-error .site-error-content,
    .site-about .site-about-content,
    .site-contact-success .site-contact-success-content {
        max-width: 80%;
    }
}

@media (min-width: 768px) {
    .site-error .site-error-content,
    .site-about .site-about-content,
    .site-contact-success .site-contact-success-content {
        max-width: 60%;
    }
}

@media (min-width: 992px) {
    .site-error .site-error-content,
    .site-about .site-about-content,
    .site-contact-success .site-contact-success-content {
        max-width: 50%;
    }
}

/* hero banner */
.hero-banner {
    background: linear-gradient(135deg, #83C933 0%, #3a9cbd 40%, #40B3D8 100%);
    position: relative;
}

.hero-lead {
    max-width: 520px;
}

.hero-logo {
    height: 120px;
    opacity: .45;
    right: 2.5rem;
    top: 50%;
    transform: translateY(-50%);
}

.hero-banner::before {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background:
        radial-gradient(circle at 15% 85%, rgba(241, 138, 42, .3) 0%, transparent 45%),
        radial-gradient(circle at 85% 15%, rgba(131, 201, 51, .25) 0%, transparent 40%),
        radial-gradient(ellipse at 50% 50%, rgba(64, 179, 216, .15) 0%, transparent 60%);
    pointer-events: none;
}

/* extension cards */
.extension-card {
    transition: transform .15s ease-in-out, box-shadow .15s ease-in-out;
}

.extension-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, .12) !important;
}

.extension-icon {
    font-size: 1.5rem;
    line-height: 1;
}

/* dark mode: extension cards */
[data-bs-theme="dark"] .extension-card {
    background-color: var(--bs-body-bg);
    box-shadow: 0 0 0 1px var(--bs-border-color), 0 2px 8px rgba(0, 0, 0, .3);
}

[data-bs-theme="dark"] .extension-card:hover {
    box-shadow: 0 0 0 1px var(--bs-border-color), 0 8px 24px rgba(0, 0, 0, .4) !important;
}
.welcome-logo{width:96px!important;height:96px!important;right:55px!important}
.sidebar-content{padding-bottom:95px!important}.nav-section-label{color:#737fa7;font-size:.59rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;margin:18px 10px 6px}.school-sidebar .nav-link{min-height:42px}.school-sidebar .nav-icon{width:27px!important;height:27px;border-radius:9px;background:rgba(255,255,255,.07);display:grid;place-items:center;font-size:.7rem!important;font-weight:800;flex:0 0 auto}.school-sidebar .nav-text{flex:1}.school-sidebar .module-status{font-size:.55rem;color:#8791b2;background:rgba(255,255,255,.055);border-radius:999px;padding:3px 6px}.school-sidebar .nav-link.is-pending{cursor:default;color:#a7aec6}.school-sidebar .nav-link.is-pending:hover{background:rgba(255,255,255,.04);box-shadow:none;color:#cbd0df}.school-sidebar .nav-link:not(.is-pending):hover .nav-icon{background:rgba(255,255,255,.18)}

/* Identidad visual Colegio Paulo Freire Uruapan */
:root{--pf-navy:#202a5a;--pf-navy-dark:#141b42;--pf-red:#ef3340;--pf-red-dark:#b82432;--pf-silver:#eef0f4;--pf-gold:#f5b942;--pf-ink:#20263a;--pf-muted:#7b849b;--pf-radius:22px}body{font-family:"Segoe UI",Inter,system-ui,-apple-system,sans-serif;color:var(--pf-ink)}.guest-layout{background:#f2f3f8}.guest-layout main>.container-fluid{max-width:none!important;padding:0!important}.pf-login-shell{min-height:100vh;display:grid;place-items:center;padding:30px;position:relative;overflow:hidden;background:radial-gradient(circle at 8% 5%,rgba(239,51,64,.12),transparent 28%),radial-gradient(circle at 95% 90%,rgba(32,42,90,.13),transparent 32%),#f6f7fa}.pf-login-shell:before{content:"";position:absolute;inset:0;background-image:linear-gradient(120deg,transparent 48%,rgba(32,42,90,.025) 49%,rgba(32,42,90,.025) 51%,transparent 52%);background-size:50px 50px}.pf-login-orb{position:absolute;border-radius:50%;filter:blur(2px)}.orb-one{width:190px;height:190px;background:var(--pf-red);left:-95px;bottom:8%;opacity:.9}.orb-two{width:120px;height:120px;border:24px solid var(--pf-navy);right:-40px;top:10%;opacity:.8}.pf-login-card{width:min(1050px,100%);min-height:650px;background:#fff;border-radius:32px;box-shadow:0 28px 80px rgba(24,31,68,.18);display:grid;grid-template-columns:1.02fr .98fr;overflow:hidden;position:relative;z-index:1}.pf-login-story{background:linear-gradient(145deg,var(--pf-navy-dark),var(--pf-navy) 68%,#343e75);color:#fff;padding:55px;position:relative;overflow:hidden;display:flex;align-items:center}.pf-login-story:before{content:"";position:absolute;width:380px;height:380px;border:1px solid rgba(255,255,255,.1);border-radius:50%;right:-170px;top:-120px;box-shadow:0 0 0 55px rgba(255,255,255,.025),0 0 0 110px rgba(255,255,255,.02)}.story-content{position:relative;z-index:2}.login-school-logo{width:148px;height:148px;object-fit:contain;filter:drop-shadow(0 14px 20px rgba(0,0,0,.28));margin-bottom:32px}.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-weight:800;font-size:.7rem;color:#9fa8c8}.pf-login-story h2{font-size:3.1rem;line-height:1.04;margin:12px 0 20px;font-weight:800}.pf-login-story h2 em{font-style:normal;color:#ff5a65}.pf-login-story p{max-width:390px;color:#cdd2e4;font-size:1.03rem;line-height:1.7}.story-pills{display:flex;gap:10px;margin-top:28px}.story-pills span{padding:8px 15px;border:1px solid rgba(255,255,255,.18);border-radius:999px;font-size:.78rem;background:rgba(255,255,255,.07)}.story-watermark{position:absolute;right:-20px;bottom:-75px;font-size:15rem;font-family:Georgia,serif;font-weight:800;color:rgba(255,255,255,.035)}.pf-login-form{padding:75px 65px;display:flex;flex-direction:column;justify-content:center}.pf-login-form h1{font-weight:800;font-size:2.15rem;margin:9px 0 6px;color:var(--pf-navy)}.login-intro{color:var(--pf-muted)}.pf-login-form .form-label{font-weight:700;font-size:.83rem;color:#414960}.pf-login-form .form-control{border:1.5px solid #e0e4ed;border-radius:14px;padding:.84rem 1rem;background:#f9fafc;font-size:.96rem}.pf-login-form .form-control:focus{border-color:var(--pf-navy);box-shadow:0 0 0 4px rgba(32,42,90,.1);background:#fff}.secure-note{font-size:.72rem;color:#2d9d78;font-weight:700}.pf-login-button{border:0;border-radius:14px;padding:1rem 1.2rem;color:#fff;background:linear-gradient(105deg,var(--pf-red),#d72b3b);box-shadow:0 12px 25px rgba(239,51,64,.25);font-weight:800;display:flex;justify-content:space-between;transition:.2s}.pf-login-button:hover{color:#fff;transform:translateY(-2px);box-shadow:0 16px 30px rgba(239,51,64,.32)}.support-copy{text-align:center;font-size:.75rem;color:#9aa1b2;margin:25px 0 0}.mobile-brand{display:none}
.admin-layout{background:#f4f5f9}.school-sidebar{width:285px;background:linear-gradient(180deg,#171f4b,var(--pf-navy-dark));box-shadow:12px 0 35px rgba(21,27,66,.12)}.school-sidebar:before{content:"";position:absolute;width:220px;height:220px;border-radius:50%;border:1px solid rgba(255,255,255,.06);left:-120px;top:180px;box-shadow:0 0 0 45px rgba(255,255,255,.02)}.school-brand{position:relative;padding:6px 4px 22px;border-bottom:1px solid rgba(255,255,255,.1)}.sidebar-logo{width:62px;height:62px;object-fit:contain;filter:drop-shadow(0 7px 10px rgba(0,0,0,.25))}.school-brand strong{display:block;line-height:1.15}.school-brand small{font-size:.68rem;margin-top:5px}.school-sidebar .nav-link{position:relative;color:#c8cde0;padding:.72rem .9rem;font-size:.88rem;font-weight:600}.school-sidebar .nav-link:hover,.school-sidebar .nav-link.active{background:linear-gradient(90deg,rgba(239,51,64,.95),rgba(239,51,64,.68));box-shadow:0 8px 18px rgba(239,51,64,.18)}.school-sidebar .nav-link span{font-size:1.05rem}.sidebar-signature{position:relative;margin:20px;padding:14px;text-align:center;border-radius:14px;background:rgba(255,255,255,.05);color:#9fa8c8;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase}.admin-main{margin-left:285px}.admin-topbar{height:76px;border:0;box-shadow:0 4px 20px rgba(35,42,77,.06);padding:0 2rem}.topbar-school,.topbar-user span{display:flex;flex-direction:column}.topbar-school b,.topbar-user b{font-size:.83rem}.topbar-school small,.topbar-user small{font-size:.68rem;color:var(--pf-muted)}.topbar-user{display:flex;gap:10px;align-items:center}.user-avatar{width:38px;height:38px;border-radius:12px;background:linear-gradient(135deg,var(--pf-navy),#505d9b);color:#fff;display:grid!important;place-items:center;font-weight:800;box-shadow:0 7px 15px rgba(32,42,90,.18)}.logout-button{border-radius:11px;background:#fff1f2;color:var(--pf-red);font-weight:700;font-size:.76rem}.mobile-menu{color:var(--pf-navy);font-size:1.2rem}.welcome-banner{position:relative;min-height:185px;border-radius:var(--pf-radius);padding:34px 40px;display:flex;align-items:center;overflow:hidden;color:#fff;background:linear-gradient(120deg,var(--pf-navy-dark),var(--pf-navy) 65%,#3d487e);box-shadow:0 18px 35px rgba(32,42,90,.16)}.welcome-banner:after{content:"";position:absolute;width:330px;height:330px;border:55px solid rgba(255,255,255,.04);border-radius:50%;right:-90px;top:-140px}.welcome-banner h1{font-size:2rem;font-weight:800;margin:9px 0 7px}.welcome-banner p{color:#cbd0e2;margin:0}.welcome-logo{position:absolute;right:75px;width:155px;height:155px;object-fit:contain;filter:drop-shadow(0 14px 18px rgba(0,0,0,.22));z-index:1}.metric-grid{margin-top:1px;transform:translateY(-20px);padding:0 18px}.metric-card{height:120px;border-radius:18px;background:#fff;padding:20px;box-shadow:0 12px 30px rgba(31,39,80,.09);display:flex;align-items:center;gap:14px;position:relative;border:1px solid rgba(32,42,90,.04)}.metric-icon{width:48px;height:48px;border-radius:15px;display:grid;place-items:center;font-size:1.3rem}.metric-card small{display:block;color:var(--pf-muted);font-size:.72rem}.metric-card strong{display:block;font-size:1.55rem;color:var(--pf-navy);margin-top:3px}.metric-trend{position:absolute;right:15px;top:14px;font-size:.66rem;font-weight:800}.students .metric-icon{background:#eef0ff;color:#5361ad}.income .metric-icon{background:#e7f8f1;color:#23966e}.payments .metric-icon{background:#fff5df;color:#d28a16}.alerts .metric-icon{background:#ffeaec;color:var(--pf-red)}.content-card{background:#fff;border-radius:var(--pf-radius);padding:25px;box-shadow:0 12px 30px rgba(31,39,80,.07);height:100%}.content-card header{display:flex;justify-content:space-between;align-items:center}.content-card h2{font-size:1.13rem;color:var(--pf-navy);font-weight:800;margin:4px 0}.status-chip{font-size:.67rem;color:#299973;background:#e9f8f2;border-radius:999px;padding:7px 10px}.chart-placeholder{height:270px;margin-top:20px;background:linear-gradient(180deg,#fafbfe,#f4f6fa);border-radius:16px;padding:30px;display:flex;flex-direction:column;justify-content:flex-end}.chart-bars{height:170px;display:flex;gap:5%;align-items:flex-end;border-bottom:1px solid #dde2ec}.chart-bars i{flex:1;background:linear-gradient(180deg,#5a66a8,var(--pf-navy));border-radius:8px 8px 0 0;opacity:.78}.chart-placeholder p{text-align:center;color:var(--pf-muted);font-size:.72rem;margin:16px 0 0}.quick-card button{border:0;background:#f8f9fc;border-radius:15px;padding:13px;margin-top:12px;width:100%;display:grid;grid-template-columns:42px 1fr 18px;grid-template-rows:1fr 1fr;text-align:left;align-items:center;color:var(--pf-ink);opacity:1}.quick-card button span{grid-row:1/3;width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#fff}.quick-card button b{font-size:.8rem}.quick-card button small{font-size:.67rem;color:var(--pf-muted)}.quick-card button i{grid-column:3;grid-row:1/3;font-size:1.4rem;color:#adb4c5}.quick-red{background:var(--pf-red)}.quick-blue{background:var(--pf-navy)}.quick-gold{background:var(--pf-gold)}.card{border-radius:18px}.btn-primary{background:var(--pf-red);border-color:var(--pf-red)}.btn-primary:hover{background:var(--pf-red-dark);border-color:var(--pf-red-dark)}
.catalog-heading{margin-bottom:28px}.catalog-heading h1{font-weight:800;color:var(--pf-navy);margin:6px 0}.catalog-heading p{color:var(--pf-muted)}.catalog-card{background:#fff;border-radius:20px;padding:24px;box-shadow:0 12px 30px rgba(31,39,80,.07);display:grid;grid-template-columns:58px 1fr;gap:16px;position:relative;overflow:hidden}.catalog-card:after{content:"";position:absolute;width:80px;height:80px;border-radius:50%;background:rgba(239,51,64,.05);right:-30px;top:-30px}.catalog-icon{width:54px;height:54px;border-radius:16px;background:linear-gradient(135deg,var(--pf-navy),#5663a3);color:#fff;display:grid;place-items:center;font-size:1.35rem}.catalog-card small{color:var(--pf-muted);font-size:.68rem}.catalog-card h2{font-size:1rem;color:var(--pf-navy);font-weight:800;margin:2px 0}.catalog-card strong{font-size:1.6rem}.catalog-card button{grid-column:1/3;border:0;background:#f5f6fa;color:var(--pf-navy);border-radius:12px;padding:10px 14px;text-align:left;font-weight:700;font-size:.75rem;display:flex;justify-content:space-between;opacity:1}
@media(max-width:991.98px){.pf-login-card{grid-template-columns:1fr;max-width:560px}.pf-login-story{display:none}.pf-login-form{padding:52px}.mobile-brand{display:block}.mobile-brand img{width:90px;height:90px;object-fit:contain;margin-bottom:20px}.admin-main{margin-left:0}.welcome-logo{right:30px;opacity:.3}.topbar-school{display:none}.school-sidebar{width:285px}}@media(max-width:575.98px){.pf-login-shell{padding:0}.pf-login-card{min-height:100vh;border-radius:0}.pf-login-form{padding:35px 24px}.pf-login-form h1{font-size:1.8rem}.welcome-banner{padding:28px 24px}.welcome-banner h1{font-size:1.55rem}.welcome-logo{width:120px}.metric-grid{padding:0 8px}.metric-card{height:110px;padding:14px}.metric-icon{width:40px;height:40px}.metric-card strong{font-size:1.25rem}.admin-topbar{padding:0 1rem}.topbar-user small{display:none}}
