/* ===== 登录页面 ===== */
.login-screen {
    min-height: 100vh;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
}

.login-container {
    background: #fff;
    border-radius: 20px;
    padding: 48px 28px 32px;
    text-align: center;
    width: 100%;
    max-width: 380px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
}

.login-logo {
    font-size: 56px;
    margin-bottom: 12px;
    line-height: 1;
}

.login-container h1 {
    font-size: 22px;
    font-weight: 700;
    margin-bottom: 6px;
    background: linear-gradient(135deg, var(--primary), var(--secondary));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

.login-container > p {
    color: var(--text-lighter);
    font-size: 13px;
    margin-bottom: 28px;
}

.login-buttons {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.login-btn {
    /* 4 个按钮统一外观：icon 固定左侧 24px 处，text 在剩余空间居中 */
    position: relative;
    width: 100%;
    height: 52px;
    display: flex;
    align-items: center;
    padding: 0 24px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 500;
    cursor: pointer;
    transition: transform .15s ease, box-shadow .2s ease, opacity .2s;
    border: none;
    outline: none;
    line-height: 1;
    -webkit-tap-highlight-color: transparent;
    text-align: center;
    box-sizing: border-box;
}
.login-btn > svg.i {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    vertical-align: middle;       /* 覆盖全局 -0.125em */
    margin-right: 14px;
}
.login-btn > span {
    flex: 1;
    text-align: center;
    /* 抵消左侧 icon+margin 的宽度，让文字真正水平居中 */
    margin-right: 34px;
    display: inline-block;
}
.login-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0,0,0,.08); }
.login-btn:active { transform: translateY(0) scale(0.98); }

.user-btn {
    background: linear-gradient(135deg, var(--primary), var(--secondary));
    color: #fff;
    box-shadow: 0 2px 8px rgba(102, 126, 234, .25);
}
.user-btn:hover { box-shadow: 0 6px 16px rgba(102, 126, 234, .35); }

.admin-btn {
    background: #fff;
    color: var(--text-light);
    border: 1px solid var(--border);
    box-shadow: none;
}
.admin-btn:hover { background: var(--bg); color: var(--text); }

.admin-login-form {
    margin-top: 8px;
}

/* 仅作用于直接子代 input（管理员密码框等），不污染 .login-input-group 内部 */
.admin-login-form > input {
    width: 100%;
    padding: 12px 16px;
    border: 1px solid var(--border);
    border-radius: 8px;
    font-size: 14px;
    margin-bottom: 12px;
    outline: none;
    transition: border-color 0.2s;
}

.admin-login-form > input:focus {
    border-color: var(--primary);
}

.admin-login-form > button,
.admin-login-form .btn-primary-submit {
    width: 100%;
    height: 48px;
    padding: 0 16px;
    background: linear-gradient(135deg, var(--primary), var(--secondary));
    color: #fff;
    border: none;
    border-radius: 24px;
    font-size: 15px;
    font-weight: 500;
    cursor: pointer;
    transition: opacity .2s, transform .15s, box-shadow .2s;
    box-shadow: 0 2px 8px rgba(102, 126, 234, .25);
    margin-top: 4px;
}
.admin-login-form > button:hover { box-shadow: 0 6px 16px rgba(102, 126, 234, .35); }
.admin-login-form > button:active { transform: scale(.98); }
/* 导师登录按钮采用紫色调（跟入口主题一致） */
#tutor-login-form > button {
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    box-shadow: 0 2px 8px rgba(103, 58, 183, .25);
}
#tutor-login-form > button:hover { box-shadow: 0 6px 16px rgba(103, 58, 183, .35); }

.login-hint {
    font-size: 12px;
    color: var(--text-lighter);
    margin-top: 12px;
}

/* ===== 管理后台布局 ===== */
#admin-app {
    height: 100vh;
    overflow: hidden;
}

.admin-layout {
    display: flex;
    height: 100%;
}

/* 侧边栏 */
.admin-sidebar {
    width: 220px;
    background: #1a1a2e;
    color: #fff;
    display: flex;
    flex-direction: column;
    flex-shrink: 0;
}

.admin-logo {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 20px;
    border-bottom: 1px solid rgba(255,255,255,0.1);
}

.admin-logo span {
    font-size: 28px;
}

.admin-logo h2 {
    font-size: 16px;
    font-weight: 500;
}

.admin-nav {
    flex: 1;
    padding: 16px 0;
    overflow-y: auto;
    overflow-x: hidden;
}

.nav-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 20px;
    cursor: pointer;
    transition: all 0.2s;
    color: rgba(255,255,255,0.7);
    font-size: 14px;
}

.nav-item:hover {
    background: rgba(255,255,255,0.05);
    color: #fff;
}

.nav-item.active {
    background: linear-gradient(90deg, var(--primary), transparent);
    color: #fff;
    border-left: 3px solid var(--accent);
}

.nav-item i {
    width: 20px;
    text-align: center;
}

.admin-logout {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 20px;
    cursor: pointer;
    color: rgba(255,255,255,0.5);
    font-size: 14px;
    border-top: 1px solid rgba(255,255,255,0.1);
    transition: color 0.2s;
}

.admin-logout:hover {
    color: #fff;
}

/* 主内容区 */
.admin-main {
    flex: 1;
    display: flex;
    flex-direction: column;
    background: #f0f2f5;
    overflow: hidden;
}

.admin-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 24px;
    background: #fff;
    border-bottom: 1px solid var(--border);
}

.admin-header h1 {
    font-size: 18px;
    font-weight: 600;
}

.admin-user {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--text-light);
    font-size: 14px;
}

.admin-user i {
    font-size: 24px;
}

.admin-content {
    flex: 1;
    padding: 24px;
    overflow-y: auto;
}

/* ===== 数据看板 ===== */
.stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    margin-bottom: 24px;
}

.stat-card {
    background: #fff;
    border-radius: 12px;
    padding: 20px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}

.stat-card-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 12px;
}

.stat-card-header span {
    font-size: 13px;
    color: var(--text-lighter);
}

.stat-card-icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
}

.stat-card-value {
    font-size: 28px;
    font-weight: 700;
    color: var(--text);
    margin-bottom: 4px;
}

.stat-card-change {
    font-size: 12px;
    color: var(--success);
}

.stat-card-change.down {
    color: var(--danger);
}

/* 图表区域 */
.charts-row {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 20px;
    margin-bottom: 24px;
}

.chart-card {
    background: #fff;
    border-radius: 12px;
    padding: 20px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}

.chart-card h3 {
    font-size: 15px;
    margin-bottom: 16px;
}

.chart-placeholder {
    height: 200px;
    background: linear-gradient(180deg, #f8f9fa 0%, #fff 100%);
    border-radius: 8px;
    display: flex;
    align-items: flex-end;
    justify-content: space-around;
    padding: 20px;
}

.chart-bar {
    width: 30px;
    background: linear-gradient(180deg, var(--primary), var(--secondary));
    border-radius: 4px 4px 0 0;
    transition: height 0.5s ease;
}

/* 列表卡片 */
.list-card {
    background: #fff;
    border-radius: 12px;
    padding: 20px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}

.list-card h3 {
    font-size: 15px;
    margin-bottom: 16px;
}

.list-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 0;
    border-bottom: 1px solid var(--border);
}

.list-item:last-child {
    border-bottom: none;
}

.list-item-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: linear-gradient(135deg, #a8edea, #fed6e3);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}

.list-item-info {
    flex: 1;
}

.list-item-info h4 {
    font-size: 13px;
    margin-bottom: 2px;
}

.list-item-info p {
    font-size: 11px;
    color: var(--text-lighter);
}

.list-item-value {
    font-size: 13px;
    font-weight: 600;
    color: var(--primary);
}

/* ===== 表格样式 ===== */
.admin-table-container {
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
    overflow: hidden;
}

.table-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
}

.table-header h3 {
    font-size: 15px;
}

.table-actions {
    display: flex;
    gap: 10px;
}

.btn-add {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 8px 16px;
    background: var(--primary);
    color: #fff;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
    transition: opacity 0.2s;
}

.btn-add:hover {
    opacity: 0.9;
}

.search-box {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    background: var(--bg);
    border-radius: 6px;
}

.search-box input {
    border: none;
    background: none;
    outline: none;
    font-size: 13px;
    width: 150px;
}

.search-box i {
    color: var(--text-lighter);
}

.admin-table {
    width: 100%;
    border-collapse: collapse;
}

.admin-table th,
.admin-table td {
    padding: 12px 16px;
    text-align: left;
    font-size: 13px;
}

.admin-table th {
    background: #fafafa;
    color: var(--text-lighter);
    font-weight: 500;
    border-bottom: 1px solid var(--border);
}

.admin-table td {
    border-bottom: 1px solid var(--border);
}

.admin-table tr:hover td {
    background: #fafafa;
}

.status-badge {
    display: inline-block;
    padding: 4px 10px;
    border-radius: 12px;
    font-size: 12px;
}

.status-badge.active {
    background: #e8f5e9;
    color: var(--success);
}

.status-badge.inactive {
    background: #fafafa;
    color: var(--text-lighter);
}

.status-badge.pending {
    background: #fff3e0;
    color: var(--warning);
}

.action-btns {
    display: flex;
    gap: 8px;
}

.action-btn {
    padding: 4px 8px;
    border: none;
    border-radius: 4px;
    font-size: 12px;
    cursor: pointer;
    transition: opacity 0.2s;
}

.action-btn:hover {
    opacity: 0.8;
}

.action-btn.edit {
    background: #e3f2fd;
    color: #2196f3;
}

.action-btn.delete {
    background: #ffebee;
    color: #f44336;
}

.action-btn.view {
    background: #f3e5f5;
    color: #9c27b0;
}

/* 分页 */
.table-footer {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 20px;
    border-top: 1px solid var(--border);
    font-size: 13px;
    color: var(--text-lighter);
}

.pagination {
    display: flex;
    gap: 4px;
}

.pagination button {
    padding: 6px 12px;
    border: 1px solid var(--border);
    background: #fff;
    border-radius: 4px;
    cursor: pointer;
    font-size: 12px;
}

.pagination button.active {
    background: var(--primary);
    color: #fff;
    border-color: var(--primary);
}

/* ===== 表单弹窗 ===== */
.admin-modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
}

.admin-modal.hidden {
    display: none;
}

.admin-modal-content {
    background: #fff;
    border-radius: 12px;
    width: 90%;
    max-width: 500px;
    max-height: 80vh;
    overflow-y: auto;
    animation: modalIn 0.2s ease;
}

@keyframes modalIn {
    from { transform: scale(0.95); opacity: 0; }
    to { transform: scale(1); opacity: 1; }
}

.admin-modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
}

.admin-modal-header h3 {
    font-size: 16px;
}

.admin-modal-close {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--bg);
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    font-size: 14px;
    color: var(--text-light);
}

.admin-modal-body {
    padding: 20px;
}

.form-group {
    margin-bottom: 16px;
}

.form-group label {
    display: block;
    font-size: 13px;
    color: var(--text-light);
    margin-bottom: 6px;
}

.form-group input,
.form-group select,
.form-group textarea {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 14px;
    outline: none;
    transition: border-color 0.2s;
}

.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
    border-color: var(--primary);
}

.form-group textarea {
    min-height: 80px;
    resize: vertical;
}

.form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
}

.admin-modal-footer {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    padding: 16px 20px;
    border-top: 1px solid var(--border);
}

.btn-cancel {
    padding: 8px 20px;
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
}

.btn-save {
    padding: 8px 20px;
    background: var(--primary);
    color: #fff;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
}

/* ===== 用户详情 ===== */
.user-detail {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 20px;
}

.user-profile-card {
    background: #fff;
    border-radius: 12px;
    padding: 24px;
    text-align: center;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}

.user-avatar-large {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    background: linear-gradient(135deg, #a8edea, #fed6e3);
    margin: 0 auto 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 32px;
}

.user-profile-card h3 {
    font-size: 18px;
    margin-bottom: 4px;
}

.user-profile-card p {
    font-size: 13px;
    color: var(--text-lighter);
    margin-bottom: 16px;
}

.user-stats-mini {
    display: flex;
    justify-content: space-around;
    padding-top: 16px;
    border-top: 1px solid var(--border);
}

.user-stats-mini div {
    text-align: center;
}

.user-stats-mini .num {
    font-size: 20px;
    font-weight: 700;
    color: var(--primary);
}

.user-stats-mini .label {
    font-size: 11px;
    color: var(--text-lighter);
}

.user-activity {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* ===== 响应式 ===== */
@media (max-width: 1024px) {
    .stats-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    .charts-row {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 768px) {
    .admin-menu-btn {
        display: block !important;
    }
    .admin-sidebar {
        position: fixed;
        left: -220px;
        top: 0;
        height: 100%;
        z-index: 100;
        transition: left 0.3s;
    }
    .admin-sidebar.open {
        left: 0;
        box-shadow: 2px 0 10px rgba(0,0,0,0.1);
    }
    .stats-grid {
        grid-template-columns: 1fr;
    }
    .user-detail {
        grid-template-columns: 1fr;
    }
    .admin-table {
        display: block;
        overflow-x: auto;
        white-space: nowrap;
    }
    .finance-stats-grid {
        grid-template-columns: 1fr !important;
    }
}

.finance-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
    margin-bottom: 20px;
}


/* ===== 疗愈旅行编辑器 ===== */
.travel-editor {
    display: grid;
    grid-template-columns: 1fr 400px;
    gap: 20px;
    height: calc(100vh - 140px);
}

.editor-panel {
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.editor-panel-header {
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.editor-panel-header h3 {
    font-size: 15px;
}

.editor-panel-body {
    flex: 1;
    overflow-y: auto;
    padding: 20px;
}

.editor-tabs {
    display: flex;
    gap: 0;
    border-bottom: 1px solid var(--border);
    padding: 0 20px;
}

.editor-tab {
    padding: 12px 16px;
    font-size: 13px;
    color: var(--text-light);
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: all 0.2s;
}

.editor-tab.active {
    color: var(--primary);
    border-bottom-color: var(--primary);
}

.editor-section {
    margin-bottom: 20px;
}

.editor-section label {
    display: block;
    font-size: 13px;
    color: var(--text-light);
    margin-bottom: 8px;
}

.editor-section input,
.editor-section textarea,
.editor-section select {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 14px;
    outline: none;
    transition: border-color 0.2s;
}

.editor-section input:focus,
.editor-section textarea:focus {
    border-color: var(--primary);
}

.editor-section textarea {
    min-height: 100px;
    resize: vertical;
    font-family: inherit;
}

.image-upload-area {
    border: 2px dashed var(--border);
    border-radius: 8px;
    padding: 30px;
    text-align: center;
    cursor: pointer;
    transition: all 0.2s;
    background: #fafafa;
}

.image-upload-area:hover {
    border-color: var(--primary);
    background: #f0f0ff;
}

.image-upload-area i {
    font-size: 32px;
    color: var(--text-lighter);
    margin-bottom: 8px;
}

.image-upload-area p {
    font-size: 13px;
    color: var(--text-lighter);
}

.image-preview {
    position: relative;
    margin-top: 12px;
}

.image-preview img {
    width: 100%;
    border-radius: 8px;
}

.image-preview .remove-btn {
    position: absolute;
    top: 8px;
    right: 8px;
    width: 24px;
    height: 24px;
    background: rgba(0,0,0,0.6);
    color: #fff;
    border: none;
    border-radius: 50%;
    cursor: pointer;
    font-size: 12px;
}

.content-blocks {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.content-block {
    background: #fafafa;
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 12px;
    position: relative;
}

.content-block-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 8px;
}

.content-block-type {
    font-size: 11px;
    color: var(--primary);
    background: #f0f0ff;
    padding: 2px 8px;
    border-radius: 10px;
}

.content-block-actions {
    display: flex;
    gap: 4px;
}

.content-block-actions button {
    width: 24px;
    height: 24px;
    border: none;
    background: none;
    cursor: pointer;
    color: var(--text-lighter);
    font-size: 12px;
}

.content-block-actions button:hover {
    color: var(--text);
}

.content-block textarea {
    width: 100%;
    border: none;
    background: none;
    resize: none;
    font-size: 13px;
    outline: none;
    min-height: 60px;
}

.add-block-btns {
    display: flex;
    gap: 8px;
    margin-top: 12px;
}

.add-block-btn {
    flex: 1;
    padding: 10px;
    border: 1px dashed var(--border);
    background: none;
    border-radius: 6px;
    cursor: pointer;
    font-size: 12px;
    color: var(--text-light);
    transition: all 0.2s;
}

.add-block-btn:hover {
    border-color: var(--primary);
    color: var(--primary);
    background: #f0f0ff;
}

.add-block-btn i {
    margin-right: 4px;
}

/* 预览面板 */
.preview-panel {
    background: #1a1a2e;
    border-radius: 12px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.preview-header {
    padding: 12px 16px;
    background: #252542;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.preview-header span {
    color: #fff;
    font-size: 13px;
}

.preview-device-toggle {
    display: flex;
    gap: 8px;
}

.preview-device-toggle button {
    padding: 4px 12px;
    border: none;
    background: rgba(255,255,255,0.1);
    color: rgba(255,255,255,0.6);
    border-radius: 4px;
    font-size: 12px;
    cursor: pointer;
}

.preview-device-toggle button.active {
    background: var(--primary);
    color: #fff;
}

.preview-frame {
    flex: 1;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    padding: 20px;
    overflow-y: auto;
}

.preview-phone {
    width: 375px;
    min-height: 600px;
    background: #fff;
    border-radius: 20px;
    overflow: hidden;
    box-shadow: 0 10px 40px rgba(0,0,0,0.3);
}

.preview-content {
    height: 100%;
    overflow-y: auto;
}

/* 分享链接弹窗 */
.share-modal-content {
    text-align: center;
    padding: 20px;
}

.share-qr {
    width: 160px;
    height: 160px;
    background: #f5f5f5;
    margin: 0 auto 16px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    color: var(--text-lighter);
}

.share-link-box {
    display: flex;
    gap: 8px;
    margin-top: 16px;
}

.share-link-box input {
    flex: 1;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 13px;
}

.share-link-box button {
    padding: 10px 16px;
    background: var(--primary);
    color: #fff;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    font-size: 13px;
}

/* 旅行列表管理 */
.travel-list-admin {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 16px;
}

.travel-card-admin {
    background: #fff;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}

.travel-card-admin-cover {
    height: 140px;
    background-size: cover;
    background-position: center;
    position: relative;
}

.travel-card-admin-status {
    position: absolute;
    top: 8px;
    right: 8px;
    padding: 4px 10px;
    border-radius: 12px;
    font-size: 11px;
    background: var(--success);
    color: #fff;
}

.travel-card-admin-body {
    padding: 16px;
}

.travel-card-admin-body h4 {
    font-size: 15px;
    margin-bottom: 8px;
}

.travel-card-admin-body p {
    font-size: 12px;
    color: var(--text-lighter);
    margin-bottom: 12px;
}

.travel-card-admin-actions {
    display: flex;
    gap: 8px;
}

.travel-card-admin-actions button {
    flex: 1;
    padding: 8px;
    border: none;
    border-radius: 6px;
    font-size: 12px;
    cursor: pointer;
}

@media (max-width: 1200px) {
    .travel-editor {
        grid-template-columns: 1fr;
    }
    .preview-panel {
        display: none;
    }
}


/* ===== 学员登录表单 ===== */
.user-login-form {
    margin-top: 20px;
    text-align: left;
}

/* Grid 布局：icon 44px | input 1fr | btn auto，三列严格在同一基线 */
.login-input-group {
    position: relative;
    margin-bottom: 14px;
    display: grid;
    grid-template-columns: 44px 1fr auto;
    align-items: center;
    height: 48px;
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 10px;
    transition: border-color 0.2s, background-color .2s;
    overflow: hidden;
}
.login-input-group:focus-within {
    border-color: var(--primary);
    background: #fff;
}

/* icon 在第一列居中（横向 + 纵向） */
.login-input-group > svg.i,
.login-input-group > i {
    grid-column: 1;
    width: 18px;
    height: 18px;
    color: var(--text-lighter);
    justify-self: center;
    align-self: center;
    vertical-align: middle;
    display: block;                 /* SVG 默认 inline，会受 line-height 影响 */
    margin: 0;
    padding: 0;
}

/* input 在第二列，撑满列高 */
.login-input-group input {
    grid-column: 2;
    width: 100%;
    height: 100%;
    border: none;
    background: none;
    padding: 0 12px 0 0;
    font-size: 14px;
    outline: none;
    color: var(--text);
    box-sizing: border-box;
}
.login-input-group input::placeholder {
    color: var(--text-lighter);
    line-height: 1;
}

/* 验证码按钮在第三列 */
.login-input-group .btn-send-code {
    grid-column: 3;
    height: 100%;
    padding: 0 14px;
    display: inline-flex;
    align-items: center;
    border: none;
    background: none;
    color: var(--primary);
    cursor: pointer;
    font-size: 13px;
    white-space: nowrap;
}
.login-input-group .btn-send-code:disabled {
    color: var(--text-lighter);
    cursor: not-allowed;
}

/* 无验证码按钮时 input 占第 2-3 列 */
.login-input-group:not(:has(.btn-send-code)) input {
    grid-column: 2 / span 2;
}

.btn-send-code {
    background: none;
    border: none;
    color: var(--primary);
    font-size: 13px;
    padding: 0 14px;
    cursor: pointer;
    white-space: nowrap;
    height: 100%;
}

.btn-send-code:disabled {
    color: var(--text-lighter);
    cursor: not-allowed;
}

.login-agree {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 12px;
    color: var(--text-light);
    margin: 12px 0 16px;
    line-height: 1.6;
}

.login-agree input[type="checkbox"] {
    margin-top: 3px;
    flex-shrink: 0;
}

.login-agree a {
    color: var(--primary);
    text-decoration: none;
}

.btn-login-submit {
    width: 100%;
    padding: 14px;
    background: linear-gradient(135deg, var(--primary), var(--secondary));
    color: #fff;
    border: none;
    border-radius: 25px;
    font-size: 15px;
    font-weight: 500;
    cursor: pointer;
    transition: opacity 0.2s, transform 0.2s;
}

.btn-login-submit:active {
    opacity: 0.85;
    transform: scale(0.98);
}

.login-tip {
    text-align: center;
    font-size: 12px;
    color: var(--text-lighter);
    margin-top: 12px;
}

/* 顶部左上的返回箭头（不再是分隔栏） */
.login-back {
    position: absolute;
    top: 16px;
    left: 16px;
    color: var(--text-lighter);
    font-size: 14px;
    margin: 0;
    padding: 6px 12px;
    cursor: pointer;
    border-radius: 14px;
    transition: background .2s, color .2s;
    user-select: none;
}
.login-back:hover { background: var(--bg); color: var(--primary); }
.login-container { position: relative; }

/* ===== 视频播放器 ===== */
.video-player-container {
    position: relative;
    width: 100%;
    background: #000;
    aspect-ratio: 16/9;
    border-radius: 12px;
    overflow: hidden;
    margin-bottom: 16px;
}

.video-player {
    width: 100%;
    height: 100%;
    object-fit: contain;
    background: #000;
}

.video-watermark {
    position: absolute;
    top: 12px;
    right: 12px;
    color: rgba(255,255,255,0.5);
    font-size: 11px;
    background: rgba(0,0,0,0.3);
    padding: 4px 8px;
    border-radius: 4px;
    pointer-events: none;
    z-index: 10;
}

.video-poster {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-size: cover;
    background-position: center;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    z-index: 5;
}

.video-poster::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.5));
}

.video-play-btn {
    width: 64px;
    height: 64px;
    background: rgba(255,255,255,0.95);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    color: var(--primary);
    z-index: 6;
    box-shadow: 0 4px 20px rgba(0,0,0,0.3);
    transition: transform 0.2s;
}

.video-poster:active .video-play-btn {
    transform: scale(0.95);
}

/* 课程目录 */
.course-chapters {
    background: var(--bg);
    border-radius: var(--radius);
    padding: 16px;
    margin-top: 16px;
}

.course-chapters h4 {
    font-size: 14px;
    margin-bottom: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.chapter-progress {
    font-size: 12px;
    color: var(--primary);
    font-weight: 400;
}

.chapter-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.chapter-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    background: #fff;
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.2s;
}

.chapter-item:hover {
    background: #f0f0ff;
}

.chapter-item.active {
    background: linear-gradient(135deg, #f0f0ff, #fff5ff);
    border-left: 3px solid var(--primary);
}

.chapter-item.completed .chapter-status i {
    color: var(--success);
}

.chapter-item.locked {
    opacity: 0.5;
    cursor: not-allowed;
}

.chapter-status {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    color: var(--text-lighter);
    flex-shrink: 0;
}

.chapter-info {
    flex: 1;
    min-width: 0;
}

.chapter-info h5 {
    font-size: 13px;
    margin-bottom: 2px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.chapter-info p {
    font-size: 11px;
    color: var(--text-lighter);
}

.chapter-duration {
    font-size: 11px;
    color: var(--text-lighter);
    flex-shrink: 0;
}

/* 学习进度条（课程卡片上） */
.course-progress-bar {
    height: 3px;
    background: var(--border);
    border-radius: 2px;
    overflow: hidden;
    margin-top: 8px;
}

.course-progress-fill {
    height: 100%;
    background: linear-gradient(90deg, var(--primary), var(--secondary));
    transition: width 0.3s;
}

/* 用户头像在导航栏 */
.user-mini-info {
    display: flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
}

.user-mini-avatar {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: linear-gradient(135deg, #a8edea, #fed6e3);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}

.user-mini-name {
    font-size: 13px;
    color: var(--text);
}


/* ===== 作业点评管理样式 ===== */
.review-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
    margin-bottom: 20px;
}

.review-stat-card {
    background: #fff;
    border-radius: 12px;
    padding: 20px;
    display: flex;
    align-items: center;
    gap: 16px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}

.review-stat-card .stat-icon {
    width: 56px;
    height: 56px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
}

.review-stat-card .stat-icon.pending {
    background: #fff3e0;
    color: #ff9800;
}

.review-stat-card .stat-icon.done {
    background: #e8f5e9;
    color: #4caf50;
}

.review-stat-card .stat-icon.total {
    background: #e3f2fd;
    color: #2196f3;
}

.review-stat-card .stat-num {
    font-size: 28px;
    font-weight: 700;
    color: var(--text);
}

.review-stat-card .stat-label {
    font-size: 13px;
    color: var(--text-lighter);
}

.submissions-list {
    padding: 16px;
}

.empty-submissions {
    text-align: center;
    padding: 60px 20px;
}

.empty-submissions i {
    font-size: 48px;
    color: var(--text-lighter);
    margin-bottom: 16px;
}

.empty-submissions p {
    font-size: 14px;
    color: var(--text);
    margin-bottom: 4px;
}

.empty-submissions span {
    font-size: 12px;
    color: var(--text-lighter);
}

.submission-card {
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 16px;
    transition: all 0.2s;
}

.submission-card:hover {
    box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}

.submission-card.pending {
    border-left: 4px solid #ff9800;
}

.submission-card.reviewed {
    border-left: 4px solid #4caf50;
}

.submission-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 12px;
}

.student-info {
    display: flex;
    align-items: center;
    gap: 10px;
}

.student-avatar {
    font-size: 28px;
}

.student-name {
    font-size: 14px;
    font-weight: 500;
    display: block;
}

.submit-time {
    font-size: 11px;
    color: var(--text-lighter);
}

.submission-card-course {
    font-size: 12px;
    color: var(--primary);
    background: rgba(102, 126, 234, 0.1);
    padding: 6px 10px;
    border-radius: 6px;
    display: inline-block;
    margin-bottom: 12px;
}

.submission-card-content {
    font-size: 14px;
    line-height: 1.7;
    color: var(--text);
    margin-bottom: 12px;
}

.submission-card-images {
    display: flex;
    gap: 8px;
    margin-bottom: 12px;
}

.submission-card-images img {
    width: 80px;
    height: 80px;
    object-fit: cover;
    border-radius: 8px;
    cursor: pointer;
    transition: transform 0.2s;
}

.submission-card-images img:hover {
    transform: scale(1.05);
}

.submission-card-review {
    background: linear-gradient(135deg, rgba(102, 126, 234, 0.08), rgba(118, 75, 162, 0.08));
    border-radius: 8px;
    padding: 12px;
    margin-top: 12px;
}

.submission-card-review .review-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 8px;
    font-size: 12px;
    color: var(--primary);
}

.submission-card-review p {
    font-size: 13px;
    line-height: 1.6;
    color: var(--text);
}

.submission-card-actions {
    margin-top: 12px;
}

.btn-review {
    padding: 10px 20px;
    background: linear-gradient(135deg, var(--primary), var(--secondary));
    color: #fff;
    border: none;
    border-radius: 8px;
    font-size: 13px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    transition: all 0.2s;
}

.btn-review:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
}

/* 点评弹窗 */
.review-modal-content {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
}

.review-submission-info {
    background: var(--bg);
    border-radius: 12px;
    padding: 16px;
}

.student-header {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 16px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border);
}

.student-avatar-large {
    font-size: 40px;
}

.student-header h4 {
    font-size: 16px;
    margin-bottom: 4px;
}

.student-header p {
    font-size: 12px;
    color: var(--text-lighter);
}

.submission-content-full p {
    font-size: 14px;
    line-height: 1.8;
    color: var(--text);
}

.submission-images-full {
    display: flex;
    gap: 8px;
    margin-top: 12px;
    flex-wrap: wrap;
}

.submission-images-full img {
    width: 100px;
    height: 100px;
    object-fit: cover;
    border-radius: 8px;
    cursor: pointer;
}

.review-form .form-group {
    margin-bottom: 16px;
}

.review-form label {
    display: block;
    font-size: 13px;
    font-weight: 500;
    margin-bottom: 8px;
    color: var(--text);
}

.review-form select,
.review-form textarea {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 8px;
    font-size: 14px;
}

.review-form textarea {
    resize: vertical;
    min-height: 120px;
}

.review-form select:focus,
.review-form textarea:focus {
    outline: none;
    border-color: var(--primary);
}

.rating-selector {
    display: flex;
    gap: 8px;
}

.rating-star {
    font-size: 24px;
    cursor: pointer;
    opacity: 0.3;
    transition: all 0.2s;
}

.rating-star.active {
    opacity: 1;
}

.rating-star:hover {
    transform: scale(1.2);
}

.quick-replies {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
}

.quick-reply-label {
    font-size: 12px;
    color: var(--text-lighter);
}

.quick-replies button {
    padding: 6px 12px;
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 16px;
    font-size: 12px;
    cursor: pointer;
    transition: all 0.2s;
}

.quick-replies button:hover {
    background: rgba(102, 126, 234, 0.1);
    border-color: var(--primary);
}

@media (max-width: 768px) {
    .review-stats {
        grid-template-columns: 1fr;
    }
    
    .review-modal-content {
        grid-template-columns: 1fr;
    }
}


/* ===== 微信登录按钮 ===== */
.wechat-btn {
    background: linear-gradient(135deg, #09bb07, #07c160);
    color: #fff;
    box-shadow: 0 2px 8px rgba(7, 193, 96, .25);
}
.wechat-btn:hover { box-shadow: 0 6px 16px rgba(7, 193, 96, .35); }

/* ===== 导师登录按钮 ===== */
.tutor-btn {
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    color: #fff;
    box-shadow: 0 2px 8px rgba(103, 58, 183, .25);
}
.tutor-btn:hover { box-shadow: 0 6px 16px rgba(103, 58, 183, .35); }

/* ===== 导师后台样式 ===== */
#tutor-app {
    height: 100vh;
    overflow: hidden;
    background: var(--bg);
}

.tutor-layout {
    display: flex;
    flex-direction: column;
    height: 100%;
    max-width: 100%;
}

.tutor-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 16px;
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    color: #fff;
    flex-shrink: 0;
}

.tutor-header-left {
    display: flex;
    align-items: center;
    gap: 8px;
}

.tutor-logo {
    font-size: 16px;
    font-weight: 600;
}

.tutor-header-right {
    display: flex;
    align-items: center;
    gap: 12px;
}

.tutor-name {
    font-size: 14px;
}

.tutor-page-title { display: none; }  /* 手机隐藏，桌面 @media 重新显示 */

.tutor-logout-btn {
    background: rgba(255,255,255,0.2);
    border: none;
    color: #fff;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.tutor-logout-btn:hover { background: rgba(255,255,255,0.32); }
.tutor-logout-btn .i { width: 18px; height: 18px; }

.tutor-nav {
    display: flex;
    background: #fff;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
    overflow-x: auto;
}

.tutor-nav-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 10px 8px;
    font-size: 12px;
    color: var(--text-light);
    cursor: pointer;
    transition: all 0.2s;
    min-width: 60px;
    position: relative;
}

.tutor-nav-item i {
    font-size: 18px;
    margin-bottom: 4px;
}
.tutor-nav-item > svg.i {
    width: 20px;
    height: 20px;
    margin-bottom: 4px;
}
.tutor-nav-item:hover {
    color: #9c27b0;
    background: rgba(156, 39, 176, 0.04);
}

.tutor-nav-item.active {
    color: #9c27b0;
}

.tutor-nav-item.active::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 20px;
    height: 2px;
    background: #9c27b0;
    border-radius: 1px;
}

.tutor-content {
    flex: 1;
    overflow-y: auto;
    padding: 16px;
}

/* 导师概览卡片 */
.tutor-stats-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
    margin-bottom: 20px;
}

.tutor-stat-card {
    background: #fff;
    border-radius: 12px;
    padding: 16px;
    text-align: center;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}

.tutor-stat-card .stat-icon {
    font-size: 24px;
    margin-bottom: 8px;
}

.tutor-stat-card .stat-value {
    font-size: 24px;
    font-weight: 700;
    color: var(--text);
}

.tutor-stat-card .stat-label {
    font-size: 12px;
    color: var(--text-lighter);
    margin-top: 4px;
}

/* 导师作业列表 */
.tutor-homework-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.tutor-homework-item {
    background: #fff;
    border-radius: 12px;
    padding: 16px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}

.tutor-homework-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 8px;
}

.tutor-homework-user {
    display: flex;
    align-items: center;
    gap: 8px;
}

.tutor-homework-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
}

.tutor-homework-info h4 {
    font-size: 14px;
    margin-bottom: 2px;
}

.tutor-homework-info p {
    font-size: 12px;
    color: var(--text-lighter);
}

.tutor-homework-status {
    padding: 4px 8px;
    border-radius: 12px;
    font-size: 11px;
}

.tutor-homework-status.pending {
    background: #fff3e0;
    color: #ff9800;
}

.tutor-homework-status.reviewed {
    background: #e8f5e9;
    color: #4caf50;
}

.tutor-homework-content {
    font-size: 13px;
    color: var(--text-light);
    line-height: 1.6;
    margin-bottom: 12px;
}

.tutor-homework-actions {
    display: flex;
    gap: 8px;
}

.tutor-homework-actions button {
    flex: 1;
    padding: 8px;
    border-radius: 8px;
    font-size: 13px;
    cursor: pointer;
    border: none;
}

.btn-review {
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    color: #fff;
}

.btn-view {
    background: var(--bg);
    color: var(--text);
    border: 1px solid var(--border) !important;
}

/* 导师学员列表 */
.tutor-student-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.tutor-student-item {
    background: #fff;
    border-radius: 12px;
    padding: 16px;
    display: flex;
    align-items: center;
    gap: 12px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}

.tutor-student-avatar {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: var(--bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    flex-shrink: 0;
}

.tutor-student-info {
    flex: 1;
}

.tutor-student-info h4 {
    font-size: 14px;
    margin-bottom: 4px;
}

.tutor-student-info p {
    font-size: 12px;
    color: var(--text-lighter);
}

.tutor-student-stats {
    text-align: right;
}

.tutor-student-stats .progress {
    font-size: 16px;
    font-weight: 600;
    color: #9c27b0;
}

.tutor-student-stats .label {
    font-size: 11px;
    color: var(--text-lighter);
}

/* 导师收益 */
.tutor-earnings-card {
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    border-radius: 16px;
    padding: 24px;
    color: #fff;
    margin-bottom: 20px;
}

.tutor-earnings-card h3 {
    font-size: 14px;
    opacity: 0.9;
    margin-bottom: 8px;
}

.tutor-earnings-card .amount {
    font-size: 36px;
    font-weight: 700;
}

.tutor-earnings-card .amount small {
    font-size: 16px;
    font-weight: 400;
}

.tutor-earnings-actions {
    display: flex;
    gap: 12px;
    margin-top: 16px;
}

.tutor-earnings-actions button {
    flex: 1;
    padding: 10px;
    border-radius: 8px;
    font-size: 13px;
    cursor: pointer;
    border: none;
}

.btn-withdraw {
    background: #fff;
    color: #9c27b0;
}

.btn-detail {
    background: rgba(255,255,255,0.2);
    color: #fff;
}

/* 导师个人资料 */
.tutor-profile-card {
    background: #fff;
    border-radius: 16px;
    padding: 24px;
    text-align: center;
    margin-bottom: 20px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}

.tutor-profile-avatar {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 40px;
    margin: 0 auto 12px;
}

.tutor-profile-name {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 4px;
}

.tutor-profile-title {
    font-size: 13px;
    color: var(--text-lighter);
    margin-bottom: 16px;
}

.tutor-profile-stats {
    display: flex;
    justify-content: center;
    gap: 24px;
}

.tutor-profile-stat {
    text-align: center;
}

.tutor-profile-stat .value {
    font-size: 20px;
    font-weight: 600;
    color: #9c27b0;
}

.tutor-profile-stat .label {
    font-size: 12px;
    color: var(--text-lighter);
}

/* 管理后台响应式 */
@media (max-width: 768px) {
    .admin-sidebar {
        position: fixed;
        left: -220px;
        top: 0;
        bottom: 0;
        z-index: 1000;
        transition: left 0.3s;
    }
    
    .admin-sidebar.show {
        left: 0;
    }
    
    .admin-main {
        width: 100%;
    }
    
    .admin-header {
        padding: 12px 16px;
    }
    
    .admin-header h1 {
        font-size: 16px;
    }
    
    .admin-content {
        padding: 12px;
    }
    
    .admin-table-container {
        border-radius: 8px;
    }
    
    .admin-table th,
    .admin-table td {
        padding: 10px 8px;
        font-size: 12px;
    }
    
    .stats-grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 12px;
    }
    
    .stat-card {
        padding: 16px;
    }
    
    .stat-card .stat-value {
        font-size: 24px;
    }
    
    /* 移动端显示菜单按钮 */
    .mobile-menu-btn {
        display: block !important;
    }
}

.mobile-menu-btn {
    display: none;
    background: none;
    border: none;
    font-size: 20px;
    color: var(--text);
    cursor: pointer;
    padding: 8px;
}

.admin-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0,0,0,0.5);
    z-index: 999;
}

.admin-overlay.show {
    display: block;
}


/* 导师筛选按钮 */
.tutor-filter-btn {
    padding: 8px 16px;
    border-radius: 20px;
    font-size: 13px;
    background: var(--bg);
    color: var(--text-light);
    border: none;
    cursor: pointer;
    white-space: nowrap;
}

.tutor-filter-btn.active {
    background: #9c27b0;
    color: #fff;
}

/* 评分选择器 */
.rating-selector {
    display: flex;
    gap: 8px;
}

.rating-star {
    font-size: 24px;
    cursor: pointer;
    opacity: 0.3;
    transition: opacity 0.2s;
}

.rating-star.active {
    opacity: 1;
}

/* 快捷回复标签 */
.quick-reply-tag {
    display: inline-block;
    padding: 6px 12px;
    background: var(--bg);
    border-radius: 16px;
    font-size: 12px;
    cursor: pointer;
    transition: all 0.2s;
}

.quick-reply-tag:hover {
    background: rgba(156, 39, 176, 0.1);
    color: #9c27b0;
}

/* 登录输入框组（注意：主样式在 1204 行，此处保留为空避免覆盖） */


/* ===== 订单管理样式 ===== */
.admin-orders-container {
    padding: 0;
}

.order-stats-row {
    display: flex;
    gap: 16px;
    margin-bottom: 20px;
}

.order-stat-card {
    flex: 1;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px;
    background: var(--card-bg);
    border-radius: 12px;
    cursor: pointer;
    transition: transform 0.2s, box-shadow 0.2s;
}

.order-stat-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

.stat-icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
}

.stat-icon.confirming {
    background: #e3f2fd;
    color: #2196f3;
}

.stat-icon.pending {
    background: #fff3e0;
    color: #ff9800;
}

.stat-icon.paid {
    background: #e8f5e9;
    color: #4caf50;
}

.stat-info .stat-num {
    display: block;
    font-size: 24px;
    font-weight: 600;
    color: var(--text);
}

.stat-info .stat-label {
    font-size: 13px;
    color: var(--text-lighter);
}

.admin-filter-bar {
    display: flex;
    gap: 12px;
    margin-bottom: 16px;
}

.admin-filter-bar select,
.admin-filter-bar input {
    padding: 10px 14px;
    border: 1px solid var(--border);
    border-radius: 8px;
    font-size: 14px;
    background: var(--card-bg);
    color: var(--text);
}

.admin-filter-bar select {
    min-width: 140px;
}

.admin-filter-bar input {
    flex: 1;
}

.admin-orders-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.admin-order-card {
    background: var(--card-bg);
    border-radius: 12px;
    overflow: hidden;
    border: 1px solid var(--border);
}

.admin-order-card.highlight {
    border-color: #2196f3;
    box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);
}

.order-card-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 16px;
    background: var(--bg);
}

.order-id {
    font-size: 13px;
    color: var(--text-light);
    font-family: monospace;
}

.order-status-badge {
    font-size: 12px;
    padding: 4px 10px;
    border-radius: 12px;
    font-weight: 500;
}

.order-status-badge.paid {
    background: #e8f5e9;
    color: #4caf50;
}

.order-status-badge.pending {
    background: #fff3e0;
    color: #ff9800;
}

.order-status-badge.confirming {
    background: #e3f2fd;
    color: #2196f3;
}

.order-status-badge.refunding {
    background: #f3e5f5;
    color: #9c27b0;
}

.order-status-badge.cancelled {
    background: #f5f5f5;
    color: #999;
}

.order-card-main {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px;
}

.order-product-info {
    display: flex;
    align-items: center;
    gap: 12px;
}

.order-product-info .product-icon {
    font-size: 36px;
}

.order-product-info .product-detail h4 {
    font-size: 15px;
    margin-bottom: 4px;
}

.order-product-info .product-detail p {
    font-size: 12px;
    color: var(--text-lighter);
    margin: 2px 0;
}

.order-amount-info {
    text-align: right;
}

.order-amount-info .amount {
    display: block;
    font-size: 20px;
    font-weight: 600;
    color: var(--danger);
}

.order-amount-info .pay-method {
    font-size: 12px;
    color: var(--text-lighter);
}

.order-card-actions {
    display: flex;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid var(--border);
    justify-content: flex-end;
}

.btn-admin {
    padding: 8px 16px;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 6px;
    transition: all 0.2s;
}

.btn-admin.confirm {
    background: #4caf50;
    color: #fff;
}

.btn-admin.confirm:hover {
    background: #43a047;
}

.btn-admin.reject {
    background: #f44336;
    color: #fff;
}

.btn-admin.reject:hover {
    background: #e53935;
}

.btn-admin.secondary {
    background: var(--bg);
    color: var(--text);
}

.btn-admin.secondary:hover {
    background: var(--border);
}

/* 订单详情弹窗 */
.detail-section {
    margin-bottom: 16px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border);
}

.detail-section:last-child {
    border-bottom: none;
    margin-bottom: 0;
}

.detail-section h4 {
    font-size: 13px;
    color: var(--text-lighter);
    margin-bottom: 10px;
}

.detail-row {
    display: flex;
    justify-content: space-between;
    padding: 6px 0;
    font-size: 14px;
}

.detail-row span:first-child {
    color: var(--text-light);
}

.detail-row.total {
    font-weight: 600;
    padding-top: 10px;
    margin-top: 6px;
    border-top: 1px dashed var(--border);
}

.status-paid { color: #4caf50; }
.status-pending { color: #ff9800; }
.status-confirming { color: #2196f3; }
.status-cancelled { color: #999; }

/* ===== 导师端响应式（桌面 ≥ 900px 改为侧边栏布局） ===== */
@media (min-width: 900px) {
    #tutor-app {
        background: #f6f7fb;
    }
    .tutor-layout {
        display: grid;
        grid-template-columns: 208px 1fr;
        grid-template-rows: auto 1fr;
        grid-template-areas:
            "side header"
            "side main";
        max-width: none;
        height: 100vh;
    }
    .tutor-header {
        grid-area: header;
        padding: 0 28px;
        height: 56px;
        background: #fff;
        color: var(--text);
        border-bottom: 1px solid #ececf0;
        box-shadow: none;
    }
    .tutor-logo { display: none; }       /* 桌面 nav 已有，隐藏 header logo */
    .tutor-page-title {
        font-size: 16px;
        font-weight: 600;
        color: var(--text);
    }
    .tutor-header-left { display: flex; align-items: center; gap: 12px; }
    .tutor-header-right { gap: 16px; }
    .tutor-name { font-size: 13px; color: var(--text-light); }
    .tutor-logout-btn {
        background: transparent;
        color: var(--text-lighter);
        width: 36px;
        height: 36px;
    }
    .tutor-logout-btn:hover { background: var(--bg); color: var(--danger); }

    /* 侧边栏：更淡的渐变 + 紧凑 */
    .tutor-nav {
        grid-area: side;
        flex-direction: column;
        background: linear-gradient(180deg, #8e24aa 0%, #5e35b1 100%);
        border-bottom: none;
        padding: 16px 0 12px;
        overflow-x: visible;
        overflow-y: auto;
        gap: 2px;
    }
    .tutor-nav::before {
        content: '🌟 导师工作台';
        display: block;
        color: #fff;
        font-size: 14px;
        font-weight: 600;
        padding: 8px 20px 16px;
        opacity: .95;
    }
    .tutor-nav-item {
        flex: 0 0 auto;
        flex-direction: row;
        justify-content: flex-start;
        gap: 12px;
        padding: 10px 20px;
        margin: 0 10px;
        font-size: 13.5px;
        color: rgba(255,255,255,.78);
        min-width: 0;
        border-radius: 8px;
    }
    .tutor-nav-item:hover {
        background: rgba(255,255,255,.1);
        color: #fff;
    }
    .tutor-nav-item > svg.i {
        width: 17px;
        height: 17px;
        margin-bottom: 0;
    }
    .tutor-nav-item.active {
        background: rgba(255,255,255,.18);
        color: #fff;
        font-weight: 500;
    }
    .tutor-nav-item.active::after { display: none; }
    .tutor-nav-badge {
        position: static;
        margin-left: auto;
    }

    /* 主内容区：紧凑 padding + 居中限宽 */
    .tutor-content {
        grid-area: main;
        padding: 20px 28px;
        max-width: 1280px;
    }

    /* 欢迎卡更紧凑 */
    .tutor-welcome-card {
        padding: 16px 22px;
        margin-bottom: 14px;
    }
    .tutor-welcome-hi { font-size: 16px; }
    .tutor-welcome-tip { font-size: 13px; }

    /* 统计卡：横向布局 icon | 数字+标签 */
    .tutor-stats-grid {
        grid-template-columns: repeat(4, 1fr);
        gap: 14px;
        margin-bottom: 14px;
    }
    .tutor-stat-card {
        padding: 16px 18px;
        text-align: left;
        display: flex;
        align-items: center;
        gap: 14px;
        cursor: pointer;
        transition: transform .15s, box-shadow .2s;
    }
    .tutor-stat-card:hover {
        transform: translateY(-2px);
        box-shadow: 0 6px 18px rgba(0,0,0,.06);
    }
    .tutor-stat-card .stat-icon {
        font-size: 28px;
        margin-bottom: 0;
        width: 48px;
        height: 48px;
        background: linear-gradient(135deg, rgba(156,39,176,.08), rgba(103,58,183,.08));
        border-radius: 12px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        flex-shrink: 0;
    }
    .tutor-stat-card .stat-value {
        font-size: 22px;
        line-height: 1.2;
        margin: 0;
    }
    .tutor-stat-card .stat-label {
        font-size: 12px;
        margin-top: 2px;
    }

    /* 桌面：今日待办 + 本周数据 并排 */
    .tutor-content > .tutor-card + .tutor-card {
        display: grid;
        grid-template-columns: 1fr;
    }
    /* 用 wrapper 包起来双栏更可靠，这里给 dashboard 双卡用 grid */
    .tutor-content {
        display: flex;
        flex-direction: column;
    }
    /* 让 todo 卡和 week 卡在一行 */
    .tutor-card.tutor-card-todo,
    .tutor-card.tutor-card-week {
        margin-bottom: 0;
    }
    .tutor-dashboard-row {
        display: grid;
        grid-template-columns: 1.4fr 1fr;
        gap: 14px;
        margin-bottom: 14px;
    }
    .tutor-dashboard-row .tutor-card { margin-bottom: 0; }
}

/* 超宽屏限制最大宽度 */
@media (min-width: 1440px) {
    .tutor-content { padding: 28px 36px; max-width: 1440px; }
    .tutor-stats-grid { gap: 16px; }
}

/* ===== 导师端：新增组件样式 ===== */

/* 红点 */
.tutor-nav-badge {
    position: absolute;
    top: 4px;
    right: 8px;
    min-width: 16px;
    height: 16px;
    padding: 0 4px;
    border-radius: 8px;
    background: #f44336;
    color: #fff;
    font-size: 10px;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
}

/* 概览：欢迎卡 */
.tutor-welcome-card {
    background: linear-gradient(135deg, #9c27b0, #673ab7);
    color: #fff;
    border-radius: 16px;
    padding: 18px 20px;
    margin-bottom: 16px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    box-shadow: 0 6px 16px rgba(156,39,176,.18);
}
.tutor-welcome-hi { font-size: 18px; font-weight: 600; margin-bottom: 4px; }
.tutor-welcome-tip { font-size: 13px; opacity: .9; }
.tutor-welcome-tip b { font-weight: 700; }
.tutor-welcome-badge {
    background: rgba(255,255,255,.2);
    padding: 6px 12px;
    border-radius: 16px;
    font-size: 12px;
    backdrop-filter: blur(4px);
}

/* 通用卡片 */
.tutor-card {
    background: #fff;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 16px;
    box-shadow: 0 2px 8px rgba(0,0,0,.03);
}
.tutor-card-title {
    font-size: 15px;
    margin-bottom: 12px;
    font-weight: 600;
}

/* 待办列表 */
.tutor-todo-list { display: flex; flex-direction: column; gap: 10px; }
.tutor-todo-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px;
    background: var(--bg);
    border-radius: 8px;
    border-left: 3px solid transparent;
}
.tutor-todo-item.urgent { border-left-color: #f44336; background: #fff4f0; }
.tutor-todo-icon { font-size: 18px; }
.tutor-todo-text { flex: 1; font-size: 13px; }
.tutor-todo-text b { font-weight: 700; }
.tutor-todo-btn {
    padding: 6px 14px;
    background: #fff;
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 12px;
    cursor: pointer;
    transition: all .2s;
}
.tutor-todo-btn.primary { background: var(--primary); color: #fff; border-color: var(--primary); }
.tutor-todo-btn:hover { transform: translateY(-1px); }

.tutor-week-stats { display: flex; justify-content: space-around; text-align: center; }
.tutor-week-num { font-size: 26px; font-weight: 700; line-height: 1.2; }
.tutor-week-label { font-size: 12px; color: var(--text-lighter); margin-top: 4px; }
.tutor-empty-hint {
    margin-top: 12px;
    padding: 10px;
    background: var(--bg);
    border-radius: 6px;
    font-size: 12px;
    color: var(--text-lighter);
    text-align: center;
}

/* 筛选栏 */
.tutor-filter-bar {
    display: flex;
    gap: 8px;
    margin-bottom: 16px;
    overflow-x: auto;
    align-items: center;
    flex-wrap: wrap;
}
.tutor-filter-btn {
    padding: 7px 14px;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 18px;
    font-size: 13px;
    color: var(--text-light);
    cursor: pointer;
    white-space: nowrap;
    transition: all .2s;
}
.tutor-filter-btn:hover { color: var(--primary); border-color: var(--primary); }
.tutor-filter-btn.active { background: var(--primary); color: #fff; border-color: var(--primary); }
.tutor-search {
    flex: 1;
    min-width: 160px;
    padding: 8px 12px;
    border: 1px solid var(--border);
    border-radius: 18px;
    font-size: 13px;
    outline: none;
}
.tutor-search:focus { border-color: var(--primary); }

/* 批量栏 */
.tutor-batch-bar {
    position: sticky;
    top: 0;
    z-index: 10;
    background: var(--primary);
    color: #fff;
    padding: 10px 14px;
    border-radius: 8px;
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 12px;
}
.tutor-batch-action {
    padding: 6px 14px;
    background: #fff;
    color: var(--primary);
    border: none;
    border-radius: 6px;
    cursor: pointer;
    font-size: 13px;
    font-weight: 600;
}
.tutor-batch-action.plain { background: transparent; color: #fff; border: 1px solid rgba(255,255,255,.5); }

/* 作业列表 */
.tutor-homework-item {
    background: #fff;
    border-radius: 12px;
    padding: 14px;
    margin-bottom: 12px;
    position: relative;
    transition: all .2s;
    box-shadow: 0 2px 6px rgba(0,0,0,.03);
}
.tutor-homework-item.urgent { border-left: 4px solid #f44336; padding-left: 12px; }
.tutor-homework-item.kb-focus { outline: 2px solid var(--primary); outline-offset: 2px; }
.tutor-batch-check {
    position: absolute;
    top: 14px;
    right: 14px;
}
.tutor-batch-check input { width: 18px; height: 18px; cursor: pointer; }
.tutor-homework-user { cursor: pointer; }
.tutor-homework-user:hover h4 { color: var(--primary); }
.tutor-homework-meta {
    font-size: 12px;
    color: var(--text-lighter);
    margin-bottom: 10px;
    display: flex;
    align-items: center;
    gap: 4px;
}
.tutor-homework-meta .i { width: 12px; height: 12px; }

/* 空态 */
.tutor-empty {
    padding: 40px 20px;
    text-align: center;
    color: var(--text-lighter);
    font-size: 14px;
}
.tutor-keyboard-hint {
    margin-top: 16px;
    text-align: center;
    font-size: 11px;
    color: var(--text-lighter);
}

/* Loading */
.tutor-loading {
    padding: 60px 20px;
    text-align: center;
    color: var(--text-lighter);
    font-size: 13px;
}
.tutor-loading-spinner {
    width: 32px;
    height: 32px;
    border: 3px solid var(--border);
    border-top-color: var(--primary);
    border-radius: 50%;
    margin: 0 auto 12px;
    animation: i-spin .8s linear infinite;
}

/* 学员标签 */
.tutor-tag-bar { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 12px; }
.tutor-tag {
    padding: 4px 12px;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 12px;
    font-size: 12px;
    cursor: pointer;
    color: var(--text-light);
}
.tutor-tag.active { background: #9c27b0; color: #fff; border-color: #9c27b0; }
.tutor-stu-tags { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 4px; }
.tutor-stu-tags span {
    font-size: 10px;
    padding: 2px 6px;
    background: rgba(156,39,176,.1);
    color: #9c27b0;
    border-radius: 8px;
}

/* 弹窗（统一） */
.tutor-modal {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10000;
    opacity: 0;
    transition: opacity .2s;
    padding: 16px;
}
.tutor-modal.show { opacity: 1; }
.tutor-modal-content {
    background: #fff;
    border-radius: 14px;
    width: 100%;
    max-width: 520px;
    max-height: 88vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    transform: translateY(20px);
    transition: transform .2s;
}
.tutor-modal.show .tutor-modal-content { transform: translateY(0); }
.tutor-modal-header {
    padding: 14px 18px;
    border-bottom: 1px solid var(--border);
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.tutor-modal-header h3 { font-size: 16px; font-weight: 600; }
.tutor-modal-close {
    background: none;
    border: none;
    width: 28px;
    height: 28px;
    border-radius: 14px;
    cursor: pointer;
    color: var(--text-lighter);
}
.tutor-modal-close:hover { background: var(--bg); }
.tutor-modal-body {
    padding: 16px 18px;
    overflow-y: auto;
}

/* 点评查看 */
.tutor-review-view .trv-user { font-size: 14px; margin-bottom: 8px; }
.tutor-review-view .trv-content {
    background: var(--bg);
    padding: 12px;
    border-radius: 8px;
    margin-bottom: 12px;
    font-size: 13px;
    line-height: 1.6;
}
.tutor-review-view .trv-rating { font-size: 16px; margin-bottom: 8px; }
.tutor-review-view .trv-review {
    padding: 12px;
    background: rgba(156,39,176,.06);
    border-left: 3px solid #9c27b0;
    border-radius: 4px;
    font-size: 13px;
    line-height: 1.6;
    margin-bottom: 8px;
}
.tutor-review-view .trv-time { font-size: 11px; color: var(--text-lighter); }

/* 学员详情 */
.stu-detail-head {
    display: flex;
    gap: 12px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--border);
    margin-bottom: 12px;
}
.stu-detail-avatar { font-size: 48px; }
.stu-detail-tags-row { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 6px; }
.stu-tag-chip {
    font-size: 11px;
    padding: 3px 8px;
    background: rgba(156,39,176,.1);
    color: #9c27b0;
    border-radius: 10px;
}
.stu-tag-chip a { cursor: pointer; opacity: .6; }
.stu-tag-add {
    font-size: 11px;
    color: var(--primary);
    cursor: pointer;
    padding: 3px 8px;
    border: 1px dashed var(--primary);
    border-radius: 10px;
}
.stu-detail-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    margin-bottom: 12px;
}
.stu-detail-stats > div {
    background: var(--bg);
    border-radius: 8px;
    padding: 10px;
    text-align: center;
}
.stu-detail-stats .num { font-size: 18px; font-weight: 700; color: #9c27b0; }
.stu-detail-stats .lbl { font-size: 11px; color: var(--text-lighter); margin-top: 2px; }
.stu-detail-actions { display: flex; gap: 8px; margin-bottom: 8px; }
.stu-detail-actions button { flex: 1; padding: 10px; }
.stu-sub-history {
    max-height: 30vh;
    overflow-y: auto;
}
.stu-sub-item {
    display: flex;
    align-items: center;
    padding: 8px 10px;
    border-bottom: 1px solid var(--border);
    cursor: pointer;
}
.stu-sub-item:hover { background: var(--bg); }
.stu-sub-status {
    font-size: 11px;
    padding: 2px 8px;
    border-radius: 8px;
}
.stu-sub-status.pending { background: #fff3e0; color: #ff9800; }
.stu-sub-status.reviewed { background: #e8f5e9; color: #4caf50; }

/* 快捷回复管理 */
.reply-mgr-item {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    background: var(--bg);
    padding: 10px;
    border-radius: 8px;
    margin-bottom: 8px;
}
.reply-mgr-label {
    width: 100%;
    padding: 6px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 13px;
    margin-bottom: 6px;
}
.reply-mgr-text {
    width: 100%;
    padding: 6px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 12px;
    resize: vertical;
}
.reply-mgr-del {
    background: none;
    border: none;
    font-size: 18px;
    cursor: pointer;
    padding: 4px;
    color: #f44336;
}

/* 收益记录 */
.tutor-earnings-records {
    max-height: 50vh;
    overflow-y: auto;
}
.earning-record {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 0;
    border-bottom: 1px solid var(--border);
}
.earning-record:last-child { border-bottom: none; }

/* 课程卡 */
.tutor-courses-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 12px;
}
.tutor-course-card {
    background: #fff;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0,0,0,.04);
}
.tcc-cover { height: 100px; background-size: cover; background-position: center; }
.tcc-body { padding: 14px; }
.tcc-body h4 { font-size: 15px; margin-bottom: 6px; }
.tcc-meta { font-size: 12px; color: var(--text-lighter); margin-bottom: 10px; }
.tcc-actions { display: flex; gap: 8px; }
.tcc-actions button { flex: 1; padding: 8px; font-size: 12px; }

/* 消息中心 */
.tutor-msg-list { display: flex; flex-direction: column; gap: 4px; }
.tutor-msg-item {
    display: flex;
    gap: 12px;
    padding: 12px;
    border-radius: 8px;
    cursor: pointer;
    transition: background .2s;
    position: relative;
}
.tutor-msg-item:hover { background: var(--bg); }
.tutor-msg-item.unread { background: rgba(156,39,176,.04); }
.tmi-avatar { font-size: 28px; }
.tmi-body { flex: 1; min-width: 0; }
.tmi-head { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 4px; }
.tmi-head span { color: var(--text-lighter); font-size: 11px; }
.tmi-content {
    font-size: 13px;
    color: var(--text-light);
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}
.tmi-dot {
    position: absolute;
    top: 16px;
    right: 12px;
    width: 8px;
    height: 8px;
    background: #f44336;
    border-radius: 50%;
}

.quote-block {
    padding: 10px 12px;
    background: var(--bg);
    border-left: 3px solid var(--primary);
    border-radius: 4px;
    font-size: 13px;
    color: var(--text-light);
    margin-bottom: 12px;
}

/* Profile 菜单 */
.tutor-menu-card {
    background: #fff;
    border-radius: 12px;
    overflow: hidden;
}
.tutor-menu-item {
    padding: 14px 16px;
    border-bottom: 1px solid var(--border);
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    transition: background .2s;
}
.tutor-menu-item:last-child { border-bottom: none; }
.tutor-menu-item:hover { background: var(--bg); }
.tutor-menu-item span { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.tutor-menu-item .i { width: 18px; height: 18px; color: var(--text-lighter); }
.tutor-menu-item.danger span { color: var(--danger); }
.tutor-menu-item.danger .i { color: var(--danger); }

/* 设置开关 */
.set-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 0;
    border-bottom: 1px solid var(--border);
    font-size: 14px;
}
.set-row:last-child { border-bottom: none; }
.switch { position: relative; display: inline-block; width: 44px; height: 24px; }
.switch input { opacity: 0; width: 0; height: 0; }
.switch span {
    position: absolute; cursor: pointer; inset: 0;
    background: #ccc; transition: .3s; border-radius: 24px;
}
.switch span::before {
    position: absolute; content: ''; height: 18px; width: 18px;
    left: 3px; bottom: 3px; background: #fff; transition: .3s; border-radius: 50%;
}
.switch input:checked + span { background: var(--primary); }
.switch input:checked + span::before { transform: translateX(20px); }

/* 培训 / 证书 / 数据看板 */
.train-item, .cert-row {
    display: flex; justify-content: space-between; align-items: center;
    padding: 10px 0; border-bottom: 1px solid var(--border); font-size: 14px;
}
.train-item button {
    padding: 6px 12px; background: var(--primary); color: #fff;
    border: none; border-radius: 6px; font-size: 12px; cursor: pointer;
}
.cert-status { font-size: 12px; color: #4caf50; }
.dash-grid { display: grid; grid-template-columns: repeat(2,1fr); gap: 10px; }
.dash-card {
    background: var(--bg); padding: 16px; border-radius: 8px; text-align: center;
}
.dash-card .dn { font-size: 22px; font-weight: 700; color: var(--primary); }
.dash-card .dl { font-size: 11px; color: var(--text-lighter); margin-top: 2px; }
.dash-tip {
    margin-top: 12px; padding: 10px; background: rgba(156,39,176,.06);
    border-radius: 6px; font-size: 13px; color: var(--text-light); text-align: center;
}

/* 课程评价 */
.cr-item {
    padding: 12px; background: var(--bg); border-radius: 8px; margin-bottom: 8px;
}
.cr-reply {
    margin-top: 8px; padding: 8px 10px;
    background: rgba(156,39,176,.06); border-left: 3px solid #9c27b0;
    border-radius: 4px; font-size: 12px; color: var(--text-light);
}

/* 暗色模式（导师端） */
#tutor-app.dark { background: #1a1a1f; color: #e4e4ea; }
#tutor-app.dark .tutor-card,
#tutor-app.dark .tutor-homework-item,
#tutor-app.dark .tutor-course-card,
#tutor-app.dark .tutor-menu-card,
#tutor-app.dark .tutor-modal-content { background: #25252c; color: #e4e4ea; }
#tutor-app.dark .tutor-todo-item,
#tutor-app.dark .tutor-search,
#tutor-app.dark .tutor-filter-btn,
#tutor-app.dark .dash-card { background: #2e2e36; border-color: #3a3a45; color: #e4e4ea; }
#tutor-app.dark .tutor-week-label,
#tutor-app.dark .tutor-empty,
#tutor-app.dark .tmi-content,
#tutor-app.dark .tcc-meta,
#tutor-app.dark .earning-record { color: #a0a0a8; }
#tutor-app.dark .tutor-menu-item { border-color: #3a3a45; }
@media (min-width: 900px) {
    #tutor-app.dark { background: #15151a; }
    #tutor-app.dark .tutor-header { background: #25252c; border-color: #3a3a45; }
}

/* 导师派单 */
.admin-page-header { margin-bottom: 16px; }
.admin-page-header h2 { font-size: 18px; margin-bottom: 6px; }
.assign-list { display: flex; flex-direction: column; gap: 12px; }
.assign-card { background: #fff; border-radius: 12px; padding: 16px; box-shadow: 0 2px 8px rgba(0,0,0,.04); }
.assign-tutor { display: flex; align-items: center; gap: 12px; padding-bottom: 12px; border-bottom: 1px solid var(--border); margin-bottom: 12px; }
.assign-avatar { font-size: 32px; }
.assign-tutor > div:nth-child(2) { flex: 1; }
.assign-count { background: rgba(156,39,176,.1); color: #9c27b0; padding: 4px 12px; border-radius: 10px; font-size: 12px; font-weight: 600; }
.assign-courses { display: flex; flex-wrap: wrap; gap: 8px; }
.assign-course-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; background: var(--bg); border-radius: 16px; font-size: 13px; cursor: pointer; transition: all .2s; }
.assign-course-chip:has(input:checked) { background: rgba(156,39,176,.12); color: #9c27b0; }
.assign-course-chip input { cursor: pointer; }

/* 工单 */
.ticket-meta {
    display: flex; gap: 12px; flex-wrap: wrap;
    font-size: 12px; color: var(--text-lighter); margin-bottom: 12px;
}
.ticket-question {
    padding: 12px; background: var(--bg);
    border-left: 3px solid #ff9800; border-radius: 4px;
    font-size: 13px; line-height: 1.6; margin-bottom: 12px;
}
.ticket-replies { display: flex; flex-direction: column; gap: 8px; }
.ticket-reply {
    padding: 10px 12px; background: rgba(156,39,176,.06);
    border-radius: 8px;
}

/* 直播工作台 */
.live-studio-preview {
    position: relative;
    background: #000;
    border-radius: 8px;
    overflow: hidden;
    margin-bottom: 12px;
}
.live-studio-preview video { display: block; max-height: 40vh; }
.live-status {
    position: absolute; top: 8px; left: 8px;
    background: rgba(0,0,0,.6); color: #fff;
    padding: 4px 10px; border-radius: 12px;
    font-size: 12px;
}
.live-studio-controls { display: flex; gap: 8px; }
.live-studio-controls button { flex: 1; padding: 10px; }
.live-mini-item {
    padding: 8px 10px; background: var(--bg);
    border-radius: 6px; margin-bottom: 6px; font-size: 13px;
}

/* 横屏适配（手机横放） */
@media (orientation: landscape) and (max-height: 500px) {
    .tutor-header { padding: 8px 12px; }
    .tutor-logo { font-size: 14px; }
    .tutor-content { padding: 12px; }
    .tutor-nav { overflow-x: auto; }
    .tutor-stats-grid { grid-template-columns: repeat(4, 1fr); }
    .tutor-welcome-card { padding: 12px 16px; }
}

/* 触摸目标 ≥44px 兜底 */
.tutor-todo-btn, .tutor-filter-btn, .tutor-batch-action {
    min-height: 36px;
}
@media (pointer: coarse) {
    .tutor-todo-btn, .tutor-filter-btn, .tutor-batch-action, .btn-review, .btn-view {
        min-height: 44px;
    }
    .tutor-nav-item { min-height: 56px; }
    .tutor-modal-close { width: 44px; height: 44px; }
}

/* ===== 面包屑（返回概览） ===== */
.tutor-breadcrumb {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    margin-bottom: 14px;
    color: var(--text-lighter);
}
.tutor-breadcrumb a {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: var(--primary);
    cursor: pointer;
    padding: 4px 8px 4px 4px;
    border-radius: 6px;
    transition: background .2s;
    margin-left: -4px;
}
.tutor-breadcrumb a:hover { background: rgba(102, 126, 234, .08); }
.tutor-breadcrumb a .i { width: 14px; height: 14px; }
.tutor-breadcrumb .tb-sep { color: var(--text-lighter); }
.tutor-breadcrumb .tb-current { color: var(--text); font-weight: 500; }
/* 桌面：因为 header 已有 page title，面包屑只显示"返回概览"链接 */
@media (min-width: 900px) {
    .tutor-breadcrumb .tb-sep,
    .tutor-breadcrumb .tb-current { display: none; }
    .tutor-breadcrumb { margin-bottom: 10px; }
}

/* ===== 批量模式：默认隐藏勾选框，has-batch 时显示 ===== */
.tutor-homework-item.has-batch {
    padding-left: 44px;  /* 左侧留空间放 checkbox */
}
.tutor-batch-check {
    position: absolute;
    top: 50%;
    left: 14px;
    transform: translateY(-50%);
    margin: 0;
}
.tutor-batch-check input {
    width: 20px;
    height: 20px;
    cursor: pointer;
    accent-color: var(--primary);
}
.tutor-filter-btn.batch-toggle {
    margin-left: auto;
    background: rgba(156, 39, 176, .08);
    color: #9c27b0;
    border-color: rgba(156, 39, 176, .2);
}
.tutor-filter-btn.batch-toggle.active {
    background: #9c27b0;
    color: #fff;
    border-color: #9c27b0;
}
/* 批量模式时整个列表略浅紫色背景提醒 */
.tutor-homework-list.batch-mode {
    background: rgba(156, 39, 176, .03);
    border-radius: 12px;
    padding: 8px;
    margin: -8px;
}

/* =====================================================
 * 导师端 v2 设计系统（微信/微信读书风格）
 * 覆盖前面的 .tutor-* 样式
 * ===================================================== */
#tutor-app {
    --tw-primary: #07c160;          /* 微信绿 */
    --tw-primary-dark: #06ad56;
    --tw-primary-light: rgba(7,193,96,.08);
    --tw-brand: #9c27b0;            /* 紫色品牌色（仅 logo/等级/侧栏） */
    --tw-brand-dark: #673ab7;
    --tw-bg: #f7f7f7;               /* 页面底色 */
    --tw-card: #fff;
    --tw-text: #1a1a1a;
    --tw-text-2: #4a4a4a;
    --tw-text-3: #8a8a8a;
    --tw-text-4: #b8b8b8;
    --tw-border: #ececec;
    --tw-danger: #ff6b35;
    --tw-warning: #f5a623;
    background: var(--tw-bg);
    font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", Arial, sans-serif;
    color: var(--tw-text);
}

/* ===== 通用列表（核心组件） ===== */
.tw-list {
    background: var(--tw-card);
    border-radius: 12px;
    overflow: hidden;
    margin-bottom: 12px;
}
.tw-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    position: relative;
    cursor: pointer;
    transition: background .15s;
    border-bottom: 0.5px solid var(--tw-border);
}
.tw-item:last-child { border-bottom: none; }
.tw-item:hover, .tw-item:active { background: rgba(0,0,0,.02); }
.tw-item.urgent { background: linear-gradient(90deg, rgba(255,107,53,.04), transparent); }
.tw-item.urgent::before {
    content: '';
    position: absolute;
    left: 0; top: 10px; bottom: 10px;
    width: 3px;
    background: var(--tw-danger);
    border-radius: 0 2px 2px 0;
}
.tw-item.unread::after {
    content: '';
    position: absolute;
    top: 50%;
    right: 14px;
    transform: translateY(-50%);
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--tw-danger);
}

.tw-avatar {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    border-radius: 10px;
    background: var(--tw-bg);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    overflow: hidden;
}
.tw-avatar img { width: 100%; height: 100%; object-fit: cover; }

.tw-main {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.tw-title-row {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 15px;
    font-weight: 500;
    color: var(--tw-text);
    line-height: 1.3;
}
.tw-title-row .tw-name { font-weight: 500; }
.tw-meta {
    font-size: 12px;
    color: var(--tw-text-3);
    line-height: 1.4;
}
.tw-preview {
    font-size: 13px;
    color: var(--tw-text-2);
    line-height: 1.5;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    margin-top: 2px;
}
.tw-aside {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 6px;
    min-width: 56px;
}
.tw-time { font-size: 11px; color: var(--tw-text-4); white-space: nowrap; }

/* 状态徽章 */
.tw-tag {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1.4;
    white-space: nowrap;
}
.tw-tag.pending { background: #fff4e0; color: #d97706; }
.tw-tag.reviewed { background: var(--tw-primary-light); color: var(--tw-primary-dark); }
.tw-tag.urgent { background: #ffe8db; color: var(--tw-danger); }
.tw-tag.open { background: #fff4e0; color: #d97706; }
.tw-tag.replied { background: #e6f3ff; color: #1976d2; }
.tw-tag.closed { background: #efefef; color: var(--tw-text-3); }
.tw-tag.gold { background: linear-gradient(135deg, #fbc02d, #f9a825); color: #fff; }
.tw-tag.senior { background: var(--tw-primary-light); color: var(--tw-primary-dark); }
.tw-tag.junior { background: #f0f0f0; color: var(--tw-text-2); }

/* ===== 节标题 ===== */
.tw-section-title {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 4px 8px;
    font-size: 13px;
    color: var(--tw-text-3);
    font-weight: 500;
}
.tw-section-title .tw-action {
    color: var(--tw-primary);
    font-size: 13px;
    cursor: pointer;
}

/* ===== 顶部统计条（替代旧的 stats-grid） ===== */
.tw-summary {
    background: var(--tw-card);
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 4px;
}
.tw-summary-item {
    text-align: center;
    padding: 8px 4px;
    border-right: 0.5px solid var(--tw-border);
    cursor: pointer;
}
.tw-summary-item:last-child { border-right: none; }
.tw-summary-value {
    font-size: 22px;
    font-weight: 600;
    line-height: 1.2;
    color: var(--tw-text);
}
.tw-summary-value.green { color: var(--tw-primary); }
.tw-summary-value.orange { color: var(--tw-warning); }
.tw-summary-value.red { color: var(--tw-danger); }
.tw-summary-label {
    font-size: 12px;
    color: var(--tw-text-3);
    margin-top: 2px;
}

/* ===== 顶部欢迎条 ===== */
.tw-hero {
    background: linear-gradient(135deg, var(--tw-brand) 0%, var(--tw-brand-dark) 100%);
    color: #fff;
    border-radius: 12px;
    padding: 18px 20px;
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
}
.tw-hero-hi { font-size: 17px; font-weight: 600; margin-bottom: 4px; }
.tw-hero-sub { font-size: 13px; opacity: .85; }
.tw-hero-sub b { color: #fff84d; font-weight: 600; }
.tw-hero-badge {
    background: rgba(255,255,255,.22);
    padding: 6px 12px;
    border-radius: 12px;
    font-size: 12px;
    backdrop-filter: blur(4px);
    flex-shrink: 0;
}

/* ===== 筛选条（横向滚动 chips + 单独搜索行） ===== */
.tw-filter-row {
    display: flex;
    gap: 8px;
    overflow-x: auto;
    margin-bottom: 10px;
    padding: 2px 0;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}
.tw-filter-row::-webkit-scrollbar { display: none; }
.tw-chip {
    flex-shrink: 0;
    padding: 6px 14px;
    background: var(--tw-card);
    border: 1px solid var(--tw-border);
    border-radius: 16px;
    font-size: 13px;
    color: var(--tw-text-2);
    cursor: pointer;
    transition: all .15s;
    white-space: nowrap;
}
.tw-chip:hover { color: var(--tw-text); }
.tw-chip.active {
    background: var(--tw-primary);
    color: #fff;
    border-color: var(--tw-primary);
    font-weight: 500;
}
.tw-chip .num {
    font-size: 11px;
    opacity: .7;
    margin-left: 2px;
}
.tw-search-row {
    background: var(--tw-card);
    border-radius: 10px;
    padding: 0 12px;
    margin-bottom: 12px;
    height: 38px;
    display: flex;
    align-items: center;
    gap: 8px;
    border: 1px solid var(--tw-border);
}
.tw-search-row .i { width: 16px; height: 16px; color: var(--tw-text-3); flex-shrink: 0; }
.tw-search-row input {
    flex: 1;
    border: none;
    background: none;
    outline: none;
    font-size: 14px;
    height: 100%;
}

/* ===== 行动按钮（微信风格） ===== */
.tw-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 0 16px;
    height: 32px;
    background: var(--tw-primary);
    color: #fff;
    border: none;
    border-radius: 16px;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: opacity .15s, transform .1s;
    white-space: nowrap;
}
.tw-btn:hover { opacity: .9; }
.tw-btn:active { transform: scale(.97); }
.tw-btn.ghost {
    background: var(--tw-primary-light);
    color: var(--tw-primary-dark);
}
.tw-btn.gray {
    background: #f0f0f0;
    color: var(--tw-text-2);
}
.tw-btn.danger { background: var(--tw-danger); }
.tw-btn.lg { height: 44px; padding: 0 24px; font-size: 15px; border-radius: 22px; }
.tw-btn.block { width: 100%; }
.tw-btn .i { width: 14px; height: 14px; }

/* ===== 空状态 ===== */
.tw-empty {
    padding: 60px 20px;
    text-align: center;
    color: var(--tw-text-3);
}
.tw-empty-icon { font-size: 48px; margin-bottom: 10px; opacity: .6; }
.tw-empty-text { font-size: 14px; }

/* ===== 抽屉/弹窗（替代 tutor-modal） ===== */
.tw-sheet {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.5);
    display: flex;
    align-items: flex-end;
    z-index: 10000;
    opacity: 0;
    transition: opacity .25s;
}
.tw-sheet.show { opacity: 1; }
.tw-sheet-content {
    width: 100%;
    background: var(--tw-card);
    border-radius: 16px 16px 0 0;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
    transform: translateY(100%);
    transition: transform .25s cubic-bezier(.32,.72,0,1);
}
.tw-sheet.show .tw-sheet-content { transform: translateY(0); }
.tw-sheet-handle {
    width: 36px;
    height: 4px;
    background: var(--tw-border);
    border-radius: 2px;
    margin: 8px auto 0;
    flex-shrink: 0;
}
.tw-sheet-header {
    padding: 14px 18px 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: 0.5px solid var(--tw-border);
}
.tw-sheet-header h3 {
    font-size: 16px;
    font-weight: 600;
    margin: 0;
}
.tw-sheet-close {
    width: 28px;
    height: 28px;
    border-radius: 14px;
    background: none;
    border: none;
    color: var(--tw-text-3);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.tw-sheet-close:hover { background: var(--tw-bg); }
.tw-sheet-body {
    padding: 16px 18px;
    overflow-y: auto;
    flex: 1;
}
.tw-sheet-footer {
    padding: 12px 18px;
    border-top: 0.5px solid var(--tw-border);
    display: flex;
    gap: 8px;
    flex-shrink: 0;
}
.tw-sheet-footer .tw-btn { flex: 1; }

@media (min-width: 900px) {
    .tw-sheet { align-items: center; justify-content: center; padding: 24px; }
    .tw-sheet-content {
        max-width: 540px;
        border-radius: 14px;
        max-height: 86vh;
        transform: translateY(20px) scale(.96);
    }
    .tw-sheet.show .tw-sheet-content { transform: translateY(0) scale(1); }
    .tw-sheet-handle { display: none; }
}

/* ===== 表单组件 ===== */
.tw-field { margin-bottom: 14px; }
.tw-field-label {
    display: block;
    font-size: 13px;
    color: var(--tw-text-3);
    margin-bottom: 6px;
}
.tw-input, .tw-select, .tw-textarea {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--tw-border);
    border-radius: 8px;
    font-size: 14px;
    background: var(--tw-card);
    outline: none;
    transition: border-color .2s;
    font-family: inherit;
    color: var(--tw-text);
}
.tw-input:focus, .tw-select:focus, .tw-textarea:focus { border-color: var(--tw-primary); }
.tw-textarea { resize: vertical; min-height: 80px; line-height: 1.5; }

/* 评分 */
.tw-rating { font-size: 22px; cursor: pointer; user-select: none; }
.tw-rating .star { opacity: .25; transition: opacity .15s; }
.tw-rating .star.on { opacity: 1; }

/* 快捷回复 chips */
.tw-quick-replies { display: flex; flex-wrap: wrap; gap: 6px; }
.tw-quick { padding: 6px 12px; background: var(--tw-bg); color: var(--tw-text-2); border-radius: 14px; font-size: 12px; cursor: pointer; transition: background .15s; }
.tw-quick:hover { background: var(--tw-primary-light); color: var(--tw-primary-dark); }

/* 引用块 */
.tw-quote {
    background: var(--tw-bg);
    border-left: 3px solid var(--tw-primary);
    padding: 10px 12px;
    border-radius: 4px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--tw-text-2);
    margin-bottom: 12px;
}
.tw-quote .from { color: var(--tw-text-3); font-size: 11px; margin-bottom: 4px; }

/* 我的点评（导师视角） */
.tw-review-bubble {
    background: var(--tw-primary-light);
    border-left: 3px solid var(--tw-primary);
    padding: 12px;
    border-radius: 8px;
    margin-top: 8px;
}

/* 桌面端微调 */
@media (min-width: 900px) {
    .tw-summary { padding: 20px 24px; }
    .tw-summary-value { font-size: 24px; }
    .tw-hero { padding: 22px 26px; }
    .tw-hero-hi { font-size: 19px; }
    .tw-list { border: 1px solid var(--tw-border); box-shadow: none; }
    .tw-item { padding: 14px 18px; }
}


/* =============================================================
 * 导师平台增强 — 通用样式
 * ============================================================= */

/* ===== 1. 语音录制面板 ===== */
.tutor-voice-panel {
    background: var(--tw-card);
    border: 1px solid var(--tw-border);
    border-radius: 12px;
    padding: 16px;
    margin-top: 12px;
}

.tutor-voice-panel h4 {
    font-size: 14px;
    color: var(--tw-text);
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.tutor-voice-controls {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 12px;
}

.tutor-voice-controls button {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: none;
    cursor: pointer;
    font-size: 16px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: transform .15s, opacity .2s;
}

.tutor-voice-controls button:active {
    transform: scale(.92);
}

.tutor-voice-controls button.record {
    background: var(--tw-danger);
    color: #fff;
}

.tutor-voice-controls button.pause {
    background: var(--tw-warning);
    color: #fff;
}

.tutor-voice-controls button.stop {
    background: var(--tw-text-3);
    color: #fff;
}

.tutor-voice-controls button.re-record {
    background: var(--tw-bg);
    color: var(--tw-text-2);
    border: 1px solid var(--tw-border);
}

.tutor-voice-controls button:disabled {
    opacity: .4;
    cursor: not-allowed;
}

.tutor-voice-timer {
    font-size: 14px;
    font-weight: 600;
    color: var(--tw-text);
    font-variant-numeric: tabular-nums;
    min-width: 100px;
    text-align: center;
}

.tutor-voice-timer .max {
    color: var(--tw-text-3);
    font-weight: 400;
}

.tutor-voice-waveform {
    width: 100%;
    height: 48px;
    border-radius: 8px;
    background: var(--tw-bg);
    margin-bottom: 12px;
    overflow: hidden;
}

.tutor-voice-waveform canvas {
    width: 100%;
    height: 100%;
    display: block;
}

.tutor-voice-preview {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    background: var(--tw-primary-light);
    border-radius: 8px;
}

.tutor-voice-preview .duration {
    font-size: 12px;
    color: var(--tw-text-3);
}

.tutor-voice-player {
    width: 100%;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    background: var(--tw-bg);
    border-radius: 10px;
    margin-top: 8px;
}

.tutor-voice-player button {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    border: none;
    background: var(--tw-primary);
    color: #fff;
    font-size: 14px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: opacity .15s;
}

.tutor-voice-player button:active {
    opacity: .8;
}

.tutor-voice-player .progress {
    flex: 1;
    height: 4px;
    background: var(--tw-border);
    border-radius: 2px;
    overflow: hidden;
}

.tutor-voice-player .progress-fill {
    height: 100%;
    background: var(--tw-primary);
    width: 0%;
    transition: width .2s linear;
}

.tutor-voice-player .time {
    font-size: 12px;
    color: var(--tw-text-3);
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

/* ===== 1b. 语音录制面板（弹窗内嵌版） ===== */
.voice-record-panel {
    margin-top: 8px;
}

.voice-record-panel .tw-field-label {
    margin-bottom: 10px;
}

.voice-unsupported {
    padding: 12px;
    background: #fff3cd;
    border-radius: 8px;
    font-size: 13px;
    color: #856404;
}

.voice-unsupported p {
    margin: 0;
}

.voice-controls {
    padding: 12px;
    background: var(--tw-bg, #f5f7fa);
    border-radius: 10px;
}

.voice-btn-group {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    margin-bottom: 10px;
}

.voice-btn {
    padding: 6px 12px;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
    background: var(--tw-primary, #6366f1);
    color: #fff;
    transition: opacity .15s, transform .1s;
}

.voice-btn:active {
    transform: scale(0.95);
}

.voice-btn:disabled {
    opacity: 0.4;
    cursor: not-allowed;
}

.voice-btn.record {
    background: #ef4444;
}

.voice-btn.pause {
    background: #f59e0b;
}

.voice-btn.stop {
    background: #6b7280;
}

.voice-btn.rerecord {
    background: #e5e7eb;
    color: #374151;
}

.voice-timer {
    font-size: 14px;
    font-weight: 600;
    color: var(--tw-text, #1f2937);
    font-variant-numeric: tabular-nums;
    margin-bottom: 8px;
}

.voice-waveform {
    width: 100%;
    height: 50px;
    border-radius: 6px;
    background: #f5f7fa;
    display: block;
}

.voice-preview {
    margin-top: 10px;
    padding: 10px 12px;
    background: #ecfdf5;
    border-radius: 8px;
}

.voice-preview-info {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 13px;
    color: #065f46;
    margin-bottom: 8px;
}

.voice-preview-controls {
    display: flex;
    gap: 8px;
}

/* ===== 1c. 语音播放器组件 ===== */
.voice-player {
    margin-top: 10px;
    padding: 12px;
    background: var(--tw-bg, #f5f7fa);
    border-radius: 10px;
}

.voice-player-header {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 8px;
    font-size: 13px;
    color: var(--tw-text-2, #4b5563);
}

.voice-player-icon {
    font-size: 16px;
}

.voice-player-label {
    font-weight: 500;
}

.voice-player-duration {
    margin-left: auto;
    font-size: 12px;
    color: var(--tw-text-3, #9ca3af);
    font-variant-numeric: tabular-nums;
}

.voice-player-controls {
    display: flex;
    align-items: center;
    gap: 10px;
}

.voice-player-btn {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    border: none;
    background: var(--tw-primary, #6366f1);
    color: #fff;
    font-size: 14px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: opacity .15s;
}

.voice-player-btn:active {
    opacity: 0.8;
}

.voice-player-progress-wrap {
    flex: 1;
    height: 20px;
    display: flex;
    align-items: center;
    cursor: pointer;
}

.voice-player-progress-bar {
    width: 100%;
    height: 4px;
    background: var(--tw-border, #e5e7eb);
    border-radius: 2px;
    overflow: hidden;
}

.voice-player-progress-fill {
    height: 100%;
    background: var(--tw-primary, #6366f1);
    width: 0%;
    transition: width .2s linear;
}

.voice-player-time {
    font-size: 12px;
    color: var(--tw-text-3, #9ca3af);
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
    min-width: 80px;
    text-align: right;
}

/* ===== 2. 进度追踪样式 ===== */
.tutor-progress-table {
    width: 100%;
    background: var(--tw-card);
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 1px 4px rgba(0,0,0,.04);
}

.tutor-progress-table th,
.tutor-progress-table td {
    padding: 12px 14px;
    text-align: left;
    font-size: 13px;
}

.tutor-progress-table th {
    background: var(--tw-bg);
    color: var(--tw-text-3);
    font-weight: 500;
    border-bottom: 1px solid var(--tw-border);
}

.tutor-progress-table td {
    border-bottom: 0.5px solid var(--tw-border);
}

.tutor-progress-table tr:last-child td {
    border-bottom: none;
}

.tutor-progress-bar {
    width: 100%;
    height: 8px;
    background: var(--tw-border);
    border-radius: 4px;
    overflow: hidden;
}

.tutor-progress-bar-fill {
    height: 100%;
    border-radius: 4px;
    background: linear-gradient(90deg, var(--tw-primary), #34d399);
    transition: width .4s ease;
}

.tutor-progress-status {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 500;
    background: var(--tw-primary-light);
    color: var(--tw-primary-dark);
}

.tutor-progress-status.behind {
    background: #ffe8db;
    color: var(--tw-danger);
}

.tutor-progress-status.not-started {
    background: #f0f0f0;
    color: var(--tw-text-3);
}

.tutor-timeline {
    position: relative;
    padding-left: 20px;
}

.tutor-timeline::before {
    content: '';
    position: absolute;
    left: 8px;
    top: 0;
    bottom: 0;
    width: 2px;
    background: var(--tw-border);
    border-radius: 1px;
}

.tutor-timeline-item {
    position: relative;
    padding: 8px 0 8px 16px;
}

.tutor-timeline-item::before {
    content: '';
    position: absolute;
    left: -16px;
    top: 14px;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--tw-primary);
    border: 2px solid var(--tw-card);
    box-shadow: 0 0 0 2px var(--tw-primary-light);
}

.tutor-timeline-item.inactive::before {
    background: var(--tw-border);
    box-shadow: none;
}

.tutor-timeline-item .date {
    font-size: 12px;
    color: var(--tw-text-3);
    margin-bottom: 2px;
}

.tutor-timeline-item .content {
    font-size: 13px;
    color: var(--tw-text-2);
}

/* ===== 3. 直播课 / 弹幕样式 ===== */
.tutor-live-room {
    background: var(--tw-card);
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0,0,0,.06);
}

.tutor-live-screen {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    background: #1a1a2e;
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(255,255,255,.6);
    font-size: 14px;
    overflow: hidden;
}

.tutor-barrage-container {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    pointer-events: none;
    z-index: 5;
}

.tutor-barrage {
    position: absolute;
    white-space: nowrap;
    font-size: 14px;
    color: #fff;
    text-shadow: 1px 1px 2px rgba(0,0,0,.5);
    animation: barrage-scroll linear forwards;
    will-change: transform;
}

@keyframes barrage-scroll {
    from {
        transform: translateX(100%);
    }
    to {
        transform: translateX(-100%);
    }
}

.tutor-live-stats {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 12px 16px;
    font-size: 13px;
    color: var(--tw-text-2);
    border-bottom: 0.5px solid var(--tw-border);
}

.tutor-live-stats .live-badge {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 10px;
    background: var(--tw-danger);
    color: #fff;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 500;
}

.tutor-live-stats .live-badge::before {
    content: '';
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: #fff;
    animation: live-pulse 1.2s infinite;
}

@keyframes live-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: .3; }
}

.tutor-live-input {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
}

.tutor-live-input input {
    flex: 1;
    padding: 10px 14px;
    border: 1px solid var(--tw-border);
    border-radius: 20px;
    font-size: 14px;
    outline: none;
    background: var(--tw-bg);
    transition: border-color .2s;
}

.tutor-live-input input:focus {
    border-color: var(--tw-primary);
    background: var(--tw-card);
}

.tutor-live-input button {
    padding: 10px 18px;
    background: var(--tw-primary);
    color: #fff;
    border: none;
    border-radius: 20px;
    font-size: 13px;
    cursor: pointer;
    transition: opacity .15s;
}

.tutor-live-input button:active {
    opacity: .8;
}

/* ===== 4. 课程编辑器 / 拖拽排序 ===== */
.tutor-editor-chapters {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tutor-editor-chapter {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--tw-card);
    border: 1px solid var(--tw-border);
    border-radius: 10px;
    cursor: grab;
    transition: box-shadow .2s, opacity .2s, border-color .2s;
}

.tutor-editor-chapter:hover {
    border-color: var(--tw-primary);
    box-shadow: 0 2px 8px rgba(7,193,96,.1);
}

.tutor-editor-chapter:active {
    cursor: grabbing;
}

.tutor-editor-chapter.dragging {
    opacity: .5;
    border-style: dashed;
}

.tutor-editor-chapter .drag-handle {
    color: var(--tw-text-4);
    font-size: 16px;
    cursor: grab;
    flex-shrink: 0;
}

.tutor-editor-chapter .chapter-title {
    flex: 1;
    font-size: 14px;
    color: var(--tw-text);
}

.tutor-editor-chapter .chapter-actions {
    display: flex;
    gap: 6px;
}

.tutor-editor-chapter .chapter-actions button {
    padding: 4px 10px;
    border: none;
    border-radius: 6px;
    font-size: 12px;
    cursor: pointer;
    transition: background .15s;
}

.tutor-editor-chapter .chapter-actions .btn-edit {
    background: #e3f2fd;
    color: #2196f3;
}

.tutor-editor-chapter .chapter-actions .btn-delete {
    background: #ffebee;
    color: #f44336;
}

.tutor-editor-form {
    background: var(--tw-card);
    border: 1px solid var(--tw-border);
    border-radius: 12px;
    padding: 20px;
    margin-top: 12px;
}

.tutor-editor-form .form-title {
    font-size: 15px;
    font-weight: 500;
    color: var(--tw-text);
    margin-bottom: 16px;
}

.tutor-editor-keypoints {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tutor-editor-keypoints .keypoint-item {
    display: flex;
    align-items: center;
    gap: 8px;
}

.tutor-editor-keypoints .keypoint-item input {
    flex: 1;
    padding: 8px 12px;
    border: 1px solid var(--tw-border);
    border-radius: 6px;
    font-size: 13px;
    outline: none;
    transition: border-color .2s;
}

.tutor-editor-keypoints .keypoint-item input:focus {
    border-color: var(--tw-primary);
}

.tutor-editor-keypoints .keypoint-item .btn-remove {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: none;
    background: #ffebee;
    color: #f44336;
    font-size: 14px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* ===== 5. 分销推广样式 ===== */
.tutor-dist-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
    margin-bottom: 16px;
}

.tutor-dist-stats .stat-item {
    background: var(--tw-card);
    border-radius: 10px;
    padding: 16px;
    text-align: center;
    box-shadow: 0 1px 4px rgba(0,0,0,.04);
}

.tutor-dist-stats .stat-item .value {
    font-size: 22px;
    font-weight: 700;
    color: var(--tw-text);
    margin-bottom: 4px;
}

.tutor-dist-stats .stat-item .label {
    font-size: 12px;
    color: var(--tw-text-3);
}

.tutor-dist-course {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    background: var(--tw-card);
    border: 1px solid var(--tw-border);
    border-radius: 10px;
    margin-bottom: 10px;
    transition: border-color .15s;
}

.tutor-dist-course:hover {
    border-color: var(--tw-primary);
}

.tutor-dist-course .course-info {
    flex: 1;
}

.tutor-dist-course .course-info h4 {
    font-size: 14px;
    color: var(--tw-text);
    margin-bottom: 4px;
}

.tutor-dist-course .course-info .commission {
    font-size: 12px;
    color: var(--tw-primary-dark);
}

.tutor-dist-course .course-actions {
    display: flex;
    gap: 8px;
}

.tutor-dist-course .course-actions button {
    padding: 6px 14px;
    border-radius: 16px;
    border: none;
    font-size: 12px;
    cursor: pointer;
    transition: opacity .15s;
}

.tutor-dist-course .course-actions .btn-poster {
    background: var(--tw-primary);
    color: #fff;
}

.tutor-dist-course .course-actions .btn-link {
    background: var(--tw-bg);
    color: var(--tw-text-2);
    border: 1px solid var(--tw-border);
}

.tutor-poster-preview {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: var(--tw-bg);
    border-radius: 12px;
    min-height: 300px;
}

.tutor-poster-preview canvas {
    max-width: 100%;
    border-radius: 8px;
    box-shadow: 0 4px 16px rgba(0,0,0,.12);
}

/* ===== 6. 结业证书样式 ===== */
.tutor-cert-preview {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    background: var(--tw-bg);
    border-radius: 12px;
    min-height: 240px;
}

.tutor-cert-canvas {
    max-width: 100%;
    border-radius: 8px;
    box-shadow: 0 4px 20px rgba(0,0,0,.1);
}

.tutor-cert-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.tutor-cert-item {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    background: var(--tw-card);
    border: 1px solid var(--tw-border);
    border-radius: 10px;
    transition: border-color .15s;
}

.tutor-cert-item:hover {
    border-color: var(--tw-primary);
}

.tutor-cert-item .cert-icon {
    width: 44px;
    height: 44px;
    border-radius: 10px;
    background: linear-gradient(135deg, #fbc02d, #f9a825);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    flex-shrink: 0;
}

.tutor-cert-item .cert-info {
    flex: 1;
}

.tutor-cert-item .cert-info h4 {
    font-size: 14px;
    color: var(--tw-text);
    margin-bottom: 3px;
}

.tutor-cert-item .cert-info p {
    font-size: 12px;
    color: var(--tw-text-3);
}

.tutor-cert-item .cert-actions {
    display: flex;
    gap: 6px;
}

.tutor-cert-badge {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 500;
}

.tutor-cert-badge.issued {
    background: var(--tw-primary-light);
    color: var(--tw-primary-dark);
}

.tutor-cert-badge.pending {
    background: #fff4e0;
    color: #d97706;
}

.tutor-cert-badge.ineligible {
    background: #f0f0f0;
    color: var(--tw-text-3);
}

/* ===== 7. 成长报告样式 ===== */
.tutor-report-card {
    background: var(--tw-card);
    border-radius: 12px;
    padding: 20px;
    box-shadow: 0 2px 8px rgba(0,0,0,.04);
    margin-bottom: 12px;
}

.tutor-report-card h4 {
    font-size: 15px;
    color: var(--tw-text);
    margin-bottom: 12px;
}

.tutor-report-chart {
    width: 100%;
    height: 180px;
    background: var(--tw-bg);
    border-radius: 8px;
    margin-bottom: 14px;
    overflow: hidden;
}

.tutor-report-chart canvas {
    width: 100%;
    height: 100%;
    display: block;
}

.tutor-report-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    margin-bottom: 14px;
}

.tutor-report-stats .stat {
    text-align: center;
    padding: 12px 8px;
    background: var(--tw-bg);
    border-radius: 8px;
}

.tutor-report-stats .stat .value {
    font-size: 20px;
    font-weight: 700;
    color: var(--tw-primary-dark);
    margin-bottom: 2px;
}

.tutor-report-stats .stat .label {
    font-size: 12px;
    color: var(--tw-text-3);
}

.tutor-report-comment {
    padding: 14px 16px;
    background: var(--tw-primary-light);
    border-left: 3px solid var(--tw-primary);
    border-radius: 6px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--tw-text-2);
}

.tutor-report-comment .label {
    font-size: 12px;
    color: var(--tw-text-3);
    margin-bottom: 4px;
}

/* ===== 7b. 成长报告 UI 增强样式 (.tt-report-*) ===== */
.tt-report-modal { padding: 4px 0; }

.tt-report-section {
    margin-bottom: 16px;
}

.tt-report-section-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--tt-text-1, #2C2C2C);
    margin-bottom: 10px;
}

.tt-report-section-title .tt-report-required {
    font-size: 12px;
    font-weight: 400;
    color: var(--tt-text-3, #9B9B9B);
}

.tt-report-stats-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    margin-bottom: 12px;
}

.tt-report-stat-item {
    text-align: center;
    padding: 14px 8px;
    background: var(--tt-bg, #F7F4EB);
    border-radius: 10px;
}

.tt-report-stat-val {
    font-size: 20px;
    font-weight: 700;
    color: var(--tt-primary-dark, #557A4A);
    margin-bottom: 2px;
}

.tt-report-stat-lbl {
    font-size: 12px;
    color: var(--tt-text-3, #9B9B9B);
}

.tt-report-camps {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.tt-report-chart {
    width: 100%;
    height: 180px;
    background: var(--tt-bg, #F7F4EB);
    border-radius: 10px;
    overflow: hidden;
}

.tt-report-textarea {
    width: 100%;
    min-height: 100px;
    padding: 12px;
    border: 1px solid var(--tt-border, #EDE8DC);
    border-radius: 10px;
    font-size: 14px;
    line-height: 1.6;
    resize: vertical;
    background: var(--tt-bg, #F7F4EB);
    color: var(--tt-text-1, #2C2C2C);
    box-sizing: border-box;
    transition: border-color .2s;
}

.tt-report-textarea:focus {
    outline: none;
    border-color: var(--tt-primary, #6B8E5A);
}

.tt-report-char-count {
    text-align: right;
    font-size: 12px;
    color: var(--tt-text-3, #9B9B9B);
    margin-top: 4px;
}

.tt-report-footer {
    display: flex;
    gap: 10px;
}

.tt-report-footer .tt-btn {
    flex: 1;
}

/* 报告预览 */
.tt-report-preview { padding: 4px 0; }

.tt-report-preview-badge {
    display: inline-block;
    padding: 3px 10px;
    background: #fff4e0;
    color: #d97706;
    font-size: 12px;
    border-radius: 12px;
    margin-bottom: 12px;
}

.tt-report-preview-header {
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--tt-divider, #F2EEDF);
}

.tt-report-preview-title {
    font-size: 17px;
    font-weight: 700;
    color: var(--tt-text-1, #2C2C2C);
    margin-bottom: 4px;
}

.tt-report-preview-meta {
    font-size: 12px;
    color: var(--tt-text-3, #9B9B9B);
}

.tt-report-camps-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tt-report-camp-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 12px;
    background: var(--tt-bg, #F7F4EB);
    border-radius: 8px;
}

.tt-report-camp-name {
    font-size: 13px;
    color: var(--tt-text-1, #2C2C2C);
}

.tt-report-comment-card {
    padding: 16px;
    background: rgba(107, 142, 90, 0.06);
    border-left: 3px solid var(--tt-primary, #6B8E5A);
    border-radius: 8px;
}

.tt-report-comment-text {
    font-size: 14px;
    line-height: 1.7;
    color: var(--tt-text-2, #5C5C5C);
    white-space: pre-wrap;
}

.tt-report-comment-sign {
    margin-top: 10px;
    font-size: 13px;
    color: var(--tt-text-3, #9B9B9B);
    text-align: right;
}

/* 学员端报告卡片 */
.tt-report-student-list {
    padding: 12px 0;
}

.tt-report-student-card {
    background: #fff;
    border-radius: 12px;
    padding: 16px;
    margin-bottom: 12px;
    box-shadow: 0 2px 8px rgba(0,0,0,.04);
    cursor: pointer;
    transition: box-shadow .2s;
}

.tt-report-student-card:hover {
    box-shadow: 0 4px 16px rgba(0,0,0,.08);
}

.tt-report-student-card-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
}

.tt-report-student-card-icon {
    font-size: 28px;
}

.tt-report-student-card-info {
    flex: 1;
}

.tt-report-student-card-title {
    font-size: 15px;
    font-weight: 600;
    color: #2C2C2C;
}

.tt-report-student-card-date {
    font-size: 12px;
    color: #9B9B9B;
}

.tt-report-student-card-stats {
    display: flex;
    gap: 12px;
    font-size: 12px;
    color: #5C5C5C;
    margin-bottom: 8px;
    padding: 8px 12px;
    background: #F7F4EB;
    border-radius: 8px;
}

.tt-report-student-card-comment {
    font-size: 13px;
    color: #5C5C5C;
    line-height: 1.5;
    font-style: italic;
    margin-bottom: 4px;
}

.tt-report-student-card-tutor {
    font-size: 12px;
    color: #9B9B9B;
    text-align: right;
}

/* 学员端报告详情 */
.tt-report-student-detail {
    padding: 8px 0;
}

.tt-report-student-detail-header {
    text-align: center;
    margin-bottom: 20px;
    padding-bottom: 14px;
    border-bottom: 1px solid #f0ede4;
}

.tt-report-student-detail-title {
    font-size: 18px;
    font-weight: 700;
    color: #2C2C2C;
    margin-bottom: 4px;
}

.tt-report-student-detail-meta {
    font-size: 12px;
    color: #9B9B9B;
}

.tt-report-student-detail-section {
    margin-bottom: 20px;
}

.tt-report-student-detail-section h4 {
    font-size: 14px;
    font-weight: 600;
    color: #2C2C2C;
    margin-bottom: 10px;
}

.tt-report-student-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.tt-report-student-stat {
    text-align: center;
    padding: 14px 8px;
    background: #F7F4EB;
    border-radius: 10px;
}

.tt-report-student-stat .val {
    font-size: 20px;
    font-weight: 700;
    color: #557A4A;
    margin-bottom: 2px;
}

.tt-report-student-stat .lbl {
    font-size: 12px;
    color: #9B9B9B;
}

.tt-report-chart-student {
    width: 100%;
    height: 180px;
    background: #F7F4EB;
    border-radius: 10px;
    overflow: hidden;
}

.tt-report-student-comment {
    padding: 16px;
    background: rgba(107, 142, 90, 0.06);
    border-left: 3px solid #6B8E5A;
    border-radius: 8px;
}

.tt-report-student-comment p {
    font-size: 14px;
    line-height: 1.7;
    color: #5C5C5C;
    white-space: pre-wrap;
    margin: 0;
}

.tt-report-student-comment-sign {
    margin-top: 10px;
    font-size: 13px;
    color: #9B9B9B;
    text-align: right;
}

.rp-pill {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
}

.rp-pill.green {
    background: rgba(107, 142, 90, 0.12);
    color: #557A4A;
}

.rp-pill.warm {
    background: #fff4e0;
    color: #d97706;
}

/* =====================================================================
 * 导师端 v3 · 鼠尾草绿 · 微信读书风
 * 设计令牌 + 4 tab 布局 + 完整组件
 * 优先级覆盖之前的 .tutor-* 和 .tw-*
 * ===================================================================== */

#tutor-app.tt-app {
    --tt-bg: #F7F4EB;
    --tt-bg-2: #FFFCF5;
    --tt-card: #FFFFFF;
    --tt-primary: #6B8E5A;
    --tt-primary-dark: #557A4A;
    --tt-primary-soft: rgba(107, 142, 90, .10);
    --tt-primary-softer: rgba(107, 142, 90, .05);
    --tt-text-1: #2C2C2C;
    --tt-text-2: #5C5C5C;
    --tt-text-3: #9B9B9B;
    --tt-text-4: #C0C0C0;
    --tt-border: #EDE8DC;
    --tt-divider: #F2EEDF;
    --tt-danger: #C25450;
    --tt-warm: #D9A66B;
    --tt-cool: #6BA0C2;
    --tt-shadow: 0 1px 3px rgba(0,0,0,.04), 0 4px 12px rgba(0,0,0,.03);
    --tt-shadow-lg: 0 4px 24px rgba(0,0,0,.08);
    background: var(--tt-bg);
    color: var(--tt-text-1);
    font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", "Source Han Sans CN", sans-serif;
    font-size: 14px;
    line-height: 1.5;
    height: 100vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

/* ===== Header ===== */
.tt-app .tt-header {
    flex-shrink: 0;
    height: 52px;
    background: var(--tt-card);
    border-bottom: 1px solid var(--tt-border);
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 16px;
    position: relative;
    z-index: 5;
}
.tt-app .tt-header-brand { display: flex; align-items: center; gap: 10px; min-width: 0; }
.tt-app .tt-logo { font-size: 20px; }
.tt-app .tt-page-title {
    font-size: 16px;
    font-weight: 600;
    color: var(--tt-text-1);
    letter-spacing: .5px;
}
.tt-app .tt-header-actions { display: flex; align-items: center; gap: 4px; }
.tt-app .tt-user-name {
    font-size: 13px;
    color: var(--tt-text-3);
    margin-right: 4px;
}
.tt-app .tt-icon-btn {
    width: 36px;
    height: 36px;
    border-radius: 18px;
    border: none;
    background: transparent;
    color: var(--tt-text-3);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background .15s, color .15s;
}
.tt-app .tt-icon-btn:hover { background: var(--tt-primary-soft); color: var(--tt-primary); }
.tt-app .tt-icon-btn .i { width: 18px; height: 18px; }

/* ===== Main ===== */
.tt-app .tt-main {
    flex: 1;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 64px;       /* 给底部 tabbar 让出空间 */
}
.tt-app .tt-page {
    padding: 16px;
    max-width: 720px;
    margin: 0 auto;
}

/* ===== Tabbar（手机底部） ===== */
.tt-app .tt-tabbar {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: 56px;
    background: var(--tt-card);
    border-top: 1px solid var(--tt-border);
    display: flex;
    z-index: 100;
    padding-bottom: env(safe-area-inset-bottom, 0);
}
.tt-app .tt-tab {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    cursor: pointer;
    color: var(--tt-text-3);
    text-decoration: none;
    transition: color .15s;
    position: relative;
    font-size: 11px;
}
.tt-app .tt-tab .i { width: 22px; height: 22px; }
.tt-app .tt-tab:hover { color: var(--tt-text-2); }
.tt-app .tt-tab.active { color: var(--tt-primary); }
.tt-app .tt-tab-badge {
    position: absolute;
    top: 6px;
    left: 50%;
    margin-left: 6px;
    min-width: 16px;
    height: 16px;
    padding: 0 4px;
    border-radius: 8px;
    background: var(--tt-danger);
    color: #fff;
    font-size: 10px;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
}

/* ===== Hero（欢迎条） ===== */
.tt-app .tt-hero {
    background: linear-gradient(135deg, var(--tt-primary) 0%, var(--tt-primary-dark) 100%);
    border-radius: 14px;
    padding: 18px 20px;
    margin-bottom: 14px;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    box-shadow: 0 6px 20px rgba(107, 142, 90, .18);
}
.tt-app .tt-hero-text { flex: 1; min-width: 0; }
.tt-app .tt-hero-greet { font-size: 17px; font-weight: 600; margin-bottom: 4px; }
.tt-app .tt-hero-line { font-size: 13px; opacity: .9; line-height: 1.5; }
.tt-app .tt-hero-line b { font-weight: 700; color: #FFE9B0; }
.tt-app .tt-hero-level {
    background: rgba(255,255,255,.22);
    padding: 5px 12px;
    border-radius: 12px;
    font-size: 12px;
    backdrop-filter: blur(8px);
    flex-shrink: 0;
}

/* ===== Stat Row（4 列横向统计） ===== */
.tt-app .tt-stat-row {
    background: var(--tt-card);
    border-radius: 12px;
    padding: 14px 4px;
    margin-bottom: 14px;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    box-shadow: var(--tt-shadow);
}
.tt-app .tt-stat {
    text-align: center;
    padding: 6px 4px;
    cursor: pointer;
    position: relative;
    transition: opacity .15s;
}
.tt-app .tt-stat:hover { opacity: .7; }
.tt-app .tt-stat:not(:last-child)::after {
    content: '';
    position: absolute;
    right: 0; top: 16%; bottom: 16%;
    width: 1px;
    background: var(--tt-divider);
}
.tt-app .tt-stat-num {
    font-size: 22px;
    font-weight: 700;
    color: var(--tt-text-1);
    line-height: 1.2;
}
.tt-app .tt-stat-num.green { color: var(--tt-primary); }
.tt-app .tt-stat-num.warm { color: var(--tt-warm); }
.tt-app .tt-stat-num.red { color: var(--tt-danger); }
.tt-app .tt-stat-lbl {
    font-size: 12px;
    color: var(--tt-text-3);
    margin-top: 2px;
}

/* ===== Alert（紧急提醒） ===== */
.tt-app .tt-alert {
    background: linear-gradient(90deg, rgba(217, 166, 107, .12), rgba(217, 166, 107, .04));
    border: 1px solid rgba(217, 166, 107, .3);
    border-radius: 12px;
    padding: 14px 16px;
    margin-bottom: 14px;
    display: flex;
    align-items: center;
    gap: 12px;
    cursor: pointer;
    transition: background .15s;
}
.tt-app .tt-alert:hover { background: linear-gradient(90deg, rgba(217, 166, 107, .18), rgba(217, 166, 107, .06)); }
.tt-app .tt-alert-icon {
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    background: var(--tt-warm);
    color: #fff;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
}
.tt-app .tt-alert-text { flex: 1; min-width: 0; }
.tt-app .tt-alert-title { font-size: 14px; font-weight: 600; color: var(--tt-text-1); margin-bottom: 2px; }
.tt-app .tt-alert-sub { font-size: 12px; color: var(--tt-text-3); }
.tt-app .tt-alert-arrow { width: 16px; height: 16px; color: var(--tt-text-3); flex-shrink: 0; }

/* ===== Section ===== */
.tt-app .tt-section { margin-bottom: 18px; }
.tt-app .tt-section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 2px 8px;
}
.tt-app .tt-section-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--tt-text-1);
    letter-spacing: .3px;
}
.tt-app .tt-section-count {
    font-size: 12px;
    color: var(--tt-text-3);
    background: var(--tt-primary-soft);
    color: var(--tt-primary-dark);
    padding: 2px 8px;
    border-radius: 10px;
    font-weight: 500;
}

/* ===== Card ===== */
.tt-app .tt-card {
    background: var(--tt-card);
    border-radius: 12px;
    padding: 16px;
    box-shadow: var(--tt-shadow);
}

/* ===== List & Item（核心组件，微信读书风） ===== */
.tt-app .tt-list {
    background: var(--tt-card);
    border-radius: 12px;
    overflow: hidden;
    box-shadow: var(--tt-shadow);
}
.tt-app .tt-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px 16px;
    min-height: 72px;
    border-bottom: 0.5px solid var(--tt-divider);
    cursor: pointer;
    transition: background .15s;
    position: relative;
}
.tt-app .tt-item:last-child { border-bottom: none; }
.tt-app .tt-item:hover { background: var(--tt-primary-softer); }
.tt-app .tt-item:active { background: var(--tt-primary-soft); }
.tt-app .tt-item.urgent {
    background: linear-gradient(90deg, rgba(194, 84, 80, .04), transparent);
}
.tt-app .tt-item.urgent::before {
    content: '';
    position: absolute;
    left: 0; top: 14px; bottom: 14px;
    width: 3px;
    background: var(--tt-danger);
    border-radius: 0 2px 2px 0;
}
.tt-app .tt-item.unread { background: var(--tt-primary-softer); }

.tt-app .tt-item-avatar {
    flex-shrink: 0;
    width: 42px;
    height: 42px;
    border-radius: 10px;
    background: var(--tt-divider);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
}
.tt-app .tt-item-avatar.small { width: 32px; height: 32px; font-size: 18px; border-radius: 8px; }
.tt-app .tt-item-main { flex: 1; min-width: 0; }
.tt-app .tt-item-title {
    font-size: 15px;
    color: var(--tt-text-1);
    font-weight: 500;
    display: flex;
    align-items: center;
    gap: 6px;
    line-height: 1.3;
}
.tt-app .tt-item-title > span:first-child { flex-shrink: 0; }
.tt-app .tt-item-sub {
    color: var(--tt-text-3);
    font-weight: 400;
    font-size: 13px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.tt-app .tt-item-preview {
    font-size: 13px;
    color: var(--tt-text-2);
    line-height: 1.4;
    margin-top: 2px;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    min-height: 2.8em; /* 固定 2 行高度，避免卡片跳动 */
}
.tt-app .tt-item-aside {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 6px;
    min-width: 56px;
}
.tt-app .tt-item-time { font-size: 11px; color: var(--tt-text-4); white-space: nowrap; }
.tt-app .tt-unread-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--tt-danger);
}

/* ===== Pill（状态徽章） ===== */
.tt-app .tt-pill {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
    line-height: 1.4;
    font-weight: 500;
    white-space: nowrap;
}
.tt-app .tt-pill.soft { background: rgba(217, 166, 107, .15); color: #B07F40; }
.tt-app .tt-pill.warm { background: rgba(194, 84, 80, .15); color: var(--tt-danger); }
.tt-app .tt-pill.green { background: var(--tt-primary-soft); color: var(--tt-primary-dark); }
.tt-app .tt-pill.cool { background: rgba(107, 160, 194, .15); color: #2E6B8F; }
.tt-app .tt-pill.gray { background: #EFEFEF; color: var(--tt-text-3); }

/* ===== 本周数据卡 ===== */
.tt-app .tt-week {
    display: flex;
    align-items: center;
    padding: 18px 16px;
}
.tt-app .tt-week-item { flex: 1; text-align: center; }
.tt-app .tt-week-num {
    font-size: 26px;
    font-weight: 700;
    color: var(--tt-primary);
    line-height: 1.1;
}
.tt-app .tt-week-num small { font-size: 14px; font-weight: 600; }
.tt-app .tt-week-lbl { font-size: 12px; color: var(--tt-text-3); margin-top: 4px; }
.tt-app .tt-week-divider { width: 1px; height: 28px; background: var(--tt-divider); }

/* ===== 快捷入口网格 ===== */
.tt-app .tt-quick-grid {
    background: var(--tt-card);
    border-radius: 12px;
    padding: 8px;
    box-shadow: var(--tt-shadow);
    display: grid;
    grid-template-columns: repeat(3, 1fr);
}
.tt-app .tt-quick-tile {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    padding: 14px 8px;
    border-radius: 10px;
    cursor: pointer;
    transition: background .15s;
}
.tt-app .tt-quick-tile:hover { background: var(--tt-primary-softer); }
.tt-app .tt-quick-icon { font-size: 24px; }
.tt-app .tt-quick-label { font-size: 12px; color: var(--tt-text-2); }

/* ===== More 链接 ===== */
.tt-app .tt-more {
    text-align: center;
    padding: 12px;
    color: var(--tt-primary);
    font-size: 13px;
    cursor: pointer;
    margin-top: 4px;
}
.tt-app .tt-more:hover { text-decoration: underline; }
.tt-app .tt-link { color: var(--tt-primary); cursor: pointer; }
.tt-app .tt-link:hover { text-decoration: underline; }

/* ===== Empty ===== */
.tt-app .tt-empty {
    text-align: center;
    padding: 50px 20px;
    color: var(--tt-text-3);
    background: var(--tt-card);
    border-radius: 12px;
}
.tt-app .tt-empty-emoji { font-size: 44px; margin-bottom: 10px; opacity: .7; }
.tt-app .tt-empty-title { font-size: 14px; color: var(--tt-text-2); margin-bottom: 4px; }
.tt-app .tt-empty-sub { font-size: 12px; color: var(--tt-text-3); }

/* ===== Sheet（底部抽屉/桌面居中弹窗） ===== */
.tt-sheet {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.45);
    display: flex;
    align-items: flex-end;
    justify-content: center;
    z-index: 10000;
    opacity: 0;
    transition: opacity .22s ease;
}
.tt-sheet.show { opacity: 1; }
.tt-sheet-content {
    width: 100%;
    background: var(--tt-bg-2, #FFFCF5);
    border-radius: 18px 18px 0 0;
    max-height: 88vh;
    display: flex;
    flex-direction: column;
    transform: translateY(100%);
    transition: transform .25s cubic-bezier(.32,.72,0,1);
    box-shadow: 0 -8px 32px rgba(0,0,0,.12);
}
.tt-sheet.show .tt-sheet-content { transform: translateY(0); }
.tt-sheet-grab {
    width: 36px; height: 4px;
    background: #D4CFC0;
    border-radius: 2px;
    margin: 8px auto 4px;
    flex-shrink: 0;
}
.tt-sheet-head {
    padding: 8px 18px 14px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-shrink: 0;
}
.tt-sheet-head h3 {
    font-size: 17px;
    font-weight: 600;
    color: #2C2C2C;
    margin: 0;
}
.tt-sheet-close {
    background: rgba(0,0,0,.04);
    color: #5C5C5C;
}
.tt-sheet-body {
    padding: 0 18px 18px;
    overflow-y: auto;
    flex: 1;
}
.tt-sheet-foot {
    padding: 12px 18px;
    border-top: 1px solid #EDE8DC;
    background: #FFFFFF;
    display: flex;
    gap: 10px;
    flex-shrink: 0;
}
.tt-sheet-foot .tt-btn { flex: 1; }

@media (min-width: 720px) {
    .tt-sheet {
        align-items: center;
        padding: 24px;
    }
    .tt-sheet-content {
        max-width: 560px;
        max-height: 86vh;
        border-radius: 14px;
        transform: translateY(20px) scale(.96);
    }
    .tt-sheet.show .tt-sheet-content {
        transform: translateY(0) scale(1);
    }
    .tt-sheet-grab { display: none; }
    .tt-sheet-head { padding: 16px 22px 14px; }
    .tt-sheet-body { padding: 0 22px 18px; }
    .tt-sheet-content.large { max-width: 680px; }
}

/* ===== Form Field ===== */
.tt-app .tt-field, .tt-sheet .tt-field { margin-bottom: 14px; }
.tt-app .tt-field-label, .tt-sheet .tt-field-label {
    display: block;
    font-size: 13px;
    color: var(--tt-text-3, #9B9B9B);
    margin-bottom: 6px;
}
.tt-app .tt-input, .tt-sheet .tt-input,
.tt-app .tt-textarea, .tt-sheet .tt-textarea {
    width: 100%;
    padding: 12px 14px;
    border: 1px solid #EDE8DC;
    border-radius: 10px;
    font-size: 14px;
    background: #FFFFFF;
    outline: none;
    transition: border-color .2s;
    font-family: inherit;
    color: #2C2C2C;
    box-sizing: border-box;
}
.tt-app .tt-input:focus, .tt-sheet .tt-input:focus,
.tt-app .tt-textarea:focus, .tt-sheet .tt-textarea:focus { border-color: #6B8E5A; }
.tt-sheet .tt-textarea { resize: vertical; min-height: 80px; line-height: 1.6; }

.tt-sheet .tt-stars { font-size: 28px; color: #D4CFC0; user-select: none; }
.tt-sheet .tt-stars .tt-star { cursor: pointer; transition: color .15s; }
.tt-sheet .tt-stars .tt-star.on { color: #E9B946; }
.tt-sheet .tt-stars-show {
    font-size: 20px;
    color: #E9B946;
    margin: 8px 0;
}

.tt-sheet .tt-replies { display: flex; flex-wrap: wrap; gap: 6px; }
.tt-sheet .tt-reply-chip {
    padding: 6px 12px;
    background: rgba(107, 142, 90, .08);
    color: #557A4A;
    border-radius: 14px;
    font-size: 12px;
    cursor: pointer;
    transition: background .15s;
}
.tt-sheet .tt-reply-chip:hover { background: rgba(107, 142, 90, .16); }
.tt-sheet .tt-reply-row {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    background: #F7F4EB;
    padding: 10px;
    border-radius: 10px;
    margin-bottom: 8px;
}
.tt-sheet .tt-reply-row .tt-reply-label { margin-bottom: 6px; }
.tt-sheet .tt-reply-row .tt-reply-text { resize: none; }

/* ===== 引用与回复气泡 ===== */
.tt-sheet .tt-review-quote {
    background: #F7F4EB;
    border-radius: 12px;
    padding: 14px;
    margin-bottom: 16px;
}
.tt-sheet .tt-review-quote-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 8px;
}
.tt-sheet .tt-review-quote-name { font-size: 14px; font-weight: 600; color: #2C2C2C; }
.tt-sheet .tt-review-quote-sub { font-size: 12px; color: #9B9B9B; margin-top: 2px; }
.tt-sheet .tt-review-quote-text {
    font-size: 14px;
    line-height: 1.65;
    color: #4A4A4A;
}
.tt-sheet .tt-review-bubble {
    background: rgba(107, 142, 90, .08);
    border-left: 3px solid #6B8E5A;
    padding: 12px 14px;
    border-radius: 4px 10px 10px 10px;
    font-size: 14px;
    line-height: 1.65;
    color: #2C2C2C;
}
.tt-sheet .tt-meta-line {
    font-size: 12px;
    color: #9B9B9B;
    margin: 6px 0;
}

/* ===== 学员详情 ===== */
.tt-sheet .tt-stu-detail {
    display: flex;
    gap: 14px;
    padding-bottom: 14px;
    border-bottom: 1px solid #EDE8DC;
    margin-bottom: 14px;
    align-items: center;
}
.tt-sheet .tt-stu-avatar {
    width: 64px;
    height: 64px;
    border-radius: 14px;
    background: linear-gradient(135deg, #A8C49A, #6B8E5A);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 36px;
    color: #fff;
    flex-shrink: 0;
}
.tt-sheet .tt-stu-name { font-size: 17px; font-weight: 600; }
.tt-sheet .tt-stu-meta { font-size: 12px; color: #9B9B9B; margin-top: 4px; }
.tt-sheet .tt-stu-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    background: #F7F4EB;
    border-radius: 12px;
    padding: 14px 8px;
    margin-bottom: 14px;
    text-align: center;
}
.tt-sheet .tt-stu-stats > div b {
    display: block;
    font-size: 22px;
    font-weight: 700;
    color: #6B8E5A;
    line-height: 1.1;
}
.tt-sheet .tt-stu-stats > div span {
    font-size: 11px;
    color: #9B9B9B;
    margin-top: 2px;
    display: block;
}
.tt-app .tt-stu-progress {
    font-size: 15px;
    font-weight: 600;
    color: #6B8E5A;
}
.tt-app .tt-stu-progress-sep { font-weight: 400; color: #C0C0C0; }

/* ===== Filter chips ===== */
.tt-sheet .tt-filter-chips, .tt-app .tt-filter-chips {
    display: flex;
    gap: 8px;
    overflow-x: auto;
    margin-bottom: 12px;
    -webkit-overflow-scrolling: touch;
}
.tt-sheet .tt-filter-chips::-webkit-scrollbar, .tt-app .tt-filter-chips::-webkit-scrollbar { display: none; }
.tt-sheet .tt-chip, .tt-app .tt-chip {
    flex-shrink: 0;
    padding: 6px 14px;
    background: #FFFFFF;
    border: 1px solid #EDE8DC;
    border-radius: 16px;
    font-size: 13px;
    color: #5C5C5C;
    cursor: pointer;
    transition: all .15s;
    white-space: nowrap;
}
.tt-sheet .tt-chip.active, .tt-app .tt-chip.active {
    background: #6B8E5A;
    color: #fff;
    border-color: #6B8E5A;
    font-weight: 500;
}

/* ===== Search box ===== */
.tt-app .tt-search-box, .tt-sheet .tt-search-box {
    background: #FFFFFF;
    border: 1px solid #EDE8DC;
    border-radius: 12px;
    padding: 0 14px;
    height: 42px;
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
}
.tt-app .tt-search-box .i, .tt-sheet .tt-search-box .i {
    width: 16px;
    height: 16px;
    color: #9B9B9B;
    flex-shrink: 0;
}
.tt-app .tt-search-box input, .tt-sheet .tt-search-box input {
    flex: 1;
    border: none;
    background: transparent;
    outline: none;
    font-size: 14px;
    height: 100%;
    font-family: inherit;
    color: #2C2C2C;
}

/* ===== Button ===== */
.tt-app .tt-btn, .tt-sheet .tt-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 0 18px;
    height: 40px;
    border: none;
    border-radius: 20px;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: all .15s;
    background: #F0EBDD;
    color: #2C2C2C;
    font-family: inherit;
    line-height: 1;
    white-space: nowrap;
}
.tt-app .tt-btn:hover, .tt-sheet .tt-btn:hover { opacity: .85; }
.tt-app .tt-btn:active, .tt-sheet .tt-btn:active { transform: scale(.97); }
.tt-app .tt-btn:disabled, .tt-sheet .tt-btn:disabled { opacity: .4; cursor: not-allowed; transform: none; }
.tt-app .tt-btn.primary, .tt-sheet .tt-btn.primary {
    background: #6B8E5A;
    color: #fff;
    box-shadow: 0 2px 8px rgba(107, 142, 90, .25);
}
.tt-app .tt-btn.primary:hover, .tt-sheet .tt-btn.primary:hover { box-shadow: 0 4px 12px rgba(107, 142, 90, .35); }
.tt-app .tt-btn.ghost, .tt-sheet .tt-btn.ghost {
    background: rgba(107, 142, 90, .08);
    color: #557A4A;
}
.tt-app .tt-btn.danger, .tt-sheet .tt-btn.danger { background: #C25450; color: #fff; }
.tt-app .tt-btn.block, .tt-sheet .tt-btn.block { width: 100%; }
.tt-app .tt-btn .i, .tt-sheet .tt-btn .i { width: 14px; height: 14px; }

/* ===== Profile 页 ===== */
.tt-app .tt-profile-card {
    background: var(--tt-card);
    border-radius: 14px;
    padding: 24px 20px;
    text-align: center;
    margin-bottom: 14px;
    box-shadow: var(--tt-shadow);
}
.tt-app .tt-profile-avatar {
    width: 72px;
    height: 72px;
    border-radius: 18px;
    background: linear-gradient(135deg, #A8C49A, #6B8E5A);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 40px;
    margin-bottom: 12px;
    color: #fff;
}
.tt-app .tt-profile-name { font-size: 18px; font-weight: 600; margin-bottom: 4px; }
.tt-app .tt-profile-title { font-size: 13px; color: var(--tt-text-3); margin-bottom: 10px; }
.tt-app .tt-profile-badge {
    display: inline-block;
    padding: 4px 14px;
    background: linear-gradient(135deg, #6B8E5A, #557A4A);
    color: #fff;
    border-radius: 12px;
    font-size: 12px;
}
.tt-app .tt-profile-stats {
    display: flex;
    margin-top: 18px;
    padding-top: 16px;
    border-top: 1px solid var(--tt-divider);
}
.tt-app .tt-profile-stats > div {
    flex: 1;
    text-align: center;
    position: relative;
}
.tt-app .tt-profile-stats > div:not(:last-child)::after {
    content: '';
    position: absolute;
    right: 0; top: 10%; bottom: 10%;
    width: 1px;
    background: var(--tt-divider);
}
.tt-app .tt-profile-stats b {
    display: block;
    font-size: 20px;
    font-weight: 700;
    color: var(--tt-text-1);
    line-height: 1.2;
}
.tt-app .tt-profile-stats span {
    display: block;
    font-size: 12px;
    color: var(--tt-text-3);
    margin-top: 2px;
}

.tt-app .tt-menu {
    background: var(--tt-card);
    border-radius: 12px;
    margin-bottom: 14px;
    overflow: hidden;
    box-shadow: var(--tt-shadow);
}
.tt-app .tt-menu-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    border-bottom: 0.5px solid var(--tt-divider);
    cursor: pointer;
    transition: background .15s;
    font-size: 14px;
}
.tt-app .tt-menu-item:last-child { border-bottom: none; }
.tt-app .tt-menu-item:hover { background: var(--tt-primary-softer); }
.tt-app .tt-menu-icon { font-size: 20px; width: 28px; text-align: center; flex-shrink: 0; }
.tt-app .tt-menu-text { flex: 1; }
.tt-app .tt-menu-extra { color: var(--tt-text-3); font-size: 13px; }
.tt-app .tt-menu-arrow { width: 16px; height: 16px; color: var(--tt-text-4); }

/* ===== 收益卡 / Info card ===== */
.tt-sheet .tt-earnings-card {
    background: linear-gradient(135deg, #6B8E5A 0%, #557A4A 100%);
    color: #fff;
    border-radius: 14px;
    padding: 24px;
    margin-bottom: 14px;
    text-align: center;
}
.tt-sheet .tt-earnings-label { font-size: 13px; opacity: .85; }
.tt-sheet .tt-earnings-amount {
    font-size: 38px;
    font-weight: 700;
    margin: 6px 0;
    letter-spacing: 1px;
}
.tt-sheet .tt-earnings-amount small { font-size: 18px; font-weight: 500; opacity: .8; }
.tt-sheet .tt-earnings-sub { font-size: 12px; opacity: .8; }
.tt-sheet .tt-earnings-plus {
    color: #6B8E5A;
    font-weight: 600;
    font-size: 14px;
}
.tt-sheet .tt-info-card {
    background: #F7F4EB;
    border-radius: 12px;
    padding: 14px 16px;
    margin-bottom: 12px;
}
.tt-sheet .tt-info-title {
    font-size: 13px;
    font-weight: 600;
    color: #2C2C2C;
    margin-bottom: 6px;
}
.tt-sheet .tt-info-text {
    font-size: 13px;
    color: #5C5C5C;
    line-height: 1.7;
}

/* ===== 设置开关 ===== */
.tt-sheet .tt-set-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 0;
    border-bottom: 0.5px solid #EDE8DC;
    font-size: 14px;
    cursor: pointer;
}
.tt-sheet .tt-set-row:last-child { border-bottom: none; }
.tt-sheet .tt-switch { position: relative; display: inline-block; width: 44px; height: 24px; }
.tt-sheet .tt-switch input { opacity: 0; width: 0; height: 0; }
.tt-sheet .tt-switch span {
    position: absolute; inset: 0; cursor: pointer;
    background: #CFCABA; transition: .3s; border-radius: 24px;
}
.tt-sheet .tt-switch span::before {
    position: absolute; content: ''; height: 18px; width: 18px;
    left: 3px; bottom: 3px; background: #fff;
    transition: .3s; border-radius: 50%;
}
.tt-sheet .tt-switch input:checked + span { background: #6B8E5A; }
.tt-sheet .tt-switch input:checked + span::before { transform: translateX(20px); }

/* ===== 数据看板 ===== */
.tt-sheet .tt-dash-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 10px;
}
.tt-sheet .tt-dash-card {
    background: #F7F4EB;
    border-radius: 12px;
    padding: 18px;
    text-align: center;
}
.tt-sheet .tt-dash-num {
    font-size: 28px;
    font-weight: 700;
    color: #6B8E5A;
    line-height: 1.1;
}
.tt-sheet .tt-dash-num small { font-size: 14px; font-weight: 600; }
.tt-sheet .tt-dash-lbl { font-size: 12px; color: #9B9B9B; margin-top: 4px; }

/* ===== 直播 ===== */
.tt-sheet .tt-live-preview {
    position: relative;
    background: #000;
    border-radius: 12px;
    overflow: hidden;
    margin-bottom: 12px;
    aspect-ratio: 16/9;
}
.tt-sheet .tt-live-preview video {
    width: 100%; height: 100%; object-fit: cover; display: block;
}
.tt-sheet .tt-live-status {
    position: absolute;
    top: 10px; left: 10px;
    background: rgba(0,0,0,.6);
    color: #fff;
    padding: 4px 10px;
    border-radius: 12px;
    font-size: 12px;
}

/* =====================================================================
 * 桌面端响应式（≥ 900px）：左侧 sidebar + 主区
 * ===================================================================== */
@media (min-width: 900px) {
    #tutor-app.tt-app {
        display: grid;
        grid-template-columns: 220px 1fr;
        grid-template-rows: 56px 1fr;
        grid-template-areas:
            "side header"
            "side main";
    }
    .tt-app .tt-header {
        grid-area: header;
        padding: 0 28px;
        background: var(--tt-card);
        border-left: 1px solid var(--tt-border);
    }
    .tt-app .tt-tabbar {
        position: static;
        grid-area: side;
        flex-direction: column;
        height: auto;
        background: linear-gradient(180deg, #6B8E5A 0%, #557A4A 100%);
        border-top: none;
        padding: 16px 10px 12px;
        gap: 2px;
    }
    .tt-app .tt-tabbar::before {
        content: '🌿 心灵成长 · 导师';
        display: block;
        color: #fff;
        font-size: 13px;
        font-weight: 600;
        padding: 8px 12px 16px;
        opacity: .95;
    }
    .tt-app .tt-tab {
        flex: 0 0 auto;
        flex-direction: row;
        justify-content: flex-start;
        gap: 10px;
        padding: 10px 14px;
        font-size: 14px;
        color: rgba(255,255,255,.75);
        border-radius: 8px;
    }
    .tt-app .tt-tab:hover {
        background: rgba(255,255,255,.1);
        color: #fff;
    }
    .tt-app .tt-tab.active {
        background: rgba(255,255,255,.2);
        color: #fff;
        font-weight: 500;
    }
    .tt-app .tt-tab .i { width: 18px; height: 18px; }
    .tt-app .tt-tab-badge {
        position: static;
        margin-left: auto;
    }
    .tt-app .tt-main {
        grid-area: main;
        padding-bottom: 24px;
        background: var(--tt-bg);
    }
    .tt-app .tt-page {
        padding: 22px 28px;
        max-width: 880px;
    }
    .tt-app .tt-stat-num { font-size: 24px; }
    .tt-app .tt-hero-greet { font-size: 19px; }
    .tt-app .tt-quick-grid { grid-template-columns: repeat(6, 1fr); }
}

/* ===== 暗色模式 ===== */
#tutor-app.tt-app.dark {
    --tt-bg: #1C1B17;
    --tt-bg-2: #25241F;
    --tt-card: #2A2924;
    --tt-text-1: #E6E3D8;
    --tt-text-2: #B8B5AB;
    --tt-text-3: #80807A;
    --tt-text-4: #5C5C57;
    --tt-border: #3A3935;
    --tt-divider: #353430;
    --tt-shadow: 0 1px 3px rgba(0,0,0,.2);
}

/* ===== 文件选择器（上传资料/上传证书） ===== */
.tt-sheet .tt-file-drop {
    display: block;
    padding: 28px 16px;
    background: linear-gradient(135deg, rgba(107, 142, 90, .04), rgba(168, 196, 154, .08));
    border: 1.5px dashed rgba(107, 142, 90, .35);
    border-radius: 12px;
    text-align: center;
    cursor: pointer;
    transition: all .15s;
    user-select: none;
}
.tt-sheet .tt-file-drop:hover {
    background: linear-gradient(135deg, rgba(107, 142, 90, .08), rgba(168, 196, 154, .14));
    border-color: rgba(107, 142, 90, .55);
}
.tt-sheet .tt-file-drop-icon { font-size: 32px; margin-bottom: 8px; }
.tt-sheet .tt-file-drop-title {
    font-size: 14px;
    font-weight: 500;
    color: #557A4A;
    margin-bottom: 4px;
}
.tt-sheet .tt-file-drop-hint { font-size: 12px; color: #9B9B9B; }
.tt-sheet .tt-file-info {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: #FFFFFF;
    border: 1px solid #EDE8DC;
    border-radius: 12px;
}
.tt-sheet .tt-file-icon { font-size: 28px; flex-shrink: 0; }
.tt-sheet .tt-file-meta { flex: 1; min-width: 0; }
.tt-sheet .tt-file-name {
    font-size: 14px;
    color: #2C2C2C;
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.tt-sheet .tt-file-size {
    font-size: 12px;
    color: #9B9B9B;
    margin-top: 2px;
}
.tt-sheet .tt-file-info .tt-icon-btn {
    width: 32px; height: 32px;
    background: rgba(0,0,0,.04);
    color: #9B9B9B;
}
.tt-sheet .tt-file-info .tt-icon-btn:hover {
    background: rgba(194, 84, 80, .12);
    color: #C25450;
}

/* ===== Sheet 头部三栏：← 返回 / 标题 / × ===== */
.tt-sheet-head {
    display: grid !important;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 8px;
}
.tt-sheet-head h3 {
    text-align: center;
    grid-column: 2;
    margin: 0;
}
.tt-sheet-back {
    grid-column: 1;
    justify-self: start;
    background: transparent;
    border: none;
    color: #557A4A;
    display: inline-flex;
    align-items: center;
    gap: 2px;
    padding: 6px 10px 6px 4px;
    border-radius: 14px;
    cursor: pointer;
    font-size: 14px;
    font-family: inherit;
    line-height: 1;
    transition: background .15s;
}
.tt-sheet-back:hover { background: rgba(107, 142, 90, .08); }
.tt-sheet-back .i { width: 18px; height: 18px; }
.tt-sheet-back span { max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tt-sheet-close {
    grid-column: 3;
    justify-self: end;
}

/* 禁用按钮统一样式 */
.tt-btn:disabled,
.tt-sheet .tt-btn:disabled,
.tt-app .tt-btn:disabled {
    opacity: .4;
    cursor: not-allowed;
    transform: none !important;
    box-shadow: none !important;
}

/* Sheet 内部的 icon button（× 关闭、移除文件等） */
.tt-sheet .tt-icon-btn {
    width: 36px;
    height: 36px;
    border-radius: 18px;
    border: none;
    background: rgba(0, 0, 0, .04);
    color: #5C5C5C;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background .15s, color .15s;
    padding: 0;
    flex-shrink: 0;
}
.tt-sheet .tt-icon-btn:hover {
    background: rgba(194, 84, 80, .12);
    color: #C25450;
}
.tt-sheet .tt-icon-btn .i {
    width: 18px;
    height: 18px;
}
/* 标题层级 sheet-close 单独再约束位置（不被 tt-icon-btn 通用 hover 干扰） */
.tt-sheet .tt-sheet-close { background: rgba(0,0,0,.04); }

/* ===== 头像编辑器 ===== */
.tt-sheet .tt-avatar-current {
    display: flex;
    align-items: center;
    gap: 12px;
    background: #F7F4EB;
    border-radius: 12px;
    padding: 12px;
    margin-bottom: 12px;
}
.tt-sheet .tt-avatar-preview {
    width: 56px;
    height: 56px;
    border-radius: 14px;
    background: #FFF;
    overflow: hidden;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 32px;
    border: 2px solid #E8E0CC;
    flex-shrink: 0;
}
.tt-sheet .tt-avatar-grid {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 8px;
}
.tt-sheet .tt-avatar-cell {
    aspect-ratio: 1;
    border-radius: 10px;
    background: #FFFFFF;
    border: 1.5px solid transparent;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 26px;
    cursor: pointer;
    transition: all .15s;
    user-select: none;
}
.tt-sheet .tt-avatar-cell:hover {
    background: rgba(107, 142, 90, .08);
}
.tt-sheet .tt-avatar-cell.on {
    background: rgba(107, 142, 90, .12);
    border-color: var(--tt-primary, #6B8E5A);
    transform: scale(1.05);
}

/* profile-avatar 容器需要支持 img 子元素 */
.tt-app .tt-profile-avatar {
    overflow: hidden;
}
.tt-app .tt-profile-avatar img {
    border-radius: inherit;
}

/* ===== 班级/训练营管理 (v3) ===== */
.tt-app .tt-camp-card {
    cursor: pointer;
    transition: transform .15s, box-shadow .15s;
    margin-bottom: 12px;
}
.tt-app .tt-camp-card:active {
    transform: scale(0.98);
}
.tt-app .tt-camp-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 8px;
}
.tt-app .tt-camp-card-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--tt-text-1);
}
.tt-app .tt-camp-card-meta {
    font-size: 12px;
    color: var(--tt-text-3);
    margin-bottom: 10px;
}
.tt-app .tt-camp-card-foot {
    display: flex;
    gap: 12px;
    font-size: 12px;
    color: var(--tt-text-2);
    margin-top: 10px;
    flex-wrap: wrap;
}
.tt-app .tt-camp-pending {
    color: var(--tt-danger);
    font-weight: 500;
}

/* Progress bars */
.tt-app .tt-camp-progress-bar {
    height: 6px;
    background: var(--tt-border);
    border-radius: 3px;
    overflow: hidden;
    flex: 1;
}
.tt-app .tt-camp-progress-bar.large {
    height: 8px;
    border-radius: 4px;
}
.tt-app .tt-camp-progress-bar.small {
    height: 4px;
    border-radius: 2px;
}
.tt-app .tt-camp-progress-fill {
    height: 100%;
    background: var(--tt-primary);
    border-radius: inherit;
    transition: width .3s ease;
}

/* Camp detail header */
.tt-app .tt-camp-detail-header {
    margin-bottom: 16px;
}
.tt-app .tt-back-btn {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: none;
    border: none;
    color: var(--tt-primary);
    font-size: 14px;
    cursor: pointer;
    padding: 4px 0;
    margin-bottom: 8px;
}
.tt-app .tt-back-btn .i {
    width: 16px;
    height: 16px;
}
.tt-app .tt-camp-detail-title {
    display: flex;
    align-items: center;
    gap: 10px;
}
.tt-app .tt-camp-detail-title h2 {
    font-size: 18px;
    font-weight: 700;
    color: var(--tt-text-1);
    margin: 0;
}

/* Sub-tab chips */
.tt-app .tt-camp-subtabs {
    display: flex;
    gap: 8px;
    margin-bottom: 16px;
    overflow-x: auto;
    padding-bottom: 4px;
}
.tt-app .tt-chip {
    display: inline-flex;
    align-items: center;
    padding: 6px 14px;
    border-radius: 16px;
    font-size: 13px;
    font-weight: 500;
    background: var(--tt-card);
    color: var(--tt-text-2);
    border: 1px solid var(--tt-border);
    cursor: pointer;
    white-space: nowrap;
    transition: all .15s;
}
.tt-app .tt-chip.active {
    background: var(--tt-primary);
    color: #fff;
    border-color: var(--tt-primary);
}
.tt-app .tt-chip:not(.active):hover {
    background: var(--tt-primary-soft);
}

/* Stats grid */
.tt-app .tt-camp-stats-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
    margin-bottom: 20px;
}
.tt-app .tt-camp-stat-item {
    background: var(--tt-card);
    border: 1px solid var(--tt-border);
    border-radius: 12px;
    padding: 16px;
    text-align: center;
}
.tt-app .tt-camp-stat-num {
    font-size: 24px;
    font-weight: 700;
    color: var(--tt-primary-dark);
}
.tt-app .tt-camp-stat-lbl {
    font-size: 12px;
    color: var(--tt-text-3);
    margin-top: 4px;
}

/* Overview progress */
.tt-app .tt-camp-overview-progress {
    margin-bottom: 20px;
}
.tt-app .tt-camp-overview-progress-label {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    color: var(--tt-text-2);
    margin-bottom: 6px;
}

/* Action card */
.tt-app .tt-camp-action-card {
    display: flex;
    align-items: center;
    gap: 12px;
    background: var(--tt-card);
    border: 1px solid var(--tt-border);
    border-radius: 12px;
    padding: 14px 16px;
    cursor: pointer;
    transition: background .15s;
}
.tt-app .tt-camp-action-card:active {
    background: var(--tt-primary-soft);
}
.tt-app .tt-camp-action-card.done {
    cursor: default;
    opacity: 0.7;
}
.tt-app .tt-camp-action-icon {
    font-size: 24px;
}
.tt-app .tt-camp-action-text {
    flex: 1;
}
.tt-app .tt-camp-action-title {
    font-size: 14px;
    font-weight: 500;
    color: var(--tt-text-1);
}
.tt-app .tt-camp-action-sub {
    font-size: 12px;
    color: var(--tt-text-3);
    margin-top: 2px;
}
.tt-app .tt-camp-action-card .i {
    width: 16px;
    height: 16px;
    color: var(--tt-text-3);
}

/* Member list */
.tt-app .tt-camp-member-list .tt-item {
    align-items: center;
}
.tt-app .tt-camp-member-progress {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 4px;
}
.tt-app .tt-camp-member-pct {
    font-size: 12px;
    font-weight: 600;
    color: var(--tt-primary-dark);
    min-width: 32px;
}
.tt-app .tt-pill.red {
    background: rgba(194, 84, 80, .15);
    color: var(--tt-danger);
}

/* Announcements */
.tt-app .tt-camp-announce-form {
    margin-bottom: 20px;
}
.tt-app .tt-textarea {
    width: 100%;
    min-height: 72px;
    border: 1px solid var(--tt-border);
    border-radius: 10px;
    padding: 12px;
    font-size: 14px;
    resize: vertical;
    box-sizing: border-box;
    background: var(--tt-card);
    color: var(--tt-text-1);
    font-family: inherit;
}
.tt-app .tt-textarea:focus {
    outline: none;
    border-color: var(--tt-primary);
}
.tt-app .tt-camp-announce-form-foot {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-top: 8px;
}
.tt-app .tt-camp-char-count {
    font-size: 12px;
    color: var(--tt-text-3);
}
.tt-app .tt-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 500;
    border: none;
    cursor: pointer;
    transition: opacity .15s;
}
.tt-app .tt-btn:active { opacity: 0.7; }
.tt-app .tt-btn-primary {
    background: var(--tt-primary);
    color: #fff;
}
.tt-app .tt-btn-sm {
    padding: 5px 12px;
    font-size: 12px;
    border-radius: 6px;
}
.tt-app .tt-btn-outline {
    background: transparent;
    border: 1px solid var(--tt-primary);
    color: var(--tt-primary);
}

/* Announcement timeline */
.tt-app .tt-camp-announce-timeline {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.tt-app .tt-camp-announce-item {
    background: var(--tt-card);
    border: 1px solid var(--tt-border);
    border-radius: 10px;
    padding: 12px 14px;
    position: relative;
}
.tt-app .tt-camp-pin-badge {
    position: absolute;
    top: 8px;
    right: 8px;
}
.tt-app .tt-camp-announce-content {
    font-size: 14px;
    color: var(--tt-text-1);
    line-height: 1.5;
    margin-bottom: 6px;
}
.tt-app .tt-camp-announce-time {
    font-size: 12px;
    color: var(--tt-text-3);
}

/* Milestone timeline */
.tt-app .tt-camp-milestone-timeline {
    display: flex;
    flex-direction: column;
    gap: 0;
    padding-left: 16px;
}
.tt-app .tt-camp-milestone-item {
    position: relative;
    padding-left: 28px;
    padding-bottom: 24px;
}
.tt-app .tt-camp-milestone-item:last-child {
    padding-bottom: 0;
}
.tt-app .tt-camp-milestone-dot {
    position: absolute;
    left: 0;
    top: 2px;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--tt-border);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    color: #fff;
    font-weight: 700;
    z-index: 1;
}
.tt-app .tt-camp-milestone-dot.done {
    background: var(--tt-primary);
}
.tt-app .tt-camp-milestone-line {
    position: absolute;
    left: 9px;
    top: 22px;
    bottom: 0;
    width: 2px;
    background: var(--tt-border);
}
.tt-app .tt-camp-milestone-body {
    padding-top: 0;
}
.tt-app .tt-camp-milestone-head {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 4px;
}
.tt-app .tt-camp-milestone-icon {
    font-size: 16px;
}
.tt-app .tt-camp-milestone-label {
    font-size: 14px;
    font-weight: 600;
    color: var(--tt-text-1);
}
.tt-app .tt-camp-milestone-info {
    font-size: 12px;
    color: var(--tt-text-3);
    margin-bottom: 8px;
}

/* Workspace camp mini cards */
.tt-app .tt-camp-workspace-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.tt-app .tt-camp-mini-card {
    padding: 12px 14px;
    cursor: pointer;
    transition: transform .12s;
}
.tt-app .tt-camp-mini-card:active {
    transform: scale(0.98);
}
.tt-app .tt-camp-mini-name {
    font-size: 14px;
    font-weight: 500;
    color: var(--tt-text-1);
    margin-bottom: 6px;
}
.tt-app .tt-camp-mini-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12px;
    color: var(--tt-text-2);
}
.tt-app .tt-camp-mini-pending {
    font-size: 12px;
    color: var(--tt-danger);
    margin-top: 4px;
}

/* ===== 私信聊天 Chat Bubbles ===== */
.tt-app .tt-msg-subtabs {
    display: flex;
    gap: 0;
    margin-bottom: 16px;
    background: var(--tt-card);
    border-radius: 10px;
    overflow: hidden;
    box-shadow: var(--tt-shadow);
}
.tt-app .tt-msg-subtab {
    flex: 1;
    padding: 10px 0;
    text-align: center;
    font-size: 14px;
    color: var(--tt-text-2);
    cursor: pointer;
    border: none;
    background: none;
    position: relative;
    transition: color .2s, background .2s;
}
.tt-app .tt-msg-subtab.active {
    color: var(--tt-primary);
    font-weight: 600;
    background: var(--tt-primary-softer);
}
.tt-app .tt-msg-subtab.active::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 30%;
    right: 30%;
    height: 2px;
    background: var(--tt-primary);
    border-radius: 2px;
}
.tt-app .tt-msg-subtab .tt-subtab-badge {
    display: inline-block;
    min-width: 16px;
    height: 16px;
    line-height: 16px;
    padding: 0 5px;
    border-radius: 8px;
    background: var(--tt-danger);
    color: #fff;
    font-size: 10px;
    font-weight: 600;
    margin-left: 4px;
    vertical-align: middle;
}
.tt-app .tt-chat-container {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 16px;
    max-height: 50vh;
    overflow-y: auto;
    background: var(--tt-bg);
    border-radius: 12px;
}
.tt-app .tt-chat-bubble {
    max-width: 75%;
    padding: 10px 14px;
    border-radius: 16px;
    font-size: 14px;
    line-height: 1.5;
    word-break: break-word;
}
.tt-app .tt-chat-bubble.left {
    align-self: flex-start;
    background: var(--tt-card);
    border-bottom-left-radius: 4px;
    box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.tt-app .tt-chat-bubble.right {
    align-self: flex-end;
    background: var(--tt-primary);
    color: #fff;
    border-bottom-right-radius: 4px;
}
.tt-app .tt-chat-time {
    font-size: 11px;
    color: rgba(0,0,0,0.4);
    margin-top: 4px;
}
.tt-app .tt-chat-bubble.right .tt-chat-time {
    color: rgba(255,255,255,0.7);
}
.tt-app .tt-chat-input {
    display: flex;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid var(--tt-border);
    background: var(--tt-card);
    border-radius: 0 0 12px 12px;
}
.tt-app .tt-chat-input input {
    flex: 1;
    padding: 10px 14px;
    border: 1px solid var(--tt-border);
    border-radius: 20px;
    font-size: 14px;
    outline: none;
    background: var(--tt-bg);
    color: var(--tt-text-1);
}
.tt-app .tt-chat-input input:focus {
    border-color: var(--tt-primary);
}
.tt-app .tt-chat-input button {
    padding: 10px 18px;
    background: var(--tt-primary);
    color: #fff;
    border: none;
    border-radius: 20px;
    font-size: 14px;
    cursor: pointer;
    transition: opacity .2s;
}
.tt-app .tt-chat-input button:hover { opacity: .85; }
.tt-app .tt-chat-input button:active { opacity: .7; }

/* Chat list item badge */
.tt-app .tt-chat-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: var(--tt-danger);
    color: #fff;
    font-size: 11px;
    font-weight: 600;
}

/* Student-side chat styles (inside modal) */
.student-chat-container {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 16px;
    max-height: 50vh;
    overflow-y: auto;
    background: #f7f4eb;
    border-radius: 12px;
}
.student-chat-bubble {
    max-width: 75%;
    padding: 10px 14px;
    border-radius: 16px;
    font-size: 14px;
    line-height: 1.5;
    word-break: break-word;
}
.student-chat-bubble.left {
    align-self: flex-start;
    background: #fff;
    border-bottom-left-radius: 4px;
    box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.student-chat-bubble.right {
    align-self: flex-end;
    background: #6B8E5A;
    color: #fff;
    border-bottom-right-radius: 4px;
}
.student-chat-time {
    font-size: 11px;
    color: rgba(0,0,0,0.4);
    margin-top: 4px;
}
.student-chat-bubble.right .student-chat-time {
    color: rgba(255,255,255,0.7);
}
.student-chat-input {
    display: flex;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid #eee;
}
.student-chat-input input {
    flex: 1;
    padding: 10px 14px;
    border: 1px solid #e0e0e0;
    border-radius: 20px;
    font-size: 14px;
    outline: none;
}
.student-chat-input input:focus {
    border-color: #6B8E5A;
}
.student-chat-input button {
    padding: 10px 18px;
    background: #6B8E5A;
    color: #fff;
    border: none;
    border-radius: 20px;
    font-size: 14px;
    cursor: pointer;
}
.student-chat-input button:hover { opacity: .85; }

/* Student chat list */
.student-chat-list-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    border-bottom: 1px solid #f0f0f0;
    cursor: pointer;
    transition: background .15s;
}
.student-chat-list-item:hover { background: #f7f4eb; }
.student-chat-list-item:last-child { border-bottom: none; }
.student-chat-list-avatar {
    width: 42px;
    height: 42px;
    border-radius: 50%;
    background: #f0ebe0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    flex-shrink: 0;
}
.student-chat-list-main {
    flex: 1;
    min-width: 0;
}
.student-chat-list-name {
    font-size: 15px;
    font-weight: 500;
    color: #333;
}
.student-chat-list-preview {
    font-size: 13px;
    color: #999;
    margin-top: 2px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.student-chat-list-aside {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
    flex-shrink: 0;
}
.student-chat-list-time {
    font-size: 11px;
    color: #bbb;
}
.student-chat-unread-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: #e74c3c;
    color: #fff;
    font-size: 11px;
    font-weight: 600;
}

/* ===== 修复 sheet 内容长度变化导致的跳动 ===== */
/* large 类抽屉锁定最小高度，切换筛选/搜索时高度不再跳变 */
.tt-sheet-content.large {
    min-height: 78vh;
}
@media (min-width: 720px) {
    .tt-sheet-content.large {
        min-height: 620px;
    }
}
/* 空态填充剩余空间，避免空旷感 */
.tt-sheet-body .tt-empty {
    min-height: 200px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}


/* ===== 导师业绩排行 ===== */
.tutor-ranking { padding: 20px; }
.tr-header {
    background: #fff;
    border-radius: 12px;
    padding: 16px 20px;
    margin-bottom: 20px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
.tr-filters {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}
.tr-filters:last-child { margin-bottom: 0; }
.tr-filter-label { font-size: 13px; color: #666; margin-right: 4px; }
.tr-chip {
    padding: 6px 14px;
    border: 1px solid #e0e0e0;
    background: #fff;
    border-radius: 16px;
    font-size: 12px;
    color: #555;
    cursor: pointer;
    transition: all .15s;
}
.tr-chip:hover { background: #f5f5f5; }
.tr-chip.on {
    background: #6B8E5A;
    border-color: #6B8E5A;
    color: #fff;
}

.tr-podium {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
    margin-bottom: 24px;
}
.tr-podium-item {
    background: #fff;
    border-radius: 14px;
    padding: 20px 12px 18px;
    text-align: center;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
    position: relative;
    transition: transform .2s;
}
.tr-podium-item:hover { transform: translateY(-2px); }
.tr-podium-item.tr-rank-1 {
    background: linear-gradient(135deg, #FFF8DC, #FFFAF0);
    border: 1px solid #F4C430;
    transform: translateY(-8px);
}
.tr-podium-item.tr-rank-2 {
    background: linear-gradient(135deg, #F5F5F5, #FAFAFA);
    border: 1px solid #C0C0C0;
}
.tr-podium-item.tr-rank-3 {
    background: linear-gradient(135deg, #FFF4E6, #FFF8F0);
    border: 1px solid #CD7F32;
}
.tr-medal { font-size: 32px; margin-bottom: 6px; }
.tr-podium-avatar {
    width: 64px; height: 64px;
    margin: 0 auto 10px;
    background: linear-gradient(135deg, #6B8E5A, #4A6F3F);
    color: #fff;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 32px;
    overflow: hidden;
    box-shadow: 0 2px 6px rgba(0,0,0,0.08);
}
.tr-podium-avatar img { width: 100%; height: 100%; object-fit: cover; }
.tr-podium-name { font-size: 15px; font-weight: 600; color: #333; }
.tr-podium-level { font-size: 11px; color: #888; margin-top: 2px; }
.tr-podium-value {
    font-size: 22px;
    font-weight: 700;
    color: #6B8E5A;
    margin-top: 10px;
}
.tr-podium-label { font-size: 11px; color: #999; margin-top: 2px; }

.tr-table-wrap {
    background: #fff;
    border-radius: 12px;
    padding: 8px;
    overflow-x: auto;
    box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
.tr-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}
.tr-table thead th {
    background: #FAFAF5;
    color: #555;
    font-weight: 500;
    padding: 12px 14px;
    text-align: left;
    border-bottom: 1px solid #eee;
    font-size: 12px;
    white-space: nowrap;
}
.tr-table tbody td {
    padding: 14px;
    border-bottom: 1px solid #f5f5f5;
    color: #333;
}
.tr-table tbody tr:last-child td { border-bottom: none; }
.tr-table tbody tr:hover { background: #FAFAF5; }
.tr-rank-cell { width: 60px; text-align: center; }
.tr-rank-num {
    display: inline-block;
    width: 28px; height: 28px;
    border-radius: 50%;
    background: #f0f0f0;
    color: #666;
    line-height: 28px;
    text-align: center;
    font-weight: 600;
    font-size: 13px;
}
.tr-rank-num.top {
    background: linear-gradient(135deg, #6B8E5A, #4A6F3F);
    color: #fff;
}
.tr-tutor-cell { display: flex; align-items: center; gap: 10px; }
.tr-tutor-avatar {
    width: 36px; height: 36px;
    background: linear-gradient(135deg, #6B8E5A, #4A6F3F);
    color: #fff;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    overflow: hidden;
    flex-shrink: 0;
}
.tr-tutor-avatar img { width: 100%; height: 100%; object-fit: cover; }
.tr-tutor-name { font-size: 13px; font-weight: 500; }
.tr-tutor-title { font-size: 11px; color: #999; margin-top: 2px; }
.tr-level-pill {
    display: inline-block;
    margin-left: 4px;
    font-size: 10px;
    padding: 1px 8px;
    border-radius: 8px;
    color: #fff;
    font-weight: 500;
}
.tr-level-gold { background: linear-gradient(135deg, #fbc02d, #f9a825); }
.tr-level-senior { background: linear-gradient(135deg, #6B8E5A, #4A6F3F); }
.tr-level-junior { background: linear-gradient(135deg, #90A4AE, #607D8B); }
.tr-num { font-variant-numeric: tabular-nums; }
