*{margin:0;padding:0;box-sizing:border-box}:root{--primary: #2563eb;--primary-soft: #eff6ff;--danger: #dc2626;--success: #059669;--warning: #d97706;--text: #1e293b;--text-secondary: #64748b;--text-muted: #94a3b8;--border: #e2e8f0;--bg: #f1f5f9}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}.parent-page{max-width:480px;margin:0 auto;min-height:100vh;padding-bottom:64px}.header{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:8px;background:#fff;padding:14px 16px;border-bottom:1px solid var(--border)}.header .back{background:none;border:none;font-size:1.2em;cursor:pointer;color:var(--text-secondary);padding:0 4px}.header h1{font-size:1.05em;font-weight:700;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.header .switch-btn{background:var(--primary-soft);color:var(--primary);border:none;border-radius:16px;padding:5px 12px;font-size:.8em;cursor:pointer}.card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin:12px 16px}.card-title{font-size:.85em;font-weight:700;color:var(--text-secondary);margin-bottom:10px}.child-list{padding:8px 16px}.child-card{display:flex;align-items:center;justify-content:space-between;background:#fff;border:1px solid var(--border);border-radius:12px;padding:16px;margin-bottom:12px;cursor:pointer;transition:box-shadow .15s}.child-card:active{background:var(--primary-soft)}.child-avatar{width:46px;height:46px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.2em;font-weight:700;margin-right:12px;flex-shrink:0}.child-info .name{font-size:1.05em;font-weight:700}.child-info .meta{font-size:.82em;color:var(--text-secondary);margin-top:3px}.child-info .today{display:inline-block;margin-top:6px;font-size:.75em;padding:2px 8px;border-radius:10px}.child-arrow{color:var(--text-muted);font-size:1.2em}.today-row{display:flex;align-items:center;gap:8px;margin-top:6px}.today-row .today{margin-top:0}.family-btn{background:var(--primary-soft);color:var(--primary);border:none;border-radius:12px;padding:3px 10px;font-size:.72em;cursor:pointer}.child-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.action-btn{background:#fff;color:var(--text-secondary);border:1px solid var(--border);border-radius:12px;padding:3px 10px;font-size:.72em;cursor:pointer}.action-btn:active{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;z-index:100;display:flex;align-items:flex-end;justify-content:center}.modal{background:#fff;width:100%;max-width:480px;border-radius:16px 16px 0 0;max-height:75vh;display:flex;flex-direction:column;animation:modal-up .2s ease}@keyframes modal-up{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--border)}.modal-title{font-size:1em;font-weight:700}.modal-close{background:none;border:none;font-size:1.4em;color:var(--text-muted);cursor:pointer;line-height:1}.modal-body{padding:16px;overflow-y:auto}.bind-confirm{font-size:.9em;color:var(--text-secondary);margin-bottom:12px}.bind-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}.bind-row:last-child{border-bottom:none}.bind-role{font-size:.92em;font-weight:600;color:var(--text)}.bind-time{font-size:.82em;color:var(--text-muted);margin-top:2px}.bind-info{flex:1;min-width:0}.me-tag{font-style:normal;font-weight:600;font-size:.68em;color:var(--primary);background:var(--primary-soft);border-radius:8px;padding:1px 7px;margin-left:6px;vertical-align:1px}.unbind-btn{flex-shrink:0;background:none;border:1px solid var(--danger);color:var(--danger);border-radius:8px;padding:4px 12px;font-size:.78em;cursor:pointer}.unbind-btn:active{background:#fee2e2}.unbind-btn:disabled{border-color:var(--border);color:var(--text-muted);background:none;cursor:not-allowed;opacity:.55}.unbind-btn:disabled:active{background:none}.modal-loading,.modal-empty{text-align:center;color:var(--text-muted);font-size:.9em;padding:20px 0}.modal-hint{margin-top:12px;font-size:.78em;color:var(--text-muted);text-align:center}.badge{display:inline-block;font-size:.75em;padding:2px 10px;border-radius:10px;font-weight:600}.badge-gray{background:#f1f5f9;color:var(--text-secondary)}.badge-blue{background:var(--primary-soft);color:var(--primary)}.badge-green{background:#ecfdf5;color:var(--success)}.badge-orange{background:#fef3c7;color:var(--warning)}.badge-red{background:#fee2e2;color:var(--danger)}.day-group{margin-bottom:4px}.day-header{display:flex;align-items:center;gap:8px;padding:12px 16px 4px;font-size:.85em;color:var(--text-secondary)}.day-header .day-label{font-weight:700;color:var(--text)}.day-header .today-tag{font-size:.7em;background:var(--primary);color:#fff;border-radius:8px;padding:1px 6px}.class-row{background:#fff;margin:8px 16px;border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between}.class-time{font-size:1em;font-weight:700;min-width:92px}.class-main{flex:1;margin:0 10px}.class-main .where{font-size:.88em;font-weight:600}.class-main .teacher{font-size:.78em;color:var(--text-secondary);margin-top:2px}.record-row{background:#fff;margin:8px 16px;border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between}.record-main .date{font-size:.9em;font-weight:600}.record-main .detail{font-size:.78em;color:var(--text-secondary);margin-top:3px}.pickup-status{text-align:center;padding:20px 0 8px}.pickup-status .big{font-size:1.1em;font-weight:700;margin-top:8px}.pickup-status .sub{font-size:.82em;color:var(--text-secondary);margin-top:4px}.pickup-btn{display:block;width:calc(100% - 32px);margin:16px auto;background:var(--primary);color:#fff;border:none;border-radius:12px;padding:14px;font-size:1.05em;font-weight:700;cursor:pointer}.pickup-btn:disabled{opacity:.6}.pickup-btn.busy{background:var(--text-muted)}.action-tip{margin:0 16px 12px;padding:12px 14px;border-radius:10px;font-size:.88em}.action-tip.ok{background:#ecfdf5;color:var(--success);border:1px solid #a7f3d0}.action-tip.warn{background:#fffbeb;color:#92400e;border:1px solid #fde68a}.req-row{background:#fff;margin:8px 16px;border:1px solid var(--border);border-radius:10px;padding:10px 14px;display:flex;align-items:center;justify-content:space-between}.req-time{font-size:.8em;color:var(--text-secondary)}.empty{text-align:center;padding:60px 24px;color:var(--text-muted);font-size:.9em}.empty .icon{font-size:40px;margin-bottom:12px;opacity:.5}.tabbar{position:fixed;bottom:0;left:0;right:0;z-index:10;max-width:480px;margin:0 auto;display:flex;background:#fff;border-top:1px solid var(--border)}.tabbar a{flex:1;text-align:center;padding:10px 0 8px;text-decoration:none;color:var(--text-muted);font-size:.72em}.tabbar a .icon{display:block;font-size:1.3em;margin-bottom:2px}.tabbar a.active{color:var(--primary);font-weight:700}.login-box{text-align:center;padding:80px 32px}.login-box .logo{width:72px;height:72px;border-radius:18px;background:var(--primary);color:#fff;font-size:2em;display:flex;align-items:center;justify-content:center;margin:0 auto 16px}.login-box h2{font-size:1.2em;margin-bottom:6px}.login-box p{font-size:.85em;color:var(--text-secondary);margin-bottom:24px}.login-btn{background:var(--primary);color:#fff;border:none;border-radius:12px;padding:12px 32px;font-size:1em;font-weight:700;cursor:pointer}.loading{text-align:center;padding:60px;color:var(--text-muted)}.toast{position:fixed;left:50%;top:20px;transform:translate(-50%);background:#1e293beb;color:#fff;padding:10px 18px;border-radius:20px;font-size:.85em;z-index:100;max-width:80vw}.toast.success{background:#059669f2}.toast.error{background:#dc2626f2}.toast-fade-enter-active,.toast-fade-leave-active{transition:opacity .2s,transform .2s}.toast-fade-enter-from,.toast-fade-leave-to{opacity:0;transform:translate(-50%) translateY(-8px)}
