/* ===== 班主任工作台 全局样式（治愈系多巴胺 pastel 风格） ===== */

:root {
    /* 主色：糖果粉；辅助：薄荷绿 / 淡紫 / 奶黄 / 天蓝 */
    --brand: #ff5c8a;
    --brand-darker: #ec4176;
    --brand-soft: rgba(255, 92, 138, .14);
    --rose: #ff7aa2;
    --rose-soft: rgba(255, 122, 162, .2);
    --mint: #3fc49a;
    --mint-soft: rgba(63, 196, 154, .14);
    --lavender: #9b8cf0;
    --lavender-soft: rgba(155, 140, 240, .16);
    --cream: #f2b441;
    --cream-soft: rgba(242, 180, 65, .2);
    --sky: #4fb0e8;
    --sky-soft: rgba(79, 176, 232, .15);
    /* 语义色保持可辨：收入绿 / 支出红 */
    --income: #1f9d6b;
    --expense: #d6455b;
    --ink: #453851;
    --ink-muted: #8b7f96;
    --line: rgba(190, 120, 165, .22);
    --glass-bg: rgba(255, 255, 255, .68);
    --glass-line: rgba(255, 255, 255, .7);
    --sidebar-w: 244px;
    --radius: 1.3rem;
    --card-shadow: 0 10px 30px rgba(255, 92, 138, .16);
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;
    color: var(--ink);
    background: #ffe9f2;
}

/* 固定渐变底色：粉占比更高，粉 → 粉桃 → 桃 → 薄荷 → 淡紫 → 天蓝 */
body::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -2;
    background: linear-gradient(130deg,
        #ffd3e4 0%, #ffe0ec 20%, #ffe6d9 40%,
        #e0f7ec 60%, #eee3fd 80%, #ddebfb 100%);
}

a { color: var(--brand); }
a:hover { color: var(--brand-darker); }

/* ---------- 背景装饰：漂浮的小图案（云/星/爱心/花/泡泡） ---------- */

.bg-deco {
    position: fixed;
    inset: 0;
    z-index: -1;
    overflow: hidden;
    pointer-events: none;
}
.bg-deco svg {
    position: absolute;
    opacity: .5;
    animation: deco-float 9s ease-in-out infinite;
}
.bg-deco .deco-1 { left: 6%;  top: 12%; animation-duration: 11s; }
.bg-deco .deco-2 { right: 8%; top: 8%;  animation-duration: 13s; animation-delay: -3s; }
.bg-deco .deco-3 { left: 14%; bottom: 16%; animation-duration: 10s; animation-delay: -5s; }
.bg-deco .deco-4 { right: 12%; bottom: 22%; animation-duration: 12s; animation-delay: -2s; }
.bg-deco .deco-5 { left: 44%; top: 5%; animation-duration: 14s; animation-delay: -7s; }
.bg-deco .deco-6 { right: 38%; bottom: 7%; animation-duration: 9s; animation-delay: -4s; }
.bg-deco .deco-7 { left: 32%; top: 58%; animation-duration: 15s; animation-delay: -6s; }
.bg-deco .deco-8 { right: 22%; top: 42%; animation-duration: 10s; animation-delay: -8s; }

@keyframes deco-float {
    0%, 100% { transform: translateY(0) rotate(0deg); }
    50% { transform: translateY(-14px) rotate(4deg); }
}

@media (prefers-reduced-motion: reduce) {
    .bg-deco svg { animation: none; }
}

/* ---------- 布局：左侧栏 + 内容区 ---------- */

.app-sidebar {
    position: fixed;
    inset: 0 auto 0 0;
    width: var(--sidebar-w);
    background: rgba(255, 255, 255, .72);
    backdrop-filter: blur(14px) saturate(1.5);
    -webkit-backdrop-filter: blur(14px) saturate(1.5);
    border-right: 1px solid var(--glass-line);
    display: flex;
    flex-direction: column;
    z-index: 1030;
}

.sidebar-brand {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: 1.1rem 1.25rem;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--ink);
    border-bottom: 1px solid var(--line);
}
.sidebar-brand .bi { color: var(--brand); font-size: 1.3rem; }

.sidebar-user {
    display: flex;
    align-items: center;
    gap: .55rem;
    padding: .7rem 1.25rem;
    font-size: .88rem;
    color: var(--ink-muted);
    border-bottom: 1px solid var(--line);
}
.sidebar-user .bi { font-size: 1.2rem; }

.side-nav {
    flex: 1;
    overflow-y: auto;
    padding: .75rem;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.side-nav .nav-link {
    display: flex;
    align-items: center;
    gap: .65rem;
    padding: .55rem .75rem;
    border-radius: 999px;
    color: var(--ink-muted);
    font-size: .92rem;
    text-decoration: none;
}
.side-nav .nav-link .bi { font-size: 1.05rem; width: 1.25rem; text-align: center; }
.side-nav .nav-link:hover { background: rgba(255, 255, 255, .75); color: var(--ink); }
.side-nav .nav-link.active {
    background: linear-gradient(135deg, var(--rose), var(--brand));
    color: #fff;
    font-weight: 600;
    box-shadow: 0 6px 16px rgba(255, 92, 138, .38);
}

.sidebar-footer {
    padding: .75rem;
    border-top: 1px solid var(--line);
}
.btn-logout {
    display: flex;
    align-items: center;
    gap: .65rem;
    width: 100%;
    padding: .55rem .75rem;
    border: 0;
    border-radius: 999px;
    background: none;
    color: var(--ink-muted);
    font-size: .92rem;
}
.btn-logout:hover { background: rgba(214, 69, 91, .1); color: var(--expense); }
.btn-logout .bi { font-size: 1.05rem; width: 1.25rem; text-align: center; }

.app-offcanvas {
    width: var(--sidebar-w);
    background: rgba(255, 255, 255, .85);
    backdrop-filter: blur(14px) saturate(1.5);
    -webkit-backdrop-filter: blur(14px) saturate(1.5);
}
.app-offcanvas .offcanvas-body { display: flex; flex-direction: column; }

.app-main { min-height: 100vh; }
@media (min-width: 992px) {
    .app-main { margin-left: var(--sidebar-w); }
}

.app-topbar {
    position: sticky;
    top: 0;
    z-index: 1020;
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .6rem 1rem;
    background: rgba(255, 255, 255, .72);
    backdrop-filter: blur(14px) saturate(1.5);
    -webkit-backdrop-filter: blur(14px) saturate(1.5);
    border-bottom: 1px solid var(--glass-line);
}
.app-topbar .btn .bi { margin-right: 0; font-size: 1.15rem; }
.topbar-brand { font-weight: 700; color: var(--ink); text-decoration: none; }

.content-wrap {
    max-width: 1200px;
    margin: 0 auto;
    padding: 1.25rem 1rem 3rem;
}
@media (min-width: 992px) {
    .content-wrap { padding: 2rem 2rem 4rem; }
}

/* ---------- 子页面返回按钮：渐变圆钮 + 文字 ---------- */

.back-pill {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    margin-bottom: .9rem;
    text-decoration: none;
    font-size: .86rem;
    font-weight: 700;
    color: var(--brand-darker);
}
.back-pill .back-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.3rem;
    height: 2.3rem;
    border-radius: 50%;
    color: #fff;
    font-size: 1.05rem;
    background: linear-gradient(135deg, var(--brand) 0%, var(--rose, #ff7aa2) 100%);
    box-shadow: 0 5px 12px rgba(255, 92, 138, .35),
                inset 0 1px 0 rgba(255, 255, 255, .4);
    transition: transform .18s cubic-bezier(.34, 1.56, .64, 1), box-shadow .18s ease;
}
.back-pill:hover { color: var(--brand); }
.back-pill:hover .back-ico {
    transform: translateX(-3px) scale(1.08);
    box-shadow: 0 8px 18px rgba(255, 92, 138, .45),
                inset 0 1px 0 rgba(255, 255, 255, .4);
}
.back-pill:active .back-ico { transform: scale(.92); }

/* ---------- 页头 ---------- */

.page-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    flex-wrap: wrap;
    gap: .75rem 1rem;
    margin-bottom: 1.25rem;
}
.page-title { font-size: 1.4rem; font-weight: 650; margin: 0; }
.page-subtitle { color: var(--ink-muted); font-size: .9rem; margin: .3rem 0 0; }
.page-actions { display: flex; gap: .5rem; flex-wrap: wrap; }

/* ---------- 毛玻璃卡片 ---------- */

.card {
    background: var(--glass-bg);
    backdrop-filter: blur(12px) saturate(1.4);
    -webkit-backdrop-filter: blur(12px) saturate(1.4);
    border: 1px solid var(--glass-line);
    border-radius: var(--radius);
    box-shadow: var(--card-shadow);
}
.card-header {
    background: transparent;
    font-weight: 600;
    padding: .8rem 1.25rem;
    border-bottom: 1px solid var(--line);
}
.card-header:first-child { border-radius: calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0; }
.list-group-item {
    background: transparent;
    border-color: var(--line);
}

/* ---------- 表格 ---------- */

.table { margin-bottom: 0; --bs-table-hover-bg: rgba(255, 92, 138, .06); --bs-table-bg: transparent; }
.table > thead th {
    font-size: .78rem;
    font-weight: 600;
    letter-spacing: .02em;
    color: var(--ink-muted);
    background: rgba(255, 255, 255, .45);
    border-bottom: 1px solid var(--line);
    white-space: nowrap;
}
.table > tbody > tr > td { border-color: var(--line); vertical-align: middle; }
.card > .table-responsive { border-radius: 0 0 calc(var(--radius) - 1px) calc(var(--radius) - 1px); }
.card > .table-responsive .table thead th:first-child { padding-left: 1.25rem; }
.card > .table-responsive .table tbody td:first-child { padding-left: 1.25rem; }

/* ---------- stat 卡 ---------- */

.stat-card .card-body { display: flex; align-items: center; gap: 1rem; padding: 1.1rem 1.25rem; }
.stat-icon {
    flex: 0 0 auto;
    width: 3rem;
    height: 3rem;
    border-radius: 1.1rem;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.4rem;
    box-shadow: 0 4px 12px rgba(255, 92, 138, .14);
}
.stat-icon-primary { background: var(--brand-soft); color: var(--brand); }
.stat-icon-rose { background: var(--rose-soft); color: var(--brand-darker); }
.stat-icon-success { background: var(--mint-soft); color: var(--income); }
.stat-icon-danger { background: rgba(214, 69, 91, .12); color: var(--expense); }
.stat-icon-info { background: var(--sky-soft); color: #2275ad; }
.stat-icon-lavender { background: var(--lavender-soft); color: #6b5cc4; }
.stat-label { font-size: .82rem; color: var(--ink-muted); }
.stat-value { font-size: 1.5rem; font-weight: 700; line-height: 1.3; }

/* ---------- soft badge ---------- */

.badge { border-radius: 999px; box-shadow: 0 2px 6px rgba(255, 92, 138, .1); }
.text-primary { color: var(--brand) !important; }
.badge-soft-primary { background: var(--brand-soft); color: var(--brand-darker); }
.badge-soft-success { background: var(--mint-soft); color: var(--income); }
.badge-soft-danger { background: rgba(214, 69, 91, .14); color: var(--expense); }
.badge-soft-warning { background: var(--cream-soft); color: #96660a; }
.badge-soft-secondary { background: var(--lavender-soft); color: #6b5cc4; }
.badge-soft-info { background: var(--sky-soft); color: #2275ad; }

/* ---------- 档案基础资料 definition list ---------- */

.info-grid { display: grid; grid-template-columns: 1fr; margin: 0; }
@media (min-width: 768px) { .info-grid { grid-template-columns: 1fr 1fr; column-gap: 2rem; } }
.info-item {
    display: flex;
    gap: 1rem;
    padding: .55rem 0;
    border-bottom: 1px dashed var(--line);
}
.info-item dt { flex: 0 0 7rem; color: var(--ink-muted); font-weight: 500; font-size: .88rem; }
.info-item dd { flex: 1; margin: 0; word-break: break-all; }

/* ---------- 谈话时间线 ---------- */

.timeline { list-style: none; margin: 0; padding: .25rem 0; position: relative; }
.timeline::before {
    content: "";
    position: absolute;
    left: .42rem;
    top: .6rem;
    bottom: .6rem;
    width: 2px;
    background: var(--line);
}
.timeline-item { position: relative; padding: 0 0 1.4rem 1.9rem; }
.timeline-item:last-child { padding-bottom: .25rem; }
.timeline-item::before {
    content: "";
    position: absolute;
    left: .1rem;
    top: .3rem;
    width: .7rem;
    height: .7rem;
    border-radius: 50%;
    background: #fff;
    border: 2px solid var(--brand);
}
.timeline-meta { font-size: .85rem; color: var(--ink-muted); display: flex; align-items: center; flex-wrap: wrap; gap: .35rem; }
.timeline-content { margin-top: .35rem; }

/* ---------- 图片网格 ---------- */

.photo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: .75rem; }
.photo-grid a { display: block; border-radius: 1rem; overflow: hidden; border: 1px solid var(--glass-line); }
.photo-grid img {
    width: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    display: block;
    transition: transform .2s ease;
}
.photo-grid a:hover img { transform: scale(1.04); }

.thumb-grid { display: flex; flex-wrap: wrap; gap: .5rem; }
.thumb-grid img {
    width: 96px;
    height: 96px;
    object-fit: cover;
    border-radius: .85rem;
    border: 1px solid var(--glass-line);
}
.thumb-grid a:hover img { border-color: var(--brand); }

/* ---------- 首页 TODO ---------- */

.todo-section-title {
    display: flex;
    align-items: center;
    gap: .5rem;
    font-size: 1rem;
    font-weight: 650;
    margin: 1.5rem 0 .75rem;
}
.todo-section-title .badge { font-weight: 600; }

/* 待办卡片：配合 row-cols 网格使用 */
.todo-card {
    height: 100%;
    background: var(--glass-bg);
    backdrop-filter: blur(12px) saturate(1.4);
    -webkit-backdrop-filter: blur(12px) saturate(1.4);
    border: 1px solid var(--glass-line);
    border-radius: var(--radius);
    box-shadow: var(--card-shadow);
    padding: .9rem 1.1rem;
    display: flex;
    flex-direction: column;
    gap: .5rem;
}
.todo-card.todo-overdue { border-left: 4px solid var(--expense); }
.todo-card .todo-title { font-weight: 600; font-size: .98rem; }
.todo-card .todo-due { font-size: .8rem; color: var(--ink-muted); }
.todo-card.todo-overdue .todo-due { color: var(--expense); font-weight: 600; }
.todo-card .todo-remark { font-size: .85rem; color: var(--ink-muted); flex: 1; }
.todo-actions { display: flex; gap: .4rem; flex-wrap: wrap; }
.todo-actions form { display: inline; margin: 0; }

/* ---------- 学生多选控件 ---------- */

.picker-filter { position: relative; margin-bottom: .6rem; }
.picker-filter .bi {
    position: absolute;
    left: .75rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ink-muted);
}
.picker-filter input { padding-left: 2.2rem; }

.picker-box {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: .75rem;
    max-height: 320px;
    overflow-y: auto;
    background: rgba(255, 255, 255, .5);
}
.student-chip {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: .15rem .4rem;
    height: 100%;
    padding: .45rem .6rem;
    border: 1px solid var(--line);
    border-radius: .85rem;
    background: rgba(255, 255, 255, .75);
    font-size: .9rem;
    cursor: pointer;
    transition: border-color .15s, background .15s, box-shadow .15s;
}
.student-chip:hover { border-color: #ffb3c9; }
.student-chip.is-selected {
    border-color: var(--brand);
    background: var(--brand-soft);
    box-shadow: inset 0 0 0 1px var(--brand);
}
.student-chip .chip-no { color: var(--ink-muted); font-size: .78rem; }

/* ---------- 身份识别方式 ---------- */

.identify-card {
    display: block;
    width: 100%;
    height: 100%;
    padding: .7rem .9rem;
    border: 1.5px solid var(--line);
    border-radius: var(--radius);
    background: rgba(255, 255, 255, .6);
    cursor: pointer;
    transition: border-color .15s, background .15s, box-shadow .15s;
}
.identify-card small { display: block; color: var(--ink-muted); margin-top: .15rem; }
.identify-card:hover { border-color: #ffb3c9; }
.btn-check:checked + .identify-card {
    border-color: var(--brand);
    background: var(--brand-soft);
    box-shadow: inset 0 0 0 1px var(--brand);
}
.roster-box { max-height: 50vh; }

/* ---------- 空状态 ---------- */

.empty-state { text-align: center; padding: 3rem 1rem; color: var(--ink-muted); }
.empty-state .empty-art { display: block; margin: 0 auto .75rem; }
.empty-state .bi { display: block; font-size: 2.5rem; color: #d8c9e0; margin-bottom: .75rem; }
.empty-state p { margin-bottom: 0; }

/* ---------- 分页 ---------- */

.pagination {
    gap: .3rem;
    --bs-pagination-color: var(--brand);
    --bs-pagination-hover-color: var(--brand-darker);
    --bs-pagination-focus-color: var(--brand-darker);
    --bs-pagination-active-bg: var(--brand);
    --bs-pagination-active-border-color: var(--brand);
}
.pagination .page-link { border-radius: .7rem; border-color: var(--line); background: var(--glass-bg); }
.pagination .page-item.disabled .page-link { color: #c3b6cd; }
.pagination .page-info .page-link { color: var(--ink-muted); }

/* ---------- 主色按钮 / 表单 ---------- */

.btn { border-radius: 999px; }
.btn-primary {
    --bs-btn-bg: var(--brand);
    --bs-btn-border-color: var(--brand);
    --bs-btn-hover-bg: var(--brand-darker);
    --bs-btn-hover-border-color: var(--brand-darker);
    --bs-btn-active-bg: var(--brand-darker);
    --bs-btn-active-border-color: var(--brand-darker);
    --bs-btn-disabled-bg: var(--brand);
    --bs-btn-disabled-border-color: var(--brand);
    box-shadow: 0 5px 14px rgba(255, 92, 138, .35);
}
.btn-primary:hover, .btn-primary:active { box-shadow: 0 7px 18px rgba(236, 65, 118, .45); }
.btn-outline-primary {
    --bs-btn-color: var(--brand);
    --bs-btn-border-color: var(--brand);
    --bs-btn-hover-bg: var(--brand);
    --bs-btn-hover-border-color: var(--brand);
    --bs-btn-active-bg: var(--brand-darker);
    --bs-btn-active-border-color: var(--brand-darker);
}
.btn .bi { margin-right: .3rem; }
.btn-logout .bi, .side-nav .bi { margin-right: 0; }

.form-label { font-weight: 500; font-size: .9rem; }
.form-control, .form-select {
    border-radius: .85rem;
    border-color: var(--line);
    background-color: rgba(255, 255, 255, .8);
}
.form-control:focus, .form-select:focus {
    border-color: var(--brand);
    background-color: #fff;
    box-shadow: 0 0 0 .2rem rgba(255, 92, 138, .18);
}
.form-check-input:checked { background-color: var(--brand); border-color: var(--brand); }

.alert { border-radius: var(--radius); }

/* ---------- 登录页 ---------- */

.login-page {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1rem;
}
.login-card { width: 100%; max-width: 400px; }
.login-brand { text-align: center; margin-bottom: 1.5rem; }
.login-brand .bi { font-size: 2.6rem; color: var(--brand); }
.login-brand h1 { font-size: 1.5rem; font-weight: 700; margin: .5rem 0 .25rem; }
.login-brand p { color: var(--ink-muted); margin: 0; font-size: .9rem; }
.login-page { padding-bottom: 3rem; }

/* ICP 备案号页脚 */
.icp-footer { text-align: center; padding: .75rem 0; font-size: 12px; color: #9aa0a6; }
.icp-footer a { color: #9aa0a6; text-decoration: none; }
.icp-footer a:hover { color: var(--brand); }
.icp-footer .mps-icon { width: 16px; height: 16px; vertical-align: -2px; margin-right: 4px; }
/* 登录页：body 是 flex 容器，页脚须脱离 flex 流、固定于视口正下方居中 */
.login-page .icp-footer { position: fixed; left: 0; right: 0; bottom: 0; padding: .6rem 0; }
/* 内页桌面端：避开左侧栏宽度，使页脚在内容区正下方居中 */
@media (min-width: 992px) {
    body:not(.login-page) .icp-footer { margin-left: var(--sidebar-w); }
}

/* ---------- 头像（姓名首字 + pastel 渐变底色，按学号分配） ---------- */

.avatar {
    flex: 0 0 auto;
    width: 3.3rem;
    height: 3.3rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.3rem;
    font-weight: 700;
    color: #fff;
    text-shadow: 0 1px 2px rgba(120, 40, 70, .25);
    border: 2px solid rgba(255, 255, 255, .85);
    box-shadow: 0 5px 14px rgba(255, 92, 138, .28);
}
.avatar-lg { width: 4.6rem; height: 4.6rem; font-size: 1.9rem; border-width: 3px; }
.avatar-pink { background: linear-gradient(135deg, #ff9dbd, #ff5c8a); }
.avatar-peach { background: linear-gradient(135deg, #ffc09a, #ff8f66); }
.avatar-lavender { background: linear-gradient(135deg, #c0b2ff, #9b8cf0); }
.avatar-cream { background: linear-gradient(135deg, #ffdb85, #f2b441); }
.avatar-sky { background: linear-gradient(135deg, #95d3f7, #4fb0e8); }

/* ---------- 学生花名册：统计条 / 工具条 / 卡片网格 ---------- */

.roster-stats .stat-card { transition: transform .18s ease, box-shadow .18s ease; }
.roster-stats .stat-card:hover { transform: translateY(-3px); }

.search-wrap { position: relative; min-width: 220px; }
.search-wrap .bi {
    position: absolute;
    left: .9rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--brand);
}
.search-wrap .form-control { padding-left: 2.4rem; border-radius: 999px; }

.capsule-group { display: flex; flex-wrap: wrap; gap: .45rem; }
.capsule {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    padding: .34rem .95rem;
    border-radius: 999px;
    font-size: .86rem;
    text-decoration: none;
    color: var(--ink-muted);
    background: rgba(255, 255, 255, .72);
    border: 1px solid var(--line);
    transition: all .15s ease;
}
.capsule:hover { border-color: var(--rose); color: var(--brand); transform: translateY(-1px); }
.capsule.active {
    background: linear-gradient(135deg, var(--rose), var(--brand));
    border-color: transparent;
    color: #fff;
    font-weight: 600;
    box-shadow: 0 4px 12px rgba(255, 92, 138, .38);
}

.roster-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; }
@media (min-width: 480px) { .roster-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 768px) { .roster-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 992px) { .roster-grid { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 1400px) { .roster-grid { grid-template-columns: repeat(5, 1fr); } }

.roster-card {
    display: block;
    text-align: center;
    text-decoration: none;
    color: var(--ink);
    background: var(--glass-bg);
    backdrop-filter: blur(12px) saturate(1.4);
    -webkit-backdrop-filter: blur(12px) saturate(1.4);
    border: 1px solid var(--glass-line);
    border-radius: var(--radius);
    box-shadow: var(--card-shadow);
    padding: 1.2rem 1rem 1rem;
    transition: transform .18s ease, box-shadow .18s ease;
}
.roster-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 14px 34px rgba(255, 92, 138, .26);
    color: var(--ink);
}
.roster-card .avatar { margin-bottom: .6rem; }
.roster-name { font-weight: 650; font-size: 1.04rem; }
.roster-badge { font-weight: 600; }
.roster-meta { font-size: .8rem; color: var(--ink-muted); margin-top: .25rem; }
.roster-meta .bi { margin-right: .15rem; color: var(--rose); }

/* ---------- 学生档案页头卡 ---------- */

.profile-hero .card-body { padding: 1.25rem 1.5rem; }
.profile-hero-name { font-size: 1.3rem; font-weight: 700; }

/* ---------- 信息采集表 ---------- */

/* 家长公开端：居中窄栏，无站内导航 */
.public-page { min-height: 100vh; padding: 2rem 1rem 4rem; }
.public-wrap { max-width: 620px; margin: 0 auto; }
.public-wrap .login-brand .bi { font-size: 2.4rem; color: var(--brand); }

/* 进度板大字 */
.progress-big { font-size: 2rem; font-weight: 700; }
.progress-big .text-primary { font-size: 2.6rem; }

/* 回执码大字 */
.receipt-code {
    display: inline-block;
    margin: .5rem 0;
    padding: .4rem 1.4rem;
    font-size: 2.2rem;
    font-weight: 800;
    letter-spacing: .35em;
    color: var(--brand-darker);
    background: var(--brand-soft);
    border: 2px dashed var(--rose);
    border-radius: 1rem;
}
.receipt-input {
    font-size: 1.4rem;
    font-weight: 700;
    letter-spacing: .3em;
    border-radius: 1rem;
}

/* 未交名单电话胶囊：手机端点击直拨 */
.phone-pill {
    display: inline-flex;
    align-items: center;
    gap: .3rem;
    padding: .4rem .9rem;
    border-radius: 999px;
    font-size: .88rem;
    font-weight: 600;
    text-decoration: none;
    color: var(--brand-darker);
    background: var(--brand-soft);
    border: 1px solid var(--rose-soft);
    box-shadow: 0 3px 10px rgba(255, 92, 138, .2);
}
.phone-pill:hover { background: var(--rose-soft); color: var(--brand-darker); }
.phone-pill-mint { color: var(--income); background: var(--mint-soft); border-color: var(--mint-soft); }
.phone-pill-mint:hover { color: var(--income); }

/* 题目编辑器行 */
.field-row { border-radius: 1rem; }
