/* style.css — 共享样式（移动优先、桌面友好） */
:root{
  --c-primary:#1976d2;
  --c-primary-dark:#115293;
  --c-accent:#ff7043;
  --c-success:#2e7d32;
  --c-warn:#ed6c02;
  --c-danger:#c62828;
  --c-bg:#f4f6fa;
  --c-card:#ffffff;
  --c-border:#e0e4ea;
  --c-text:#1a1a1a;
  --c-muted:#6b7280;
  --c-level-low:#e8f5e9;
  --c-level-mid:#fff8e1;
  --c-level-high:#fdecea;
  --radius:10px;
  --shadow:0 1px 3px rgba(0,0,0,.06);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:"Microsoft YaHei","PingFang SC",-apple-system,sans-serif;
  background:var(--c-bg);color:var(--c-text);
  line-height:1.55;font-size:14px;
}
.container{max-width:1100px;margin:0 auto;padding:16px;}
.topbar{
  background:#fff;border-bottom:1px solid var(--c-border);
  padding:12px 20px;display:flex;align-items:center;gap:14px;
  position:sticky;top:0;z-index:10;box-shadow:var(--shadow);
}
.topbar h1{font-size:17px;margin:0;font-weight:700;}
.topbar .user{margin-left:auto;color:var(--c-muted);font-size:13px;}
.topbar .user a{color:var(--c-primary);text-decoration:none;margin-left:8px;}
.card{background:var(--c-card);border:1px solid var(--c-border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);margin-bottom:14px;}
.card h2{margin:0 0 12px;font-size:16px;display:flex;align-items:center;gap:8px;}
.card h2 .num{background:var(--c-primary);color:#fff;width:24px;height:24px;border-radius:50%;font-size:12px;display:inline-flex;align-items:center;justify-content:center;}
.btn{
  appearance:none;border:1px solid var(--c-border);background:#fff;
  padding:9px 16px;border-radius:8px;font-size:14px;cursor:pointer;
  color:var(--c-text);font-family:inherit;transition:all .15s;
  display:inline-flex;align-items:center;gap:6px;
}
.btn:hover{border-color:var(--c-primary);background:#f0f7ff;}
.btn.primary{background:var(--c-primary);color:#fff;border-color:var(--c-primary);font-weight:600;}
.btn.primary:hover{background:var(--c-primary-dark);border-color:var(--c-primary-dark);}
.btn.accent{background:var(--c-accent);color:#fff;border-color:var(--c-accent);font-weight:600;}
.btn.danger{background:var(--c-danger);color:#fff;border-color:var(--c-danger);}
.btn.sm{padding:5px 10px;font-size:12px;}
.btn:disabled{opacity:.5;cursor:not-allowed;}
.input,select,textarea{
  width:100%;padding:9px 11px;border:1px solid var(--c-border);border-radius:6px;
  font-size:14px;font-family:inherit;background:#fff;outline:none;
}
.input:focus,select:focus,textarea:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px rgba(25,118,210,.12);}
label{display:block;font-size:13px;color:#374151;margin:8px 0 4px;font-weight:500;}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.row > *{flex:1;}
.muted{color:var(--c-muted);font-size:12.5px;}
.tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;background:#e3f2fd;color:#1565c0;}
.tag.warn{background:#fff3e0;color:#c75b00;}
.tag.danger{background:#ffebee;color:#c62828;}
.tag.success{background:#e8f5e9;color:#2e7d32;}
.tag.gray{background:#eee;color:#555;}
.grid{display:grid;gap:12px;}
.grid-2{grid-template-columns:repeat(2,1fr);}
.grid-3{grid-template-columns:repeat(3,1fr);}
.grid-4{grid-template-columns:repeat(4,1fr);}
@media(max-width:768px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr;}}
table{width:100%;border-collapse:collapse;background:#fff;}
th,td{padding:8px 10px;border-bottom:1px solid var(--c-border);text-align:left;font-size:13px;vertical-align:top;}
th{background:#f8fafc;font-weight:600;color:#374151;font-size:12px;}
tr:hover td{background:#f9fafb;}
.empty{text-align:center;color:var(--c-muted);padding:30px 10px;font-size:13px;}

/* === 登录页 === */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1976d2 0%,#42a5f5 100%);padding:20px;}
.login-card{background:#fff;border-radius:14px;padding:32px 28px;box-shadow:0 10px 40px rgba(0,0,0,.2);width:100%;max-width:380px;}
.login-card h1{margin:0 0 4px;font-size:22px;text-align:center;}
.login-card .logo{text-align:center;font-size:36px;margin-bottom:8px;}
.login-card .desc{text-align:center;color:var(--c-muted);font-size:12px;margin-bottom:22px;}
.login-card .btn{width:100%;justify-content:center;margin-top:16px;padding:11px;}
.login-hint{margin-top:16px;background:#f5f5f5;border-radius:6px;padding:10px 12px;font-size:12px;color:#666;line-height:1.7;}

/* === 手机记录页 === */
.record-page{padding-bottom:80px;}
.kid-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:8px;margin-top:10px;}
.kid-chip{
  border:1.5px solid var(--c-border);border-radius:8px;padding:10px 4px;
  text-align:center;background:#fff;cursor:pointer;font-size:13px;
}
.kid-chip.active{border-color:var(--c-primary);background:#e3f2fd;color:var(--c-primary);font-weight:600;}
.kid-chip .avatar{width:36px;height:36px;border-radius:50%;background:#90caf9;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:16px;margin-bottom:4px;}
.media-preview{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap;}
.media-preview img,.media-preview video{max-width:120px;max-height:120px;border-radius:6px;border:1px solid var(--c-border);}
.fab-row{position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--c-border);padding:10px 16px;display:flex;gap:10px;z-index:9;}
.fab-row .btn{flex:1;justify-content:center;}

/* === 评级页 === */
.tabbar{display:flex;gap:0;background:#fff;border-radius:var(--radius);padding:4px;margin-bottom:14px;box-shadow:var(--shadow);overflow:hidden;}
.tabbar button{flex:1;border:none;background:transparent;padding:10px;font-size:14px;cursor:pointer;border-radius:6px;font-family:inherit;color:#555;}
.tabbar button.active{background:var(--c-primary);color:#fff;font-weight:600;}
.cascade{margin:10px 0;}
.cascade .level{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;}
.cascade .chip{border:1.5px solid var(--c-border);border-radius:6px;padding:6px 10px;font-size:13px;background:#fff;cursor:pointer;}
.cascade .chip.active{border-color:var(--c-primary);background:#e3f2fd;color:var(--c-primary);font-weight:600;}
.rating-row{
  display:flex;align-items:center;gap:8px;padding:10px;border:1px solid var(--c-border);
  border-radius:6px;margin-bottom:6px;background:#fafafa;
}
.rating-row .name{flex:1;font-size:13px;}
.rating-row .levels{display:flex;gap:4px;}
.rating-row .lv{
  width:28px;height:28px;border-radius:50%;border:1.5px solid var(--c-border);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  font-size:12px;background:#fff;
}
.rating-row .lv.active.l1{background:#c8e6c9;color:#1b5e20;border-color:#1b5e20;}
.rating-row .lv.active.l2{background:#a5d6a7;color:#1b5e20;border-color:#1b5e20;}
.rating-row .lv.active.l3{background:#fff9c4;color:#b26a00;border-color:#b26a00;}
.rating-row .lv.active.l4{background:#ffe082;color:#b26a00;border-color:#b26a00;}
.rating-row .lv.active.l5{background:#ffcc80;color:#b26a00;border-color:#b26a00;}
.rating-row .lv.active.l6{background:#ffab91;color:#bf360c;border-color:#bf360c;}
.rating-row .lv.active.l7{background:#ef5350;color:#fff;border-color:#bf360c;}

.coverage-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;}
.coverage-cell{border:1px solid var(--c-border);border-radius:6px;padding:8px;font-size:12px;}
.coverage-cell.zero{background:#fff8e1;border-color:#ffe082;}
.coverage-cell.has{background:#e8f5e9;border-color:#a5d6a7;}
.coverage-cell .sub-name{font-weight:600;color:#333;}
.coverage-cell .n{font-size:11px;color:#888;margin-top:2px;}

.report-domain{background:#fff;border:1px solid var(--c-border);border-radius:8px;padding:12px;margin-bottom:10px;}
.report-summary{
  display:flex;align-items:center;gap:20px;padding:18px 20px;
  background:linear-gradient(135deg,#1976d2 0%,#42a5f5 100%);
  color:#fff;border-radius:10px;margin-bottom:14px;
  box-shadow:0 2px 6px rgba(25,118,210,.2);
}
.report-summary .big-score{text-align:center;flex-shrink:0;}
.report-summary .big-score .score{font-size:48px;font-weight:700;line-height:1;}
.report-summary .big-score .lbl{font-size:12px;opacity:.85;margin-top:4px;}
.report-summary .meta .name{font-size:20px;font-weight:700;}
.report-summary .meta .info{color:rgba(255,255,255,.8);font-size:12px;margin:4px 0 8px;}
.report-summary .extremes{display:flex;gap:6px;flex-wrap:wrap;}
.report-summary .extremes .tag{background:rgba(255,255,255,.2);color:#fff;border:1px solid rgba(255,255,255,.3);}
.report-summary .extremes .tag.warn{background:rgba(255,255,255,.25);}
.report-domain h3{margin:0 0 8px;font-size:14px;color:var(--c-primary);}
.report-sub{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px dashed #eee;font-size:13px;}
.report-sub:last-child{border-bottom:none;}
.report-sub .name{flex:1;}
.report-sub .avg{min-width:48px;text-align:center;font-weight:700;color:#1b5e20;}
.report-sub .avg.zero{color:#c62828;}
.report-sub .cnt{color:var(--c-muted);font-size:11px;min-width:60px;text-align:right;}
.trend{display:inline-block;padding:1px 6px;border-radius:8px;font-size:10px;margin-left:4px;}
.trend.up{background:#e8f5e9;color:#2e7d32;}
.trend.down{background:#ffebee;color:#c62828;}
.trend.flat{background:#eee;color:#666;}

/* ===== 班级卡片 ===== */
.class-card{border:1px solid var(--c-border);border-radius:10px;padding:14px;margin-bottom:14px;background:#fff;}
.class-cols{display:flex;gap:14px;margin-top:12px;flex-wrap:wrap;}
.class-col{flex:1;min-width:280px;border:1px dashed var(--c-border);border-radius:8px;padding:10px;background:#fafbfc;}
.col-title{display:flex;justify-content:space-between;align-items:center;font-weight:700;margin-bottom:8px;color:#444;}
.member-list{max-height:200px;overflow-y:auto;}
.member-row{display:flex;justify-content:space-between;align-items:center;padding:6px 4px;border-bottom:1px dotted #eee;font-size:13px;}
.member-row:last-child{border-bottom:none;}
.btn.xs{padding:2px 8px;font-size:11px;border-radius:4px;}
.btn.sm{padding:5px 12px;font-size:12px;}

/* ===== Modal ===== */
.modal{position:fixed;inset:0;background:rgba(0,0,0,0.4);display:flex;align-items:center;justify-content:center;z-index:100;}
.modal-box{background:#fff;border-radius:10px;padding:18px;min-width:340px;max-width:90vw;box-shadow:0 10px 40px rgba(0,0,0,0.2);}
.modal-box h3{margin:0 0 12px;color:#222;}
.form-row{margin-bottom:10px;}
.form-row label{display:block;margin-bottom:4px;font-weight:600;color:#444;font-size:13px;}

/* ===== 雷达图 ===== */
.radar-svg{max-width:420px;width:100%;height:auto;display:block;margin:6px auto 0;}
.report-radar{border:1px solid var(--c-border);border-radius:10px;padding:14px;margin-bottom:14px;background:#fff;}
.radar-legend{display:flex;gap:14px;font-size:12px;color:#666;}
.lg{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;background:#f4f6f8;}
.lg-now::before{content:'';display:inline-block;width:10px;height:10px;background:#4a90d9;border-radius:50%;}
.lg-recent::before{content:'';display:inline-block;width:10px;height:10px;background:transparent;border:2px dashed #ff7043;border-radius:50%;}

/* ===== 登录页错误提示 ===== */
.login-error{text-align:center;margin-top:10px;color:#c62828;font-size:13px;min-height:18px;}
.login-card .muted{font-size:11.5px;}

/* ===== 待评级列表缩略图 ===== */
.thumb-box{width:60px;height:60px;flex:0 0 60px;cursor:zoom-in;overflow:hidden;border-radius:6px;}
.thumb-box img,.thumb-box video{width:60px;height:60px;object-fit:cover;display:block;border-radius:6px;background:#eee;margin:0;}
.thumb-box .no-media{width:60px;height:60px;background:#eee;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#999;font-size:20px;}

/* ===== 待评级 / 今日记录 列表项 ===== */
.pending-item{display:flex;gap:10px;align-items:center;border:1px solid var(--c-border);border-radius:8px;padding:10px;margin-bottom:8px;background:#fafafa;cursor:pointer;}
.pending-item:hover{border-color:var(--c-primary);background:#f5f9ff;}
.pending-note{font-size:12px;margin-top:4px;color:#333;word-break:break-word;}
.today-item{border:1px solid var(--c-border);border-radius:8px;padding:10px;margin-bottom:8px;background:#fafafa;}
.today-note{margin-top:6px;font-size:13px;color:#333;word-break:break-word;}

/* ===== 评级详情 ===== */
.obs-detail{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--c-border);border-radius:6px;padding:10px;background:#fff;}
.detail-media{max-width:200px;max-height:200px;border-radius:6px;cursor:zoom-in;display:block;}
.obs-detail > div:last-child{flex:1;min-width:0;word-break:break-word;}

/* ===== 大图弹窗 ===== */
#lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);z-index:9999;align-items:center;justify-content:center;padding:16px;cursor:zoom-out;}
#lightbox img,#lightbox video{max-width:92vw;max-height:86vh;width:auto;height:auto;border-radius:8px;background:#111;box-shadow:0 10px 50px rgba(0,0,0,.6);cursor:default;}
.lb-close{position:absolute;top:14px;right:16px;width:38px;height:38px;border-radius:50%;border:none;background:rgba(255,255,255,.18);color:#fff;font-size:18px;cursor:pointer;line-height:1;}
.lb-close:hover{background:rgba(255,255,255,.32);}

/* ===== 审计日志 ===== */
.audit-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.audit-toolbar select{width:auto;min-width:120px;}
.audit-meta{color:var(--c-muted);font-size:12px;}
.audit-table{width:100%;border-collapse:collapse;font-size:12.5px;}
.audit-table th,.audit-table td{border-bottom:1px solid var(--c-border);padding:7px 9px;text-align:left;vertical-align:top;}
.audit-table th{background:#f8fafc;font-size:12px;font-weight:600;}
.pager{display:flex;gap:10px;align-items:center;justify-content:center;margin-top:12px;}
.act-LOGIN_FAIL,.act-ACCESS_DENIED,.act-RATE_LIMIT{color:#c62828;font-weight:600;}
.act-ORG_DISABLE,.act-DELETE{color:#c75b00;font-weight:600;}
.act-LOGIN,.act-CREATE{color:#2e7d32;}

/* 小屏优化 */
@media(max-width:768px){
  .audit-toolbar select{flex:1 1 130px;}
  .obs-detail{flex-direction:column;}
  .detail-media{max-width:100%;max-height:260px;}
  .modal-box{min-width:auto !important;width:92vw;}
}
