/* /Components/Layout/MainLayout.razor.rz.scp.css */
#blazor-error-ui[b-osm8npyd2j] {
    color-scheme: light only;
    background: lightyellow;
    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;
}

    #blazor-error-ui .dismiss[b-osm8npyd2j] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-52xufm65qh],
.components-reconnect-repeated-attempt-visible[b-52xufm65qh],
.components-reconnect-failed-visible[b-52xufm65qh],
.components-pause-visible[b-52xufm65qh],
.components-resume-failed-visible[b-52xufm65qh],
.components-rejoining-animation[b-52xufm65qh] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-retrying[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-failed[b-52xufm65qh],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-52xufm65qh] {
    display: block;
}


#components-reconnect-modal[b-52xufm65qh] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-52xufm65qh 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-52xufm65qh 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-52xufm65qh 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-52xufm65qh]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-52xufm65qh 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-52xufm65qh {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-52xufm65qh {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-52xufm65qh {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-52xufm65qh] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-52xufm65qh] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-52xufm65qh] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-52xufm65qh] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-52xufm65qh] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-52xufm65qh] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-52xufm65qh] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-52xufm65qh 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-52xufm65qh] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-52xufm65qh {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/Access.razor.rz.scp.css */
.access-main[b-ec1ts2v4a0] { min-width: 0; padding: 31px 38px 60px; }
.access-breadcrumb[b-ec1ts2v4a0] { color: #9aa9af; font-size: 12px; }
.access-breadcrumb span[b-ec1ts2v4a0] { padding: 0 5px; color: #c4d1d5; }
.access-heading[b-ec1ts2v4a0] { margin: 8px 0 25px; }
.access-kicker[b-ec1ts2v4a0] { display: block; color: var(--teal, #395c80); font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
.access-heading h1[b-ec1ts2v4a0] { margin: 8px 0 0; color: #1e4860; font-size: 30px; font-weight: 600; letter-spacing: -.04em; }
.access-heading p[b-ec1ts2v4a0] { max-width: 680px; margin: 8px 0 0; color: #82959d; font-size: 13px; line-height: 1.5; }

.access-message[b-ec1ts2v4a0] { margin: 0 0 18px; padding: 10px 14px; border: 1px solid #cfe3d8; border-radius: 8px; color: #2f6a4d; background: #f1f9f4; font-size: 13px; }
.access-message.is-error[b-ec1ts2v4a0] { border-color: #e8c9c9; color: #a32c2c; background: #fdf3f3; }

.access-layout[b-ec1ts2v4a0] { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 18px; align-items: start; }
.access-panel[b-ec1ts2v4a0] { border: 1px solid #e8eff1; border-radius: 11px; background: rgba(255, 255, 255, .8); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); }
.access-list[b-ec1ts2v4a0] { padding: 18px 14px; }
.access-list h2[b-ec1ts2v4a0], .access-detail h2[b-ec1ts2v4a0] { margin: 0; color: #1e4860; font-size: 18px; font-weight: 600; }
.access-department-list[b-ec1ts2v4a0] { display: grid; gap: 4px; margin-top: 12px; }
.access-department[b-ec1ts2v4a0] { width: 100%; padding: 9px 10px; border: 1px solid transparent; border-radius: 9px; color: #476f7e; background: transparent; text-align: left; cursor: pointer; }
.access-department:hover[b-ec1ts2v4a0] { background: #eef7f9; }
.access-department.is-selected[b-ec1ts2v4a0] { border-color: #c6d0da; background: #eef3f8; }
.access-department strong[b-ec1ts2v4a0] { display: block; font-size: 13px; font-weight: 600; }
.access-department small[b-ec1ts2v4a0] { display: block; margin-top: 2px; color: #92a3a7; font-size: 10px; }
.access-new[b-ec1ts2v4a0] { margin-top: 18px; padding-top: 14px; border-top: 1px solid #edf1f2; }
.access-new label[b-ec1ts2v4a0] { display: block; margin-bottom: 6px; color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }

.access-detail[b-ec1ts2v4a0] { padding: 20px; }
.access-detail h3[b-ec1ts2v4a0] { margin: 22px 0 10px; color: #1e4860; font-size: 14px; font-weight: 600; }
.access-detail-head[b-ec1ts2v4a0] { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; }
.access-detail-head p[b-ec1ts2v4a0] { max-width: 520px; margin: 6px 0 0; color: #82959d; font-size: 12px; line-height: 1.5; }
.access-actions[b-ec1ts2v4a0] { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
.access-rename[b-ec1ts2v4a0] { margin-top: 16px; }
.access-rename label[b-ec1ts2v4a0] { display: block; margin-bottom: 6px; color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }

.access-row[b-ec1ts2v4a0] { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.access-row input[type="text"][b-ec1ts2v4a0], .access-row select[b-ec1ts2v4a0] { min-height: 39px; flex: 1 1 220px; min-width: 0; padding: 0 10px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: #fff; font: inherit; font-size: 13px; }
.access-check[b-ec1ts2v4a0] { display: inline-flex; align-items: center; gap: 6px; color: #476f7e; font-size: 12px; white-space: nowrap; }

.access-button[b-ec1ts2v4a0] { min-height: 39px; padding: 0 14px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: rgba(255, 255, 255, .78); font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.access-button:hover:not(:disabled)[b-ec1ts2v4a0] { border-color: #8eafbd; background: #eef7f9; }
.access-button:disabled[b-ec1ts2v4a0] { cursor: not-allowed; opacity: .55; }
.access-button.is-primary[b-ec1ts2v4a0] { border-color: #a7c3cf; background: #e6f3f6; }
.access-button.is-danger[b-ec1ts2v4a0] { border-color: #d9a3a3; color: #a32c2c; background: #fdf3f3; }

.access-table[b-ec1ts2v4a0] { width: 100%; border-collapse: collapse; }
.access-table th[b-ec1ts2v4a0], .access-table td[b-ec1ts2v4a0] { padding: 9px 8px; border-top: 1px solid #edf2f3; text-align: left; font-size: 12px; color: #476f7e; }
.access-table thead th[b-ec1ts2v4a0] { border-top: 0; color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.access-cell-actions[b-ec1ts2v4a0] { text-align: right; }
.access-inactive[b-ec1ts2v4a0] { color: #a32c2c; }
.access-add[b-ec1ts2v4a0] { margin-top: 6px; }
.access-empty[b-ec1ts2v4a0] { min-height: 90px; display: grid; place-items: center; color: #8b9da2; font-size: 12px; }
.access-visually-hidden[b-ec1ts2v4a0] { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

@media (max-width: 900px) {
    .access-layout[b-ec1ts2v4a0] { grid-template-columns: minmax(0, 1fr); }
    .access-detail-head[b-ec1ts2v4a0] { flex-direction: column; }
    .access-actions[b-ec1ts2v4a0] { justify-content: flex-start; }
}

@media (max-width: 900px) {
    .access-main[b-ec1ts2v4a0] { padding: 22px 16px 48px; }
}
/* /Components/Pages/Attendance.razor.rz.scp.css */
/* 版式和配色照 PortalCloudflarePages/styles.css 的 attendance 部分 */
.attendance-main[b-518gg0tup7] { min-width: 0; padding: 43px clamp(22px, 4vw, 60px) 64px; background: radial-gradient(circle at 88% -4%, rgba(215, 237, 246, .7), transparent 30rem), linear-gradient(180deg, #fff 0%, #fbfcfd 100%); }
.attendance-page[b-518gg0tup7] { width: min(1240px, 100%); margin: 0 auto; }

.attendance-breadcrumb[b-518gg0tup7] { color: #94a2ad; font-size: 11px; }
.attendance-breadcrumb span[b-518gg0tup7] { padding: 0 5px; color: #c6d0da; }
.attendance-heading[b-518gg0tup7] { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin: 12px 0 23px; }
.attendance-kicker[b-518gg0tup7], .attendance-eyebrow[b-518gg0tup7] { display: block; color: var(--teal); font-size: 10px; font-weight: 700; letter-spacing: .13em; text-transform: uppercase; }
.attendance-heading h1[b-518gg0tup7] { margin: 0; color: var(--navy); font-family: "Cinzel", Georgia, serif; font-size: clamp(34px, 4vw, 48px); font-weight: 400; letter-spacing: -.045em; line-height: 1.12; }
.attendance-heading p[b-518gg0tup7] { max-width: 680px; margin: 9px 0 0; color: var(--muted); font-size: 14px; }
.attendance-tag[b-518gg0tup7] { display: inline-flex; align-items: center; flex: 0 0 auto; min-height: 29px; padding: 0 10px; border: 1px solid #d8e5eb; border-radius: 8px; color: var(--teal); background: #f5fafb; font-size: 10px; font-weight: 650; white-space: nowrap; }

.attendance-panel[b-518gg0tup7] { min-width: 0; padding: 21px 23px; border: 1px solid #e1e8ee; border-radius: 12px; background: rgba(255, 255, 255, .83); box-shadow: 0 12px 32px rgba(0, 28, 56, .055); }

.attendance-toolbar[b-518gg0tup7] { display: flex; align-items: flex-end; gap: 16px; margin-bottom: 17px; }
.attendance-toolbar label[b-518gg0tup7] { display: grid; gap: 5px; min-width: 180px; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.attendance-toolbar label:first-child[b-518gg0tup7] { min-width: 260px; }
.attendance-toolbar label.attendance-grade-field[b-518gg0tup7] { min-width: 140px; }
.attendance-toolbar label.attendance-class-field[b-518gg0tup7] { min-width: 380px; }
.attendance-toolbar select[b-518gg0tup7], .attendance-toolbar input[b-518gg0tup7] { width: 100%; min-height: 37px; padding: 0 10px; border: 1px solid #c6d0da; border-radius: 8px; color: var(--navy); background: #fff; font: inherit; font-size: 12px; font-weight: 500; letter-spacing: normal; text-transform: none; }
.attendance-student-id[b-518gg0tup7] { display: grid; gap: 5px; margin: 0 0 3px auto; }
.attendance-student-id span[b-518gg0tup7] { color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.attendance-student-id strong[b-518gg0tup7] { color: var(--navy); font-size: 12px; }

.attendance-error[b-518gg0tup7] { margin: 0 0 17px; padding: 10px 14px; border: 1px solid #e8c9c9; border-radius: 8px; color: #a32c2c; background: #fdf3f3; font-size: 13px; }
.attendance-saved[b-518gg0tup7] { margin: 0 0 17px; padding: 10px 14px; border: 1px solid #cfe3d6; border-radius: 8px; color: #3e7a59; background: #f1f8f3; font-size: 13px; }
.attendance-empty[b-518gg0tup7] { margin: 0; padding: 24px 0; color: var(--muted); font-size: 12px; }

/* 代码条：选中班的标题 + 一排代码按钮 */
.attendance-code-panel[b-518gg0tup7] { margin-bottom: 17px; padding-bottom: 0; }
.attendance-code-heading[b-518gg0tup7] { display: flex; align-items: center; justify-content: space-between; gap: 15px; margin-bottom: 13px; }
.attendance-code-heading h2[b-518gg0tup7] { margin: 4px 0 0; color: var(--navy); font-family: "Cinzel", Georgia, serif; font-size: 22px; font-weight: 400; }
.attendance-code-heading p[b-518gg0tup7] { margin: 4px 0 0; color: var(--muted); font-size: 11px; }
.attendance-code-scroll[b-518gg0tup7] { max-width: 100%; overflow-x: auto; scrollbar-color: #c2d2da transparent; scrollbar-width: thin; }
.attendance-code-list[b-518gg0tup7] { display: flex; width: max-content; min-width: 100%; gap: 3px; border-top: 1px solid var(--line); }
.attendance-code-button[b-518gg0tup7] { display: grid; min-width: 50px; min-height: 51px; place-items: center; padding: 8px 10px; border: 0; border-bottom: 3px solid transparent; color: var(--ink); background: transparent; font-size: 13px; font-weight: 700; cursor: pointer; }
.attendance-code-button:hover:not(:disabled)[b-518gg0tup7] { background: #f4f7f9; }
.attendance-code-button.is-active[b-518gg0tup7] { border-bottom-color: currentColor; background: #f3f7f9; }
.attendance-code-button:disabled[b-518gg0tup7] { opacity: .45; cursor: default; }
.attendance-code-button.is-clear[b-518gg0tup7] { min-width: 62px; margin-left: auto; color: var(--muted); font-size: 11px; }

/* 代码的颜色：到了 / 迟到 / 缺勤 / 其它 */
.attendance-code-button.tone-present[b-518gg0tup7] { color: #4f877f; }
.attendance-code-button.tone-tardy[b-518gg0tup7] { color: var(--teal); }
.attendance-code-button.tone-absence[b-518gg0tup7] { color: #986468; }
.attendance-code-button.tone-neutral[b-518gg0tup7] { color: #303b45; }
.attendance-current-code[b-518gg0tup7], .attendance-row-code[b-518gg0tup7], .attendance-schedule-status[b-518gg0tup7] { display: inline-flex; align-items: center; justify-content: center; min-width: 52px; padding: 5px 8px; border-radius: 6px; font-size: 11px; font-weight: 700; white-space: nowrap; }
.attendance-current-code.tone-present[b-518gg0tup7], .attendance-row-code.tone-present[b-518gg0tup7], .attendance-schedule-status.tone-present[b-518gg0tup7] { color: #4f877f; background: #e8f4f0; }
.attendance-current-code.tone-tardy[b-518gg0tup7], .attendance-row-code.tone-tardy[b-518gg0tup7], .attendance-schedule-status.tone-tardy[b-518gg0tup7] { color: var(--teal); background: #e8eef4; }
.attendance-current-code.tone-absence[b-518gg0tup7], .attendance-row-code.tone-absence[b-518gg0tup7], .attendance-schedule-status.tone-absence[b-518gg0tup7] { color: #986468; background: #f8eff0; }
.attendance-current-code.tone-neutral[b-518gg0tup7], .attendance-row-code.tone-neutral[b-518gg0tup7], .attendance-schedule-status.tone-neutral[b-518gg0tup7] { color: #465767; background: #edf1f3; }
.attendance-row-code.is-unmarked[b-518gg0tup7] { min-width: 75px; color: #748897; background: #f0f3f5; }
.attendance-schedule-status.is-unmarked[b-518gg0tup7] { color: #748897; background: #f0f3f5; }

.attendance-layout[b-518gg0tup7] { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); gap: 17px; align-items: start; }
.attendance-panel-head[b-518gg0tup7] { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 18px; }
.attendance-panel-head h2[b-518gg0tup7] { margin: 4px 0 0; color: var(--navy); font-family: "Cinzel", Georgia, serif; font-size: 23px; font-weight: 400; }
.attendance-panel-head p[b-518gg0tup7] { margin: 4px 0 0; color: var(--muted); font-size: 11px; }
.attendance-count[b-518gg0tup7] { flex: 0 0 auto; padding: 5px 8px; border-radius: 6px; color: #416c7d; background: #e9f4f5; font-size: 10px; font-weight: 700; }

.attendance-rows[b-518gg0tup7] { border-top: 1px solid var(--line); }
.attendance-rows-head[b-518gg0tup7] { display: flex; justify-content: space-between; padding: 10px 7px; border-bottom: 1px solid #e9eef2; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.attendance-row[b-518gg0tup7] { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px; width: 100%; padding: 11px 7px; border: 0; border-bottom: 1px solid #e9eef2; color: var(--navy); background: transparent; text-align: left; cursor: pointer; }
.attendance-row:hover[b-518gg0tup7] { background: #f8fafb; }
.attendance-row.is-selected[b-518gg0tup7] { background: #f0f7f9; box-shadow: inset 3px 0 0 var(--teal); }
.attendance-row.is-changed .attendance-row-code[b-518gg0tup7] { box-shadow: 0 0 0 2px #e8d9b0; }
.attendance-period-copy[b-518gg0tup7] { display: grid; gap: 2px; min-width: 0; }
.attendance-period-copy > span[b-518gg0tup7] { color: var(--teal); font-size: 10px; font-weight: 600; }
.attendance-period-copy strong[b-518gg0tup7] { font-size: 12px; }
.attendance-period-copy small[b-518gg0tup7] { color: var(--muted); font-size: 10px; }
.attendance-not-yours[b-518gg0tup7] { color: #986b28; font-size: 10px; font-style: normal; font-weight: 600; }

/* "按班级 / 按学生"切换（只有两种都能用的人才有） */
.attendance-mode[b-518gg0tup7] { display: inline-flex; margin-bottom: 17px; padding: 3px; border: 1px solid #d8e5eb; border-radius: 9px; background: #f5fafb; }
.attendance-mode button[b-518gg0tup7] { min-height: 30px; padding: 0 14px; border: 0; border-radius: 7px; color: var(--muted); background: transparent; font-size: 11px; font-weight: 650; cursor: pointer; }
.attendance-mode button.is-active[b-518gg0tup7] { color: var(--navy); background: #fff; box-shadow: 0 1px 3px rgba(0, 28, 56, .12); cursor: default; }

/* 代码条：常用代码在前，不常用的排在分隔线后面，字小一点 */
.attendance-code-button.is-minor[b-518gg0tup7] { min-width: 42px; font-size: 12px; font-weight: 600; opacity: .8; }
.attendance-code-divider[b-518gg0tup7] { flex: 0 0 auto; align-self: stretch; width: 1px; margin: 10px 8px; background: var(--line); }

/* Fill：选代码、选是否盖掉已有的标记，一次填满全班 */
.attendance-fill-toggle[b-518gg0tup7] { flex: 0 0 auto; min-height: 33px; padding: 0 13px; border: 1px solid var(--navy); border-radius: 8px; color: var(--navy); background: #fff; font-size: 11px; font-weight: 650; cursor: pointer; }
.attendance-fill-toggle[aria-expanded="true"][b-518gg0tup7] { color: #fff; background: var(--navy); }
.attendance-fill[b-518gg0tup7] { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 17px; margin-bottom: 15px; padding: 14px 16px; border: 1px solid #d8e5eb; border-radius: 10px; background: #f5fafb; }
.attendance-fill label[b-518gg0tup7] { display: grid; gap: 5px; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.attendance-fill select[b-518gg0tup7] { min-width: 220px; min-height: 37px; padding: 0 10px; border: 1px solid #c6d0da; border-radius: 8px; color: var(--navy); background: #fff; font: inherit; font-size: 12px; font-weight: 500; letter-spacing: normal; text-transform: none; }
.attendance-fill-options[b-518gg0tup7] { display: grid; gap: 6px; min-width: 0; margin: 0; padding: 0; border: 0; }
.attendance-fill-options legend[b-518gg0tup7] { padding: 0; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.attendance-fill-options label[b-518gg0tup7] { display: flex; align-items: center; gap: 7px; color: var(--ink); font-size: 12px; font-weight: 500; letter-spacing: normal; text-transform: none; cursor: pointer; }
.attendance-fill-actions[b-518gg0tup7] { display: flex; align-items: center; gap: 12px; margin-left: auto; }
.attendance-link[b-518gg0tup7] { padding: 0; border: 0; color: var(--muted); background: none; font-size: 11px; font-weight: 600; text-decoration: underline; cursor: pointer; }

/* 按班级：每个学生一行，左边点一下就标成代码条上的代码，右边是备注框 */
.attendance-roster[b-518gg0tup7] { border-top: 1px solid var(--line); }
.attendance-roster-head[b-518gg0tup7], .attendance-roster-row[b-518gg0tup7] { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); align-items: center; gap: 12px; }
.attendance-roster-head[b-518gg0tup7] { padding: 10px 7px; border-bottom: 1px solid #e9eef2; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.attendance-roster-row[b-518gg0tup7] { padding: 4px 7px; border-bottom: 1px solid #e9eef2; }
.attendance-roster-row.is-changed[b-518gg0tup7] { background: #fffaf0; box-shadow: inset 3px 0 0 #e8d9b0; }
.attendance-roster-hit[b-518gg0tup7] { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; min-height: 40px; padding: 5px 9px; border: 0; border-radius: 8px; color: var(--navy); background: transparent; text-align: left; cursor: pointer; }
.attendance-roster-hit:hover[b-518gg0tup7] { background: #f0f7f9; }
.attendance-roster-name[b-518gg0tup7] { display: grid; gap: 2px; min-width: 0; }
.attendance-roster-name strong[b-518gg0tup7] { font-size: 12px; }
.attendance-roster-name small[b-518gg0tup7] { color: var(--muted); font-size: 10px; }
.attendance-roster-comment[b-518gg0tup7] { width: 100%; min-height: 34px; padding: 0 10px; border: 1px solid #d5dde4; border-radius: 8px; color: var(--navy); background: #fff; font: inherit; font-size: 12px; }
.attendance-roster-comment:disabled[b-518gg0tup7] { border-color: #e9eef2; background: #f7f9fa; cursor: default; }

.attendance-save[b-518gg0tup7] { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 18px; }
.attendance-save span[b-518gg0tup7] { color: var(--muted); font-size: 10px; }
.attendance-save span.has-changes[b-518gg0tup7] { color: #986b28; font-weight: 700; }
.attendance-button[b-518gg0tup7] { display: inline-flex; align-items: center; justify-content: center; min-height: 37px; padding: 0 14px; border: 1px solid var(--navy); border-radius: 8px; color: #fff; background: var(--navy); font-size: 11px; font-weight: 600; white-space: nowrap; cursor: pointer; }
.attendance-button:hover:not(:disabled)[b-518gg0tup7] { border-color: #123c5e; background: #123c5e; }
.attendance-button:disabled[b-518gg0tup7] { opacity: .45; cursor: default; }

.attendance-schedule[b-518gg0tup7] { display: grid; gap: 8px; }
.attendance-schedule-item[b-518gg0tup7] { display: grid; grid-template-columns: minmax(32px, auto) minmax(0, 1fr); gap: 11px; width: 100%; padding: 11px; border: 1px solid #e2eaee; border-radius: 9px; color: var(--ink); background: #fff; text-align: left; cursor: pointer; }
.attendance-schedule-item:hover[b-518gg0tup7] { border-color: #b8d0dc; }
.attendance-schedule-item.is-selected[b-518gg0tup7] { border-color: #91b8c7; background: #edf7f8; box-shadow: inset 3px 0 0 var(--teal); }
.attendance-period[b-518gg0tup7] { display: grid; min-width: 31px; height: 31px; place-items: center; padding: 0 6px; border-radius: 7px; color: var(--teal); background: #e5f0f3; font-size: 10px; font-weight: 700; white-space: nowrap; }
.attendance-schedule-copy strong[b-518gg0tup7], .attendance-schedule-copy small[b-518gg0tup7] { display: block; }
.attendance-schedule-copy strong[b-518gg0tup7] { color: var(--navy); font-size: 11px; }
.attendance-schedule-copy small[b-518gg0tup7] { margin-top: 3px; color: var(--muted); font-size: 10px; }
.attendance-schedule-status[b-518gg0tup7] { grid-column: 2; justify-self: start; min-width: 0; padding: 3px 6px; border-radius: 5px; font-size: 9px; }

.attendance-selected-note[b-518gg0tup7] { display: grid; gap: 3px; margin-top: 15px; padding: 12px; border-radius: 8px; background: #f4f7f9; }
.attendance-selected-note strong[b-518gg0tup7] { color: var(--navy); font-size: 11px; }
.attendance-selected-note > span:not(.attendance-eyebrow)[b-518gg0tup7] { color: var(--muted); font-size: 10px; }

@media (max-width: 940px) {
    .attendance-layout[b-518gg0tup7] { grid-template-columns: 1fr; }
}

@media (max-width: 760px) {
    .attendance-main[b-518gg0tup7] { padding: 27px 15px calc(98px + env(safe-area-inset-bottom)); }
    .attendance-heading[b-518gg0tup7] { align-items: flex-start; flex-direction: column; gap: 14px; }
    .attendance-panel[b-518gg0tup7] { padding: 18px 15px; }
    .attendance-toolbar[b-518gg0tup7] { flex-wrap: wrap; }
    .attendance-toolbar label[b-518gg0tup7], .attendance-toolbar label:first-child[b-518gg0tup7], .attendance-toolbar label.attendance-class-field[b-518gg0tup7] { flex: 1 1 180px; min-width: 0; }
    .attendance-roster-head[b-518gg0tup7] { display: none; }
    .attendance-roster-row[b-518gg0tup7] { grid-template-columns: 1fr; }
    .attendance-fill-actions[b-518gg0tup7] { margin-left: 0; }
    .attendance-student-id[b-518gg0tup7] { margin-left: 0; }
}

@media (max-width: 520px) {
    .attendance-row[b-518gg0tup7] { gap: 8px; }
    .attendance-save[b-518gg0tup7] { align-items: flex-start; flex-direction: column; }
}
/* /Components/Pages/FamilyHome.razor.rz.scp.css */
.portal-topbar[b-df4jntwdea] {
    min-height: 72px;
    padding: 0 28px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    color: #fff;
    background: #183b66;
}

.portal-brand[b-df4jntwdea],
.portal-topbar-actions[b-df4jntwdea],
.portal-parent-profile[b-df4jntwdea],
.portal-student-identity[b-df4jntwdea],
.portal-bar-group[b-df4jntwdea],
.portal-legend[b-df4jntwdea] {
    display: flex;
    align-items: center;
}

.portal-brand[b-df4jntwdea] { gap: 12px; }
.portal-brand-mark[b-df4jntwdea] {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    border-radius: 10px;
    color: #183b66;
    background: #f4c56b;
    font-weight: 700;
    letter-spacing: -0.04em;
}
.portal-brand-name[b-df4jntwdea] { font-size: 16px; font-weight: 600; }
.portal-brand-context[b-df4jntwdea] { color: rgba(255, 255, 255, .66); font-size: 12px; }
.portal-topbar-actions[b-df4jntwdea] { gap: 18px; }
.portal-icon-button[b-df4jntwdea] {
    width: 34px;
    height: 34px;
    border: 0;
    border-radius: 9px;
    color: #fff;
    background: transparent;
    cursor: pointer;
    font-size: 22px;
    line-height: 1;
}
.portal-icon-button:hover[b-df4jntwdea] { background: rgba(255, 255, 255, .12); }
.portal-parent-profile[b-df4jntwdea] { gap: 10px; padding-left: 18px; border-left: 1px solid rgba(255, 255, 255, .18); font-size: 13px; }
.portal-parent-avatar[b-df4jntwdea],
.portal-student-avatar[b-df4jntwdea] {
    display: grid;
    place-items: center;
    border-radius: 50%;
    font-weight: 700;
}
.portal-parent-avatar[b-df4jntwdea] { width: 32px; height: 32px; color: #183b66; background: #d8e9fb; }
.portal-student-avatar[b-df4jntwdea] { width: 48px; height: 48px; flex: 0 0 auto; border-radius: 13px; color: #fff; background: linear-gradient(135deg, #6ba4dc, #214e84); font-size: 18px; }
.portal-chevron[b-df4jntwdea] { color: rgba(255, 255, 255, .7); font-size: 18px; }

.portal-layout[b-df4jntwdea] { display: grid; grid-template-columns: 210px minmax(0, 1fr); min-height: calc(100vh - 72px); }
.portal-sidebar[b-df4jntwdea] { padding: 26px 16px; background: #eef2f8; border-right: 1px solid #e5e9f1; }
.portal-sidebar-label[b-df4jntwdea] { margin: 0 12px 12px; color: #6d7890; font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.portal-nav[b-df4jntwdea] { display: grid; gap: 6px; }
.portal-nav-item[b-df4jntwdea] {
    display: flex;
    align-items: center;
    gap: 11px;
    width: 100%;
    padding: 11px 12px;
    border: 0;
    border-radius: 9px;
    color: #536077;
    background: transparent;
    text-align: left;
    cursor: pointer;
}
.portal-nav-item:hover[b-df4jntwdea] { background: #e2e9f3; }
.portal-nav-item.is-active[b-df4jntwdea] { color: #183b66; background: #fff; font-weight: 600; box-shadow: 0 3px 12px rgba(25, 55, 92, .07); }
.portal-nav-item[b-df4jntwdea] { color: #536077; text-decoration: none; }
.portal-nav-item:visited[b-df4jntwdea] { color: #536077; }
.portal-nav-item.is-active:visited[b-df4jntwdea] { color: #183b66; }
.portal-sidebar-note[b-df4jntwdea] { margin: 34px 12px 0; padding-top: 20px; border-top: 1px solid #d9e0eb; color: #6d7890; font-size: 12px; }
.portal-sidebar-note strong[b-df4jntwdea] { display: block; margin-top: 3px; color: #536077; font-weight: 500; }

.portal-main[b-df4jntwdea] { min-width: 0; padding: 32px 38px 44px; background: #f5f7fb; }
.portal-breadcrumb[b-df4jntwdea] { color: #6d7890; font-size: 12px; }
.portal-breadcrumb span[b-df4jntwdea] { padding: 0 5px; color: #a2adbd; }
.portal-page-heading[b-df4jntwdea] { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin: 8px 0 24px; }
.portal-page-heading h1[b-df4jntwdea] { margin: 0; color: #172033; font-size: 28px; line-height: 1.2; letter-spacing: -.035em; font-weight: 600; }
.portal-page-heading p[b-df4jntwdea] { margin: 8px 0 0; color: #6d7890; }
.portal-button[b-df4jntwdea] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 40px;
    padding: 0 15px;
    border: 1px solid #d5deea;
    border-radius: 8px;
    color: #183b66;
    background: #fff;
    font-weight: 600;
    cursor: pointer;
}
.portal-button:hover[b-df4jntwdea] { border-color: #2f79d0; }
.portal-button-primary[b-df4jntwdea] { color: #fff; background: #2f79d0; border-color: #2f79d0; }

.portal-student-strip[b-df4jntwdea] { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 24px; padding: 20px 22px; border: 1px solid #e5e9f1; border-radius: 12px; background: #fff; box-shadow: 0 6px 20px rgba(24, 59, 102, .04); }
.portal-student-identity[b-df4jntwdea] { gap: 14px; min-width: 0; }
.portal-student-identity h2[b-df4jntwdea] { margin: 0; font-size: 18px; font-weight: 600; }
.portal-student-identity p[b-df4jntwdea] { margin: 3px 0 0; color: #6d7890; font-size: 12px; }
.portal-student-meta[b-df4jntwdea] { padding-left: 24px; border-left: 1px solid #e5e9f1; }
.portal-student-meta span[b-df4jntwdea] { display: block; color: #6d7890; font-size: 11px; }
.portal-student-meta strong[b-df4jntwdea] { display: block; margin-top: 2px; color: #172033; font-weight: 600; }
.portal-term[b-df4jntwdea] { color: #6d7890; font-size: 12px; white-space: nowrap; }

.portal-feed-grid[b-df4jntwdea] { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: 20px; margin-top: 24px; }
.portal-feed-panel[b-df4jntwdea] { min-width: 0; padding: 22px 22px 20px; border: 1px solid #e5e9f1; border-radius: 12px; background: #fff; }
.portal-feed-heading[b-df4jntwdea] { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.portal-feed-heading h2[b-df4jntwdea] { margin: 0; font-size: 17px; font-weight: 600; letter-spacing: -.015em; }
.portal-feed-heading p[b-df4jntwdea] { margin: 5px 0 0; color: #6d7890; font-size: 12px; }
.portal-feed-actions[b-df4jntwdea] { display: flex; align-items: center; gap: 8px; }
.portal-text-button[b-df4jntwdea] { flex: 0 0 auto; padding: 5px 0; border: 0; color: #2f79d0; background: transparent; font-size: 11px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.portal-text-button:hover[b-df4jntwdea] { color: #183b66; }
.portal-refresh-button[b-df4jntwdea] { width: 34px; height: 34px; border: 1px solid #d5deea; border-radius: 8px; color: #183b66; background: #fff; font-size: 20px; line-height: 1; cursor: pointer; }
.portal-refresh-button:hover[b-df4jntwdea] { border-color: #2f79d0; background: #f7fbff; }
.portal-refresh-button:disabled[b-df4jntwdea] { cursor: wait; opacity: .55; }
.portal-calendar-list[b-df4jntwdea], .portal-announcement-list[b-df4jntwdea] { display: grid; gap: 0; }
.portal-feed-note[b-df4jntwdea], .portal-announcement-archive-note[b-df4jntwdea] { margin: 12px 0; padding: 10px 12px; border-radius: 8px; background: #f4f7fa; color: #5f7087; font-size: 12px; line-height: 1.45; }
.portal-calendar-item[b-df4jntwdea] { display: grid; grid-template-columns: 104px minmax(0, 1fr); gap: 14px; padding: 13px 0; border-top: 1px solid #edf0f5; }
.portal-calendar-item:first-child[b-df4jntwdea], .portal-announcement-item:first-child[b-df4jntwdea] { border-top: 0; }
.portal-calendar-item time[b-df4jntwdea] { color: #2f79d0; font-size: 12px; font-weight: 600; }
.portal-calendar-item strong[b-df4jntwdea] { display: block; font-size: 13px; font-weight: 600; }
.portal-calendar-item span[b-df4jntwdea] { display: block; margin-top: 3px; color: #6d7890; font-size: 12px; }
.portal-announcement-item[b-df4jntwdea] { padding: 13px 0; border-top: 1px solid #edf0f5; }
.portal-announcement-meta[b-df4jntwdea] { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: #6d7890; font-size: 11px; }
.portal-announcement-meta span[b-df4jntwdea] { color: #4aa89c; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; }
.portal-announcement-item h3[b-df4jntwdea] { margin: 7px 0 0; font-size: 13px; font-weight: 600; }
.portal-announcement-item p[b-df4jntwdea] { margin: 4px 0 0; color: #6d7890; font-size: 12px; line-height: 1.5; }
.portal-feed-state[b-df4jntwdea] { min-height: 120px; display: grid; place-items: center; padding: 16px; color: #6d7890; font-size: 12px; text-align: center; }
.portal-content-warning[b-df4jntwdea] { display: flex; align-items: flex-start; gap: 8px; margin-top: 14px; padding: 12px 14px; border: 1px solid #ead9b2; border-radius: 8px; color: #725b2c; background: #fffaf0; font-size: 12px; }
.portal-content-warning strong[b-df4jntwdea] { white-space: nowrap; }

.portal-calendar-toolbar[b-df4jntwdea] {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 22px 0 14px;
}
.portal-calendar-toolbar h2[b-df4jntwdea] {
    min-width: 175px;
    margin: 0;
    color: #172033;
    font-size: 18px;
    font-weight: 600;
    text-align: center;
}
.portal-calendar-toolbar .portal-button[b-df4jntwdea] {
    min-width: 40px;
    padding: 0 12px;
    font-size: 18px;
}
.portal-calendar-toolbar .portal-calendar-today[b-df4jntwdea] {
    margin-left: 4px;
    font-size: 12px;
}
.portal-calendar-layout[b-df4jntwdea] { display: grid; grid-template-columns: minmax(0, 1.65fr) minmax(270px, .75fr); gap: 20px; align-items: start; }
.portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] { border: 1px solid #e5e9f1; border-radius: 12px; background: #fff; box-shadow: 0 6px 20px rgba(24, 59, 102, .04); }
.portal-calendar-card[b-df4jntwdea] { overflow: hidden; }
.portal-calendar-loading[b-df4jntwdea] { min-height: 420px; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 12px; color: #183b66; }
.portal-calendar-weekdays[b-df4jntwdea] { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); padding: 0 12px; background: #f8fafd; border-bottom: 1px solid #e5e9f1; }
.portal-calendar-weekdays span[b-df4jntwdea] { padding: 12px 8px 10px; color: #6d7890; font-size: 11px; font-weight: 600; text-align: center; text-transform: uppercase; }
.portal-calendar-grid[b-df4jntwdea] { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
.portal-calendar-day[b-df4jntwdea] { min-height: 116px; display: flex; align-items: stretch; flex-direction: column; gap: 5px; padding: 9px 8px 8px; border: 0; border-right: 1px solid #edf0f5; border-bottom: 1px solid #edf0f5; color: #172033; background: #fff; text-align: left; cursor: pointer; }
.portal-calendar-day:nth-child(7n)[b-df4jntwdea] { border-right: 0; }
.portal-calendar-day:hover[b-df4jntwdea] { background: #f7fbff; }
.portal-calendar-day.is-outside-month[b-df4jntwdea] { color: #aeb8c7; background: #fbfcfe; }
.portal-calendar-day.is-selected[b-df4jntwdea] { background: #f0f7ff; box-shadow: inset 0 0 0 2px #8ab9e9; }
.portal-calendar-day.is-today .portal-calendar-day-number[b-df4jntwdea] { color: #fff; background: #2f79d0; }
.portal-calendar-day-number[b-df4jntwdea] { width: 25px; height: 25px; display: grid; place-items: center; border-radius: 50%; font-size: 12px; font-weight: 600; }
.portal-calendar-event[b-df4jntwdea] { display: block; overflow: hidden; padding: 4px 5px; border-left: 3px solid #7eaee1; border-radius: 4px; color: #3f5876; background: #f2f7fd; font-size: 10px; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: #d8a84d; color: #705b2f; background: #fff8e9; }
.portal-calendar-event strong[b-df4jntwdea] { display: block; overflow: hidden; font-size: 9px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.portal-calendar-event span[b-df4jntwdea] { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.portal-calendar-more[b-df4jntwdea] { margin-top: auto; color: #2f79d0; font-size: 10px; font-weight: 600; }
.portal-calendar-details[b-df4jntwdea] { padding: 20px; }
.portal-calendar-details-heading[b-df4jntwdea] { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding-bottom: 16px; border-bottom: 1px solid #edf0f5; }
.portal-calendar-details-heading > div > span[b-df4jntwdea] { color: #6d7890; font-size: 11px; text-transform: uppercase; letter-spacing: .06em; }
.portal-calendar-details-heading h2[b-df4jntwdea] { margin: 4px 0 0; color: #172033; font-size: 17px; font-weight: 600; }
.portal-calendar-details-count[b-df4jntwdea] { color: #6d7890; font-size: 11px; white-space: nowrap; }
.portal-calendar-detail-list[b-df4jntwdea] { display: grid; gap: 10px; padding-top: 14px; }
.portal-calendar-detail-item[b-df4jntwdea] { padding: 11px 12px; border-left: 3px solid #7eaee1; border-radius: 7px; background: #f5f9fe; }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: #d8a84d; background: #fff9ec; }
.portal-calendar-detail-item strong[b-df4jntwdea] { display: block; font-size: 13px; font-weight: 600; }
.portal-calendar-detail-item span[b-df4jntwdea] { display: block; margin-top: 3px; color: #6d7890; font-size: 11px; }
.portal-calendar-detail-item p[b-df4jntwdea] { margin: 7px 0 0; color: #536077; font-size: 12px; line-height: 1.45; }
.portal-announcements-page[b-df4jntwdea] { margin-top: 22px; }

.portal-course-panel[b-df4jntwdea] { margin-top: 24px; padding: 26px 26px 22px; border: 1px solid #e5e9f1; border-radius: 12px; background: #fff; }
.portal-section-heading[b-df4jntwdea] { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 22px; }
.portal-section-heading h2[b-df4jntwdea] { margin: 0; font-size: 17px; font-weight: 600; letter-spacing: -.015em; }
.portal-section-heading p[b-df4jntwdea] { margin: 5px 0 0; color: #6d7890; font-size: 12px; }
.portal-legend[b-df4jntwdea] { gap: 8px; color: #6d7890; font-size: 12px; white-space: nowrap; }
.portal-legend span[b-df4jntwdea] { width: 8px; height: 8px; border-radius: 50%; background: #2f79d0; }
.portal-course-head[b-df4jntwdea],
.portal-course-row[b-df4jntwdea] { display: grid; grid-template-columns: minmax(190px, 1fr) minmax(260px, 2fr) 60px; gap: 18px; }
.portal-course-head[b-df4jntwdea] { padding: 0 12px 10px; color: #6d7890; font-size: 11px; }
.portal-course-head span:last-child[b-df4jntwdea] { text-align: right; }
.portal-course-row[b-df4jntwdea] { align-items: center; padding: 15px 12px; border-top: 1px solid #edf0f5; }
.portal-course-row:hover[b-df4jntwdea] { background: #fbfcfe; }
.portal-course-name[b-df4jntwdea] { display: flex; align-items: center; gap: 10px; min-width: 0; }
.portal-course-name > div[b-df4jntwdea] { min-width: 0; }
.portal-course-name strong[b-df4jntwdea] { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.portal-course-name small[b-df4jntwdea] { display: block; margin-top: 2px; color: #6d7890; font-size: 11px; }
.portal-course-dot[b-df4jntwdea] { width: 8px; height: 8px; flex: 0 0 auto; border-radius: 50%; background: #2f79d0; }
.portal-course-dot.teal[b-df4jntwdea], .portal-bar.teal[b-df4jntwdea] { background: #4aa89c; }
.portal-course-dot.gold[b-df4jntwdea], .portal-bar.gold[b-df4jntwdea] { background: #d8a84d; }
.portal-bar-group[b-df4jntwdea] { gap: 11px; min-width: 0; }
.portal-bar-track[b-df4jntwdea] { flex: 1 1 auto; height: 12px; overflow: hidden; border-radius: 99px; background: #edf1f7; }
.portal-bar[b-df4jntwdea] { height: 100%; border-radius: inherit; background: #2f79d0; }
.portal-bar-group small[b-df4jntwdea] { color: #6d7890; font-size: 11px; white-space: nowrap; }
.portal-percentage[b-df4jntwdea] { color: #183b66; text-align: right; font-size: 15px; font-variant-numeric: tabular-nums; }
.portal-chart-foot[b-df4jntwdea] { margin: 17px 12px 0; color: #6d7890; font-size: 11px; }

.portal-transcript-entry[b-df4jntwdea] { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-top: 20px; padding: 17px 20px; border: 1px dashed #cbd7e6; border-radius: 11px; background: #f9fbfe; }
.portal-transcript-entry strong[b-df4jntwdea], .portal-transcript-entry span[b-df4jntwdea] { display: block; }
.portal-transcript-entry span[b-df4jntwdea] { margin-top: 3px; color: #6d7890; font-size: 12px; }

.portal-modal-backdrop[b-df4jntwdea] { position: fixed; inset: 0; z-index: 10; display: grid; place-items: center; padding: 30px; background: rgba(12, 30, 54, .42); }
.portal-modal[b-df4jntwdea] { width: min(1120px, 100%); max-height: calc(100vh - 60px); overflow: auto; border: 1px solid #dce3ee; border-radius: 14px; background: #fff; box-shadow: 0 24px 70px rgba(10, 30, 56, .25); }
.portal-modal-header[b-df4jntwdea] { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding: 24px 26px 18px; border-bottom: 1px solid #e5e9f1; }
.portal-modal-header h2[b-df4jntwdea] { margin: 0; font-size: 19px; font-weight: 600; }
.portal-modal-header p[b-df4jntwdea] { margin: 5px 0 0; color: #6d7890; font-size: 12px; }
.portal-close-button[b-df4jntwdea] { width: 32px; height: 32px; border: 0; border-radius: 8px; color: #6d7890; background: transparent; font-size: 25px; line-height: 1; cursor: pointer; }
.portal-close-button:hover[b-df4jntwdea] { color: #183b66; background: #eef3f9; }
.portal-modal-body[b-df4jntwdea] { padding: 20px 26px 26px; }
.portal-transcript-summary[b-df4jntwdea] { display: flex; flex-wrap: wrap; gap: 22px; margin-bottom: 20px; }
.portal-transcript-summary div[b-df4jntwdea] { min-width: 120px; }
.portal-transcript-summary span[b-df4jntwdea] { display: block; color: #6d7890; font-size: 11px; }
.portal-transcript-summary strong[b-df4jntwdea] { display: block; margin-top: 3px; font-size: 13px; }
.portal-transcript-table-wrapper[b-df4jntwdea] { overflow-x: auto; }
.portal-transcript-table[b-df4jntwdea] { width: 100%; border-collapse: collapse; }
.portal-transcript-table th[b-df4jntwdea], .portal-transcript-table td[b-df4jntwdea] { padding: 11px 8px; border-top: 1px solid #edf0f5; text-align: left; white-space: nowrap; }
.portal-transcript-table th[b-df4jntwdea] { color: #6d7890; font-size: 11px; font-weight: 500; }
.portal-transcript-table td[b-df4jntwdea] { font-size: 13px; }
.portal-transcript-table th:last-child[b-df4jntwdea], .portal-transcript-table td:last-child[b-df4jntwdea] { text-align: right; }
.portal-grade[b-df4jntwdea] { color: #183b66; font-weight: 700; }
.portal-modal-foot[b-df4jntwdea] { margin: 18px 0 0; color: #6d7890; font-size: 11px; }
.portal-transcript-state[b-df4jntwdea] { min-height: 220px; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 9px; color: #6d7890; text-align: center; }
.portal-transcript-state strong[b-df4jntwdea] { color: #183b66; font-size: 15px; }
.portal-transcript-state span[b-df4jntwdea] { font-size: 12px; }
.portal-transcript-error[b-df4jntwdea] { color: #a23939; }
.portal-transcript-error strong[b-df4jntwdea] { color: #a23939; }
.portal-transcript-error .portal-button[b-df4jntwdea] { margin-top: 8px; color: #183b66; }
.portal-loading-spinner[b-df4jntwdea] { width: 28px; height: 28px; margin-bottom: 5px; border: 3px solid #dce7f5; border-top-color: #2f79d0; border-radius: 50%; animation: portal-spin-b-df4jntwdea .8s linear infinite; }
@keyframes portal-spin-b-df4jntwdea { to { transform: rotate(360deg); } }
.portal-transcript-empty[b-df4jntwdea] { padding: 24px; border: 1px dashed #cbd7e6; border-radius: 9px; color: #6d7890; text-align: center; }
.portal-transcript-years[b-df4jntwdea] { display: grid; gap: 22px; }
.portal-transcript-year[b-df4jntwdea] { padding-top: 18px; border-top: 1px solid #e5e9f1; }
.portal-transcript-year:first-child[b-df4jntwdea] { padding-top: 0; border-top: 0; }
.portal-transcript-year-heading[b-df4jntwdea] { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; }
.portal-transcript-year-heading h3[b-df4jntwdea] { margin: 0; color: #183b66; font-size: 16px; font-weight: 600; }
.portal-transcript-year-heading span[b-df4jntwdea] { color: #6d7890; font-size: 11px; }
.portal-transcript-year-heading > span[b-df4jntwdea] { white-space: nowrap; }
.portal-transcript-year h4[b-df4jntwdea] { margin: 14px 0 6px; color: #536077; font-size: 12px; font-weight: 600; }
.portal-transcript-table td:last-child[b-df4jntwdea], .portal-transcript-table th:last-child[b-df4jntwdea] { text-align: right; }
.portal-transcript-table.portal-simple-table td:last-child[b-df4jntwdea] { width: 110px; }
.portal-total-row th[b-df4jntwdea], .portal-total-row td[b-df4jntwdea] { color: #183b66; font-weight: 700; }
.portal-transcript-summary-page[b-df4jntwdea] { margin-top: 26px; padding-top: 22px; border-top: 1px solid #dce3ee; }
.portal-transcript-summary-heading[b-df4jntwdea] { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.portal-transcript-summary-page h3[b-df4jntwdea] { margin: 0; color: #183b66; font-size: 17px; font-weight: 700; text-transform: uppercase; }
.portal-demo-badge[b-df4jntwdea] { padding: 3px 7px; border: 1px solid #e3b35f; border-radius: 999px; color: #8a5a00; background: #fff7e5; font-size: 10px; font-weight: 700; letter-spacing: .04em; }
.portal-transcript-calculation-note[b-df4jntwdea] { display: grid; gap: 4px; margin-bottom: 18px; padding: 11px 13px; border: 1px solid #ead9ad; border-radius: 8px; color: #73551d; background: #fffaf0; font-size: 11px; line-height: 1.35; }
.portal-transcript-calculation-note strong[b-df4jntwdea] { color: #60440d; }
.portal-transcript-summary-metrics[b-df4jntwdea] { display: grid; gap: 6px; max-width: 360px; margin-bottom: 22px; font-size: 12px; }
.portal-transcript-summary-metrics div[b-df4jntwdea] { display: grid; grid-template-columns: 1fr auto; gap: 18px; }
.portal-transcript-summary-metrics strong[b-df4jntwdea] { font-variant-numeric: tabular-nums; }
.portal-transcript-summary-table-wrapper[b-df4jntwdea] { overflow-x: auto; }
.portal-transcript-summary-table[b-df4jntwdea] { width: 100%; min-width: 980px; border-collapse: collapse; table-layout: fixed; font-size: 11px; line-height: 1.15; }
.portal-transcript-summary-table th[b-df4jntwdea], .portal-transcript-summary-table td[b-df4jntwdea] { padding: 8px 6px; border: 1px solid #667085; text-align: center; vertical-align: middle; overflow-wrap: anywhere; }
.portal-transcript-summary-table th[b-df4jntwdea] { font-weight: 700; }
.portal-transcript-summary-table th:first-child[b-df4jntwdea] { width: 150px; }
.portal-transcript-summary-table td[b-df4jntwdea] { font-variant-numeric: tabular-nums; }
.portal-transcript-end-marker[b-df4jntwdea] { margin-top: 12px; color: #1b1f27; text-align: center; font-size: 11px; white-space: nowrap; }

@media (max-width: 760px) {
    .portal-topbar[b-df4jntwdea] { padding: 0 18px; }
    .portal-brand-context[b-df4jntwdea], .portal-parent-profile > span:not(.portal-parent-avatar)[b-df4jntwdea] { display: none; }
    .portal-layout[b-df4jntwdea] { grid-template-columns: 1fr; }
    .portal-sidebar[b-df4jntwdea] { display: none; }
    .portal-main[b-df4jntwdea] { padding: 24px 18px 32px; }
    .portal-page-heading[b-df4jntwdea] { align-items: flex-start; flex-direction: column; }
    .portal-student-strip[b-df4jntwdea] { grid-template-columns: 1fr 1fr; }
    .portal-student-identity[b-df4jntwdea] { grid-column: 1 / -1; }
    .portal-student-meta[b-df4jntwdea] { padding-left: 0; border-left: 0; }
    .portal-course-panel[b-df4jntwdea] { padding: 20px 14px; }
    .portal-feed-grid[b-df4jntwdea] { grid-template-columns: 1fr; }
    .portal-calendar-toolbar[b-df4jntwdea] { flex-wrap: wrap; }
    .portal-calendar-toolbar h2[b-df4jntwdea] { flex: 1 1 auto; min-width: 150px; }
    .portal-calendar-layout[b-df4jntwdea] { grid-template-columns: 1fr; }
    .portal-calendar-day[b-df4jntwdea] { min-height: 82px; padding: 6px 4px; }
    .portal-calendar-weekdays[b-df4jntwdea] { padding: 0 4px; }
    .portal-calendar-weekdays span[b-df4jntwdea] { padding: 10px 3px 8px; font-size: 9px; }
    .portal-calendar-event[b-df4jntwdea] { padding: 3px; font-size: 8px; }
    .portal-calendar-event strong[b-df4jntwdea] { font-size: 8px; }
    .portal-content-warning[b-df4jntwdea] { flex-direction: column; gap: 3px; }
    .portal-section-heading[b-df4jntwdea] { flex-direction: column; }
    .portal-course-head[b-df4jntwdea], .portal-course-row[b-df4jntwdea] { grid-template-columns: minmax(150px, 1fr) minmax(160px, 1fr) 48px; gap: 10px; padding-left: 8px; padding-right: 8px; }
    .portal-transcript-entry[b-df4jntwdea] { align-items: flex-start; flex-direction: column; }
    .portal-modal-backdrop[b-df4jntwdea] { padding: 16px; }
    .portal-modal-header[b-df4jntwdea], .portal-modal-body[b-df4jntwdea] { padding-left: 18px; padding-right: 18px; }
    .portal-transcript-year-heading[b-df4jntwdea] { flex-direction: column; gap: 4px; }
    .portal-transcript-year-heading > span[b-df4jntwdea] { white-space: normal; }
}

/* Visual refresh: a calmer academic palette, stronger hierarchy, and a mobile-first navigation layer. */
.portal-topbar[b-df4jntwdea] {
    position: sticky;
    top: 0;
    z-index: 20;
    min-height: 78px;
    padding: 0 clamp(20px, 4vw, 56px);
    background: linear-gradient(115deg, #0c2b49 0%, #12415a 58%, #176469 100%);
    box-shadow: 0 10px 28px rgba(13, 45, 74, .14);
}

.portal-brand[b-df4jntwdea] { gap: 13px; }
.portal-brand-mark[b-df4jntwdea] {
    width: 38px;
    height: 38px;
    border-radius: 12px;
    color: #11344f;
    background: linear-gradient(145deg, #f7d18a, #e8ad5e);
    box-shadow: 0 5px 14px rgba(0, 0, 0, .12);
    font-size: 14px;
}
.portal-brand-name[b-df4jntwdea] { font-size: 15px; letter-spacing: -.01em; }
.portal-brand-context[b-df4jntwdea] { padding-left: 13px; border-left: 1px solid rgba(255, 255, 255, .2); font-size: 11px; }
.portal-topbar-actions[b-df4jntwdea] { gap: 14px; }
.portal-topbar-live[b-df4jntwdea] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: rgba(255, 255, 255, .7);
    font-size: 11px;
    letter-spacing: .02em;
}
.portal-live-dot[b-df4jntwdea] { width: 7px; height: 7px; border-radius: 50%; background: #72d2b8; box-shadow: 0 0 0 4px rgba(114, 210, 184, .13); }
.portal-icon-button[b-df4jntwdea] { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 11px; }
.portal-icon-button svg[b-df4jntwdea], .portal-chevron[b-df4jntwdea] { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.portal-icon-button:hover[b-df4jntwdea] { background: rgba(255, 255, 255, .14); }
.portal-parent-profile[b-df4jntwdea] { gap: 9px; padding-left: 15px; font-size: 12px; }
.portal-parent-avatar[b-df4jntwdea] { width: 34px; height: 34px; color: #12415a; background: #d8f0ed; font-size: 11px; }

.portal-layout[b-df4jntwdea] { grid-template-columns: 236px minmax(0, 1fr); min-height: calc(100vh - 78px); background: #f4f8f8; }
.portal-sidebar[b-df4jntwdea] {
    position: sticky;
    top: 78px;
    height: calc(100vh - 78px);
    box-sizing: border-box;
    padding: 30px 18px;
    background: rgba(255, 255, 255, .82);
    border-right-color: #e1ebec;
}
.portal-sidebar-label[b-df4jntwdea] { margin: 0 12px 14px; color: #8a9a9f; font-size: 10px; letter-spacing: .12em; }
.portal-nav[b-df4jntwdea] { gap: 4px; }
.portal-nav-item[b-df4jntwdea] {
    gap: 12px;
    padding: 12px 13px;
    border: 1px solid transparent;
    border-radius: 12px;
    color: #61737c;
    font-size: 13px;
    transition: background .18s ease, border-color .18s ease, color .18s ease, transform .18s ease;
}
.portal-nav-item:hover[b-df4jntwdea] { color: #15435a; background: #f1f8f7; border-color: #deeeeb; transform: none; }
.portal-nav-item.is-active[b-df4jntwdea] { color: #123e56; background: #e6f4f1; border-color: #cfe9e4; box-shadow: none; }
.portal-nav-icon[b-df4jntwdea] { width: 19px; height: 19px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.portal-sidebar-note[b-df4jntwdea] { margin: 36px 12px 0; color: #8a9a9f; border-top-color: #e1ebec; line-height: 1.45; }
.portal-sidebar-note strong[b-df4jntwdea] { color: #526770; }
.portal-mobile-nav[b-df4jntwdea] { display: none; }

.portal-main[b-df4jntwdea] { padding: 38px clamp(22px, 4vw, 58px) 64px; background: radial-gradient(circle at 85% 0%, rgba(222, 241, 238, .78), transparent 25rem), #f4f8f8; }
.portal-breadcrumb[b-df4jntwdea] { color: #829298; font-size: 11px; letter-spacing: .01em; }
.portal-breadcrumb span[b-df4jntwdea] { color: #b0c0c0; }
.portal-page-heading[b-df4jntwdea] { margin: 12px 0 26px; }
.portal-page-kicker[b-df4jntwdea] { display: block; margin-bottom: 8px; color: #29917f; font-size: 10px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
.portal-page-heading h1[b-df4jntwdea] { color: #14364d; font-size: clamp(29px, 3vw, 38px); letter-spacing: -.045em; }
.portal-page-heading p[b-df4jntwdea] { margin-top: 9px; color: #6d8188; font-size: 13px; }
.portal-button[b-df4jntwdea] { min-height: 42px; border-color: #d8e6e7; border-radius: 11px; color: #17445b; box-shadow: 0 3px 8px rgba(22, 61, 78, .04); transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease; }
.portal-button:hover[b-df4jntwdea] { border-color: #78bdaf; box-shadow: 0 7px 18px rgba(24, 92, 91, .1); transform: translateY(-1px); }
.portal-button-primary[b-df4jntwdea] { color: #fff; background: linear-gradient(135deg, #187f79, #236b86); border-color: transparent; box-shadow: 0 8px 18px rgba(29, 116, 116, .22); }
.portal-button-primary:hover[b-df4jntwdea] { border-color: transparent; box-shadow: 0 10px 22px rgba(29, 116, 116, .28); }

.portal-student-strip[b-df4jntwdea] {
    position: relative;
    overflow: hidden;
    min-height: 88px;
    padding: 22px 24px;
    border: 0;
    border-radius: 18px;
    color: #fff;
    background: linear-gradient(112deg, #123d58 0%, #15586a 63%, #1c8078 100%);
    box-shadow: 0 14px 30px rgba(19, 69, 83, .16);
}
.portal-student-strip[b-df4jntwdea]::after { content: ""; position: absolute; top: -80px; right: -32px; width: 260px; height: 260px; border: 1px solid rgba(255, 255, 255, .13); border-radius: 50%; box-shadow: 0 0 0 24px rgba(255, 255, 255, .035), 0 0 0 48px rgba(255, 255, 255, .03); }
.portal-student-identity[b-df4jntwdea], .portal-student-meta[b-df4jntwdea], .portal-term[b-df4jntwdea] { position: relative; z-index: 1; }
.portal-student-identity[b-df4jntwdea] { gap: 14px; }
.portal-student-avatar[b-df4jntwdea] { width: 50px; height: 50px; color: #12415a; background: linear-gradient(145deg, #f8f3df, #d8f0ed); box-shadow: 0 5px 12px rgba(5, 35, 52, .16); }
.portal-student-eyebrow[b-df4jntwdea] { display: block; margin-bottom: 3px; color: #9fe0d0; font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.portal-student-identity h2[b-df4jntwdea] { color: #fff; font-size: 19px; letter-spacing: -.02em; }
.portal-student-identity p[b-df4jntwdea] { color: rgba(255, 255, 255, .68); }
.portal-student-meta[b-df4jntwdea] { padding-left: 26px; border-left-color: rgba(255, 255, 255, .2); }
.portal-student-meta span[b-df4jntwdea] { color: rgba(255, 255, 255, .62); }
.portal-student-meta strong[b-df4jntwdea] { color: #fff; }
.portal-term[b-df4jntwdea] { padding: 8px 12px; border: 1px solid rgba(255, 255, 255, .17); border-radius: 999px; color: rgba(255, 255, 255, .82); background: rgba(255, 255, 255, .08); font-size: 11px; }

.portal-feed-grid[b-df4jntwdea] { gap: 18px; margin-top: 20px; }
.portal-feed-panel[b-df4jntwdea], .portal-course-panel[b-df4jntwdea], .portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] {
    border-color: #e2ecec;
    border-radius: 16px;
    box-shadow: 0 8px 24px rgba(26, 69, 83, .055);
}
.portal-feed-panel[b-df4jntwdea] { padding: 23px 23px 20px; }
.portal-feed-heading[b-df4jntwdea] { margin-bottom: 14px; }
.portal-feed-heading h2[b-df4jntwdea], .portal-section-heading h2[b-df4jntwdea] { color: #173d53; font-size: 17px; }
.portal-feed-heading p[b-df4jntwdea], .portal-section-heading p[b-df4jntwdea] { color: #7b8d92; line-height: 1.45; }
.portal-text-button[b-df4jntwdea] { color: #1b887e; font-size: 11px; }
.portal-text-button:hover[b-df4jntwdea] { color: #12556a; }
.portal-refresh-button[b-df4jntwdea] { border-color: #d8e6e7; border-radius: 10px; color: #1b6d76; }
.portal-refresh-button:hover[b-df4jntwdea] { border-color: #82c6ba; background: #f1faf8; }
.portal-calendar-item[b-df4jntwdea], .portal-announcement-item[b-df4jntwdea] { border-top-color: #edf2f2; }
.portal-calendar-item[b-df4jntwdea] { padding: 14px 0; }
.portal-calendar-item time[b-df4jntwdea] { color: #1b887e; font-size: 11px; }
.portal-calendar-item strong[b-df4jntwdea], .portal-announcement-item h3[b-df4jntwdea] { color: #244454; }
.portal-calendar-item span[b-df4jntwdea], .portal-announcement-item p[b-df4jntwdea] { color: #75888e; }
.portal-announcement-meta span[b-df4jntwdea] { color: #258f80; }
.portal-content-warning[b-df4jntwdea] { border-color: #ebd9ad; border-radius: 12px; background: #fffbf2; }

.portal-course-panel[b-df4jntwdea] { margin-top: 20px; padding: 25px 25px 21px; }
.portal-section-heading[b-df4jntwdea] { margin-bottom: 20px; }
.portal-legend[b-df4jntwdea] { color: #819298; }
.portal-legend span[b-df4jntwdea] { background: #1b887e; box-shadow: 0 0 0 4px #e4f3f0; }
.portal-course-row[b-df4jntwdea] { padding: 16px 12px; border-top-color: #edf2f2; }
.portal-course-row:hover[b-df4jntwdea] { background: #f8fbfb; }
.portal-course-name strong[b-df4jntwdea] { color: #244454; }
.portal-course-name small[b-df4jntwdea], .portal-bar-group small[b-df4jntwdea], .portal-chart-foot[b-df4jntwdea] { color: #839398; }
.portal-course-dot[b-df4jntwdea] { background: #367fa2; }
.portal-course-dot.teal[b-df4jntwdea], .portal-bar.teal[b-df4jntwdea] { background: #35a08e; }
.portal-course-dot.gold[b-df4jntwdea], .portal-bar.gold[b-df4jntwdea] { background: #d6a34c; }
.portal-bar-track[b-df4jntwdea] { height: 10px; background: #eaf1f1; }
.portal-bar[b-df4jntwdea] { background: linear-gradient(90deg, #277c9a, #3d9aa2); }
.portal-percentage[b-df4jntwdea] { color: #17546a; }
.portal-transcript-entry[b-df4jntwdea] { margin-top: 18px; padding: 17px 20px; border-color: #cfe2e1; border-radius: 14px; background: linear-gradient(90deg, #f4fbfa, #fbfcfc); }
.portal-transcript-entry strong[b-df4jntwdea] { color: #17445b; }
.portal-transcript-entry span[b-df4jntwdea] { color: #7b8d92; }

.portal-calendar-toolbar[b-df4jntwdea] { margin: 20px 0 14px; }
.portal-calendar-toolbar h2[b-df4jntwdea] { color: #173d53; font-size: 19px; }
.portal-calendar-toolbar .portal-button[b-df4jntwdea] { min-height: 40px; }
.portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] { box-shadow: 0 8px 24px rgba(26, 69, 83, .055); }
.portal-calendar-weekdays[b-df4jntwdea] { background: #f8fbfb; border-bottom-color: #e2ecec; }
.portal-calendar-weekdays span[b-df4jntwdea] { color: #829398; letter-spacing: .08em; }
.portal-calendar-day[b-df4jntwdea] { min-height: 120px; color: #244454; border-right-color: #edf2f2; border-bottom-color: #edf2f2; }
.portal-calendar-day:hover[b-df4jntwdea] { background: #f5fbfa; }
.portal-calendar-day.is-outside-month[b-df4jntwdea] { color: #aab9bc; background: #fcfdfd; }
.portal-calendar-day.is-selected[b-df4jntwdea] { background: #edf8f6; box-shadow: inset 0 0 0 2px #78c1b5; }
.portal-calendar-day.is-today .portal-calendar-day-number[b-df4jntwdea] { background: #1b887e; }
.portal-calendar-event[b-df4jntwdea] { border-left-color: #65afbe; color: #315b69; background: #eef8f8; }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: #d4a34d; color: #745b2d; background: #fff8e9; }
.portal-calendar-more[b-df4jntwdea] { color: #1b887e; }
.portal-calendar-details[b-df4jntwdea] { padding: 21px; }
.portal-calendar-details-heading[b-df4jntwdea] { border-bottom-color: #edf2f2; }
.portal-calendar-details-heading > div > span[b-df4jntwdea], .portal-calendar-details-count[b-df4jntwdea] { color: #829398; }
.portal-calendar-details-heading h2[b-df4jntwdea] { color: #173d53; }
.portal-calendar-detail-item[b-df4jntwdea] { border-left-color: #65afbe; background: #f1f9f9; }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: #d4a34d; background: #fff9ed; }
.portal-calendar-detail-item strong[b-df4jntwdea] { color: #244454; }
.portal-calendar-detail-item span[b-df4jntwdea], .portal-calendar-detail-item p[b-df4jntwdea] { color: #75888e; }

.portal-modal-backdrop[b-df4jntwdea] { background: rgba(9, 35, 50, .52); backdrop-filter: blur(4px); }
.portal-modal[b-df4jntwdea] { border-color: #dce9e8; border-radius: 20px; box-shadow: 0 28px 80px rgba(8, 36, 51, .28); }
.portal-modal-header[b-df4jntwdea] { padding: 25px 27px 19px; border-bottom-color: #e5eeee; }
.portal-modal-header h2[b-df4jntwdea] { color: #173d53; }
.portal-modal-header p[b-df4jntwdea], .portal-modal-foot[b-df4jntwdea] { color: #7b8d92; }
.portal-close-button:hover[b-df4jntwdea] { color: #15586a; background: #eaf5f3; }
.portal-transcript-summary[b-df4jntwdea] { gap: 12px; }
.portal-transcript-summary div[b-df4jntwdea] { padding: 12px 14px; border: 1px solid #e4eeee; border-radius: 12px; background: #f8fbfb; }
.portal-transcript-summary span[b-df4jntwdea] { color: #819298; }
.portal-transcript-summary strong[b-df4jntwdea] { color: #17445b; }
.portal-transcript-year-heading h3[b-df4jntwdea], .portal-transcript-summary-page h3[b-df4jntwdea], .portal-grade[b-df4jntwdea], .portal-total-row th[b-df4jntwdea], .portal-total-row td[b-df4jntwdea] { color: #17546a; }
.portal-transcript-table th[b-df4jntwdea] { color: #819298; }
.portal-transcript-table th[b-df4jntwdea], .portal-transcript-table td[b-df4jntwdea] { border-top-color: #edf2f2; }
.portal-transcript-summary-page[b-df4jntwdea] { border-top-color: #dbe8e7; }

@media (max-width: 760px) {
    .portal-topbar[b-df4jntwdea] { min-height: 68px; padding: 0 16px; }
    .portal-brand[b-df4jntwdea] { gap: 9px; }
    .portal-brand-mark[b-df4jntwdea] { width: 34px; height: 34px; border-radius: 10px; }
    .portal-brand-name[b-df4jntwdea] { font-size: 13px; }
    .portal-brand-context[b-df4jntwdea], .portal-topbar-live[b-df4jntwdea], .portal-parent-profile > span:not(.portal-parent-avatar)[b-df4jntwdea] { display: none; }
    .portal-parent-profile[b-df4jntwdea] { padding-left: 8px; border-left: 0; }
    .portal-parent-avatar[b-df4jntwdea] { width: 32px; height: 32px; }
    .portal-layout[b-df4jntwdea] { display: block; min-height: calc(100vh - 68px); }
    .portal-sidebar[b-df4jntwdea] { display: none; }
    .portal-main[b-df4jntwdea] { padding: 25px 16px calc(102px + env(safe-area-inset-bottom)); }
    .portal-mobile-nav[b-df4jntwdea] {
        position: fixed;
        right: 10px;
        bottom: calc(10px + env(safe-area-inset-bottom));
        left: 10px;
        z-index: 30;
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: 3px;
        padding: 7px;
        border: 1px solid rgba(214, 232, 231, .95);
        border-radius: 18px;
        background: rgba(255, 255, 255, .92);
        box-shadow: 0 12px 32px rgba(21, 69, 82, .18);
        backdrop-filter: blur(16px);
    }
    .portal-mobile-nav .portal-nav-item[b-df4jntwdea] { flex-direction: column; gap: 4px; padding: 7px 3px 6px; border-radius: 12px; font-size: 10px; text-align: center; }
    .portal-mobile-nav .portal-nav-icon[b-df4jntwdea] { width: 18px; height: 18px; }
    .portal-page-heading[b-df4jntwdea] { align-items: stretch; gap: 18px; margin-bottom: 22px; }
    .portal-page-heading h1[b-df4jntwdea] { font-size: 31px; }
    .portal-page-heading p[b-df4jntwdea] { max-width: 30rem; font-size: 12px; }
    .portal-page-heading .portal-button[b-df4jntwdea] { width: 100%; }
    .portal-student-strip[b-df4jntwdea] { grid-template-columns: 1fr auto; gap: 17px 14px; padding: 19px; border-radius: 16px; }
    .portal-student-identity[b-df4jntwdea] { grid-column: 1 / -1; }
    .portal-student-meta[b-df4jntwdea] { padding-left: 0; border-left: 0; }
    .portal-term[b-df4jntwdea] { grid-column: 1 / -1; justify-self: start; }
    .portal-feed-grid[b-df4jntwdea] { grid-template-columns: 1fr; margin-top: 18px; }
    .portal-feed-panel[b-df4jntwdea] { padding: 20px 18px 17px; }
    .portal-feed-heading[b-df4jntwdea] { flex-direction: column; gap: 12px; }
    .portal-feed-actions[b-df4jntwdea] { width: 100%; justify-content: space-between; }
    .portal-course-panel[b-df4jntwdea] { margin-top: 18px; padding: 20px 14px 17px; }
    .portal-section-heading[b-df4jntwdea] { flex-direction: column; gap: 12px; }
    .portal-course-head[b-df4jntwdea] { display: none; }
    .portal-course-row[b-df4jntwdea] { grid-template-columns: minmax(0, 1fr) auto; gap: 10px 12px; padding: 15px 8px; }
    .portal-course-name[b-df4jntwdea] { grid-column: 1; }
    .portal-bar-group[b-df4jntwdea] { grid-column: 1 / -1; grid-row: 2; }
    .portal-percentage[b-df4jntwdea] { grid-column: 2; grid-row: 1; align-self: start; font-size: 14px; }
    .portal-chart-foot[b-df4jntwdea] { margin: 15px 8px 0; line-height: 1.45; }
    .portal-transcript-entry[b-df4jntwdea] { align-items: flex-start; flex-direction: column; gap: 14px; margin-top: 16px; padding: 17px; }
    .portal-transcript-entry .portal-button[b-df4jntwdea] { width: 100%; }
    .portal-calendar-toolbar[b-df4jntwdea] { flex-wrap: wrap; gap: 8px; }
    .portal-calendar-toolbar h2[b-df4jntwdea] { flex: 1 1 auto; min-width: 145px; font-size: 17px; text-align: left; }
    .portal-calendar-layout[b-df4jntwdea] { grid-template-columns: 1fr; }
    .portal-calendar-day[b-df4jntwdea] { min-height: 78px; padding: 6px 4px; }
    .portal-calendar-weekdays[b-df4jntwdea] { padding: 0 4px; }
    .portal-calendar-weekdays span[b-df4jntwdea] { padding: 10px 3px 8px; font-size: 9px; }
    .portal-calendar-event[b-df4jntwdea] { padding: 3px; font-size: 8px; }
    .portal-calendar-event strong[b-df4jntwdea] { font-size: 8px; }
    .portal-calendar-details[b-df4jntwdea] { padding: 18px; }
    .portal-modal-backdrop[b-df4jntwdea] { padding: 10px; }
    .portal-modal[b-df4jntwdea] { max-height: calc(100vh - 20px); border-radius: 16px; }
    .portal-modal-header[b-df4jntwdea], .portal-modal-body[b-df4jntwdea] { padding-left: 17px; padding-right: 17px; }
    .portal-transcript-summary[b-df4jntwdea] { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
    .portal-transcript-summary div[b-df4jntwdea] { min-width: 0; padding: 10px; }
}

@media (min-width: 761px) and (max-width: 1100px) {
    .portal-layout[b-df4jntwdea] { grid-template-columns: 204px minmax(0, 1fr); }
    .portal-main[b-df4jntwdea] { padding-right: 28px; padding-left: 28px; }
    .portal-feed-grid[b-df4jntwdea], .portal-calendar-layout[b-df4jntwdea] { grid-template-columns: 1fr; }
}

/* Northern Academy brand alignment: classic academic warmth with a contemporary, quiet interface. */
.portal-topbar[b-df4jntwdea] {
    background: linear-gradient(112deg, #153a43 0%, #1c4c50 100%);
    border-bottom: 3px solid #c8a35f;
    box-shadow: 0 10px 28px rgba(25, 57, 63, .16);
}
.portal-brand-mark[b-df4jntwdea] { color: #183b43; background: linear-gradient(145deg, #efd18b, #c49b55); }
.portal-live-dot[b-df4jntwdea] { background: #b7d2a7; box-shadow: 0 0 0 4px rgba(183, 210, 167, .13); }
.portal-parent-avatar[b-df4jntwdea] { color: #244c50; background: #e4eee3; }
.portal-layout[b-df4jntwdea] { background: #f7f5ef; }
.portal-sidebar[b-df4jntwdea] { background: rgba(255, 254, 250, .9); border-right-color: #e8e4d8; }
.portal-sidebar-motto[b-df4jntwdea] { max-width: 160px; margin: 0 12px 28px; color: #315b5b; font-family: Georgia, "Times New Roman", serif; font-size: 14px; font-style: italic; line-height: 1.35; }
.portal-sidebar-label[b-df4jntwdea] { color: #9a9587; }
.portal-nav-item:hover[b-df4jntwdea] { color: #245b52; background: #f3f6ef; border-color: #e3e8dc; }
.portal-nav-item.is-active[b-df4jntwdea] { color: #245b52; background: #edf3ea; border-color: #d8e4d7; box-shadow: inset 3px 0 0 #c8a35f; }
.portal-sidebar-note[b-df4jntwdea] { color: #9a9587; border-top-color: #e8e4d8; }
.portal-sidebar-note strong[b-df4jntwdea] { color: #5a6a63; }
.portal-main[b-df4jntwdea] { background: radial-gradient(circle at 88% 0%, rgba(235, 229, 208, .72), transparent 25rem), #f7f5ef; }
.portal-breadcrumb[b-df4jntwdea] { color: #928f84; }
.portal-breadcrumb span[b-df4jntwdea] { color: #b9b3a5; }
.portal-page-kicker[b-df4jntwdea] { color: #98723d; }
.portal-page-heading h1[b-df4jntwdea], .portal-calendar-toolbar h2[b-df4jntwdea] { color: #203f47; font-family: Georgia, "Times New Roman", serif; font-weight: 500; }
.portal-page-heading p[b-df4jntwdea] { color: #7c817a; }
.portal-button[b-df4jntwdea] { border-color: #dddace; color: #24535a; background: #fffefa; }
.portal-button:hover[b-df4jntwdea] { border-color: #c8a35f; box-shadow: 0 7px 18px rgba(104, 77, 34, .1); }
.portal-button-primary[b-df4jntwdea] { color: #fffdf8; background: linear-gradient(135deg, #7c403e, #96534b); border-color: #7c403e; box-shadow: 0 8px 18px rgba(124, 64, 62, .2); }
.portal-button-primary:hover[b-df4jntwdea] { border-color: #7c403e; box-shadow: 0 10px 22px rgba(124, 64, 62, .28); }
.portal-student-strip[b-df4jntwdea] { background: linear-gradient(112deg, #1e474b 0%, #2d625b 100%); box-shadow: 0 14px 30px rgba(30, 71, 75, .17); }
.portal-student-strip[b-df4jntwdea]::after { border-color: rgba(239, 209, 139, .18); box-shadow: 0 0 0 24px rgba(239, 209, 139, .045), 0 0 0 48px rgba(239, 209, 139, .03); }
.portal-student-avatar[b-df4jntwdea] { color: #36544d; background: linear-gradient(145deg, #f5dfaa, #dfead8); }
.portal-student-eyebrow[b-df4jntwdea] { color: #e7cd8b; }
.portal-student-meta[b-df4jntwdea] { border-left-color: rgba(239, 209, 139, .28); }
.portal-term[b-df4jntwdea] { border-color: rgba(239, 209, 139, .25); background: rgba(239, 209, 139, .09); }
.portal-feed-panel[b-df4jntwdea], .portal-course-panel[b-df4jntwdea], .portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] { border-color: #e7e2d6; background: #fffefa; box-shadow: 0 8px 24px rgba(81, 76, 61, .06); }
.portal-feed-heading h2[b-df4jntwdea], .portal-section-heading h2[b-df4jntwdea] { color: #294a4d; }
.portal-feed-heading p[b-df4jntwdea], .portal-section-heading p[b-df4jntwdea] { color: #85877e; }
.portal-text-button[b-df4jntwdea] { color: #7c403e; }
.portal-text-button:hover[b-df4jntwdea] { color: #245b52; }
.portal-refresh-button[b-df4jntwdea] { border-color: #dddace; color: #245b52; background: #fffefa; }
.portal-refresh-button:hover[b-df4jntwdea] { border-color: #c8a35f; background: #fffaf0; }
.portal-calendar-item[b-df4jntwdea], .portal-announcement-item[b-df4jntwdea], .portal-course-row[b-df4jntwdea] { border-top-color: #eeeae1; }
.portal-calendar-item time[b-df4jntwdea] { color: #98723d; }
.portal-calendar-item strong[b-df4jntwdea], .portal-announcement-item h3[b-df4jntwdea], .portal-course-name strong[b-df4jntwdea] { color: #294a4d; }
.portal-calendar-item span[b-df4jntwdea], .portal-announcement-item p[b-df4jntwdea], .portal-course-name small[b-df4jntwdea], .portal-bar-group small[b-df4jntwdea], .portal-chart-foot[b-df4jntwdea] { color: #85877e; }
.portal-announcement-meta span[b-df4jntwdea] { color: #7c403e; }
.portal-content-warning[b-df4jntwdea] { border-color: #e5d2a8; background: #fffaf0; }
.portal-legend[b-df4jntwdea] { color: #8b8b82; }
.portal-legend span[b-df4jntwdea] { background: #c8a35f; box-shadow: 0 0 0 4px #f6efdf; }
.portal-course-row:hover[b-df4jntwdea] { background: #fdfbf6; }
.portal-course-dot[b-df4jntwdea] { background: #547e82; }
.portal-course-dot.teal[b-df4jntwdea], .portal-bar.teal[b-df4jntwdea] { background: #5c9986; }
.portal-course-dot.gold[b-df4jntwdea], .portal-bar.gold[b-df4jntwdea] { background: #c8a35f; }
.portal-bar-track[b-df4jntwdea] { background: #eeeae1; }
.portal-bar[b-df4jntwdea] { background: linear-gradient(90deg, #507e81, #6b9b91); }
.portal-percentage[b-df4jntwdea] { color: #7c403e; }
.portal-transcript-entry[b-df4jntwdea] { border-color: #dfd1b6; background: linear-gradient(90deg, #fffaf0, #fffefa); }
.portal-transcript-entry strong[b-df4jntwdea] { color: #294a4d; }
.portal-calendar-weekdays[b-df4jntwdea] { background: #faf8f2; border-bottom-color: #e7e2d6; }
.portal-calendar-weekdays span[b-df4jntwdea], .portal-calendar-details-heading > div > span[b-df4jntwdea], .portal-calendar-details-count[b-df4jntwdea] { color: #918e83; }
.portal-calendar-day[b-df4jntwdea] { color: #294a4d; border-right-color: #eeeae1; border-bottom-color: #eeeae1; }
.portal-calendar-day:hover[b-df4jntwdea] { background: #f8f7ef; }
.portal-calendar-day.is-outside-month[b-df4jntwdea] { background: #fdfcf9; }
.portal-calendar-day.is-selected[b-df4jntwdea] { background: #f1f6ed; box-shadow: inset 0 0 0 2px #9bb997; }
.portal-calendar-day.is-today .portal-calendar-day-number[b-df4jntwdea] { background: #7c403e; }
.portal-calendar-event[b-df4jntwdea] { border-left-color: #689397; color: #3f6465; background: #eef5f2; }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: #c8a35f; color: #76582d; background: #fff8e9; }
.portal-calendar-more[b-df4jntwdea] { color: #7c403e; }
.portal-calendar-details-heading[b-df4jntwdea] { border-bottom-color: #eeeae1; }
.portal-calendar-details-heading h2[b-df4jntwdea] { color: #294a4d; font-family: Georgia, "Times New Roman", serif; font-weight: 500; }
.portal-calendar-detail-item[b-df4jntwdea] { border-left-color: #689397; background: #f2f7f3; }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: #c8a35f; background: #fff9ed; }
.portal-calendar-detail-item strong[b-df4jntwdea] { color: #294a4d; }
.portal-calendar-detail-item span[b-df4jntwdea], .portal-calendar-detail-item p[b-df4jntwdea] { color: #85877e; }
.portal-modal-backdrop[b-df4jntwdea] { background: rgba(20, 47, 53, .55); }
.portal-modal[b-df4jntwdea] { border-color: #e1ddd1; background: #fffefa; }
.portal-modal-header[b-df4jntwdea] { border-bottom-color: #e9e5dc; }
.portal-modal-header h2[b-df4jntwdea] { color: #294a4d; font-family: Georgia, "Times New Roman", serif; font-weight: 500; }
.portal-modal-header p[b-df4jntwdea], .portal-modal-foot[b-df4jntwdea] { color: #85877e; }
.portal-close-button:hover[b-df4jntwdea] { color: #7c403e; background: #f4eee3; }
.portal-transcript-summary div[b-df4jntwdea] { border-color: #e7e2d6; background: #faf8f2; }
.portal-transcript-summary span[b-df4jntwdea], .portal-transcript-table th[b-df4jntwdea] { color: #918e83; }
.portal-transcript-summary strong[b-df4jntwdea], .portal-transcript-year-heading h3[b-df4jntwdea], .portal-transcript-summary-page h3[b-df4jntwdea], .portal-grade[b-df4jntwdea], .portal-total-row th[b-df4jntwdea], .portal-total-row td[b-df4jntwdea] { color: #7c403e; }
.portal-transcript-table th[b-df4jntwdea], .portal-transcript-table td[b-df4jntwdea] { border-top-color: #eeeae1; }
.portal-transcript-summary-page[b-df4jntwdea] { border-top-color: #e1ddd1; }

/* Lighter pass: translucent surfaces and misted school colors for a more open, breathable feel. */
.portal-topbar[b-df4jntwdea] {
    background: linear-gradient(118deg, rgba(30, 78, 80, .97), rgba(86, 143, 132, .94));
    border-bottom-color: rgba(239, 209, 139, .72);
    box-shadow: 0 8px 24px rgba(34, 82, 82, .11);
}
.portal-brand-mark[b-df4jntwdea] { color: #2e5c5d; background: rgba(255, 248, 222, .86); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .35), 0 4px 12px rgba(17, 63, 66, .1); }
.portal-layout[b-df4jntwdea] { background: #fbfcfa; }
.portal-sidebar[b-df4jntwdea] { background: rgba(255, 255, 255, .64); border-right-color: rgba(216, 226, 220, .72); backdrop-filter: blur(18px); }
.portal-main[b-df4jntwdea] { background: radial-gradient(circle at 88% 0%, rgba(214, 239, 231, .72), transparent 25rem), linear-gradient(135deg, #fbfcfa 0%, #f5faf7 100%); }
.portal-page-kicker[b-df4jntwdea] { color: #609987; }
.portal-page-heading h1[b-df4jntwdea], .portal-calendar-toolbar h2[b-df4jntwdea] { color: #315860; }
.portal-page-heading p[b-df4jntwdea] { color: #7f9290; }
.portal-button[b-df4jntwdea] { border-color: rgba(173, 199, 192, .62); background: rgba(255, 255, 255, .74); box-shadow: 0 3px 10px rgba(49, 99, 94, .035); }
.portal-button-primary[b-df4jntwdea] { color: #fff; background: linear-gradient(135deg, #75aa9b, #7899aa); border-color: rgba(104, 154, 149, .65); box-shadow: 0 8px 18px rgba(76, 137, 130, .16); }
.portal-student-strip[b-df4jntwdea] {
    border: 1px solid rgba(142, 189, 179, .42);
    color: #315860;
    background: linear-gradient(118deg, rgba(216, 239, 229, .96), rgba(222, 237, 242, .94));
    box-shadow: 0 12px 26px rgba(65, 126, 117, .11);
}
.portal-student-strip[b-df4jntwdea]::after { border-color: rgba(91, 145, 134, .19); box-shadow: 0 0 0 24px rgba(91, 145, 134, .05), 0 0 0 48px rgba(91, 145, 134, .025); }
.portal-student-avatar[b-df4jntwdea] { color: #3d7069; background: rgba(255, 255, 255, .72); box-shadow: 0 5px 12px rgba(50, 102, 95, .1); }
.portal-student-eyebrow[b-df4jntwdea] { color: #5e9685; }
.portal-student-identity h2[b-df4jntwdea] { color: #315860; }
.portal-student-identity p[b-df4jntwdea] { color: #6d8587; }
.portal-student-meta[b-df4jntwdea] { border-left-color: rgba(104, 155, 145, .3); }
.portal-student-meta span[b-df4jntwdea] { color: #718887; }
.portal-student-meta strong[b-df4jntwdea] { color: #315860; }
.portal-term[b-df4jntwdea] { border-color: rgba(116, 164, 154, .35); color: #4c7273; background: rgba(255, 255, 255, .42); }
.portal-feed-panel[b-df4jntwdea], .portal-course-panel[b-df4jntwdea], .portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] { border-color: rgba(217, 229, 222, .82); background: rgba(255, 255, 255, .76); box-shadow: 0 7px 22px rgba(62, 103, 96, .045); backdrop-filter: blur(12px); }
.portal-feed-heading h2[b-df4jntwdea], .portal-section-heading h2[b-df4jntwdea], .portal-calendar-details-heading h2[b-df4jntwdea] { color: #3c6368; }
.portal-feed-heading p[b-df4jntwdea], .portal-section-heading p[b-df4jntwdea] { color: #829593; }
.portal-text-button[b-df4jntwdea] { color: #5e9685; }
.portal-text-button:hover[b-df4jntwdea] { color: #3b6e73; }
.portal-refresh-button[b-df4jntwdea] { border-color: rgba(173, 199, 192, .62); color: #5c8e83; background: rgba(255, 255, 255, .66); }
.portal-calendar-item[b-df4jntwdea], .portal-announcement-item[b-df4jntwdea], .portal-course-row[b-df4jntwdea] { border-top-color: rgba(227, 236, 231, .82); }
.portal-calendar-item time[b-df4jntwdea] { color: #7fa48a; }
.portal-calendar-item strong[b-df4jntwdea], .portal-announcement-item h3[b-df4jntwdea], .portal-course-name strong[b-df4jntwdea] { color: #3d6267; }
.portal-calendar-item span[b-df4jntwdea], .portal-announcement-item p[b-df4jntwdea], .portal-course-name small[b-df4jntwdea], .portal-bar-group small[b-df4jntwdea], .portal-chart-foot[b-df4jntwdea] { color: #859692; }
.portal-announcement-meta span[b-df4jntwdea] { color: #71a18c; }
.portal-legend[b-df4jntwdea] { color: #8b9b96; }
.portal-legend span[b-df4jntwdea] { background: #8fb9a2; box-shadow: 0 0 0 4px #edf6ef; }
.portal-course-row:hover[b-df4jntwdea] { background: rgba(242, 249, 245, .76); }
.portal-course-dot[b-df4jntwdea] { background: #80aeb1; }
.portal-course-dot.teal[b-df4jntwdea], .portal-bar.teal[b-df4jntwdea] { background: #82b49e; }
.portal-course-dot.gold[b-df4jntwdea], .portal-bar.gold[b-df4jntwdea] { background: #d3b77d; }
.portal-bar-track[b-df4jntwdea] { background: #edf3ef; }
.portal-bar[b-df4jntwdea] { background: linear-gradient(90deg, #8dbcb0, #8daebc); }
.portal-percentage[b-df4jntwdea] { color: #6c8f88; }
.portal-transcript-entry[b-df4jntwdea] { border-color: rgba(210, 222, 207, .9); background: rgba(247, 252, 247, .72); }
.portal-calendar-weekdays[b-df4jntwdea] { background: rgba(248, 251, 248, .72); border-bottom-color: rgba(217, 229, 222, .82); }
.portal-calendar-weekdays span[b-df4jntwdea], .portal-calendar-details-heading > div > span[b-df4jntwdea], .portal-calendar-details-count[b-df4jntwdea] { color: #8a9993; }
.portal-calendar-day[b-df4jntwdea] { color: #476c70; border-right-color: rgba(227, 236, 231, .82); border-bottom-color: rgba(227, 236, 231, .82); background: rgba(255, 255, 255, .52); }
.portal-calendar-day:hover[b-df4jntwdea] { background: rgba(242, 249, 245, .84); }
.portal-calendar-day.is-outside-month[b-df4jntwdea] { background: rgba(250, 252, 250, .56); }
.portal-calendar-day.is-selected[b-df4jntwdea] { background: rgba(232, 246, 239, .88); box-shadow: inset 0 0 0 2px #a3c8ae; }
.portal-calendar-day.is-today .portal-calendar-day-number[b-df4jntwdea] { background: #7d9e9b; }
.portal-calendar-event[b-df4jntwdea] { border-left-color: #9abfc0; color: #577b7c; background: rgba(237, 247, 245, .86); }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: #d3b77d; color: #866e40; background: rgba(255, 249, 233, .86); }
.portal-calendar-more[b-df4jntwdea] { color: #6e9e8c; }
.portal-calendar-detail-item[b-df4jntwdea] { border-left-color: #9abfc0; background: rgba(238, 247, 244, .78); }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: #d3b77d; background: rgba(255, 249, 237, .8); }
.portal-calendar-detail-item strong[b-df4jntwdea] { color: #476b70; }
.portal-calendar-detail-item span[b-df4jntwdea], .portal-calendar-detail-item p[b-df4jntwdea] { color: #82928e; }
.portal-mobile-nav[b-df4jntwdea] { background: rgba(255, 255, 255, .78); border-color: rgba(205, 225, 218, .82); box-shadow: 0 12px 30px rgba(60, 112, 105, .13); }

/* Overview composition: calendar and course selection form the primary column; announcements stay alongside them. */
.portal-overview-grid[b-df4jntwdea] { display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(320px, .88fr); gap: 20px; align-items: start; margin-top: 20px; }
.portal-overview-primary[b-df4jntwdea] { display: grid; gap: 20px; min-width: 0; }
.portal-overview-primary .portal-course-panel[b-df4jntwdea] { margin-top: 0; }

/* Homepage reference pass: white space, sky tones, fine navy lines, and almost no visual weight. */
.portal-topbar[b-df4jntwdea] {
    color: #163c55;
    background: rgba(255, 255, 255, .94);
    border-bottom: 1px solid #e5edf1;
    box-shadow: 0 4px 16px rgba(38, 74, 96, .055);
    backdrop-filter: blur(14px);
}
.portal-brand-mark[b-df4jntwdea] {
    width: 40px;
    height: 40px;
    border: 1px solid #a5b9c4;
    border-radius: 50%;
    color: #234a63;
    background: rgba(255, 255, 255, .55);
    box-shadow: inset 0 0 0 4px rgba(228, 238, 242, .42);
    font-family: Georgia, "Times New Roman", serif;
    font-size: 13px;
    letter-spacing: -.04em;
}
.portal-brand-name[b-df4jntwdea] { color: #173f59; }
.portal-brand-context[b-df4jntwdea] { color: #7e98a5; border-left-color: #d9e5ea; }
.portal-topbar-live[b-df4jntwdea] { color: #6d8b8c; }
.portal-live-dot[b-df4jntwdea] { background: #8ab7a5; box-shadow: 0 0 0 4px rgba(138, 183, 165, .14); }
.portal-icon-button[b-df4jntwdea] { color: #426879; }
.portal-icon-button:hover[b-df4jntwdea] { color: #1e4d67; background: #edf5f8; }
.portal-parent-profile[b-df4jntwdea] { border-left-color: #dce7eb; color: #426879; }
.portal-parent-avatar[b-df4jntwdea] { color: #2c6074; background: #e8f3f6; }
.portal-chevron[b-df4jntwdea] { color: #73909b; }

.portal-layout[b-df4jntwdea] { background: #fff; }
.portal-sidebar[b-df4jntwdea] { background: rgba(255, 255, 255, .82); border-right-color: #edf1f2; }
.portal-sidebar-motto[b-df4jntwdea] { color: #587887; }
.portal-sidebar-label[b-df4jntwdea] { color: #93a4ad; }
.portal-nav-item[b-df4jntwdea] { color: #738b96; }
.portal-nav-item:hover[b-df4jntwdea] { color: #285d76; background: rgba(233, 245, 248, .62); border-color: #e3eff2; }
.portal-nav-item.is-active[b-df4jntwdea] { color: #1e4f68; background: rgba(226, 241, 246, .7); border-color: #d2e5ec; box-shadow: inset 3px 0 0 #81abc0; }
.portal-sidebar-note[b-df4jntwdea] { color: #9aaab0; border-top-color: #edf1f2; }
.portal-sidebar-note strong[b-df4jntwdea] { color: #65808b; }
.portal-main[b-df4jntwdea] { background: radial-gradient(circle at 87% -4%, rgba(215, 237, 246, .66), transparent 26rem), linear-gradient(180deg, #fff 0%, #fbfdfd 100%); }
.portal-breadcrumb[b-df4jntwdea] { color: #9aa9af; }
.portal-breadcrumb span[b-df4jntwdea] { color: #c4d1d5; }
.portal-page-kicker[b-df4jntwdea] { color: #6e98aa; }
.portal-page-heading h1[b-df4jntwdea], .portal-calendar-toolbar h2[b-df4jntwdea] { color: #1e4860; }
.portal-page-heading p[b-df4jntwdea] { color: #82959d; }
.portal-button[b-df4jntwdea] { color: #315c71; border-color: #cbdde4; background: rgba(255, 255, 255, .74); box-shadow: none; text-decoration: none; }
.portal-button:hover[b-df4jntwdea] { border-color: #8eafbd; background: rgba(238, 247, 249, .72); box-shadow: none; transform: none; }
.portal-button-primary[b-df4jntwdea] { color: #315c71; background: rgba(232, 244, 248, .78); border-color: #a7c3cf; box-shadow: none; }
.portal-button-primary:hover[b-df4jntwdea] { border-color: #789eaf; background: rgba(220, 238, 244, .92); box-shadow: none; }

.portal-student-strip[b-df4jntwdea] {
    min-height: 90px;
    border-color: rgba(176, 207, 218, .66);
    color: #315c71;
    background: linear-gradient(122deg, rgba(231, 245, 249, .86) 0%, rgba(219, 238, 244, .78) 46%, rgba(235, 246, 238, .82) 100%);
    box-shadow: 0 8px 22px rgba(82, 133, 151, .075);
}
.portal-student-strip[b-df4jntwdea]::after { border-color: rgba(120, 170, 189, .18); box-shadow: 0 0 0 24px rgba(120, 170, 189, .045), 0 0 0 48px rgba(120, 170, 189, .025); }
.portal-student-avatar[b-df4jntwdea] { color: #315f72; background: rgba(255, 255, 255, .68); box-shadow: 0 4px 10px rgba(76, 126, 144, .08); }
.portal-student-eyebrow[b-df4jntwdea] { color: #6d9b9b; }
.portal-student-identity h2[b-df4jntwdea] { color: #2d566c; }
.portal-student-identity p[b-df4jntwdea] { color: #76919a; }
.portal-student-meta[b-df4jntwdea] { border-left-color: rgba(143, 182, 195, .45); }
.portal-student-meta span[b-df4jntwdea] { color: #7e979c; }
.portal-student-meta strong[b-df4jntwdea] { color: #2d566c; }
.portal-term[b-df4jntwdea] { border-color: rgba(143, 182, 195, .42); color: #527681; background: rgba(255, 255, 255, .38); }

.portal-feed-panel[b-df4jntwdea], .portal-course-panel[b-df4jntwdea], .portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] { border-color: #e8eff1; background: rgba(255, 255, 255, .74); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); backdrop-filter: blur(10px); }
.portal-feed-heading h2[b-df4jntwdea], .portal-section-heading h2[b-df4jntwdea], .portal-calendar-details-heading h2[b-df4jntwdea] { color: #315c71; }
.portal-feed-heading p[b-df4jntwdea], .portal-section-heading p[b-df4jntwdea] { color: #87999f; }
.portal-text-button[b-df4jntwdea] { color: #5f91a5; }
.portal-text-button:hover[b-df4jntwdea] { color: #315c71; }
.portal-refresh-button[b-df4jntwdea] { color: #5f91a5; border-color: #cbdde4; background: rgba(255, 255, 255, .56); }
.portal-calendar-item[b-df4jntwdea], .portal-announcement-item[b-df4jntwdea], .portal-course-row[b-df4jntwdea] { border-top-color: #edf2f3; }
.portal-calendar-item time[b-df4jntwdea] { color: #739faf; }
.portal-calendar-item strong[b-df4jntwdea], .portal-announcement-item h3[b-df4jntwdea], .portal-course-name strong[b-df4jntwdea] { color: #3b6272; }
.portal-calendar-item span[b-df4jntwdea], .portal-announcement-item p[b-df4jntwdea], .portal-course-name small[b-df4jntwdea], .portal-bar-group small[b-df4jntwdea], .portal-chart-foot[b-df4jntwdea] { color: #87999f; }
.portal-announcement-meta span[b-df4jntwdea] { color: #78a696; }
.portal-legend[b-df4jntwdea] { color: #8a9ca1; }
.portal-legend span[b-df4jntwdea] { background: #8eb8c5; box-shadow: 0 0 0 4px #eef7f8; }
.portal-course-row:hover[b-df4jntwdea] { background: rgba(246, 251, 252, .76); }
.portal-course-dot[b-df4jntwdea] { background: #8cb9c4; }
.portal-course-dot.teal[b-df4jntwdea], .portal-bar.teal[b-df4jntwdea] { background: #94c1ad; }
.portal-course-dot.gold[b-df4jntwdea], .portal-bar.gold[b-df4jntwdea] { background: #d9c28d; }
.portal-bar-track[b-df4jntwdea] { height: 25px; background: #edf3f4; }
.portal-bar-group small[b-df4jntwdea] { display: none; }
.portal-bar[b-df4jntwdea] { background: linear-gradient(90deg, #9bc7d1, #a0c5ba); }
.portal-percentage[b-df4jntwdea] { color: #628da0; }
.portal-transcript-entry[b-df4jntwdea] { border-color: #d9e8e6; background: rgba(244, 250, 248, .64); }
.portal-transcript-entry strong[b-df4jntwdea] { color: #315c71; }
.portal-calendar-weekdays[b-df4jntwdea] { background: rgba(249, 252, 252, .72); border-bottom-color: #e8eff1; }
.portal-calendar-weekdays span[b-df4jntwdea], .portal-calendar-details-heading > div > span[b-df4jntwdea], .portal-calendar-details-count[b-df4jntwdea] { color: #93a3a7; }
.portal-calendar-day[b-df4jntwdea] { color: #486f7d; border-right-color: #edf2f3; border-bottom-color: #edf2f3; background: rgba(255, 255, 255, .48); }
.portal-calendar-day:hover[b-df4jntwdea] { background: rgba(241, 249, 251, .74); }
.portal-calendar-day.is-selected[b-df4jntwdea] { background: rgba(231, 245, 247, .76); box-shadow: inset 0 0 0 2px #a8c7d0; }
.portal-calendar-day.is-today .portal-calendar-day-number[b-df4jntwdea] { background: #7ca6b6; }
.portal-calendar-event[b-df4jntwdea] { border-left-color: #a2c9d2; color: #5b7e87; background: rgba(238, 247, 249, .78); }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: #d9c28d; color: #8b7648; background: rgba(255, 250, 239, .76); }
.portal-calendar-more[b-df4jntwdea] { color: #6e9bad; }
.portal-calendar-detail-item[b-df4jntwdea] { border-left-color: #a2c9d2; background: rgba(239, 248, 248, .72); }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: #d9c28d; background: rgba(255, 250, 239, .76); }
.portal-calendar-detail-item strong[b-df4jntwdea] { color: #486f7d; }
.portal-calendar-detail-item span[b-df4jntwdea], .portal-calendar-detail-item p[b-df4jntwdea] { color: #87999f; }
.portal-modal[b-df4jntwdea] { border-color: #e5edef; background: rgba(255, 255, 255, .93); box-shadow: 0 24px 60px rgba(49, 91, 111, .16); }
.portal-modal-header[b-df4jntwdea] { border-bottom-color: #e8eff1; }
.portal-modal-header h2[b-df4jntwdea] { color: #315c71; }
.portal-modal-header p[b-df4jntwdea], .portal-modal-foot[b-df4jntwdea] { color: #87999f; }
.portal-close-button:hover[b-df4jntwdea] { color: #315c71; background: #eef6f8; }
.portal-transcript-summary div[b-df4jntwdea] { border-color: #e7eff0; background: rgba(247, 251, 251, .76); }
.portal-transcript-summary span[b-df4jntwdea], .portal-transcript-table th[b-df4jntwdea] { color: #91a0a4; }
.portal-transcript-summary strong[b-df4jntwdea], .portal-transcript-year-heading h3[b-df4jntwdea], .portal-transcript-summary-page h3[b-df4jntwdea], .portal-grade[b-df4jntwdea], .portal-total-row th[b-df4jntwdea], .portal-total-row td[b-df4jntwdea] { color: #4d7d91; }
.portal-transcript-table th[b-df4jntwdea], .portal-transcript-table td[b-df4jntwdea] { border-top-color: #edf2f3; }
.portal-transcript-summary-page[b-df4jntwdea] { border-top-color: #e3edef; }

.portal-student-strip[b-df4jntwdea] { grid-template-columns: minmax(0, 1fr) auto auto auto; }
.portal-student-picker[b-df4jntwdea] {
    position: relative;
    z-index: 1;
    display: grid;
    gap: 5px;
    min-width: 156px;
    padding-left: 20px;
    border-left: 1px solid rgba(143, 182, 195, .38);
}
.portal-student-picker label[b-df4jntwdea] { color: #82999f; font-size: 10px; }
.portal-student-picker select[b-df4jntwdea] {
    width: 100%;
    min-height: 32px;
    padding: 0 28px 0 10px;
    border: 1px solid rgba(143, 182, 195, .42);
    border-radius: 8px;
    appearance: none;
    color: #315c71;
    background: rgba(255, 255, 255, .56);
    font-size: 12px;
    cursor: pointer;
}
.portal-student-picker[b-df4jntwdea]::after {
    content: "⌄";
    position: absolute;
    right: 10px;
    bottom: 7px;
    color: #73909b;
    font-size: 15px;
    pointer-events: none;
}
.portal-student-picker select:disabled[b-df4jntwdea] { cursor: default; opacity: .86; }
.portal-student-picker select:focus-visible[b-df4jntwdea] { outline: 2px solid rgba(126, 166, 182, .42); outline-offset: 2px; }

@media (max-width: 760px) {
    .portal-student-strip[b-df4jntwdea] { grid-template-columns: minmax(0, 1fr) auto; }
    .portal-student-picker[b-df4jntwdea] { grid-column: 2; min-width: 142px; padding-left: 12px; }
    .portal-student-picker select[b-df4jntwdea] { min-width: 0; }
}

@media (max-width: 760px) {
    .portal-overview-grid[b-df4jntwdea] { grid-template-columns: 1fr; gap: 18px; }
    .portal-overview-primary[b-df4jntwdea] { gap: 18px; }
}

@media (min-width: 761px) and (max-width: 1100px) {
    .portal-overview-grid[b-df4jntwdea] { grid-template-columns: minmax(0, 1.05fr) minmax(260px, .95fr); gap: 14px; }
}

/* Role switcher stays in the top bar; every sidebar tab stays inside the chosen role. */
.portal-role-switch[b-df4jntwdea] { display: flex; align-items: center; gap: 3px; padding: 3px; border: 1px solid #e1ecef; border-radius: 9px; background: #f7fbfc; }
.portal-role-switch a[b-df4jntwdea] { padding: 5px 8px; border-radius: 6px; color: #8298a1; font-size: 10px; text-decoration: none; }
.portal-role-switch a:hover[b-df4jntwdea], .portal-role-switch a.is-current[b-df4jntwdea] { color: #315c71; background: #e5f1f4; }
.portal-student-strip.is-student-view[b-df4jntwdea] { grid-template-columns: minmax(0, 1fr) auto auto; }

/* Keep the full portal usable on phones and narrow tablets, including 768px CSS viewports. */
@media (max-width: 900px) {
    .portal-topbar[b-df4jntwdea] {
        min-height: 68px;
        padding: 0 16px;
    }

    .portal-brand[b-df4jntwdea] {
        gap: 9px;
    }

    .portal-brand-mark[b-df4jntwdea] {
        width: 34px;
        height: 34px;
        border-radius: 10px;
    }

    .portal-brand-name[b-df4jntwdea] {
        font-size: 13px;
    }

    .portal-brand-context[b-df4jntwdea],
    .portal-topbar-live[b-df4jntwdea],
    .portal-role-switch[b-df4jntwdea],
    .portal-parent-profile > span:not(.portal-parent-avatar)[b-df4jntwdea],
    .portal-parent-profile .portal-chevron[b-df4jntwdea] {
        display: none;
    }

    .portal-parent-profile[b-df4jntwdea] {
        padding-left: 0;
        border-left: 0;
    }

    .portal-layout[b-df4jntwdea] {
        display: block;
        min-height: 0;
    }

    .portal-sidebar[b-df4jntwdea] {
        display: none;
    }

    .portal-main[b-df4jntwdea] {
        padding: 25px 16px calc(102px + env(safe-area-inset-bottom));
    }

    .portal-mobile-nav[b-df4jntwdea] {
        position: fixed;
        right: 10px;
        bottom: calc(10px + env(safe-area-inset-bottom));
        left: 10px;
        z-index: 30;
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 3px;
        padding: 7px;
        border: 1px solid rgba(214, 232, 231, .95);
        border-radius: 18px;
        background: rgba(255, 255, 255, .92);
        box-shadow: 0 12px 32px rgba(21, 69, 82, .18);
        backdrop-filter: blur(16px);
    }

    .portal-mobile-nav .portal-nav-item[b-df4jntwdea] {
        flex-direction: column;
        justify-content: center;
        gap: 4px;
        padding: 7px 3px 6px;
        border-radius: 12px;
        font-size: 10px;
        text-align: center;
    }

    .portal-mobile-nav .portal-nav-icon[b-df4jntwdea] {
        width: 18px;
        height: 18px;
    }

    .portal-page-heading[b-df4jntwdea] {
        align-items: stretch;
        gap: 18px;
        margin-bottom: 22px;
    }

    .portal-page-heading h1[b-df4jntwdea] {
        font-size: 31px;
    }

    .portal-page-heading p[b-df4jntwdea] {
        max-width: 30rem;
        font-size: 12px;
    }

    .portal-page-heading .portal-button[b-df4jntwdea] {
        width: 100%;
    }

    .portal-student-strip[b-df4jntwdea] {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 17px 14px;
        padding: 19px;
        border-radius: 16px;
    }

    .portal-student-identity[b-df4jntwdea] {
        grid-column: 1 / -1;
    }

    .portal-student-meta[b-df4jntwdea] {
        padding-left: 0;
        border-left: 0;
    }

    .portal-student-picker[b-df4jntwdea] {
        grid-column: 2;
        min-width: 142px;
        padding-left: 12px;
    }

    .portal-student-picker select[b-df4jntwdea] {
        min-width: 0;
    }

    .portal-term[b-df4jntwdea] {
        grid-column: 1 / -1;
        justify-self: start;
    }

    .portal-student-strip.is-student-view[b-df4jntwdea] {
        grid-template-columns: minmax(0, 1fr) auto;
    }

    .portal-overview-grid[b-df4jntwdea] {
        grid-template-columns: 1fr;
        gap: 18px;
    }

    .portal-overview-primary[b-df4jntwdea] {
        gap: 18px;
    }

    .portal-feed-panel[b-df4jntwdea] {
        padding: 20px 18px 17px;
    }

    .portal-feed-heading[b-df4jntwdea] {
        flex-direction: column;
        gap: 12px;
    }

    .portal-feed-heading > .portal-text-button[b-df4jntwdea] {
        align-self: flex-end;
    }

    .portal-feed-actions[b-df4jntwdea] {
        width: 100%;
        justify-content: space-between;
    }

    .portal-calendar-item[b-df4jntwdea] {
        grid-template-columns: 88px minmax(0, 1fr);
        gap: 10px;
    }

    .portal-calendar-item strong[b-df4jntwdea],
    .portal-calendar-item span[b-df4jntwdea],
    .portal-announcement-item h3[b-df4jntwdea],
    .portal-announcement-item p[b-df4jntwdea] {
        overflow-wrap: anywhere;
    }

    .portal-course-panel[b-df4jntwdea] {
        margin-top: 18px;
        padding: 20px 14px 17px;
    }

    .portal-section-heading[b-df4jntwdea] {
        flex-direction: column;
        gap: 12px;
    }

    .portal-course-head[b-df4jntwdea] {
        display: none;
    }

    .portal-course-row[b-df4jntwdea] {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 10px 12px;
        padding: 15px 8px;
    }

    .portal-course-name[b-df4jntwdea] {
        grid-column: 1;
    }

    .portal-bar-group[b-df4jntwdea] {
        grid-column: 1 / -1;
        grid-row: 2;
        width: 100%;
    }

    .portal-bar-track[b-df4jntwdea] {
        width: 100%;
    }

    .portal-percentage[b-df4jntwdea] {
        grid-column: 2;
        grid-row: 1;
        align-self: start;
        font-size: 14px;
    }

    .portal-chart-foot[b-df4jntwdea] {
        margin: 15px 8px 0;
        line-height: 1.45;
    }

    .portal-calendar-toolbar[b-df4jntwdea] {
        flex-wrap: wrap;
        gap: 8px;
    }

    .portal-calendar-toolbar h2[b-df4jntwdea] {
        flex: 1 1 auto;
        min-width: 145px;
        font-size: 17px;
        text-align: left;
    }

    .portal-calendar-layout[b-df4jntwdea] {
        grid-template-columns: 1fr;
    }

    .portal-calendar-day[b-df4jntwdea] {
        min-height: 78px;
        padding: 6px 4px;
    }

    .portal-calendar-weekdays[b-df4jntwdea] {
        padding: 0 4px;
    }

    .portal-calendar-weekdays span[b-df4jntwdea] {
        padding: 10px 3px 8px;
        font-size: 9px;
    }

    .portal-calendar-event[b-df4jntwdea] {
        padding: 3px;
        font-size: 8px;
    }

    .portal-calendar-event strong[b-df4jntwdea] {
        font-size: 8px;
    }

    .portal-calendar-details[b-df4jntwdea] {
        padding: 18px;
    }

    .portal-content-warning[b-df4jntwdea] {
        display: grid;
    }

    .portal-content-warning strong[b-df4jntwdea] {
        white-space: normal;
    }
}

/* School visual system: restrained academic surfaces, navy ink, and fine lines. */
.portal-topbar[b-df4jntwdea] {
    position: relative;
    min-height: 92px;
    padding: 0 max(28px, calc((100vw - 1180px) / 2));
    color: var(--navy);
    background: rgba(255, 255, 255, .96);
    border-bottom: 1px solid #edf1f3;
    box-shadow: none;
    backdrop-filter: none;
}

.portal-brand[b-df4jntwdea] {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 3px;
    color: var(--navy);
    text-decoration: none;
}

.portal-brand-logo[b-df4jntwdea] { display: block; width: 220px; height: auto; }
.portal-brand-mark[b-df4jntwdea], .portal-brand-name[b-df4jntwdea] { display: none; }
.portal-brand-context[b-df4jntwdea] { margin-left: 2px; padding-left: 0; border-left: 0; color: var(--teal); font-family: "Poppins", sans-serif; font-size: 10px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; }
.portal-topbar-actions[b-df4jntwdea] { gap: 20px; color: var(--muted); font-size: 12px; }
.portal-topbar-live[b-df4jntwdea] { color: var(--muted); }
.portal-live-dot[b-df4jntwdea] { background: #6fd0a7; box-shadow: 0 0 0 4px rgba(111, 208, 167, .14); }
.portal-icon-button[b-df4jntwdea] { color: var(--muted); }
.portal-icon-button:hover[b-df4jntwdea] { color: var(--navy); background: #f3f7f9; }
.portal-parent-profile[b-df4jntwdea] { color: var(--muted); border-left-color: var(--line); }
.portal-parent-avatar[b-df4jntwdea] { color: var(--navy); background: #e8eef4; }
.portal-chevron[b-df4jntwdea] { color: var(--muted); }
.portal-role-switch[b-df4jntwdea] { border-color: var(--line); background: #f7f9fb; }
.portal-role-switch a[b-df4jntwdea] { color: var(--muted); }
.portal-role-switch a:hover[b-df4jntwdea], .portal-role-switch a.is-current[b-df4jntwdea] { color: var(--navy); background: #e9eef3; }

.portal-layout[b-df4jntwdea] { grid-template-columns: 236px minmax(0, 1fr); min-height: calc(100vh - 92px); background: var(--canvas); }
.portal-sidebar[b-df4jntwdea] { position: sticky; top: 0; height: calc(100vh - 92px); padding: 30px 18px; background: rgba(255, 255, 255, .78); border-right: 1px solid var(--line); backdrop-filter: none; }
.portal-sidebar-motto[b-df4jntwdea] { max-width: 170px; margin: 0 12px 40px; color: var(--teal); font-family: "Cinzel", Georgia, serif; font-size: 13px; font-style: normal; line-height: 1.45; }
.portal-sidebar-label[b-df4jntwdea] { margin: 0 12px 14px; color: var(--muted); font-size: 10px; letter-spacing: .12em; }
.portal-nav[b-df4jntwdea] { gap: 4px; }
.portal-nav-item[b-df4jntwdea] { padding: 12px 13px; border-radius: 10px; color: #667b8b; }
.portal-nav-item:hover[b-df4jntwdea] { color: var(--navy); background: #f4f7f9; border-color: #e4eaf0; transform: none; }
.portal-nav-item.is-active[b-df4jntwdea] { color: var(--navy); background: #e9eef3; border-color: #d9e2eb; box-shadow: inset 3px 0 0 var(--teal); }
.portal-sidebar-note[b-df4jntwdea] { margin: 36px 12px 0; color: #94a2ad; border-top-color: var(--line); }
.portal-sidebar-note strong[b-df4jntwdea] { color: var(--muted); }

.portal-main[b-df4jntwdea] { width: min(1180px, calc(100% - 44px)); margin: 0 auto; padding: 46px 0 36px; background: transparent; }
.portal-breadcrumb[b-df4jntwdea] { color: #94a2ad; font-size: 11px; }
.portal-breadcrumb span[b-df4jntwdea] { color: #c6d0da; }
.portal-page-heading[b-df4jntwdea] { margin: 12px 0 26px; }
.portal-page-kicker[b-df4jntwdea] { margin-bottom: 9px; color: var(--teal); font-size: 11px; letter-spacing: .14em; }
.portal-page-heading h1[b-df4jntwdea], .portal-calendar-toolbar h2[b-df4jntwdea] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.portal-page-heading h1[b-df4jntwdea] { font-size: clamp(34px, 4vw, 50px); letter-spacing: -.045em; line-height: 1.12; }
.portal-page-heading p[b-df4jntwdea] { margin-top: 10px; color: var(--muted); font-size: 15px; }
.portal-button[b-df4jntwdea] { min-height: 44px; padding: 0 17px; border: 1px solid #b9c6d2; border-radius: 999px; color: var(--navy); background: #fff; box-shadow: none; font-size: 13px; font-weight: 700; }
.portal-button:hover[b-df4jntwdea] { border-color: #9eafbf; color: var(--navy); background: #f0f1f2; box-shadow: none; transform: translateY(-1px); }
.portal-button-primary[b-df4jntwdea] { color: #edf0f4; background: var(--navy); border-color: var(--navy); }
.portal-button-primary:hover[b-df4jntwdea] { color: #fff; background: var(--navy-2); border-color: var(--navy-2); }

.portal-student-strip[b-df4jntwdea] { min-height: 0; padding: 20px 22px; border: 1px solid var(--line); border-radius: var(--radius-lg, 12px); color: var(--ink); background: var(--paper); box-shadow: none; }
.portal-student-strip[b-df4jntwdea]::after { display: none; }
.portal-student-avatar[b-df4jntwdea] { width: 48px; height: 48px; border: 1px solid #bfd0d2; border-radius: 50%; color: var(--navy); background: #f4f6f8; box-shadow: none; }
.portal-student-eyebrow[b-df4jntwdea] { color: var(--teal); }
.portal-student-identity h2[b-df4jntwdea] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.portal-student-identity p[b-df4jntwdea], .portal-student-meta span[b-df4jntwdea] { color: var(--muted); }
.portal-student-identity .portal-student-track[b-df4jntwdea] { margin-top: 6px; color: var(--navy); font-weight: 600; overflow-wrap: anywhere; }
.portal-student-meta[b-df4jntwdea] { border-left-color: var(--line); }
.portal-student-meta strong[b-df4jntwdea] { color: var(--navy); }
.portal-term[b-df4jntwdea] { border-color: #d9e2eb; color: var(--muted); background: #f4f6f8; }
.portal-student-picker[b-df4jntwdea] { border-left-color: var(--line); }
.portal-student-picker label[b-df4jntwdea] { color: var(--muted); }
.portal-student-picker select[b-df4jntwdea] { border-color: var(--line-strong); border-radius: 8px; color: var(--ink); background: #fff; }
.portal-calendar-student[b-df4jntwdea] { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 20px; color: var(--muted); font-size: 13px; }
.portal-calendar-student select[b-df4jntwdea] { min-height: 38px; max-width: 100%; padding: 7px 30px 7px 12px; border: 1px solid var(--line-strong); border-radius: 8px; color: var(--navy); background: var(--paper); font: inherit; }
.portal-calendar-student strong[b-df4jntwdea] { color: var(--navy); }

.portal-feed-panel[b-df4jntwdea], .portal-course-panel[b-df4jntwdea], .portal-calendar-card[b-df4jntwdea], .portal-calendar-details[b-df4jntwdea] { border: 1px solid var(--line); border-radius: var(--radius-lg, 12px); background: var(--paper); box-shadow: none; backdrop-filter: none; }
.portal-feed-panel[b-df4jntwdea] { padding: 25px 27px 28px; }
.portal-feed-heading h2[b-df4jntwdea], .portal-section-heading h2[b-df4jntwdea], .portal-calendar-details-heading h2[b-df4jntwdea] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.portal-feed-heading p[b-df4jntwdea], .portal-section-heading p[b-df4jntwdea] { color: var(--muted); }
.portal-text-button[b-df4jntwdea] { color: var(--teal); }
.portal-text-button:hover[b-df4jntwdea] { color: var(--navy); }
.portal-refresh-button[b-df4jntwdea] { border-color: var(--line-strong); color: var(--navy); background: #fff; }
.portal-refresh-button:hover[b-df4jntwdea] { border-color: var(--teal); background: #f4f7f9; }
.portal-calendar-item[b-df4jntwdea], .portal-announcement-item[b-df4jntwdea], .portal-course-row[b-df4jntwdea] { border-top-color: #edf1f4; }
.portal-calendar-item time[b-df4jntwdea] { color: var(--teal); }
.portal-calendar-item strong[b-df4jntwdea], .portal-announcement-item h3[b-df4jntwdea], .portal-course-name strong[b-df4jntwdea] { color: #233b55; }
.portal-calendar-item span[b-df4jntwdea], .portal-announcement-item p[b-df4jntwdea], .portal-course-name small[b-df4jntwdea], .portal-bar-group small[b-df4jntwdea], .portal-chart-foot[b-df4jntwdea] { color: var(--muted); }
.portal-announcement-meta span[b-df4jntwdea] { color: var(--teal); }
.portal-content-warning[b-df4jntwdea] { border-color: #ead9b2; border-radius: 10px; color: #725b2c; background: #fffaf0; }
.portal-legend[b-df4jntwdea] { color: var(--muted); }
.portal-legend span[b-df4jntwdea] { background: var(--teal); box-shadow: 0 0 0 4px #eef3f8; }
.portal-course-row:hover[b-df4jntwdea] { background: #fbfcfd; }
.portal-course-dot[b-df4jntwdea] { background: #6e91ad; }
.portal-course-dot.teal[b-df4jntwdea], .portal-bar.teal[b-df4jntwdea] { background: #6c9b91; }
.portal-course-dot.gold[b-df4jntwdea], .portal-bar.gold[b-df4jntwdea] { background: var(--gold); }
.portal-bar-track[b-df4jntwdea] { height: 10px; background: #e8eef2; }
.portal-bar[b-df4jntwdea] { background: linear-gradient(90deg, var(--navy), var(--teal)); }
.portal-percentage[b-df4jntwdea] { color: var(--navy); }
.portal-transcript-entry[b-df4jntwdea] { border-color: #d9e2eb; border-radius: 11px; background: #fbfcfd; }
.portal-transcript-entry strong[b-df4jntwdea] { color: var(--navy); }

.portal-calendar-toolbar h2[b-df4jntwdea] { font-size: 30px; }
.portal-calendar-weekdays[b-df4jntwdea] { background: #f8fafb; border-bottom-color: var(--line); }
.portal-calendar-weekdays span[b-df4jntwdea], .portal-calendar-details-heading > div > span[b-df4jntwdea], .portal-calendar-details-count[b-df4jntwdea] { color: var(--muted); }
.portal-calendar-day[b-df4jntwdea] { color: #233b55; border-right-color: #edf1f4; border-bottom-color: #edf1f4; background: #fff; }
.portal-calendar-day:hover[b-df4jntwdea] { background: #f4f7f9; }
.portal-calendar-day.is-outside-month[b-df4jntwdea] { background: #fbfcfd; }
.portal-calendar-day.is-selected[b-df4jntwdea] { background: #eef3f8; box-shadow: inset 0 0 0 2px #9bb0c3; }
.portal-calendar-day.is-today .portal-calendar-day-number[b-df4jntwdea] { background: var(--teal); }
.portal-calendar-event[b-df4jntwdea] { border-left-color: #8ea8bd; color: #40566b; background: #f0f4f8; }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: var(--gold); color: #765f32; background: #fffaf0; }
.portal-calendar-more[b-df4jntwdea] { color: var(--teal); }
.portal-calendar-details-heading[b-df4jntwdea] { border-bottom-color: #edf1f4; }
.portal-calendar-detail-item[b-df4jntwdea] { border-left-color: #8ea8bd; background: #f4f7f9; }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: var(--gold); background: #fffaf0; }
.portal-calendar-detail-item strong[b-df4jntwdea] { color: #233b55; }
.portal-calendar-detail-item span[b-df4jntwdea], .portal-calendar-detail-item p[b-df4jntwdea] { color: var(--muted); }

.portal-modal-backdrop[b-df4jntwdea] { background: rgba(11, 29, 46, .58); backdrop-filter: blur(4px); }
.portal-modal[b-df4jntwdea] { border-color: #e1e9ed; border-radius: 16px; background: #fff; box-shadow: 0 18px 48px rgba(5, 21, 35, .18); }
.portal-modal-header[b-df4jntwdea] { border-bottom-color: var(--line); }
.portal-modal-header h2[b-df4jntwdea] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.portal-modal-header p[b-df4jntwdea], .portal-modal-foot[b-df4jntwdea] { color: var(--muted); }
.portal-close-button:hover[b-df4jntwdea] { color: var(--navy); background: #f3f7f9; }
.portal-transcript-summary div[b-df4jntwdea] { border-color: var(--line); background: #fbfcfd; }
.portal-transcript-summary span[b-df4jntwdea], .portal-transcript-table th[b-df4jntwdea] { color: var(--muted); }
.portal-transcript-summary strong[b-df4jntwdea], .portal-transcript-year-heading h3[b-df4jntwdea], .portal-transcript-summary-page h3[b-df4jntwdea], .portal-grade[b-df4jntwdea], .portal-total-row th[b-df4jntwdea], .portal-total-row td[b-df4jntwdea] { color: var(--navy); }
.portal-transcript-table th[b-df4jntwdea], .portal-transcript-table td[b-df4jntwdea] { border-top-color: #edf1f4; }
.portal-transcript-summary-page[b-df4jntwdea] { border-top-color: var(--line); }

@media (max-width: 900px) {
    .portal-topbar[b-df4jntwdea] { min-height: 70px; padding: 0 22px; }
    .portal-brand-logo[b-df4jntwdea] { width: 185px; }
    .portal-brand-context[b-df4jntwdea] { font-size: 9px; }
    .portal-layout[b-df4jntwdea] { min-height: calc(100vh - 70px); }
    .portal-sidebar[b-df4jntwdea] { height: auto; }
    .portal-main[b-df4jntwdea] { width: min(100% - 28px, 650px); padding: 31px 0 calc(102px + env(safe-area-inset-bottom)); }
    .portal-page-heading[b-df4jntwdea] { align-items: stretch; flex-direction: column; gap: 18px; }
    .portal-page-heading .portal-button[b-df4jntwdea] { width: 100%; }
    .portal-page-heading h1[b-df4jntwdea] { font-size: 36px; }
    .portal-student-strip[b-df4jntwdea] { border-radius: 14px; }
}

@media (max-width: 480px) {
    .portal-topbar[b-df4jntwdea] { min-height: 70px; padding: 0 12px; }
    .portal-brand-logo[b-df4jntwdea] { width: 185px; }
    .portal-brand-context[b-df4jntwdea] { font-size: 9px; }
    .portal-main[b-df4jntwdea] { width: calc(100% - 20px); padding-top: 22px; }
    .portal-page-heading h1[b-df4jntwdea] { font-size: 36px; }
}

@media (min-width: 1600px) {
    .portal-topbar[b-df4jntwdea] { padding: 0 clamp(28px, 4vw, 72px); }
    .portal-main[b-df4jntwdea] { width: auto; margin: 0; padding: 46px clamp(28px, 4vw, 72px) 36px; }
}

/* 日历图例：学校活动（金色）和上课节次（青色）分开标出，和日历格子、详情里的颜色一致 */
.portal-calendar-legend[b-df4jntwdea] { display: flex; flex-wrap: wrap; gap: 16px; margin: 0 0 12px; color: #536077; font-size: 12px; }
.portal-calendar-legend span[b-df4jntwdea] { display: inline-flex; align-items: center; gap: 6px; }
.portal-calendar-legend span[b-df4jntwdea]::before { content: ""; width: 10px; height: 10px; border-radius: 3px; background: #65afbe; }
.portal-calendar-legend span.is-event[b-df4jntwdea]::before { background: #d4a34d; }

/* 日历格子、详情里的颜色和图例（上面的 portal-calendar-legend）一致：上课节次 #65afbe，学校活动 #d4a34d；放在文件最后，盖过前面几层主题色 */
.portal-calendar-event[b-df4jntwdea] { border-left-color: #65afbe; color: #315b69; background: #eef8f8; }
.portal-calendar-event.is-major[b-df4jntwdea] { border-left-color: #d4a34d; color: #745b2d; background: #fff8e9; }
.portal-calendar-detail-item[b-df4jntwdea] { border-left-color: #65afbe; background: #f1f9f9; }
.portal-calendar-detail-item.is-major[b-df4jntwdea] { border-left-color: #d4a34d; background: #fff8e9; }
/* /Components/Pages/PortalAccessDenied.razor.rz.scp.css */
.portal-denied-shell[b-g6qdqij4c3] {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 2rem;
    background: #f3f6f8;
    color: #082540;
}

.portal-denied-card[b-g6qdqij4c3] {
    width: min(100%, 28rem);
    padding: 2.5rem;
    border: 1px solid #dbe3ea;
    border-radius: 1rem;
    background: white;
    box-shadow: 0 1rem 3rem #08254012;
}

.portal-denied-logo[b-g6qdqij4c3] { width: 14rem; max-width: 100%; margin-bottom: 2rem; }
.portal-denied-card h1[b-g6qdqij4c3] { margin: 0 0 1rem; font-size: 1.75rem; }
.portal-denied-card p[b-g6qdqij4c3] { line-height: 1.55; }
.portal-denied-card a[b-g6qdqij4c3] { color: #173d66; }
/* /Components/Pages/PortalSignIn.razor.rz.scp.css */
.portal-sign-in-shell[b-namk57u529] {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 2rem;
    background: #f3f6f8;
    color: #082540;
}

.portal-sign-in-card[b-namk57u529] {
    width: min(100%, 28rem);
    padding: 2.5rem;
    border: 1px solid #dbe3ea;
    border-radius: 1rem;
    background: white;
    box-shadow: 0 1rem 3rem #08254012;
}

.portal-sign-in-logo[b-namk57u529] { width: 14rem; max-width: 100%; margin-bottom: 2rem; }
.portal-sign-in-kicker[b-namk57u529] { margin: 0 0 .5rem; color: #617890; letter-spacing: .12em; text-transform: uppercase; font-size: .75rem; }
.portal-sign-in-card h1[b-namk57u529] { margin: 0 0 1rem; font-size: 2.25rem; }
.portal-sign-in-card p[b-namk57u529] { line-height: 1.55; }
.portal-sign-in-button[b-namk57u529] { margin-top: 1.25rem; width: 100%; padding: .9rem 1.2rem; border: 0; border-radius: .5rem; background: #173d66; color: white; font: inherit; font-weight: 600; cursor: pointer; }
.portal-sign-in-button:hover[b-namk57u529] { background: #0d2e51; }
.portal-sign-in-button:disabled[b-namk57u529] { cursor: wait; opacity: .55; }
#portalSignInError[b-namk57u529] { color: #a32c2c; }
/* /Components/Pages/Schedule.razor.rz.scp.css */
.schedule-main[b-m56yvfbisc] { min-width: 0; padding: 31px 38px 60px; }
.schedule-breadcrumb[b-m56yvfbisc] { color: #9aa9af; font-size: 12px; }
.schedule-breadcrumb span[b-m56yvfbisc] { padding: 0 5px; color: #c4d1d5; }
.schedule-heading[b-m56yvfbisc] { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin: 8px 0 25px; }
.schedule-kicker[b-m56yvfbisc] { display: block; color: var(--teal, #395c80); font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
.schedule-heading h1[b-m56yvfbisc] { margin: 8px 0 0; color: #1e4860; font-size: 30px; font-weight: 600; letter-spacing: -.04em; }
.schedule-heading p[b-m56yvfbisc] { max-width: 620px; margin: 8px 0 0; color: #82959d; font-size: 13px; line-height: 1.5; }
.schedule-week-nav[b-m56yvfbisc] { display: flex; flex-wrap: wrap; gap: 8px; }
.schedule-button[b-m56yvfbisc] { min-height: 39px; padding: 0 14px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: rgba(255, 255, 255, .78); font-size: 12px; font-weight: 600; cursor: pointer; }
.schedule-button:hover:not(:disabled)[b-m56yvfbisc] { border-color: #8eafbd; background: #eef7f9; }
.schedule-button:disabled[b-m56yvfbisc] { cursor: wait; opacity: .6; }
.schedule-error[b-m56yvfbisc] { margin: 0 0 18px; padding: 10px 14px; border: 1px solid #e8c9c9; border-radius: 8px; color: #a32c2c; background: #fdf3f3; font-size: 13px; }

.schedule-panel[b-m56yvfbisc] { min-width: 0; padding: 18px; border: 1px solid #e8eff1; border-radius: 11px; background: rgba(255, 255, 255, .8); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); }
.schedule-table-scroll[b-m56yvfbisc] { overflow-x: auto; }
.schedule-table[b-m56yvfbisc] { width: 100%; min-width: 640px; border-collapse: collapse; table-layout: fixed; }
.schedule-table th[b-m56yvfbisc],
.schedule-table td[b-m56yvfbisc] { padding: 10px 10px; border-top: 1px solid #edf2f3; text-align: left; vertical-align: top; font-size: 12px; }
.schedule-table thead th[b-m56yvfbisc] { border-top: 0; color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.schedule-table thead th small[b-m56yvfbisc] { display: block; margin-top: 2px; color: #98a7ab; font-size: 10px; font-weight: 500; letter-spacing: 0; text-transform: none; }
.schedule-table tbody th[b-m56yvfbisc] { width: 96px; color: #82999f; font-size: 11px; font-weight: 600; }
.schedule-table .is-today[b-m56yvfbisc] { background: #eef3f8; }
.schedule-class strong[b-m56yvfbisc] { display: block; color: #233b55; font-size: 12px; font-weight: 600; }
.schedule-class small[b-m56yvfbisc] { display: block; margin-top: 2px; color: #92a3a7; font-size: 10px; }
.schedule-class + .schedule-class[b-m56yvfbisc] { margin-top: 8px; }
.schedule-footnote[b-m56yvfbisc] { margin: 12px 0 0; color: #94a2ad; font-size: 11px; }
.schedule-empty[b-m56yvfbisc] { min-height: 140px; display: grid; place-items: center; padding: 16px; color: #8b9da2; font-size: 12px; text-align: center; }

@media (max-width: 900px) {
    .schedule-heading[b-m56yvfbisc] { flex-direction: column; align-items: flex-start; }
}

@media (max-width: 900px) {
    .schedule-main[b-m56yvfbisc] { padding: 22px 16px 48px; }
}
/* /Components/Pages/SyncAdmin.razor.rz.scp.css */
.sync-main[b-at8fj842sg] { min-width: 0; padding: 31px 38px 60px; }
.sync-breadcrumb[b-at8fj842sg] { color: #9aa9af; font-size: 12px; }
.sync-breadcrumb span[b-at8fj842sg] { padding: 0 5px; color: #c4d1d5; }
.sync-heading[b-at8fj842sg] { margin: 8px 0 25px; }
.sync-kicker[b-at8fj842sg] { display: block; color: var(--teal, #395c80); font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
.sync-heading h1[b-at8fj842sg] { margin: 8px 0 0; color: #1e4860; font-size: 30px; font-weight: 600; letter-spacing: -.04em; }
.sync-heading p[b-at8fj842sg] { max-width: 680px; margin: 8px 0 0; color: #82959d; font-size: 13px; line-height: 1.5; }

.sync-message[b-at8fj842sg] { margin: 0 0 18px; padding: 10px 14px; border: 1px solid #cfe3d8; border-radius: 8px; color: #2f6a4d; background: #f1f9f4; font-size: 13px; }
.sync-message.is-error[b-at8fj842sg] { border-color: #e8c9c9; color: #a32c2c; background: #fdf3f3; }
.sync-empty[b-at8fj842sg] { min-height: 90px; display: grid; place-items: center; color: #8b9da2; font-size: 12px; }

.sync-panel[b-at8fj842sg] { margin-bottom: 18px; padding: 20px; border: 1px solid #e8eff1; border-radius: 11px; background: rgba(255, 255, 255, .8); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); }
.sync-panel h2[b-at8fj842sg] { margin: 0; color: #1e4860; font-size: 18px; font-weight: 600; }

.sync-status[b-at8fj842sg] { display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: 10px 16px; margin: 14px 0 18px; }
.sync-status dt[b-at8fj842sg] { color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; padding-top: 2px; }
.sync-status dd[b-at8fj842sg] { margin: 0; color: #476f7e; font-size: 13px; line-height: 1.5; overflow-wrap: anywhere; }
.sync-status code[b-at8fj842sg] { padding: 1px 5px; border-radius: 4px; background: #eef3f8; font-size: 12px; }
.sync-failed[b-at8fj842sg] { color: #a32c2c; }

.sync-row[b-at8fj842sg] { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.sync-actions[b-at8fj842sg] { margin-top: 8px; }
.sync-hint[b-at8fj842sg] { color: #92a3a7; font-size: 12px; }
.sync-confirm[b-at8fj842sg] { color: #a32c2c; font-size: 12px; }

.sync-button[b-at8fj842sg] { min-height: 39px; padding: 0 14px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: rgba(255, 255, 255, .78); font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.sync-button:hover:not(:disabled)[b-at8fj842sg] { border-color: #8eafbd; background: #eef7f9; }
.sync-button:disabled[b-at8fj842sg] { cursor: not-allowed; opacity: .55; }
.sync-button.is-primary[b-at8fj842sg] { border-color: #a7c3cf; background: #e6f3f6; }
.sync-button.is-danger[b-at8fj842sg] { border-color: #d9a3a3; color: #a32c2c; background: #fdf3f3; }

.sync-filters[b-at8fj842sg] { margin: 14px 0 12px; }
.sync-filters label[b-at8fj842sg] { color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.sync-filters select[b-at8fj842sg] { min-height: 39px; padding: 0 10px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: #fff; font: inherit; font-size: 13px; }
.sync-count[b-at8fj842sg] { margin: 0 0 8px; color: #92a3a7; font-size: 12px; }

/* 日志表格：外观和 Access 页的 access-table 一样（表头 11px 大写、浅蓝；内容 12px）；表格太宽时只在框里横向滚动，分页条不跟着滚 */
.sync-table-wrap[b-at8fj842sg] { border: 1px solid #edf2f3; border-radius: 8px; color: #476f7e; }
.sync-table-scroll[b-at8fj842sg] { overflow-x: auto; }
.sync-table[b-at8fj842sg] { width: 100%; border-collapse: collapse; }
.sync-table th[b-at8fj842sg], .sync-table td[b-at8fj842sg] { padding: 9px 10px; border-bottom: 1px solid #edf2f3; text-align: left; color: #476f7e; font-size: 12px; line-height: 1.45; vertical-align: top; }
.sync-table tbody tr:last-child td[b-at8fj842sg] { border-bottom: 0; }
.sync-table th[b-at8fj842sg] { color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; }
.sync-table tbody tr:hover td[b-at8fj842sg] { background: #eef7f9; }
.sync-row-warning td[b-at8fj842sg] { background: #fffaf0; }
.sync-row-error td[b-at8fj842sg] { background: #fdf3f3; }

/* 点标题排序：按钮看起来就是标题文字；排着的那列颜色深一点、带箭头，别的列鼠标移上去才露出箭头 */
.sync-sort[b-at8fj842sg] { display: inline-flex; align-items: center; gap: 4px; padding: 0; border: 0; color: inherit; background: none; font: inherit; letter-spacing: inherit; text-transform: inherit; cursor: pointer; }
.sync-sort:hover[b-at8fj842sg], .sync-sort.is-sorted[b-at8fj842sg] { color: #1e4860; }
.sync-sort-arrow[b-at8fj842sg] { width: 10px; font-size: 12px; opacity: 0; }
.sync-sort:hover .sync-sort-arrow[b-at8fj842sg] { opacity: .45; }
.sync-sort.is-sorted .sync-sort-arrow[b-at8fj842sg] { opacity: 1; }

/* 分页条："1-25 of 30"和四个翻页按钮，字体、颜色和表格一致 */
.sync-pager[b-at8fj842sg] { display: flex; align-items: center; justify-content: flex-end; gap: 2px; min-height: 42px; padding: 0 8px; border-top: 1px solid #edf2f3; color: #476f7e; font-size: 12px; }
.sync-pager-info[b-at8fj842sg] { margin-right: 10px; font-variant-numeric: tabular-nums; }
.sync-pager button[b-at8fj842sg] { width: 30px; height: 30px; padding: 0; border: 0; border-radius: 50%; color: #476f7e; background: none; font: inherit; font-size: 16px; line-height: 1; cursor: pointer; }
.sync-pager button:hover:not(:disabled)[b-at8fj842sg] { background: #eef7f9; }
.sync-pager button:disabled[b-at8fj842sg] { color: #c4d1d5; cursor: default; }

.sync-time[b-at8fj842sg] { color: #92a3a7; font-variant-numeric: tabular-nums; white-space: nowrap; }
.sync-level[b-at8fj842sg] { font-size: 10px; font-weight: 700; letter-spacing: .06em; color: #6e98aa; }
.sync-source[b-at8fj842sg] { color: #92a3a7; white-space: nowrap; }
.sync-text[b-at8fj842sg] { overflow-wrap: anywhere; }
.sync-row-warning .sync-level[b-at8fj842sg] { color: #a66a0a; }
.sync-row-error .sync-level[b-at8fj842sg], .sync-row-error .sync-text[b-at8fj842sg] { color: #a32c2c; }
.sync-detail[b-at8fj842sg] { margin-top: 4px; }
.sync-detail summary[b-at8fj842sg] { color: #6e98aa; cursor: pointer; }
.sync-detail pre[b-at8fj842sg] { margin: 6px 0 0; padding: 8px 10px; max-height: 260px; overflow: auto; border-radius: 6px; background: #f5f8fa; color: #476f7e; font-size: 11px; white-space: pre-wrap; overflow-wrap: anywhere; }

@media (max-width: 900px) {
    .sync-main[b-at8fj842sg] { padding: 22px 16px 48px; }
    .sync-status[b-at8fj842sg] { grid-template-columns: minmax(0, 1fr); gap: 2px; }
    .sync-status dd[b-at8fj842sg] { margin-bottom: 10px; }
}
/* /Components/Pages/Teacher.razor.rz.scp.css */
.teacher-main[b-39jllbehp3] { min-width: 0; padding: 31px 38px 60px; background: radial-gradient(circle at 86% -3%, rgba(215, 237, 246, .63), transparent 27rem), linear-gradient(180deg, #fff 0%, #fbfdfd 100%); }
.teacher-breadcrumb[b-39jllbehp3] { color: #9aa9af; font-size: 12px; }
.teacher-breadcrumb span[b-39jllbehp3] { padding: 0 5px; color: #c4d1d5; }
.teacher-page-heading[b-39jllbehp3] { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin: 8px 0 25px; }
.teacher-page-kicker[b-39jllbehp3], .teacher-section-eyebrow[b-39jllbehp3] { display: block; color: #6e98aa; font-size: 10px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
.teacher-page-heading h1[b-39jllbehp3] { margin: 8px 0 0; color: #1e4860; font-size: 30px; font-weight: 600; letter-spacing: -.04em; }
.teacher-page-heading p[b-39jllbehp3] { max-width: 620px; margin: 8px 0 0; color: #82959d; font-size: 13px; line-height: 1.5; }
.teacher-heading-actions[b-39jllbehp3] { display: flex; flex-wrap: wrap; gap: 8px; }
.teacher-button[b-39jllbehp3] { min-height: 39px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 0 14px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: rgba(255, 255, 255, .78); font-size: 12px; font-weight: 600; text-decoration: none; cursor: pointer; }
.teacher-button:hover[b-39jllbehp3] { border-color: #8eafbd; background: #eef7f9; }
.teacher-button:disabled[b-39jllbehp3] { cursor: wait; opacity: .6; }
.teacher-button-primary[b-39jllbehp3] { color: #315c71; background: #e6f3f6; border-color: #a7c3cf; }

.teacher-stat-grid[b-39jllbehp3] { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; margin-bottom: 21px; }
.teacher-stat-card[b-39jllbehp3] { min-width: 0; display: flex; align-items: flex-start; gap: 11px; padding: 16px 15px; border: 1px solid #e8eff1; border-radius: 11px; background: rgba(255, 255, 255, .74); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); }
.teacher-stat-card > div[b-39jllbehp3] { min-width: 0; }
.teacher-stat-card span:not(.teacher-stat-icon)[b-39jllbehp3] { display: block; color: #8a9ca1; font-size: 11px; }
.teacher-stat-card strong[b-39jllbehp3] { display: block; margin-top: 3px; overflow: hidden; color: #315c71; font-size: 21px; letter-spacing: -.04em; text-overflow: ellipsis; white-space: nowrap; }
.teacher-stat-card small[b-39jllbehp3] { display: block; overflow: hidden; margin-top: 3px; color: #98a7ab; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.teacher-stat-icon[b-39jllbehp3] { width: 31px; height: 31px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 9px; color: #5f91a5; background: #e9f4f6; font-size: 17px; }
.teacher-stat-icon.is-green[b-39jllbehp3] { color: #6d9e8a; background: #edf6ef; }
.teacher-stat-icon.is-gold[b-39jllbehp3] { color: #b28b4c; background: #fff6e5; }
.teacher-stat-icon.is-lilac[b-39jllbehp3] { color: #8c87ad; background: #f1eff9; }

.teacher-panel[b-39jllbehp3] { min-width: 0; border: 1px solid #e8eff1; border-radius: 12px; background: rgba(255, 255, 255, .77); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); backdrop-filter: blur(10px); }
.teacher-roster-panel[b-39jllbehp3] { padding: 23px 22px 18px; }
.teacher-section-heading[b-39jllbehp3], .teacher-detail-heading[b-39jllbehp3], .teacher-subpanel-heading[b-39jllbehp3] { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.teacher-section-heading[b-39jllbehp3] { margin-bottom: 19px; }
.teacher-section-heading h2[b-39jllbehp3], .teacher-detail-heading h2[b-39jllbehp3] { margin: 6px 0 0; color: #315c71; font-size: 18px; font-weight: 600; letter-spacing: -.025em; }
.teacher-section-heading p[b-39jllbehp3] { margin: 5px 0 0; color: #87999f; font-size: 12px; }
.teacher-panel-badge[b-39jllbehp3] { flex: 0 0 auto; padding: 5px 9px; border: 1px solid #d8e8e8; border-radius: 99px; color: #6c928c; background: #f1f8f6; font-size: 10px; font-weight: 600; white-space: nowrap; }
.teacher-context-badge[b-39jllbehp3] { padding: 6px 9px; border: 1px solid #d8e8e8; border-radius: 99px; color: #6c928c; background: #f1f8f6; font-size: 10px; font-weight: 600; white-space: nowrap; }
.teacher-roster-table[b-39jllbehp3] { overflow-x: auto; }
.teacher-roster-head[b-39jllbehp3], .teacher-roster-row[b-39jllbehp3] { min-width: 760px; display: grid; grid-template-columns: minmax(190px, 1.35fr) 82px minmax(120px, .9fr) 108px minmax(150px, 1fr) 24px; gap: 12px; align-items: center; }
.teacher-roster-head[b-39jllbehp3] { padding: 0 12px 9px; color: #98a7ab; font-size: 10px; letter-spacing: .04em; text-transform: uppercase; }
.teacher-roster-row[b-39jllbehp3] { width: 100%; padding: 13px 12px; border: 0; border-top: 1px solid #edf2f3; color: #476f7e; background: transparent; text-align: left; cursor: pointer; }
.teacher-roster-row:hover[b-39jllbehp3], .teacher-roster-row.is-selected[b-39jllbehp3] { background: #f0f8f9; }
.teacher-roster-row.is-selected[b-39jllbehp3] { box-shadow: inset 3px 0 0 #81abc0; }
.teacher-roster-student[b-39jllbehp3] { display: flex; align-items: center; gap: 10px; min-width: 0; }
.teacher-roster-student > span:last-child[b-39jllbehp3] { min-width: 0; }
.teacher-roster-row strong[b-39jllbehp3] { display: block; overflow: hidden; color: #3b6272; font-size: 12px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.teacher-roster-row small[b-39jllbehp3], .teacher-roster-secondary[b-39jllbehp3] { display: block; margin-top: 3px; overflow: hidden; color: #8b9da2; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.teacher-roster-grade[b-39jllbehp3] { color: #708b94; font-size: 11px; }
.teacher-status-chip[b-39jllbehp3] { display: inline-block; padding: 4px 7px; border-radius: 99px; font-size: 10px; font-weight: 700; white-space: nowrap; }
.teacher-status-chip.is-valid[b-39jllbehp3] { color: #4d8870; background: #e8f5ed; }
.teacher-status-chip.is-warning[b-39jllbehp3] { color: #9a7132; background: #fff3d8; }
.teacher-status-chip.is-danger[b-39jllbehp3] { color: #a25656; background: #fbe8e6; }
.teacher-attendance-value[b-39jllbehp3] { color: #5f9585 !important; font-variant-numeric: tabular-nums; }
.teacher-row-arrow[b-39jllbehp3] { color: #9ab7bf; font-size: 17px; text-align: right; }
.teacher-data-note[b-39jllbehp3] { margin: 15px 12px 0; color: #a0adb0; font-size: 10px; }

.teacher-student-detail[b-39jllbehp3] { margin-top: 20px; padding: 23px 22px 22px; }
.teacher-detail-heading[b-39jllbehp3] { padding-bottom: 20px; border-bottom: 1px solid #edf2f3; }
.teacher-detail-identity[b-39jllbehp3] { display: flex; align-items: center; gap: 12px; min-width: 0; }
.teacher-detail-avatar[b-39jllbehp3] { width: 47px; height: 47px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 14px; color: #315f72; background: linear-gradient(145deg, #e8f4f6, #e7f3eb); font-size: 15px; font-weight: 700; }
.teacher-detail-heading h2[b-39jllbehp3] { font-size: 20px; }
.teacher-detail-heading p[b-39jllbehp3] { margin: 4px 0 0; color: #83979e; font-size: 11px; }
.teacher-detail-summary[b-39jllbehp3] { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 17px; }
.teacher-info-card[b-39jllbehp3] { min-width: 0; padding: 15px; border: 1px solid #e6eff0; border-radius: 10px; background: rgba(249, 252, 251, .74); }
.teacher-info-card-heading[b-39jllbehp3] { display: flex; align-items: center; gap: 7px; min-height: 21px; color: #7c939a; font-size: 11px; }
.teacher-info-card-heading > span:nth-child(2)[b-39jllbehp3] { flex: 1 1 auto; }
.teacher-info-icon[b-39jllbehp3] { width: 22px; height: 22px; display: inline-grid; place-items: center; border-radius: 7px; color: #ad8750; background: #fff4df; font-size: 14px; }
.teacher-info-icon.is-green[b-39jllbehp3] { color: #6d9e8a; background: #eaf5ec; }
.teacher-info-icon.is-blue[b-39jllbehp3] { color: #5f91a5; background: #e9f4f6; }
.teacher-info-card > strong[b-39jllbehp3] { display: block; margin-top: 11px; color: #315c71; font-size: 21px; letter-spacing: -.04em; }
.teacher-info-card > p[b-39jllbehp3] { margin: 4px 0 0; color: #81959b; font-size: 11px; }
.teacher-info-card > small[b-39jllbehp3] { display: block; margin-top: 11px; color: #7b9a8b; font-size: 10px; }
.teacher-visa-card > strong[b-39jllbehp3] { font-size: 15px; }
.teacher-trend[b-39jllbehp3] { color: #6c9e8a; font-size: 10px; white-space: nowrap; }
.teacher-progress[b-39jllbehp3] { height: 6px; overflow: hidden; margin-top: 12px; border-radius: 99px; background: #e7f0ee; }
.teacher-progress span[b-39jllbehp3] { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #8dbcae, #a2c8b8); }
.teacher-inline-metrics[b-39jllbehp3] { display: flex; gap: 25px; margin-top: 13px; }
.teacher-inline-metrics strong[b-39jllbehp3] { display: block; color: #315c71; font-size: 17px; }
.teacher-inline-metrics small[b-39jllbehp3] { display: block; margin-top: 3px; color: #899ca1; font-size: 10px; }

.teacher-detail-grid[b-39jllbehp3] { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(300px, .8fr); gap: 13px; margin-top: 13px; }
.teacher-subpanel[b-39jllbehp3] { min-width: 0; padding: 18px 17px; border: 1px solid #e6eff0; border-radius: 10px; background: rgba(255, 255, 255, .57); }
.teacher-subpanel-heading[b-39jllbehp3] { margin-bottom: 15px; }
.teacher-subpanel-heading h3[b-39jllbehp3] { margin: 5px 0 0; color: #3b6272; font-size: 15px; font-weight: 600; }
.teacher-subpanel-heading p[b-39jllbehp3] { margin: 4px 0 0; color: #8b9da2; font-size: 11px; }
.teacher-text-link[b-39jllbehp3] { padding-top: 2px; color: #6b9bad; font-size: 10px; font-weight: 600; text-decoration: none; white-space: nowrap; }
.teacher-schedule-list[b-39jllbehp3] { display: grid; }
.teacher-schedule-row[b-39jllbehp3] { min-height: 54px; display: grid; grid-template-columns: 61px 9px minmax(0, 1fr) 84px auto; gap: 10px; align-items: center; padding: 7px 8px; border-top: 1px solid #edf2f3; }
.teacher-schedule-row:first-child[b-39jllbehp3] { border-top: 0; }
.teacher-schedule-row.is-current[b-39jllbehp3] { border-radius: 7px; background: #eef8f6; }
.teacher-schedule-time[b-39jllbehp3] { color: #82999f; font-size: 10px; white-space: nowrap; }
.teacher-schedule-dot[b-39jllbehp3] { width: 7px; height: 7px; border-radius: 50%; background: #9abfc4; box-shadow: 0 0 0 3px #eff7f7; }
.teacher-schedule-row.is-current .teacher-schedule-dot[b-39jllbehp3] { background: #78a892; box-shadow: 0 0 0 3px #e2f2e9; }
.teacher-schedule-class[b-39jllbehp3], .teacher-room[b-39jllbehp3] { min-width: 0; }
.teacher-schedule-class strong[b-39jllbehp3], .teacher-room strong[b-39jllbehp3] { display: block; overflow: hidden; color: #476f7e; font-size: 11px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.teacher-schedule-class small[b-39jllbehp3], .teacher-room small[b-39jllbehp3] { display: block; margin-top: 3px; overflow: hidden; color: #92a3a7; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.teacher-room[b-39jllbehp3] { text-align: right; }
.teacher-now-badge[b-39jllbehp3] { padding: 4px 6px; border-radius: 99px; color: #568770; background: #e3f3e9; font-size: 9px; font-weight: 700; }
.teacher-attendance-summary[b-39jllbehp3] { padding: 1px 0 14px; border-bottom: 1px solid #edf2f3; }
.teacher-attendance-summary > strong[b-39jllbehp3] { display: block; color: #4d8a77; font-size: 28px; letter-spacing: -.05em; }
.teacher-attendance-summary > span[b-39jllbehp3] { display: block; margin-top: 2px; color: #8b9da2; font-size: 10px; }
.teacher-attendance-legend[b-39jllbehp3] { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 13px; color: #81959b; font-size: 10px; }
.teacher-attendance-legend i[b-39jllbehp3] { display: inline-block; width: 7px; height: 7px; margin-right: 4px; border-radius: 50%; background: #8dbcae; }
.teacher-attendance-legend i.is-absent[b-39jllbehp3] { background: #d58d87; }
.teacher-attendance-legend i.is-late[b-39jllbehp3] { background: #d4b16b; }
.teacher-attendance-list[b-39jllbehp3] { display: grid; }
.teacher-attendance-row[b-39jllbehp3] { display: grid; grid-template-columns: 48px 52px minmax(0, 1fr); gap: 8px; align-items: center; padding: 9px 0; border-top: 1px solid #edf2f3; color: #87999f; font-size: 10px; }
.teacher-attendance-date[b-39jllbehp3] { color: #607f89; font-weight: 600; }
.teacher-attendance-status[b-39jllbehp3] { padding: 3px 5px; border-radius: 5px; font-size: 9px; font-weight: 700; text-align: center; }
.teacher-attendance-status.is-present[b-39jllbehp3] { color: #4d8870; background: #e8f5ed; }
.teacher-attendance-status.is-absent[b-39jllbehp3] { color: #a25656; background: #fbe8e6; }
.teacher-attendance-status.is-late[b-39jllbehp3] { color: #9a7132; background: #fff3d8; }

.teacher-family-section[b-39jllbehp3] { margin-top: 27px; }
.teacher-family-heading[b-39jllbehp3] { align-items: flex-end; }
.teacher-family-heading h2[b-39jllbehp3] { margin-top: 7px; font-size: 21px; }
.teacher-family-heading p[b-39jllbehp3] { max-width: 620px; }
.teacher-family-grid[b-39jllbehp3], .teacher-parent-summary-grid[b-39jllbehp3] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 13px; }
.teacher-family-feed[b-39jllbehp3], .teacher-course-panel[b-39jllbehp3], .teacher-transcript-card[b-39jllbehp3] { padding: 19px 18px; }
.teacher-source-label[b-39jllbehp3] { color: #85a59b; font-size: 10px; white-space: nowrap; }
.teacher-family-list[b-39jllbehp3] { display: grid; }
.teacher-family-list-row[b-39jllbehp3] { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 10px; padding: 11px 0; border-top: 1px solid #edf2f3; }
.teacher-family-list-row:first-child[b-39jllbehp3], .teacher-family-announcement:first-child[b-39jllbehp3] { border-top: 0; }
.teacher-family-list-row time[b-39jllbehp3] { color: #78a1ae; font-size: 10px; font-weight: 700; }
.teacher-family-list-row strong[b-39jllbehp3], .teacher-family-announcement strong[b-39jllbehp3] { display: block; color: #476f7e; font-size: 11px; font-weight: 600; }
.teacher-family-list-row small[b-39jllbehp3] { display: block; margin-top: 3px; color: #8b9da2; font-size: 10px; line-height: 1.35; }
.teacher-family-announcement[b-39jllbehp3] { padding: 10px 0; border-top: 1px solid #edf2f3; }
.teacher-family-announcement > div[b-39jllbehp3] { display: flex; justify-content: space-between; gap: 10px; margin-bottom: 5px; color: #91a2a7; font-size: 9px; }
.teacher-family-announcement > div span[b-39jllbehp3] { color: #78a696; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.teacher-family-announcement small[b-39jllbehp3] { display: block; margin-top: 3px; color: #8b9da2; font-size: 10px; line-height: 1.35; }
.teacher-empty-state[b-39jllbehp3] { min-height: 95px; display: grid; place-items: center; color: #8b9da2; font-size: 11px; }
.teacher-feed-note[b-39jllbehp3] { margin: 0 0 10px; color: var(--muted); font-size: 11px; line-height: 1.45; }
.teacher-parent-summary-grid[b-39jllbehp3] { margin-top: 13px; }
.teacher-course-row[b-39jllbehp3] { display: grid; grid-template-columns: minmax(145px, 1.1fr) minmax(100px, 1fr) 40px; gap: 12px; align-items: center; padding: 11px 0; border-top: 1px solid #edf2f3; }
.teacher-course-name[b-39jllbehp3] { display: flex; align-items: center; gap: 8px; min-width: 0; }
.teacher-course-name > span[b-39jllbehp3] { min-width: 0; }
.teacher-course-name i[b-39jllbehp3] { width: 7px; height: 7px; flex: 0 0 auto; border-radius: 50%; background: #8cb9c4; }
.teacher-course-name i.teal[b-39jllbehp3] { background: #94c1ad; }
.teacher-course-name i.gold[b-39jllbehp3] { background: #d9c28d; }
.teacher-course-name strong[b-39jllbehp3] { display: block; overflow: hidden; color: #476f7e; font-size: 11px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.teacher-course-name small[b-39jllbehp3] { display: block; margin-top: 3px; overflow: hidden; color: #8b9da2; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.teacher-course-bar[b-39jllbehp3] { height: 10px; overflow: hidden; border-radius: 99px; background: #edf3f4; }
.teacher-course-bar span[b-39jllbehp3] { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #9bc7d1, #a0c5ba); }
.teacher-course-row > strong[b-39jllbehp3] { color: #628da0; font-size: 12px; text-align: right; }
.teacher-record-metrics[b-39jllbehp3] { display: grid; grid-template-columns: 1fr 1fr; gap: 13px; margin: 24px 0 18px; }
.teacher-record-metrics div[b-39jllbehp3] { padding: 13px; border: 1px solid #e6eff0; border-radius: 8px; background: #fafdfc; }
.teacher-record-metrics span[b-39jllbehp3] { display: block; color: #899ca1; font-size: 10px; }
.teacher-record-metrics strong[b-39jllbehp3] { display: block; margin-top: 5px; color: #4d7d91; font-size: 22px; letter-spacing: -.04em; }
.teacher-record-note[b-39jllbehp3] { margin: 0 0 16px; color: #8b9da2; font-size: 10px; line-height: 1.4; }

.teacher-mobile-nav[b-39jllbehp3] { display: none; }

@media (max-width: 1100px) {
    .teacher-stat-grid[b-39jllbehp3] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .teacher-detail-grid[b-39jllbehp3] { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
    .teacher-main[b-39jllbehp3] { padding: 25px 16px 104px; }
    .teacher-page-heading[b-39jllbehp3] { align-items: stretch; flex-direction: column; gap: 18px; }
    .teacher-page-heading h1[b-39jllbehp3] { font-size: 30px; }
    .teacher-heading-actions[b-39jllbehp3] { width: 100%; }
    .teacher-heading-actions .teacher-button[b-39jllbehp3] { flex: 1 1 0; }
    .teacher-stat-grid[b-39jllbehp3] { gap: 10px; }
    .teacher-stat-card[b-39jllbehp3] { padding: 13px 12px; }
    .teacher-stat-card strong[b-39jllbehp3] { font-size: 18px; }
    .teacher-mobile-nav[b-39jllbehp3] { position: fixed; right: 10px; bottom: calc(10px + env(safe-area-inset-bottom)); left: 10px; z-index: 30; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 3px; padding: 7px; border: 1px solid #d6e8e7; border-radius: 18px; background: rgba(255, 255, 255, .93); box-shadow: 0 12px 32px rgba(21, 69, 82, .18); backdrop-filter: blur(16px); }
    .teacher-mobile-nav a[b-39jllbehp3] { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; padding: 7px 3px 6px; border-radius: 12px; color: #82999f; font-size: 10px; text-decoration: none; }
    .teacher-mobile-nav a > span:first-child[b-39jllbehp3] { color: #6b9bad; font-size: 16px; line-height: 1; }
    .teacher-mobile-nav a:hover[b-39jllbehp3], .teacher-mobile-nav a.is-active[b-39jllbehp3] { color: #315c71; background: #e8f4f6; }
    .teacher-family-grid[b-39jllbehp3], .teacher-parent-summary-grid[b-39jllbehp3] { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
    .teacher-stat-grid[b-39jllbehp3] { grid-template-columns: 1fr 1fr; }
    .teacher-stat-card[b-39jllbehp3] { min-height: 86px; }
    .teacher-stat-icon[b-39jllbehp3] { display: none; }
    .teacher-roster-panel[b-39jllbehp3], .teacher-student-detail[b-39jllbehp3] { padding-right: 15px; padding-left: 15px; }
    .teacher-detail-heading[b-39jllbehp3] { align-items: stretch; flex-direction: column; }
    .teacher-detail-heading .teacher-heading-actions[b-39jllbehp3] { display: grid; grid-template-columns: 1fr 1fr; }
    .teacher-detail-heading .teacher-button[b-39jllbehp3] { min-width: 0; padding: 0 8px; font-size: 10px; }
    .teacher-detail-summary[b-39jllbehp3] { grid-template-columns: 1fr; }
    .teacher-schedule-row[b-39jllbehp3] { grid-template-columns: 54px 7px minmax(0, 1fr) 67px; gap: 7px; }
    .teacher-now-badge[b-39jllbehp3] { display: none; }
    .teacher-family-heading[b-39jllbehp3] { align-items: stretch; flex-direction: column; }
    .teacher-family-heading .teacher-button[b-39jllbehp3] { width: 100%; }
}

/* School visual system: keep the teacher workspace functional while sharing the school palette. */
.teacher-main[b-39jllbehp3] { width: min(1180px, calc(100% - 44px)); margin: 0 auto; padding: 46px 0 36px; background: transparent; }
.teacher-breadcrumb[b-39jllbehp3] { color: #94a2ad; font-size: 11px; }
.teacher-breadcrumb span[b-39jllbehp3] { color: #c6d0da; }
.teacher-page-heading[b-39jllbehp3] { margin: 12px 0 26px; }
.teacher-page-kicker[b-39jllbehp3], .teacher-section-eyebrow[b-39jllbehp3] { color: var(--teal); font-size: 11px; letter-spacing: .14em; }
.teacher-page-heading h1[b-39jllbehp3] { margin-top: 8px; color: var(--navy); font-family: "Cinzel", Georgia, serif; font-size: clamp(34px, 4vw, 50px); font-weight: 400; letter-spacing: -.045em; line-height: 1.12; }
.teacher-page-heading p[b-39jllbehp3] { margin-top: 10px; color: var(--muted); font-size: 15px; }
.teacher-button[b-39jllbehp3] { min-height: 44px; padding: 0 17px; border: 1px solid #b9c6d2; border-radius: 999px; color: var(--navy); background: #fff; font-size: 13px; font-weight: 700; }
.teacher-button:hover[b-39jllbehp3] { border-color: #9eafbf; color: var(--navy); background: #f0f1f2; }
.teacher-button-primary[b-39jllbehp3] { color: #edf0f4; background: var(--navy); border-color: var(--navy); }
.teacher-button-primary:hover[b-39jllbehp3] { color: #fff; background: var(--navy-2); border-color: var(--navy-2); }

.teacher-stat-card[b-39jllbehp3], .teacher-panel[b-39jllbehp3], .teacher-roster-panel[b-39jllbehp3], .teacher-student-detail[b-39jllbehp3], .teacher-subpanel[b-39jllbehp3], .teacher-info-card[b-39jllbehp3], .teacher-family-feed[b-39jllbehp3], .teacher-course-panel[b-39jllbehp3], .teacher-transcript-card[b-39jllbehp3] { border-color: var(--line); border-radius: var(--radius-lg, 12px); background: #fff; box-shadow: none; }
.teacher-stat-card[b-39jllbehp3] { padding: 17px; }
.teacher-stat-card > div > span[b-39jllbehp3], .teacher-info-card-heading[b-39jllbehp3], .teacher-stat-card small[b-39jllbehp3], .teacher-record-note[b-39jllbehp3] { color: var(--muted); }
.teacher-stat-card strong[b-39jllbehp3], .teacher-info-card > strong[b-39jllbehp3], .teacher-inline-metrics strong[b-39jllbehp3], .teacher-record-metrics strong[b-39jllbehp3] { color: var(--navy); }
.teacher-stat-icon[b-39jllbehp3] { color: var(--teal); background: #eef3f8; }
.teacher-stat-icon.is-green[b-39jllbehp3] { color: #5c8f83; background: #eef5f0; }
.teacher-stat-icon.is-gold[b-39jllbehp3] { color: #88724a; background: #fff7e7; }
.teacher-stat-icon.is-lilac[b-39jllbehp3] { color: #6d7890; background: #f0f2f5; }
.teacher-section-heading[b-39jllbehp3], .teacher-detail-heading[b-39jllbehp3], .teacher-subpanel-heading[b-39jllbehp3] { border-bottom-color: #edf1f4; }
.teacher-section-heading h2[b-39jllbehp3], .teacher-detail-heading h2[b-39jllbehp3], .teacher-family-heading h2[b-39jllbehp3] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.teacher-section-heading p[b-39jllbehp3], .teacher-detail-heading p[b-39jllbehp3], .teacher-subpanel-heading p[b-39jllbehp3] { color: var(--muted); }
.teacher-panel-badge[b-39jllbehp3], .teacher-status-chip[b-39jllbehp3], .teacher-now-badge[b-39jllbehp3] { border-color: #d9e2eb; color: var(--navy); background: #eef3f8; }
.teacher-roster-head[b-39jllbehp3] { color: var(--muted); border-bottom-color: #edf1f4; }
.teacher-roster-row[b-39jllbehp3] { color: #233b55; border-top-color: #edf1f4; background: #fff; }
.teacher-roster-row:hover[b-39jllbehp3], .teacher-roster-row.is-selected[b-39jllbehp3] { background: #f4f7f9; }
.teacher-roster-row.is-selected[b-39jllbehp3] { box-shadow: inset 3px 0 0 var(--teal); }
.teacher-detail-avatar[b-39jllbehp3] { color: var(--navy); background: #eef3f8; border-color: #c6d0da; }
.teacher-roster-row strong[b-39jllbehp3], .teacher-schedule-class strong[b-39jllbehp3], .teacher-room strong[b-39jllbehp3], .teacher-family-list-row strong[b-39jllbehp3], .teacher-family-announcement strong[b-39jllbehp3], .teacher-course-name strong[b-39jllbehp3] { color: #233b55; }
.teacher-roster-secondary[b-39jllbehp3], .teacher-roster-row small[b-39jllbehp3], .teacher-schedule-class small[b-39jllbehp3], .teacher-room small[b-39jllbehp3], .teacher-family-list-row small[b-39jllbehp3], .teacher-family-announcement small[b-39jllbehp3], .teacher-course-name small[b-39jllbehp3] { color: var(--muted); }
.teacher-data-note[b-39jllbehp3], .teacher-empty-state[b-39jllbehp3], .teacher-source-label[b-39jllbehp3] { color: #94a2ad; }
.teacher-info-card-heading > span:nth-child(1)[b-39jllbehp3], .teacher-info-icon[b-39jllbehp3] { color: var(--teal); background: #eef3f8; }
.teacher-info-icon.is-green[b-39jllbehp3] { color: #5c8f83; background: #eef5f0; }
.teacher-info-icon.is-blue[b-39jllbehp3] { color: var(--teal); background: #eef3f8; }
.teacher-progress[b-39jllbehp3] { background: #e8eef2; }
.teacher-progress span[b-39jllbehp3], .teacher-course-bar span[b-39jllbehp3] { background: linear-gradient(90deg, var(--navy), var(--teal)); }
.teacher-trend[b-39jllbehp3], .teacher-text-link[b-39jllbehp3], .teacher-attendance-value[b-39jllbehp3] { color: var(--teal); }
.teacher-schedule-row[b-39jllbehp3], .teacher-attendance-row[b-39jllbehp3], .teacher-family-list-row[b-39jllbehp3], .teacher-family-announcement[b-39jllbehp3], .teacher-course-row[b-39jllbehp3] { border-top-color: #edf1f4; }
.teacher-schedule-row.is-current[b-39jllbehp3] { background: #eef3f8; }
.teacher-schedule-dot[b-39jllbehp3] { background: #8ea8bd; box-shadow: 0 0 0 3px #eef3f8; }
.teacher-schedule-row.is-current .teacher-schedule-dot[b-39jllbehp3] { background: var(--teal); box-shadow: 0 0 0 3px #e1eaf2; }
.teacher-attendance-summary > strong[b-39jllbehp3] { color: var(--navy); }
.teacher-attendance-status.is-present[b-39jllbehp3] { color: #4d8870; background: #eef5f0; }
.teacher-attendance-status.is-absent[b-39jllbehp3] { color: var(--danger); background: #fff1f1; }
.teacher-attendance-status.is-late[b-39jllbehp3] { color: #80682f; background: #fff7e7; }
.teacher-family-list-row time[b-39jllbehp3], .teacher-family-announcement > div span[b-39jllbehp3] { color: var(--teal); }
.teacher-course-name i[b-39jllbehp3] { background: #8ea8bd; }
.teacher-course-name i.teal[b-39jllbehp3] { background: #6c9b91; }
.teacher-course-name i.gold[b-39jllbehp3] { background: var(--gold); }
.teacher-course-bar[b-39jllbehp3] { background: #e8eef2; }
.teacher-record-metrics div[b-39jllbehp3] { border-color: var(--line); background: #fbfcfd; }
.teacher-mobile-nav[b-39jllbehp3] { border-color: var(--line); background: rgba(255, 255, 255, .95); box-shadow: 0 12px 30px rgba(0, 28, 56, .12); }
.teacher-mobile-nav a:hover[b-39jllbehp3], .teacher-mobile-nav a.is-active[b-39jllbehp3] { color: var(--navy); background: #e9eef3; }

@media (max-width: 900px) {
    .teacher-main[b-39jllbehp3] { width: min(100% - 28px, 650px); padding: 31px 0 104px; }
    .teacher-page-heading h1[b-39jllbehp3] { font-size: 36px; }
}

@media (max-width: 480px) {
    .teacher-main[b-39jllbehp3] { width: calc(100% - 20px); padding-top: 22px; }
}

@media (min-width: 1600px) {
    .teacher-main[b-39jllbehp3] { width: auto; margin: 0; padding: 46px clamp(28px, 4vw, 72px) 36px; }
}

/* 老师仪表盘顶部：自己的学校活动、公告和本周课表 */
.teacher-my-overview[b-39jllbehp3] { display: grid; gap: 13px; margin-bottom: 27px; }
.teacher-my-list > * + *[b-39jllbehp3] { border-top: 1px solid #edf1f4; }
.teacher-my-event[b-39jllbehp3] { display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 10px; padding: 11px 0; }
.teacher-my-event time[b-39jllbehp3] { color: var(--teal); font-size: 10px; font-weight: 700; }
.teacher-my-event strong[b-39jllbehp3], .teacher-my-announcement strong[b-39jllbehp3] { display: block; color: #233b55; font-size: 11px; font-weight: 600; }
.teacher-my-event small[b-39jllbehp3], .teacher-my-announcement small[b-39jllbehp3] { display: block; margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.35; }
.teacher-my-announcement[b-39jllbehp3] { padding: 10px 0; }
.teacher-my-announcement > div[b-39jllbehp3] { display: flex; justify-content: space-between; gap: 10px; margin-bottom: 5px; color: #91a2a7; font-size: 9px; }
.teacher-my-announcement > div span[b-39jllbehp3] { color: var(--teal); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.teacher-week-scroll[b-39jllbehp3] { overflow-x: auto; }
.teacher-week-table[b-39jllbehp3] { width: 100%; min-width: 620px; border-collapse: collapse; font-size: 11px; }
.teacher-week-table th[b-39jllbehp3], .teacher-week-table td[b-39jllbehp3] { padding: 9px 10px; border-top: 1px solid #edf1f4; text-align: left; vertical-align: top; }
.teacher-week-table thead th[b-39jllbehp3] { border-top: 0; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.teacher-week-table thead th small[b-39jllbehp3] { display: block; margin-top: 2px; font-weight: 500; letter-spacing: 0; text-transform: none; }
.teacher-week-table tbody th[b-39jllbehp3] { width: 96px; color: var(--muted); font-weight: 600; white-space: nowrap; }
.teacher-week-table .is-today[b-39jllbehp3] { background: #eef3f8; }
.teacher-week-class strong[b-39jllbehp3] { display: block; color: #233b55; font-weight: 600; }
.teacher-week-class small[b-39jllbehp3] { display: block; margin-top: 2px; color: var(--muted); font-size: 10px; }
/* 学校活动用金色标出，和日历页里的学校活动颜色一致（上课节次在 My schedule 里） */
.teacher-my-event[b-39jllbehp3] { border-left: 3px solid #d4a34d; padding-left: 10px; }

/* 名单行末的箭头：叠在箭头上的链接，打开学生名单并选中这位学生 */
.teacher-roster-item[b-39jllbehp3] { position: relative; min-width: 760px; }
.teacher-row-link[b-39jllbehp3] { position: absolute; top: 0; right: 0; bottom: 0; width: 52px; display: block; border-radius: 6px; }
.teacher-roster-item:has(.teacher-row-link:hover) .teacher-row-arrow[b-39jllbehp3] { color: var(--navy); }
.teacher-row-link:focus-visible[b-39jllbehp3] { outline: 2px solid var(--teal); outline-offset: -2px; }
/* /Components/Pages/Transcript.razor.rz.scp.css */
:host[b-k5iiueav3l] {
    display: block;
    min-height: 100vh;
}

.transcript-page[b-k5iiueav3l] {
    min-height: 100vh;
    color: #315c71;
    background:
        radial-gradient(circle at 90% -10%, rgba(215, 237, 246, .72), transparent 30rem),
        linear-gradient(180deg, #fff 0%, #f8fcfc 100%);
}

.transcript-page-topbar[b-k5iiueav3l] {
    min-height: 72px;
    padding: 0 clamp(20px, 4vw, 56px);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    border-bottom: 1px solid rgba(218, 232, 236, .9);
    background: rgba(255, 255, 255, .86);
    backdrop-filter: blur(16px);
}

.transcript-page-brand[b-k5iiueav3l] {
    display: flex;
    align-items: center;
    gap: 12px;
    color: inherit;
    text-decoration: none;
}

.transcript-page-brand-mark[b-k5iiueav3l] {
    width: 36px;
    height: 36px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(128, 173, 190, .42);
    border-radius: 11px;
    color: #315c71;
    background: rgba(232, 244, 248, .84);
    font-family: Georgia, "Times New Roman", serif;
    font-weight: 700;
    letter-spacing: -.05em;
}

.transcript-page-brand-name[b-k5iiueav3l] {
    color: #1e4860;
    font-size: 16px;
    font-weight: 650;
}

.transcript-page-brand-context[b-k5iiueav3l] {
    padding-left: 12px;
    border-left: 1px solid #d9e5ea;
    color: #7e98a5;
    font-size: 13px;
}

.transcript-page-back[b-k5iiueav3l] {
    color: #5f91a5;
    font-size: 14px;
    font-weight: 650;
    text-decoration: none;
}

.transcript-page-back:hover[b-k5iiueav3l],
.transcript-page-breadcrumb a:hover[b-k5iiueav3l] {
    color: #315c71;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.transcript-page-layout[b-k5iiueav3l] {
    display: grid;
    grid-template-columns: 210px minmax(0, 1fr);
    min-height: calc(100vh - 72px);
}

.transcript-page-sidebar[b-k5iiueav3l] {
    padding: 26px 16px;
    border-right: 1px solid #edf1f2;
    background: rgba(255, 255, 255, .68);
}

.transcript-sidebar-motto[b-k5iiueav3l] {
    margin: 0 12px 28px;
    color: #587887;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 14px;
    font-style: italic;
    line-height: 1.45;
}

.transcript-sidebar-label[b-k5iiueav3l] {
    margin: 0 12px 12px;
    color: #93a4ad;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
}

.transcript-page-nav[b-k5iiueav3l] {
    display: grid;
    gap: 6px;
}

.transcript-nav-item[b-k5iiueav3l] {
    display: flex;
    align-items: center;
    gap: 11px;
    width: 100%;
    padding: 11px 12px;
    border: 1px solid transparent;
    border-radius: 9px;
    color: #738b96;
    font-size: 14px;
    text-decoration: none;
}

.transcript-nav-item:hover[b-k5iiueav3l] {
    color: #285d76;
    background: rgba(233, 245, 248, .62);
    border-color: #e3eff2;
}

.transcript-nav-item.is-active[b-k5iiueav3l] {
    color: #1e4f68;
    background: rgba(226, 241, 246, .7);
    border-color: #d2e5ec;
    box-shadow: inset 3px 0 0 #81abc0;
    font-weight: 650;
}

.transcript-nav-icon[b-k5iiueav3l] {
    width: 18px;
    height: 18px;
    flex: 0 0 auto;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.6;
}

.transcript-sidebar-note[b-k5iiueav3l] {
    margin: 34px 12px 0;
    padding-top: 20px;
    border-top: 1px solid #edf1f2;
    color: #9aaab0;
    font-size: 13px;
}

.transcript-sidebar-note strong[b-k5iiueav3l] {
    display: block;
    margin-top: 3px;
    color: #65808b;
    font-weight: 500;
}

.transcript-page-main[b-k5iiueav3l] {
    width: min(1240px, calc(100% - 40px));
    margin: 0 auto;
    padding: 30px 0 60px;
}

.transcript-page-breadcrumb[b-k5iiueav3l] {
    color: #9aa9af;
    font-size: 13px;
}

.transcript-page-breadcrumb a[b-k5iiueav3l] {
    color: #6e98aa;
    text-decoration: none;
}

.transcript-page-breadcrumb span[b-k5iiueav3l] {
    padding: 0 6px;
    color: #c4d1d5;
}

.transcript-page-heading[b-k5iiueav3l] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
    margin: 12px 0 26px;
}

.transcript-page-kicker[b-k5iiueav3l] {
    color: #6e98aa;
    font-size: 13px;
    font-weight: 650;
    letter-spacing: .04em;
}

.transcript-page-heading h1[b-k5iiueav3l] {
    margin: 8px 0 0;
    color: #1e4860;
    font-family: Georgia, "Times New Roman", serif;
    font-size: clamp(32px, 4vw, 48px);
    font-weight: 500;
    letter-spacing: -.045em;
    line-height: 1.05;
}

.transcript-page-heading p[b-k5iiueav3l] {
    max-width: 650px;
    margin: 10px 0 0;
    color: #82959d;
    font-size: 15px;
    line-height: 1.55;
}

.transcript-page-student[b-k5iiueav3l] {
    min-width: 190px;
    padding: 14px 16px;
    border: 1px solid rgba(176, 207, 218, .66);
    border-radius: 13px;
    background: linear-gradient(122deg, rgba(231, 245, 249, .78), rgba(235, 246, 238, .78));
}

.transcript-page-student span[b-k5iiueav3l],
.transcript-page-student small[b-k5iiueav3l] {
    display: block;
    color: #76919a;
    font-size: 13px;
}

.transcript-page-student strong[b-k5iiueav3l] {
    display: block;
    margin: 3px 0;
    color: #2d566c;
    font-size: 16px;
}

.transcript-document[b-k5iiueav3l] {
    padding: clamp(20px, 3vw, 34px);
    border: 1px solid #e2edef;
    border-radius: 18px;
    background: rgba(255, 255, 255, .76);
    box-shadow: 0 16px 44px rgba(63, 101, 117, .07);
    backdrop-filter: blur(12px);
}

.transcript-document-heading[b-k5iiueav3l] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 20px;
    padding-bottom: 22px;
    border-bottom: 1px solid #e8eff1;
}

.transcript-document-eyebrow[b-k5iiueav3l],
.transcript-document-id[b-k5iiueav3l] {
    color: #87999f;
    font-size: 13px;
}

.transcript-document-heading h2[b-k5iiueav3l] {
    margin: 5px 0 0;
    color: #315c71;
    font-family: Georgia, "Times New Roman", serif;
    font-size: clamp(24px, 3vw, 32px);
    font-weight: 500;
}

.portal-transcript-state[b-k5iiueav3l] {
    min-height: 280px;
    display: grid;
    place-items: center;
    align-content: center;
    gap: 10px;
    padding: 32px;
    color: #87999f;
    text-align: center;
}

.portal-transcript-state strong[b-k5iiueav3l] {
    color: #315c71;
    font-size: 17px;
}

.portal-transcript-state span[b-k5iiueav3l] {
    font-size: 14px;
}

.portal-loading-spinner[b-k5iiueav3l] {
    width: 26px;
    height: 26px;
    border: 3px solid #dcebed;
    border-top-color: #7ca6b6;
    border-radius: 50%;
    animation: transcript-spin-b-k5iiueav3l .9s linear infinite;
}

@keyframes transcript-spin-b-k5iiueav3l {
    to { transform: rotate(360deg); }
}

.portal-transcript-error[b-k5iiueav3l] {
    gap: 12px;
    color: #956d68;
}

.portal-transcript-error strong[b-k5iiueav3l] {
    color: #7d4e4a;
}

.portal-button[b-k5iiueav3l] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 40px;
    padding: 0 16px;
    border: 1px solid #cbdde4;
    border-radius: 9px;
    color: #315c71;
    background: rgba(255, 255, 255, .82);
    font-size: 14px;
    font-weight: 650;
    cursor: pointer;
}

.portal-button:hover[b-k5iiueav3l] {
    border-color: #8eafbd;
    background: rgba(238, 247, 249, .9);
}

.portal-transcript-summary[b-k5iiueav3l] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
    margin: 22px 0 28px;
}

.portal-transcript-summary div[b-k5iiueav3l] {
    display: grid;
    gap: 7px;
    min-height: 80px;
    padding: 15px;
    border: 1px solid #e7eff0;
    border-radius: 12px;
    background: rgba(247, 251, 251, .8);
}

.portal-transcript-summary span[b-k5iiueav3l],
.portal-transcript-table th[b-k5iiueav3l],
.portal-transcript-summary-table th[b-k5iiueav3l] {
    color: #91a0a4;
    font-size: 13px;
    font-weight: 600;
}

.portal-transcript-summary strong[b-k5iiueav3l] {
    color: #4d7d91;
    font-size: 21px;
}

.portal-transcript-years[b-k5iiueav3l] {
    display: grid;
    gap: 20px;
}

.portal-transcript-year[b-k5iiueav3l] {
    padding: 20px;
    border: 1px solid #e4edef;
    border-radius: 14px;
    background: rgba(255, 255, 255, .62);
}

.portal-transcript-year-heading[b-k5iiueav3l] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    padding-bottom: 15px;
    border-bottom: 1px solid #edf2f3;
}

.portal-transcript-year-heading h3[b-k5iiueav3l] {
    margin: 0;
    color: #4d7d91;
    font-size: 20px;
}

.portal-transcript-year-heading span[b-k5iiueav3l] {
    color: #87999f;
    font-size: 14px;
}

.portal-transcript-year h4[b-k5iiueav3l] {
    margin: 20px 0 9px;
    color: #315c71;
    font-size: 15px;
}

.portal-transcript-table-wrapper[b-k5iiueav3l],
.portal-transcript-summary-table-wrapper[b-k5iiueav3l] {
    overflow-x: auto;
    border: 1px solid #e7eff0;
    border-radius: 10px;
}

.portal-transcript-table[b-k5iiueav3l],
.portal-transcript-summary-table[b-k5iiueav3l] {
    width: 100%;
    min-width: 560px;
    border-collapse: collapse;
    text-align: left;
}

.portal-transcript-table th[b-k5iiueav3l],
.portal-transcript-table td[b-k5iiueav3l],
.portal-transcript-summary-table th[b-k5iiueav3l],
.portal-transcript-summary-table td[b-k5iiueav3l] {
    padding: 11px 13px;
    border-top: 1px solid #edf2f3;
    font-size: 14px;
}

.portal-transcript-table thead th[b-k5iiueav3l],
.portal-transcript-summary-table thead th[b-k5iiueav3l] {
    border-top: 0;
    background: rgba(245, 250, 250, .84);
}

.portal-transcript-table td[b-k5iiueav3l],
.portal-transcript-summary-table td[b-k5iiueav3l] {
    color: #567985;
}

.portal-transcript-table tbody tr:first-child td[b-k5iiueav3l],
.portal-transcript-table tbody tr:first-child th[b-k5iiueav3l],
.portal-transcript-summary-table tbody tr:first-child td[b-k5iiueav3l],
.portal-transcript-summary-table tbody tr:first-child th[b-k5iiueav3l] {
    border-top: 0;
}

.portal-simple-table[b-k5iiueav3l] {
    min-width: 300px;
}

.portal-total-row th[b-k5iiueav3l],
.portal-total-row td[b-k5iiueav3l] {
    color: #4d7d91;
    background: rgba(239, 248, 248, .72);
    font-weight: 700;
}

.portal-transcript-summary-page[b-k5iiueav3l] {
    margin-top: 28px;
    padding-top: 24px;
    border-top: 1px solid #e3edef;
}

.portal-transcript-summary-heading[b-k5iiueav3l] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.portal-transcript-summary-page h3[b-k5iiueav3l] {
    margin: 0;
    color: #4d7d91;
    font-size: 20px;
}

.portal-demo-badge[b-k5iiueav3l] {
    padding: 4px 7px;
    border-radius: 999px;
    color: #7d6942;
    background: #fff6df;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
}

.portal-transcript-calculation-note[b-k5iiueav3l] {
    display: grid;
    gap: 4px;
    margin: 14px 0;
    padding: 12px 14px;
    border-left: 3px solid #b8d5d3;
    color: #71898f;
    background: rgba(238, 247, 247, .66);
    font-size: 13px;
}

.portal-transcript-calculation-note strong[b-k5iiueav3l] {
    color: #4d7d91;
}

.portal-transcript-summary-metrics[b-k5iiueav3l] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin: 16px 0;
}

.portal-transcript-summary-metrics div[b-k5iiueav3l] {
    display: flex;
    justify-content: space-between;
    gap: 10px;
    padding: 12px 14px;
    border: 1px solid #e7eff0;
    border-radius: 10px;
    color: #87999f;
    background: rgba(247, 251, 251, .7);
    font-size: 13px;
}

.portal-transcript-summary-metrics strong[b-k5iiueav3l] {
    color: #4d7d91;
}

.portal-transcript-summary-table[b-k5iiueav3l] {
    min-width: 680px;
}

.portal-transcript-summary-table th[scope="row"][b-k5iiueav3l] {
    color: #567985;
    text-align: left;
}

.portal-transcript-end-marker[b-k5iiueav3l] {
    margin-top: 24px;
    color: #a2b2b4;
    font-size: 12px;
    letter-spacing: .05em;
    text-align: center;
}

.portal-modal-foot[b-k5iiueav3l] {
    margin: 24px 0 0;
    color: #87999f;
    font-size: 13px;
    line-height: 1.5;
}

.portal-transcript-empty[b-k5iiueav3l] {
    padding: 40px 20px;
    color: #87999f;
    text-align: center;
}

@media (max-width: 760px) {
    .transcript-page-topbar[b-k5iiueav3l] {
        min-height: 64px;
        padding: 0 16px;
    }

    .transcript-page-brand-context[b-k5iiueav3l],
    .transcript-page-back[b-k5iiueav3l] {
        display: none;
    }

    .transcript-page-main[b-k5iiueav3l] {
        width: min(100% - 28px, 1240px);
        padding: 22px 0 36px;
    }

    .transcript-page-layout[b-k5iiueav3l] {
        display: block;
        min-height: 0;
    }

    .transcript-page-sidebar[b-k5iiueav3l] {
        display: none;
    }

    .transcript-page-heading[b-k5iiueav3l] {
        display: grid;
        align-items: start;
        gap: 16px;
        margin-bottom: 20px;
    }

    .transcript-page-student[b-k5iiueav3l] {
        width: 100%;
    }

    .transcript-document[b-k5iiueav3l] {
        padding: 16px;
        border-radius: 14px;
    }

    .transcript-document-heading[b-k5iiueav3l] {
        display: grid;
        gap: 8px;
    }

    .portal-transcript-summary[b-k5iiueav3l] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 8px;
    }

    .portal-transcript-summary div[b-k5iiueav3l] {
        min-height: 74px;
        padding: 12px;
    }

    .portal-transcript-year[b-k5iiueav3l] {
        padding: 14px;
    }

    .portal-transcript-year-heading[b-k5iiueav3l] {
        display: grid;
        gap: 8px;
    }

    .portal-transcript-summary-metrics[b-k5iiueav3l] {
        grid-template-columns: 1fr;
    }

    .portal-transcript-summary-metrics div[b-k5iiueav3l] {
        align-items: center;
    }
}

/* Transcript uses the same portal shell as Overview and Announcements. */
.portal-topbar[b-k5iiueav3l] {
    min-height: 72px;
    padding: 0 28px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    color: #315c71;
    border-bottom: 1px solid #e3edef;
    background: rgba(255, 255, 255, .86);
    backdrop-filter: blur(12px);
}

.portal-brand[b-k5iiueav3l],
.portal-topbar-actions[b-k5iiueav3l],
.portal-parent-profile[b-k5iiueav3l] {
    display: flex;
    align-items: center;
}

.portal-brand[b-k5iiueav3l] {
    gap: 12px;
    color: inherit;
    text-decoration: none;
}

.portal-brand-mark[b-k5iiueav3l] {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(128, 173, 190, .42);
    border-radius: 10px;
    color: #315c71;
    background: rgba(232, 244, 248, .84);
    font-family: Georgia, "Times New Roman", serif;
    font-weight: 700;
    letter-spacing: -.04em;
}

.portal-brand-name[b-k5iiueav3l] {
    color: #173f59;
    font-size: 16px;
    font-weight: 650;
}

.portal-brand-context[b-k5iiueav3l] {
    padding-left: 12px;
    border-left: 1px solid #d9e5ea;
    color: #7e98a5;
    font-size: 13px;
}

.portal-topbar-actions[b-k5iiueav3l] {
    gap: 18px;
}

.portal-role-switch[b-k5iiueav3l] {
    display: flex;
    align-items: center;
    gap: 3px;
    padding: 3px;
    border: 1px solid #e1ecef;
    border-radius: 9px;
    background: #f7fbfc;
}

.portal-role-switch a[b-k5iiueav3l] {
    padding: 5px 8px;
    border-radius: 6px;
    color: #8298a1;
    font-size: 10px;
    text-decoration: none;
}

.portal-role-switch a:hover[b-k5iiueav3l],
.portal-role-switch a.is-current[b-k5iiueav3l] {
    color: #315c71;
    background: #e5f1f4;
}

.portal-topbar-live[b-k5iiueav3l] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: #6d8b8c;
    font-size: 13px;
}

.portal-live-dot[b-k5iiueav3l] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #8ab7a5;
    box-shadow: 0 0 0 4px rgba(138, 183, 165, .14);
}

.portal-icon-button[b-k5iiueav3l] {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    padding: 0;
    border: 0;
    border-radius: 9px;
    color: #426879;
    background: transparent;
    cursor: pointer;
}

.portal-icon-button svg[b-k5iiueav3l] {
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.6;
}

.portal-icon-button:hover[b-k5iiueav3l] {
    background: #edf5f8;
}

.portal-parent-profile[b-k5iiueav3l] {
    gap: 10px;
    padding-left: 18px;
    border-left: 1px solid #dce7eb;
    color: #426879;
    font-size: 13px;
}

.portal-parent-avatar[b-k5iiueav3l] {
    width: 32px;
    height: 32px;
    display: grid;
    place-items: center;
    border-radius: 50%;
    color: #2c6074;
    background: #e8f3f6;
    font-weight: 700;
}

.portal-chevron[b-k5iiueav3l] {
    width: 17px;
    height: 17px;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.7;
}

.portal-layout[b-k5iiueav3l] {
    display: grid;
    grid-template-columns: 210px minmax(0, 1fr);
    min-height: calc(100vh - 72px);
    background: #fff;
}

.portal-sidebar[b-k5iiueav3l] {
    padding: 26px 16px;
    border-right: 1px solid #edf1f2;
    background: rgba(255, 255, 255, .82);
}

.portal-sidebar-motto[b-k5iiueav3l] {
    margin: 0 12px 28px;
    color: #587887;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 14px;
    font-style: italic;
    line-height: 1.45;
}

.portal-sidebar-label[b-k5iiueav3l] {
    margin: 0 12px 12px;
    color: #93a4ad;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
}

.portal-nav[b-k5iiueav3l] {
    display: grid;
    gap: 6px;
}

.portal-nav-item[b-k5iiueav3l] {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    padding: 12px 13px;
    border: 1px solid transparent;
    border-radius: 12px;
    color: #738b96;
    background: transparent;
    font-size: 13px;
    text-align: left;
    text-decoration: none;
    transition: background .18s ease, border-color .18s ease, color .18s ease, transform .18s ease;
}

.portal-nav-item:hover[b-k5iiueav3l] {
    color: #285d76;
    background: rgba(233, 245, 248, .62);
    border-color: #e3eff2;
    transform: none;
}

.portal-nav-item.is-active[b-k5iiueav3l] {
    color: #1e4f68;
    background: rgba(226, 241, 246, .7);
    border-color: #d2e5ec;
    box-shadow: inset 3px 0 0 #81abc0;
    font-weight: 650;
}

.portal-nav-icon[b-k5iiueav3l] {
    width: 19px;
    height: 19px;
    flex: 0 0 auto;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.7;
}

.portal-sidebar-note[b-k5iiueav3l] {
    margin: 36px 12px 0;
    padding-top: 20px;
    border-top: 1px solid #edf1f2;
    color: #9aaab0;
    font-size: 13px;
    line-height: 1.45;
}

.portal-sidebar-note strong[b-k5iiueav3l] {
    display: block;
    margin-top: 3px;
    color: #65808b;
    font-weight: 500;
}

.portal-main[b-k5iiueav3l] {
    min-width: 0;
    padding: 38px clamp(22px, 4vw, 58px) 64px;
    background: radial-gradient(circle at 87% -4%, rgba(215, 237, 246, .66), transparent 26rem), linear-gradient(180deg, #fff 0%, #fbfdfd 100%);
}

.portal-breadcrumb[b-k5iiueav3l] {
    color: #9aa9af;
    font-size: 11px;
    letter-spacing: .01em;
}

.portal-breadcrumb span[b-k5iiueav3l] {
    padding: 0 5px;
    color: #c4d1d5;
}

.portal-page-heading[b-k5iiueav3l] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20px;
    margin: 12px 0 26px;
}

.portal-page-kicker[b-k5iiueav3l] {
    display: block;
    margin-bottom: 8px;
    color: #6e98aa;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
}

.portal-page-heading h1[b-k5iiueav3l] {
    margin: 0;
    color: #1e4860;
    font-family: Georgia, "Times New Roman", serif;
    font-size: clamp(29px, 3vw, 38px);
    font-weight: 500;
    letter-spacing: -.045em;
    line-height: 1.2;
}

.portal-page-heading p[b-k5iiueav3l] {
    margin: 9px 0 0;
    color: #82959d;
    font-size: 13px;
    line-height: 1.5;
}

.portal-mobile-nav[b-k5iiueav3l] {
    display: none;
}

@media (max-width: 760px) {
    .portal-topbar[b-k5iiueav3l] {
        min-height: 64px;
        padding: 0 16px;
    }

    .portal-brand-context[b-k5iiueav3l],
    .portal-topbar-live[b-k5iiueav3l],
    .portal-role-switch[b-k5iiueav3l],
    .portal-parent-profile > span:not(.portal-parent-avatar)[b-k5iiueav3l],
    .portal-parent-profile .portal-chevron[b-k5iiueav3l] {
        display: none;
    }

    .portal-parent-profile[b-k5iiueav3l] {
        padding-left: 0;
        border-left: 0;
    }

    .portal-layout[b-k5iiueav3l] {
        display: block;
        min-height: 0;
    }

    .portal-sidebar[b-k5iiueav3l] {
        display: none;
    }

    .portal-mobile-nav[b-k5iiueav3l] {
        position: fixed;
        z-index: 20;
        right: 12px;
        bottom: 12px;
        left: 12px;
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 6px;
        padding: 7px;
        border: 1px solid rgba(205, 225, 218, .82);
        border-radius: 16px;
        background: rgba(255, 255, 255, .88);
        box-shadow: 0 12px 30px rgba(60, 112, 105, .13);
        backdrop-filter: blur(16px);
    }

    .portal-mobile-nav .portal-nav-item[b-k5iiueav3l] {
        justify-content: center;
        gap: 6px;
        padding: 8px 5px;
        border-radius: 11px;
        font-size: 11px;
        text-align: center;
    }

    .portal-mobile-nav .portal-nav-icon[b-k5iiueav3l] {
        width: 18px;
        height: 18px;
    }

    .portal-main[b-k5iiueav3l] {
        padding: 22px 14px 88px;
    }

.portal-page-heading[b-k5iiueav3l] {
        display: grid;
        align-items: start;
        gap: 16px;
    }
}

@media (max-width: 900px) {
    .portal-topbar[b-k5iiueav3l] {
        min-height: 68px;
        padding: 0 16px;
    }

    .portal-brand[b-k5iiueav3l] {
        gap: 9px;
    }

    .portal-brand-mark[b-k5iiueav3l] {
        width: 34px;
        height: 34px;
        border-radius: 10px;
    }

    .portal-brand-name[b-k5iiueav3l] {
        font-size: 13px;
    }

    .portal-brand-context[b-k5iiueav3l],
    .portal-topbar-live[b-k5iiueav3l],
    .portal-role-switch[b-k5iiueav3l],
    .portal-parent-profile > span:not(.portal-parent-avatar)[b-k5iiueav3l],
    .portal-parent-profile .portal-chevron[b-k5iiueav3l] {
        display: none;
    }

    .portal-parent-profile[b-k5iiueav3l] {
        padding-left: 0;
        border-left: 0;
    }

    .portal-layout[b-k5iiueav3l] {
        display: block;
        min-height: 0;
    }

    .portal-sidebar[b-k5iiueav3l] {
        display: none;
    }

    .portal-mobile-nav[b-k5iiueav3l] {
        position: fixed;
        right: 10px;
        bottom: calc(10px + env(safe-area-inset-bottom));
        left: 10px;
        z-index: 30;
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 3px;
        padding: 7px;
        border: 1px solid rgba(214, 232, 231, .95);
        border-radius: 18px;
        background: rgba(255, 255, 255, .92);
        box-shadow: 0 12px 32px rgba(21, 69, 82, .18);
        backdrop-filter: blur(16px);
    }

    .portal-mobile-nav .portal-nav-item[b-k5iiueav3l] {
        flex-direction: column;
        justify-content: center;
        gap: 4px;
        padding: 7px 3px 6px;
        border-radius: 12px;
        font-size: 10px;
        text-align: center;
    }

    .portal-mobile-nav .portal-nav-icon[b-k5iiueav3l] {
        width: 18px;
        height: 18px;
    }

    .portal-main[b-k5iiueav3l] {
        padding: 25px 16px calc(102px + env(safe-area-inset-bottom));
    }

    .portal-page-heading[b-k5iiueav3l] {
        display: grid;
        align-items: start;
        gap: 16px;
        margin-bottom: 22px;
    }

    .portal-page-heading h1[b-k5iiueav3l] {
        font-size: 31px;
    }

    .portal-page-heading p[b-k5iiueav3l] {
        max-width: 30rem;
        font-size: 12px;
    }

    .transcript-page-student[b-k5iiueav3l] {
        width: 100%;
    }

    .transcript-document[b-k5iiueav3l] {
        padding: 16px;
        border-radius: 14px;
    }

    .transcript-document-heading[b-k5iiueav3l] {
        display: grid;
        gap: 8px;
    }

    .portal-transcript-summary[b-k5iiueav3l] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 8px;
    }

    .portal-transcript-summary div[b-k5iiueav3l] {
        min-height: 74px;
        padding: 12px;
    }

    .portal-transcript-year[b-k5iiueav3l] {
        padding: 14px;
    }

    .portal-transcript-year-heading[b-k5iiueav3l] {
        display: grid;
        gap: 8px;
    }

    .portal-transcript-summary-metrics[b-k5iiueav3l] {
        grid-template-columns: 1fr;
    }

    .portal-transcript-summary-metrics div[b-k5iiueav3l] {
        align-items: center;
    }

    .portal-modal-foot[b-k5iiueav3l] {
        overflow-wrap: anywhere;
    }
}

/* School visual system: transcript pages use the same shell and document treatment. */
.transcript-page[b-k5iiueav3l] { color: var(--ink); background: var(--canvas); }
.transcript-page .portal-topbar[b-k5iiueav3l] { position: relative; min-height: 92px; padding: 0 max(28px, calc((100vw - 1180px) / 2)); color: var(--navy); background: rgba(255, 255, 255, .96); border-bottom: 1px solid #edf1f3; box-shadow: none; backdrop-filter: none; }
.transcript-page .portal-brand[b-k5iiueav3l] { display: inline-flex; flex-direction: column; align-items: flex-start; gap: 3px; color: var(--navy); text-decoration: none; }
.transcript-page .portal-brand-logo[b-k5iiueav3l] { display: block; width: 220px; height: auto; }
.transcript-page .portal-brand-mark[b-k5iiueav3l], .transcript-page .portal-brand-name[b-k5iiueav3l] { display: none; }
.transcript-page .portal-brand-context[b-k5iiueav3l] { margin-left: 2px; padding-left: 0; border-left: 0; color: var(--teal); font-family: "Poppins", sans-serif; font-size: 10px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; }
.transcript-page .portal-topbar-actions[b-k5iiueav3l] { gap: 20px; color: var(--muted); font-size: 12px; }
.transcript-page .portal-topbar-live[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-live-dot[b-k5iiueav3l] { background: #6fd0a7; box-shadow: 0 0 0 4px rgba(111, 208, 167, .14); }
.transcript-page .portal-icon-button[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-icon-button:hover[b-k5iiueav3l] { color: var(--navy); background: #f3f7f9; }
.transcript-page .portal-parent-profile[b-k5iiueav3l] { color: var(--muted); border-left-color: var(--line); }
.transcript-page .portal-parent-avatar[b-k5iiueav3l] { color: var(--navy); background: #e8eef4; }
.transcript-page .portal-chevron[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-role-switch[b-k5iiueav3l] { border-color: var(--line); background: #f7f9fb; }
.transcript-page .portal-role-switch a[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-role-switch a:hover[b-k5iiueav3l], .transcript-page .portal-role-switch a.is-current[b-k5iiueav3l] { color: var(--navy); background: #e9eef3; }
.transcript-page .portal-layout[b-k5iiueav3l] { grid-template-columns: 236px minmax(0, 1fr); min-height: calc(100vh - 92px); background: var(--canvas); }
.transcript-page .portal-sidebar[b-k5iiueav3l] { position: sticky; top: 0; height: calc(100vh - 92px); padding: 30px 18px; background: rgba(255, 255, 255, .78); border-right-color: var(--line); }
.transcript-page .portal-sidebar-motto[b-k5iiueav3l] { max-width: 170px; margin: 0 12px 40px; color: var(--teal); font-family: "Cinzel", Georgia, serif; font-size: 13px; font-style: normal; line-height: 1.45; }
.transcript-page .portal-sidebar-label[b-k5iiueav3l] { margin: 0 12px 14px; color: var(--muted); font-size: 10px; letter-spacing: .12em; }
.transcript-page .portal-nav[b-k5iiueav3l] { gap: 4px; }
.transcript-page .portal-nav-item[b-k5iiueav3l] { padding: 12px 13px; border-radius: 10px; color: #667b8b; }
.transcript-page .portal-nav-item:hover[b-k5iiueav3l] { color: var(--navy); background: #f4f7f9; border-color: #e4eaf0; }
.transcript-page .portal-nav-item.is-active[b-k5iiueav3l] { color: var(--navy); background: #e9eef3; border-color: #d9e2eb; box-shadow: inset 3px 0 0 var(--teal); }
.transcript-page .portal-sidebar-note[b-k5iiueav3l] { margin: 36px 12px 0; color: #94a2ad; border-top-color: var(--line); }
.transcript-page .portal-sidebar-note strong[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-main[b-k5iiueav3l] { width: min(1180px, calc(100% - 44px)); margin: 0 auto; padding: 46px 0 36px; background: transparent; }
.transcript-page .portal-breadcrumb[b-k5iiueav3l] { color: #94a2ad; font-size: 11px; }
.transcript-page .portal-breadcrumb span[b-k5iiueav3l] { color: #c6d0da; }
.transcript-page .portal-page-heading[b-k5iiueav3l] { margin: 12px 0 26px; }
.transcript-page .portal-page-kicker[b-k5iiueav3l] { margin-bottom: 9px; color: var(--teal); font-size: 11px; letter-spacing: .14em; }
.transcript-page .portal-page-heading h1[b-k5iiueav3l] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-size: clamp(34px, 4vw, 50px); font-weight: 400; letter-spacing: -.045em; line-height: 1.12; }
.transcript-page .portal-page-heading p[b-k5iiueav3l] { color: var(--muted); font-size: 15px; }
.transcript-page .portal-button[b-k5iiueav3l] { min-height: 44px; padding: 0 17px; border: 1px solid #b9c6d2; border-radius: 999px; color: var(--navy); background: #fff; font-size: 13px; font-weight: 700; }
.transcript-page .portal-button:hover[b-k5iiueav3l] { border-color: #9eafbf; color: var(--navy); background: #f0f1f2; }
.transcript-page .transcript-page-student[b-k5iiueav3l] { min-width: 190px; padding: 14px 16px; border: 1px solid var(--line-strong); border-radius: var(--radius-lg, 12px); background: #fff; }
.transcript-page .transcript-page-student span[b-k5iiueav3l], .transcript-page .transcript-page-student small[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .transcript-page-student strong[b-k5iiueav3l] { color: var(--navy); font-family: "Poppins", sans-serif; }
.transcript-page .transcript-document[b-k5iiueav3l] { padding: 25px 27px 28px; border: 1px solid var(--line); border-radius: var(--radius-lg, 12px); background: #fff; box-shadow: none; backdrop-filter: none; }
.transcript-page .transcript-document-heading[b-k5iiueav3l] { padding-bottom: 16px; border-bottom-color: #edf1f4; }
.transcript-page .transcript-document-eyebrow[b-k5iiueav3l], .transcript-page .transcript-document-id[b-k5iiueav3l] { color: var(--muted); font-size: 11px; }
.transcript-page .transcript-document-heading h2[b-k5iiueav3l] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-size: 30px; font-weight: 400; }
.transcript-page .portal-transcript-state[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-transcript-state strong[b-k5iiueav3l] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.transcript-page .portal-loading-spinner[b-k5iiueav3l] { border-color: #e8eef2; border-top-color: var(--teal); }
.transcript-page .portal-transcript-error[b-k5iiueav3l], .transcript-page .portal-transcript-error strong[b-k5iiueav3l] { color: var(--danger); }
.transcript-page .portal-transcript-summary div[b-k5iiueav3l] { border-color: var(--line); border-radius: 10px; background: #fbfcfd; }
.transcript-page .portal-transcript-summary span[b-k5iiueav3l], .transcript-page .portal-transcript-table th[b-k5iiueav3l], .transcript-page .portal-transcript-summary-table th[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-transcript-summary strong[b-k5iiueav3l] { color: var(--navy); }
.transcript-page .portal-transcript-year[b-k5iiueav3l] { border-color: var(--line); border-radius: 12px; background: #fff; }
.transcript-page .portal-transcript-year-heading[b-k5iiueav3l] { border-bottom-color: #edf1f4; }
.transcript-page .portal-transcript-year-heading h3[b-k5iiueav3l], .transcript-page .portal-transcript-year h4[b-k5iiueav3l] { color: var(--navy); font-family: "Cinzel", Georgia, serif; font-weight: 400; }
.transcript-page .portal-transcript-year-heading span[b-k5iiueav3l] { color: var(--muted); }
.transcript-page .portal-transcript-table-wrapper[b-k5iiueav3l], .transcript-page .portal-transcript-summary-table-wrapper[b-k5iiueav3l] { border-color: var(--line); }
.transcript-page .portal-transcript-table th[b-k5iiueav3l], .transcript-page .portal-transcript-table td[b-k5iiueav3l] { border-top-color: #edf1f4; }
.transcript-page .portal-transcript-table td[b-k5iiueav3l] { color: #40566b; }
.transcript-page .portal-grade[b-k5iiueav3l], .transcript-page .portal-total-row th[b-k5iiueav3l], .transcript-page .portal-total-row td[b-k5iiueav3l], .transcript-page .portal-transcript-summary-page h3[b-k5iiueav3l] { color: var(--navy); }
.transcript-page .portal-transcript-summary-page[b-k5iiueav3l] { border-top-color: var(--line); }
.transcript-page .portal-transcript-calculation-note[b-k5iiueav3l] { border-color: #ead9b2; color: #73551d; background: #fffaf0; }

@media (max-width: 900px) {
    .transcript-page .portal-topbar[b-k5iiueav3l] { min-height: 70px; padding: 0 22px; }
    .transcript-page .portal-brand-logo[b-k5iiueav3l] { width: 185px; }
    .transcript-page .portal-brand-context[b-k5iiueav3l] { font-size: 9px; }
    .transcript-page .portal-layout[b-k5iiueav3l] { min-height: calc(100vh - 70px); }
    .transcript-page .portal-sidebar[b-k5iiueav3l] { height: auto; }
    .transcript-page .portal-main[b-k5iiueav3l] { width: min(100% - 28px, 650px); padding: 31px 0 calc(102px + env(safe-area-inset-bottom)); }
    .transcript-page .portal-page-heading h1[b-k5iiueav3l] { font-size: 36px; }
    .transcript-page .transcript-document[b-k5iiueav3l] { padding: 21px 19px 22px; border-radius: 14px; }
}

@media (max-width: 480px) {
    .transcript-page .portal-topbar[b-k5iiueav3l] { padding: 0 12px; }
    .transcript-page .portal-main[b-k5iiueav3l] { width: calc(100% - 20px); padding-top: 22px; }
}

@media (min-width: 1600px) {
    .transcript-page .portal-topbar[b-k5iiueav3l] { padding: 0 clamp(28px, 4vw, 72px); }
    .transcript-page .portal-main[b-k5iiueav3l] { width: auto; margin: 0; padding: 46px clamp(28px, 4vw, 72px) 36px; }
}

/* 返回学生名单：放在面包屑上面，和名单页的按钮同一种风格的文字链接 */
.transcript-back[b-k5iiueav3l] { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 12px; color: var(--navy); font-size: 13px; font-weight: 600; text-decoration: none; }
.transcript-back:hover[b-k5iiueav3l] { color: var(--teal); text-decoration: underline; }
/* /Components/PeopleDirectory.razor.rz.scp.css */
.people-main[b-habr9gc5jx] { min-width: 0; padding: 31px 38px 60px; }
.people-breadcrumb[b-habr9gc5jx] { color: #9aa9af; font-size: 12px; }
.people-breadcrumb span[b-habr9gc5jx] { padding: 0 5px; color: #c4d1d5; }
.people-heading[b-habr9gc5jx] { margin: 8px 0 22px; }
.people-heading h1[b-habr9gc5jx] { margin: 0; color: #1e4860; font-size: 30px; font-weight: 600; letter-spacing: -.04em; }
.people-heading p[b-habr9gc5jx] { max-width: 680px; margin: 8px 0 0; color: #82959d; font-size: 13px; line-height: 1.5; }
.people-error[b-habr9gc5jx] { margin: 0 0 18px; padding: 10px 14px; border: 1px solid #e8c9c9; border-radius: 8px; color: #a32c2c; background: #fdf3f3; font-size: 13px; }

.people-layout[b-habr9gc5jx] { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 18px; align-items: start; }

/* 左边：类型、状态、搜索和名单 */
.people-list-panel[b-habr9gc5jx] { padding: 16px 14px; border: 1px solid #e8eff1; border-radius: 11px; background: rgba(255, 255, 255, .8); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); }
.people-field[b-habr9gc5jx] { margin-bottom: 12px; }
.people-field label[b-habr9gc5jx] { display: block; margin-bottom: 4px; color: #6e98aa; font-size: 11px; font-weight: 600; }
.people-field select[b-habr9gc5jx] { width: 100%; min-height: 39px; padding: 0 10px; border: 1px solid #cbdde4; border-radius: 8px; color: #315c71; background: #fff; font: inherit; font-size: 13px; }
.people-field select:disabled[b-habr9gc5jx] { color: #315c71; -webkit-text-fill-color: #315c71; background: #f4f7f9; opacity: 1; cursor: default; }
.people-search[b-habr9gc5jx] { display: flex; align-items: stretch; margin-bottom: 8px; border: 1px solid #cbdde4; border-radius: 8px; background: #fff; }
.people-search:focus-within[b-habr9gc5jx] { border-color: #81abc0; }
.people-search input[type="search"][b-habr9gc5jx] { min-width: 0; flex: 1; min-height: 39px; padding: 0 10px; border: 0; border-radius: 8px; color: #315c71; background: transparent; font: inherit; font-size: 13px; outline: none; }
.people-search button[b-habr9gc5jx] { width: 40px; display: grid; place-items: center; border: 0; color: #315c71; background: transparent; cursor: pointer; }
.people-search svg[b-habr9gc5jx] { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; }
.people-count[b-habr9gc5jx] { margin: 0 0 6px; color: #8a9ca1; font-size: 11px; }
.people-list[b-habr9gc5jx] { max-height: calc(100vh - 380px); min-height: 220px; margin: 0; padding: 0; overflow-y: auto; border-top: 1px solid #edf2f3; list-style: none; }
.people-item[b-habr9gc5jx] { width: 100%; display: flex; align-items: baseline; gap: 8px; padding: 9px 10px; border: 0; border-bottom: 1px solid #f1f5f6; color: #315c71; background: transparent; font: inherit; font-size: 13px; text-align: left; cursor: pointer; }
.people-item:hover[b-habr9gc5jx] { background: #f0f8f9; }
.people-item.is-selected[b-habr9gc5jx] { background: #e6f3f6; box-shadow: inset 3px 0 0 #81abc0; font-weight: 600; }
.people-item small[b-habr9gc5jx] { margin-left: auto; color: #92a3a7; font-size: 10px; font-weight: 400; white-space: nowrap; }
.people-item small.is-warning[b-habr9gc5jx], .people-facts dd.is-warning[b-habr9gc5jx], .people-rows small.is-warning[b-habr9gc5jx] { color: #a32c2c; }

/* 右边：详情 */
.people-detail[b-habr9gc5jx] { min-height: 260px; padding: 20px 22px; border: 1px solid #e8eff1; border-radius: 11px; background: rgba(255, 255, 255, .8); box-shadow: 0 5px 16px rgba(63, 101, 117, .035); }
.people-detail-head[b-habr9gc5jx] { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.people-detail-head h2[b-habr9gc5jx] { margin: 0; color: #1e4860; font-size: 22px; font-weight: 600; letter-spacing: -.03em; }
.people-detail-head p[b-habr9gc5jx] { margin: 5px 0 0; color: #82959d; font-size: 12px; }
.people-you[b-habr9gc5jx] { color: #92a3a7; font-size: 12px; font-weight: 400; }
.people-detail h3[b-habr9gc5jx] { margin: 22px 0 8px; color: #6e98aa; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.people-facts[b-habr9gc5jx] { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 12px 18px; margin: 18px 0 0; }
.people-facts dt[b-habr9gc5jx] { color: #8a9ca1; font-size: 11px; }
.people-facts dd[b-habr9gc5jx] { margin: 3px 0 0; color: #315c71; font-size: 13px; overflow-wrap: anywhere; }
.people-rows[b-habr9gc5jx] { margin: 0; padding: 0; list-style: none; }
.people-rows li[b-habr9gc5jx] { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 9px 0; border-top: 1px solid #edf2f3; color: #476f7e; font-size: 13px; }
.people-rows strong[b-habr9gc5jx] { color: #315c71; font-weight: 600; }
.people-rows small[b-habr9gc5jx] { color: #92a3a7; font-size: 11px; }
.people-rows span[b-habr9gc5jx] { margin-left: auto; color: #6e7f86; font-size: 12px; }
.people-muted[b-habr9gc5jx] { margin: 0; color: #8b9da2; font-size: 12px; }
.people-empty[b-habr9gc5jx] { min-height: 120px; display: grid; place-items: center; color: #8b9da2; font-size: 12px; text-align: center; }

.people-button[b-habr9gc5jx] { display: inline-flex; align-items: center; min-height: 36px; padding: 0 16px; text-decoration: none; border: 1px solid #a7c3cf; border-radius: 8px; color: #315c71; background: #e6f3f6; font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.people-button:hover:not(:disabled)[b-habr9gc5jx] { border-color: #8eafbd; background: #dcedf2; }
.people-button:disabled[b-habr9gc5jx] { cursor: wait; opacity: .55; }

@media (max-width: 900px) {
    .people-main[b-habr9gc5jx] { padding: 22px 16px 48px; }
    .people-layout[b-habr9gc5jx] { grid-template-columns: minmax(0, 1fr); }
    .people-list[b-habr9gc5jx] { max-height: 320px; }
}

/* 详情右上角的几个按钮（成绩单、View as……）排成一行 */
.people-detail-actions[b-habr9gc5jx] { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }

/* 员工名单里名字旁边是职位，可能比较长：超出就省略，不挤掉名字 */
.people-item small[b-habr9gc5jx] { max-width: 55%; overflow: hidden; text-overflow: ellipsis; }

/* 员工详情里的"这周课表"：标题和翻周按钮一行 */
.people-week-head[b-habr9gc5jx] { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.people-week-head h3[b-habr9gc5jx] { margin: 0; }
.people-week-nav[b-habr9gc5jx] { display: flex; flex-wrap: wrap; gap: 6px; }
.people-week-nav .people-button[b-habr9gc5jx] { min-height: 30px; padding: 0 11px; font-size: 11px; }
.people-week-note[b-habr9gc5jx] { margin: 8px 0 12px; }

/* 员工详情里的两块表（本学年班级、这周课表）：各放在自己的卡片里 */
.people-card[b-habr9gc5jx] { margin-top: 22px; padding: 16px 18px; border: 1px solid #e8eff1; border-radius: 10px; background: #fff; }
.people-card-head[b-habr9gc5jx] { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.people-card-head h3[b-habr9gc5jx] { margin: 0; }
.people-card-count[b-habr9gc5jx] { padding: 3px 9px; border-radius: 999px; color: #315c71; background: #eef3f8; font-size: 11px; font-weight: 600; }
.people-table-scroll[b-habr9gc5jx] { overflow-x: auto; }
.people-table[b-habr9gc5jx] { width: 100%; border-collapse: collapse; font-size: 13px; }
.people-table th[b-habr9gc5jx], .people-table td[b-habr9gc5jx] { padding: 9px 10px; border-top: 1px solid #edf2f3; text-align: left; vertical-align: top; }
.people-table thead th[b-habr9gc5jx] { border-top: 0; color: #6e98aa; font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.people-table td[b-habr9gc5jx] { color: #476f7e; }
.people-table td.is-course[b-habr9gc5jx] { color: #315c71; font-weight: 600; }
.people-table th:last-child[b-habr9gc5jx], .people-table td:last-child[b-habr9gc5jx] { text-align: right; }
/* /Components/PortalLastUpdated.razor.rz.scp.css */
.portal-last-updated[b-0adykn07iu] {
    display: block;
    margin-top: 4px;
    color: #6d7890;
    font-size: 12px;
}
/* /Components/StaffWeekSchedule.razor.rz.scp.css */
.week-empty[b-gtadfkjrus] { margin: 4px 0 0; color: #8b9da2; font-size: 12px; }
.week-scroll[b-gtadfkjrus] { overflow-x: auto; }
.week-table[b-gtadfkjrus] { width: 100%; min-width: 640px; border-collapse: collapse; table-layout: fixed; font-size: 12px; }
.week-table th[b-gtadfkjrus], .week-table td[b-gtadfkjrus] { padding: 8px 10px; border-top: 1px solid #edf1f4; text-align: left; vertical-align: top; }
.week-table thead th[b-gtadfkjrus] { border-top: 0; color: #6e98aa; font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.week-table thead th small[b-gtadfkjrus] { display: block; margin-top: 2px; font-weight: 500; letter-spacing: 0; text-transform: none; }
.week-table tbody th[b-gtadfkjrus] { width: 92px; color: #6e98aa; font-weight: 600; white-space: nowrap; }
.week-table .is-today[b-gtadfkjrus] { background: #eef3f8; }
.week-class strong[b-gtadfkjrus] { display: block; color: #233b55; font-weight: 600; }
.week-class small[b-gtadfkjrus] { display: block; margin-top: 2px; color: #82959d; font-size: 10px; }
.week-class + .week-class[b-gtadfkjrus] { margin-top: 8px; }
