/* ==========================================================================
   拿捏社健康小助手 — NNS001 完整视觉样式
   涵盖 index.html 中使用的全部 CSS 类
   ========================================================================== */
* { margin:0; padding:0; box-sizing:border-box; }
body {
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:#f5f5f5; color:#333; line-height:1.6; min-height:auto;min-height:100dvh; overflow-x:hidden;
}
#app { max-width:480px; margin:0 auto; min-height:auto;min-height:100dvh; background:#fff; position:relative; }
.page { display:none; min-height:auto;min-height:100dvh; }
.page.active { display:block; animation:fadeIn .3s; }
@keyframes fadeIn { from{opacity:0} to{opacity:1} }

/* ====== 1. LOGIN PAGE ====== */
.login-container { padding:20px; min-height:auto;min-height:100dvh; }
.login-hero { background:linear-gradient(135deg,#1a73e8,#0d47a1); text-align:center; padding:32px 24px 40px; position:relative; overflow:hidden; border-radius:0 0 20px 20px; margin:-20px -20px 16px; }
.login-logo-area { display:flex; align-items:center; justify-content:center; min-height:80px; margin-bottom:12px; }
.login-title { color:#fff; font-size:24px; font-weight:800; letter-spacing:1px; text-shadow:0 2px 6px rgba(0,0,0,.15); }
.login-subtitle { color:rgba(255,255,255,.75); font-size:14px; margin-top:4px; letter-spacing:2px; }
.login-company { color:rgba(255,255,255,.4); font-size:11px; margin-top:10px; cursor:pointer; user-select:none; }
.login-form-area { padding:0 4px; }
.logo { text-align:center; padding:24px 0 10px; }
.logo-icon { font-size:72px; margin-bottom:10px; }
.logo h1 { font-size:26px; font-weight:700; color:#1a73e8; letter-spacing:1px; }
.subtitle { font-size:14px; color:#999; margin-top:5px; }
.copyright { font-size:11px; color:#bbb; margin-top:12px; cursor:pointer; user-select:none; }

/* 2. FORMS */
.login-form { background:#fff; border-radius:12px; padding:20px; margin-top:16px; box-shadow:0 2px 12px rgba(0,0,0,.06); }
.form-group { margin-bottom:14px; }
.form-group label { display:block; font-size:13px; font-weight:600; margin-bottom:5px; color:#666; }
.required { color:#e74c3c; }
.form-group input,.form-group select { width:100%; padding:11px 12px; border:1px solid #ddd; border-radius:8px; font-size:15px; outline:none; font-family:inherit; background:#fafafa; transition:border-color .2s,box-shadow .2s; }
.form-group input:focus,.form-group select:focus { border-color:#1a73e8; background:#fff; box-shadow:0 0 0 2px rgba(26,115,232,.1); }
.radio-group { display:flex; gap:15px; flex-wrap:wrap; }
.radio-btn { display:flex; align-items:center; gap:5px; cursor:pointer; font-size:15px; }
.radio-btn input[type=radio] { accent-color:#1a73e8; width:auto; }
.select-row { display:flex; gap:8px; }
.select-row select { flex:1; }
.field-note { font-size:12px; color:#999; margin-top:4px; padding:6px 10px; background:#f5f9ff; border-radius:6px; line-height:1.4; }

/* 3. EMERGENCY & AGREEMENT */
.emergency-warning { background:#fff5f5; border:1px solid #fecaca; border-radius:8px; padding:12px; margin-bottom:14px; display:flex; gap:10px; }
.warning-icon { font-size:20px; flex-shrink:0; }
.warning-text { font-size:12px; color:#991b1b; line-height:1.5; }
.warning-text ul { margin:5px 0 0 16px; }
.privacy-notice { display:flex; align-items:flex-start; gap:8px; padding:10px 14px; background:#e8f4fd; border-radius:8px; font-size:12px; color:#1557b0; line-height:1.4; }
.privacy-icon { font-size:16px; flex-shrink:0; margin-top:1px; }
.privacy-text { flex:1; }
.agreement { margin-bottom:18px; }
.checkbox-btn { display:flex; align-items:center; gap:8px; cursor:pointer; font-size:13px; color:#666; }
.checkbox-btn input[type=checkbox] { accent-color:#1a73e8; width:18px; height:18px; }
.checkbox-btn a { color:#1a73e8; text-decoration:none; font-weight:600; }

/* 4. BUTTONS */
.btn-primary { display:block; width:100%; padding:13px; background:linear-gradient(135deg,#1a73e8,#0d47a1); color:#fff; border:none; border-radius:10px; font-size:16px; font-weight:700; cursor:pointer; text-align:center; box-shadow:0 3px 10px rgba(26,115,232,.3); transition:box-shadow .2s; }
.btn-primary:hover { box-shadow:0 5px 18px rgba(26,115,232,.4); }
.btn-primary:active { transform:scale(.98); }
.btn-secondary { display:inline-flex; align-items:center; justify-content:center; gap:5px; padding:9px 18px; background:#fff; color:#1a73e8; border:1px solid #bad0f0; border-radius:8px; font-size:14px; font-weight:600; cursor:pointer; transition:all .2s; font-family:inherit; }
.btn-secondary:hover { background:#e8f4fd; border-color:#1a73e8; }
.btn-sm { padding:7px 14px; font-size:13px; }
.btn-icon { background:none; border:none; cursor:pointer; font-size:20px; padding:4px; line-height:1; }
.btn-icon:hover { opacity:.7; }
.btn-danger { display:inline-flex; align-items:center; justify-content:center; gap:5px; padding:7px 14px; background:#fee2e2; color:#dc2626; border:1px solid #fecaca; border-radius:8px; font-size:13px; font-weight:600; cursor:pointer; }
.btn-ghost { background:none; border:1px solid #ddd; color:#666; border-radius:8px; padding:7px 14px; font-size:13px; cursor:pointer; font-family:inherit; }

/* 5. HEADERS & NAV */
.main-header { background:linear-gradient(135deg,#1a73e8,#0d47a1); padding:10px 14px 20px; position:relative; }
.header-top { display:flex; justify-content:space-between; align-items:center; }
.header-top h2 { color:#fff; font-size:16px; font-weight:700; }
.header-user { display:flex; align-items:center; gap:6px; }
.header-user span { color:rgba(255,255,255,.9); font-size:13px; }
.header-user .btn-icon { color:rgba(255,255,255,.9); font-size:16px; }
.user-info-bar { background:rgba(255,255,255,.12); backdrop-filter:blur(4px); border-radius:6px; padding:4px 10px; margin-top:6px; font-size:11px; color:rgba(255,255,255,.8); display:flex; flex-wrap:wrap; gap:3px; line-height:1.5; }
.sub-header { display:flex; align-items:center; gap:12px; padding:12px 16px; background:#fff; border-bottom:1px solid #eee; position:sticky; top:0; z-index:10; }
.btn-back { background:none; border:none; font-size:15px; font-weight:600; color:#1a73e8; cursor:pointer; padding:4px 0; }
.sub-header h3 { font-size:17px; font-weight:700; }
.main-content { padding:0 14px 80px; margin-top:0; position:relative; z-index:2; }
/* 综合诊断区域 */
.section { margin-bottom:8px; }
.section h3 { font-size:16px; font-weight:700; margin-bottom:4px; padding:18px 0 8px; text-align:center; }
.section p { text-align:center; font-size:12px; color:#666; line-height:1.4; }

/* 6. FUNCTION CARDS */
.function-grid-2 { display:grid; grid-template-columns:1fr; gap:12px; margin-bottom:16px; }
.func-card-big { background:linear-gradient(135deg,#ff6b35,#e55d2b); border-radius:14px; padding:22px 20px; display:flex; align-items:center; gap:16px; cursor:pointer; box-shadow:0 4px 16px rgba(229,93,43,.3); transition:all .2s; border:none; }
.func-card-big:hover { transform:translateY(-2px); box-shadow:0 6px 24px rgba(229,93,43,.4); }
.func-card-big:active { transform:translateY(0); }
.func-card-big .func-icon { font-size:40px; width:60px; height:60px; display:flex; align-items:center; justify-content:center; background:rgba(255,255,255,.25); border-radius:14px; flex-shrink:0; }
.func-card-big .func-label { font-size:18px; font-weight:800; color:#fff; text-shadow:0 1px 4px rgba(0,0,0,.15); }
.func-card-big .func-desc { font-size:13px; color:rgba(255,255,255,.8); margin-top:3px; }
.function-grid { display:grid; grid-template-columns:repeat(5,1fr); gap:6px; margin-bottom:12px; }
.func-card { background:#fff; border-radius:12px; padding:12px 4px; text-align:center; cursor:pointer; border:1px solid #eee; transition:border-color .2s; }
.func-card:hover { border-color:#bad0f0; }
.func-card .func-icon { font-size:26px; display:block; margin-bottom:3px; }
.func-card .func-label { font-size:11px; color:#666; line-height:1.3; }

/* 7. SCAN ENTRY */
.scan-entry { display:flex; align-items:center; gap:12px; background:linear-gradient(135deg,#e8f4fd,#fff); border:1px solid #bad0f0; border-radius:12px; padding:12px 16px; cursor:pointer; transition:all .2s; margin-bottom:8px; }
.scan-entry:hover { background:linear-gradient(135deg,#d0e4fd,#e8f4fd); }
.scan-entry-icon { font-size:24px; width:44px; height:44px; display:flex; align-items:center; justify-content:center; background:#1a73e8; border-radius:10px; flex-shrink:0; }
.scan-entry-text { flex:1; min-width:0; }

/* 打赏入口卡片（与扫描入口同风格） */
.donate-entry { background:linear-gradient(135deg,#fff5f5,#fff); border:1px solid #fecaca; border-radius:12px; padding:12px 14px; cursor:pointer; transition:all .2s; display:flex; flex-direction:column; align-items:center; gap:4px; min-width:72px; justify-content:center; }
.donate-entry:hover { background:linear-gradient(135deg,#ffe8e8,#fff5f5); border-color:#fca5a5; }
.donate-entry-icon { font-size:24px; width:44px; height:44px; display:flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#ff6b35,#e55d2b); border-radius:10px; flex-shrink:0; }
.donate-entry-text { font-size:11px; font-weight:600; color:#dc2626; white-space:nowrap; }
.scan-entry-title { font-size:14px; font-weight:700; color:#0d47a1; }
.scan-entry-desc { font-size:12px; color:#999; margin-top:2px; }

/* 8. SYMPTOM TAGS */
.symptom-tags { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
.symptom-tag { padding:7px 14px; background:#fff; border:1px solid #ddd; border-radius:18px; font-size:13px; color:#666; cursor:pointer; transition:all .2s; user-select:none; }
.symptom-tag:hover,.symptom-tag.selected,.symptom-tag.active { border-color:#1a73e8; color:#1a73e8; background:#e8f4fd; }

/* 9. RECORDS */
#recent-records { margin-top:4px; }
.record-item { background:#fff; border-radius:8px; padding:12px 14px; margin-bottom:6px; border:1px solid #eee; cursor:pointer; transition:border-color .2s; }
.record-item:hover { border-color:#bad0f0; }
.record-date { font-size:11px; color:#999; }
.record-summary { font-size:14px; font-weight:600; margin:3px 0 2px; }
.record-detail { font-size:12px; color:#666; }
.empty-state { padding:30px 20px; text-align:center; color:#bbb; font-size:14px; background:#fff; border-radius:12px; border:1px dashed #ddd; }

/* 10. DIAGNOSIS FLOW */
.page-content { padding:16px; }
.step-indicator { display:flex; align-items:center; justify-content:center; gap:0; margin:14px 0; overflow-x:auto; white-space:nowrap; }
.step { padding:5px 10px; font-size:12px; font-weight:600; border-radius:6px; background:#f0f0f0; color:#999; flex-shrink:0; transition:all .2s; }
.step.active { background:#1a73e8; color:#fff; box-shadow:0 2px 6px rgba(26,115,232,.3); }
.step.done { background:#d1fae5; color:#065f46; }
.step-arrow { color:#ddd; font-size:12px; padding:0 4px; flex-shrink:0; }
.diag-step { background:#fff; border-radius:12px; padding:18px; border:1px solid #eee; box-shadow:0 1px 4px rgba(0,0,0,.04); margin-bottom:14px; }
.diag-step h4 { font-size:16px; font-weight:700; margin-bottom:12px; }
.shooting-guide { background:#e8f4fd; border-radius:8px; padding:10px 14px; font-size:12px; color:#1557b0; margin-bottom:12px; line-height:1.4; }

/* 10a. COMPACT GUIDE */
.compact-guide { background:#e8f4fd; border-radius:8px; padding:10px 14px; font-size:12px; color:#1557b0; margin-bottom:10px; line-height:1.4; }

/* 10b. CAMERA */
.diag-camera-area { margin-bottom:14px; }
.camera-area { margin-bottom:14px; }
.diag-preview { width:100%; height:200px; background:#f5f5f5; border-radius:8px; display:flex; align-items:center; justify-content:center; margin-bottom:8px; border:2px dashed #ddd; overflow:hidden; }
.diag-preview img { max-width:100%; max-height:100%; object-fit:contain; }
.diag-placeholder { font-size:16px; color:#bbb; }
.camera-placeholder { font-size:16px; color:#bbb; }
.camera-icon { font-size:28px; margin-bottom:4px; }
.diag-actions { display:flex; justify-content:center; margin-bottom:8px; }
.camera-actions { display:flex; justify-content:center; gap:10px; margin-bottom:8px; }
.diag-status { text-align:center; font-size:12px; color:#999; }
.diag-summary { font-size:12px; color:#999; }
.diag-nav { display:flex; gap:10px; justify-content:center; }
.diag-nav .btn-primary,.diag-nav .btn-secondary { flex:1; max-width:160px; }

/* 10c. RESULT / UPLOAD AREAS */
.result-area { margin-bottom:16px; }
.upload-area { margin-bottom:14px; }
.upload-placeholder { font-size:16px; color:#bbb; }

/* 10d. CONSULT */
.consult-begin { text-align:center; margin-bottom:12px; }
.symptom-selector { margin-bottom:12px; }
.consult-chat { margin-bottom:12px; }
.chat-messages { margin-bottom:12px; }
.chat-input-bar { display:flex; gap:8px; }
.chat-input-bar input { flex:1; padding:10px 12px; border:1px solid #ddd; border-radius:8px; font-size:14px; outline:none; }
.chat-input-bar input:focus { border-color:#1a73e8; }
.consult-input-area { display:flex; gap:8px; margin-top:10px; }
.consult-input-area input { flex:1; padding:10px 12px; border:1px solid #ddd; border-radius:8px; font-size:14px; outline:none; }
.consult-input-area input:focus { border-color:#1a73e8; }
.consult-messages { margin-bottom:10px; }
.consult-msg { padding:10px 14px; border-radius:8px; margin-bottom:6px; font-size:14px; max-width:85%; line-height:1.5; }
.consult-msg.user { background:#e8f4fd; margin-left:auto; }
.consult-msg.bot { background:#f0f0f0; margin-right:auto; }
.quick-questions { display:flex; flex-wrap:wrap; gap:5px; margin-bottom:10px; }
.quick-q { padding:6px 12px; font-size:12px; background:#fff; border:1px solid #ddd; border-radius:14px; cursor:pointer; transition:all .2s; }
.quick-q:hover { border-color:#1a73e8; color:#1a73e8; }
.result-actions { display:flex; gap:10px; justify-content:center; margin-top:16px; }

/* 11. RESULT CARD */
.result-card { background:#fff; border-radius:16px; padding:22px 18px; box-shadow:0 2px 12px rgba(0,0,0,.06); border:1px solid #eee; }
.result-syndrome { text-align:center; margin-bottom:18px; }
.result-syndrome h2 { font-size:20px; font-weight:800; color:#0d47a1; }
.result-section { margin-bottom:18px; }
.result-section h4 { font-size:15px; font-weight:700; color:#1a73e8; margin-bottom:6px; padding-bottom:4px; border-bottom:2px solid #e8f4fd; }
.result-section p,.result-section li { font-size:14px; line-height:1.6; color:#666; }
.result-section ul { padding-left:18px; }

/* 12. SCAN / QR */
.scan-container { padding:20px; text-align:center; }
.scan-title { font-size:18px; font-weight:700; margin-bottom:18px; color:#0d47a1; }
.qr-wrapper { background:#fff; border-radius:12px; padding:18px; display:inline-block; box-shadow:0 2px 12px rgba(0,0,0,.06); border:1px solid #eee; }
.qr-wrapper canvas { display:block; margin:0 auto; }
.scan-actions { display:flex; flex-direction:column; gap:8px; max-width:280px; margin:18px auto 0; }
.qr-divider { height:1px; background:#eee; margin:16px 0; }

/* 12a. SITE QR SECTION */
.site-qr-section { margin-top:16px; text-align:center; }
.site-qr-container { display:inline-block; background:#fff; border-radius:12px; padding:16px; border:1px solid #eee; box-shadow:0 1px 4px rgba(0,0,0,.04); }
.site-qr-tip { font-size:12px; color:#999; margin-top:8px; }

/* 13. OVERLAY / MODAL */
.overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,.5); z-index:100; align-items:center; justify-content:center; backdrop-filter:blur(3px); }
.overlay.active { display:flex; }
.modal-overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,.5); z-index:100; align-items:center; justify-content:center; backdrop-filter:blur(3px); }
.modal-overlay.active { display:flex; }
.modal-overlay .dialog-box { background:#fff; border-radius:16px; max-width:380px; width:90%; max-height:90vh; overflow-y:auto; box-shadow:0 12px 40px rgba(0,0,0,.15); animation:modalIn .25s; }
.modal { background:#fff; border-radius:16px; padding:24px; max-width:380px; width:90%; max-height:90vh; overflow-y:auto; box-shadow:0 12px 40px rgba(0,0,0,.15); animation:modalIn .25s; }
@keyframes modalIn { from{opacity:0;transform:scale(.95) translateY(10px)} to{opacity:1;transform:scale(1) translateY(0)} }
.modal h3 { font-size:18px; font-weight:700; margin-bottom:14px; text-align:center; }
.modal-body { font-size:14px; line-height:1.6; color:#666; margin-bottom:14px; }
.modal-large { max-width:480px; }
.modal-large .modal { max-width:480px; }

/* 14. DONATE */
.donate-float-btn { position:fixed; bottom:24px; right:24px; width:50px; height:50px; background:linear-gradient(135deg,#ff6b35,#e55d2b); border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:22px; box-shadow:0 3px 12px rgba(255,107,53,.4); cursor:pointer; z-index:50; border:none; color:#fff; transition:transform .2s; }
.donate-float-btn:hover { transform:scale(1.1); }
.donate-modal { max-width:360px; text-align:center; padding:30px 24px; position:relative; }
.donate-close { position:absolute; top:12px; right:16px; font-size:22px; background:none; border:none; cursor:pointer; color:#999; }
.donate-header { margin-bottom:16px; }
.donate-icon { font-size:40px; margin-bottom:8px; }
.donate-section { margin-bottom:14px; }
.donate-section h4 { font-size:14px; font-weight:600; margin-bottom:8px; text-align:center; }
.donate-qr { text-align:center; margin-bottom:8px; }
.donate-qr img { width:180px; height:180px; border-radius:8px; object-fit:contain; }
.donate-body { }
.wechat-id { display:flex; align-items:center; justify-content:center; gap:8px; padding:10px; background:#e8f4fd; border-radius:8px; font-size:14px; }
.copy-btn { padding:4px 12px; background:#1a73e8; color:#fff; border:none; border-radius:5px; font-size:12px; cursor:pointer; transition:background .2s; }
.copy-btn:hover { background:#0d47a1; }
.copy-btn:active { transform:scale(.95); }

/* 15. ADMIN */
.admin-container { padding:16px; }
.admin-header { background:#fff; border-radius:12px; padding:18px; margin-bottom:14px; border:1px solid #eee; }
.admin-header h2 { font-size:20px; font-weight:700; margin-bottom:14px; }
.admin-section { margin-bottom:14px; }
.admin-stats { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
.stats-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
.stat-card { background:#f5f9ff; border-radius:8px; padding:12px; text-align:center; }
.stat-number { font-size:26px; font-weight:800; color:#1a73e8; }
.stat-label { font-size:12px; color:#666; margin-top:2px; }
.admin-tabs { display:flex; gap:4px; background:#f0f0f0; border-radius:8px; padding:4px; margin-bottom:14px; }
.admin-tab { flex:1; padding:9px; text-align:center; font-size:13px; font-weight:600; border-radius:6px; cursor:pointer; background:none; border:none; color:#999; transition:all .2s; }
.admin-tab.active { background:#fff; color:#1a73e8; box-shadow:0 1px 3px rgba(0,0,0,.08); }
.admin-tab-content { display:none; }
.admin-tab-content.active { display:block; }
.admin-toolbar { display:flex; gap:8px; margin-bottom:12px; }
.admin-list { background:#fff; border-radius:12px; border:1px solid #eee; overflow:hidden; }
.admin-case-list { background:#fff; border-radius:12px; border:1px solid #eee; overflow:hidden; }
.admin-list-item { display:flex; justify-content:space-between; align-items:center; padding:12px 14px; border-bottom:1px solid #eee; cursor:pointer; transition:background .15s; }
.admin-list-item:last-child { border-bottom:none; }
.admin-list-item:hover { background:#f5f9ff; }
.kb-edit-btn,.kb-del-btn { padding:4px 10px; font-size:12px; border:1px solid #eee; border-radius:6px; cursor:pointer; background:#fff; transition:all .15s; }
.kb-edit-btn { color:#1a73e8; border-color:#bad0f0; }
.kb-del-btn { color:#dc2626; border-color:#fecaca; }

/* 16. KB EDITOR */
.kb-form-group { margin-bottom:12px; }
.kb-form-group label { display:block; font-size:13px; font-weight:600; margin-bottom:4px; color:#666; }
.kb-form-group select,.kb-form-group textarea,.kb-form-group input { width:100%; padding:10px 12px; border:1px solid #ddd; border-radius:8px; font-size:14px; font-family:inherit; outline:none; transition:border-color .2s; }
.kb-form-group select:focus,.kb-form-group textarea:focus,.kb-form-group input:focus { border-color:#1a73e8; box-shadow:0 0 0 2px rgba(26,115,232,.1); }
.kb-form-group textarea { min-height:80px; resize:vertical; }
.kb-btns { display:flex; gap:10px; margin-top:14px; }
.kb-btns .btn-primary,.kb-btns .btn-secondary { flex:1; }

/* 17. LOG TIMELINE */
.log-item { display:flex; align-items:flex-start; gap:8px; padding:10px 12px; border-bottom:1px solid #eee; }
.log-item:last-child { border-bottom:none; }
.log-icon { font-size:20px; flex-shrink:0; margin-top:1px; }
.log-time { font-size:11px; color:#999; }
.log-type { font-size:12px; font-weight:600; }
.log-data { font-size:11px; color:#999; word-break:break-all; }

/* 18. DISCLAIMER */
.disclaimer-text { font-size:13px; line-height:1.6; color:#666; max-height:60vh; overflow-y:auto; }
.disclaimer-text p { margin-bottom:8px; }

/* 19. PROFILE */
.page-content { padding:16px; }

/* ====== 分析动画 ====== */
.analyze-ring {
  width:120px; height:120px;
  border-radius:50%;
  background:conic-gradient(#4fc3f7,#1a73e8,#4fc3f7,#1a73e8);
  display:flex; align-items:center; justify-content:center;
  animation:analyzePulse 1.8s ease-in-out infinite;
  box-shadow:0 0 40px rgba(79,195,247,.3),0 0 80px rgba(26,115,232,.15);
}
.analyze-ring-inner {
  width:88px; height:88px;
  border-radius:50%;
  background:#0a1628;
  display:flex; align-items:center; justify-content:center;
  animation:analyzeSpin 3s linear infinite;
}
@keyframes analyzePulse {
  0%,100% { transform:scale(1); box-shadow:0 0 40px rgba(79,195,247,.3); }
  50% { transform:scale(1.06); box-shadow:0 0 60px rgba(79,195,247,.5); }
}
@keyframes analyzeSpin {
  from { transform:rotate(0deg); }
  to { transform:rotate(360deg); }
}
@keyframes analyzeFloat {
  0%,100% { transform:translateY(0); }
  50% { transform:translateY(-6px); }
}
@keyframes scanLine {
  0% { transform:translateX(-100%); }
  100% { transform:translateX(800%); }
}
@keyframes scanLine2 {
  0% { transform:translateX(100%); }
  100% { transform:translateX(-800%); }
}
.analyze-progress-bar {
  width:240px; height:4px;
  background:rgba(79,195,247,.15);
  border-radius:2px;
  overflow:hidden;
  box-shadow:0 0 10px rgba(79,195,247,.1);
}
.analyze-progress-fill {
  height:100%;
  width:0%;
  background:linear-gradient(90deg,#4fc3f7,#00e5ff,#4fc3f7);
  background-size:200% 100%;
  border-radius:2px;
  animation:progressGlow 1s linear infinite;
  transition:width .2s ease;
}
@keyframes progressGlow {
  0% { background-position:200% 0; }
  100% { background-position:-200% 0; }
}

/* 20. RESPONSIVE */
@media(max-width:380px){
  .function-grid { grid-template-columns:repeat(3,1fr); }
}


/* Admin Edit Buttons */
.btn-edit-field { transition: all .2s; }
.btn-edit-field:hover { background:#1565C0 !important; color:#fff !important; }

/* Admin Edit Buttons */
.btn-edit-field: { transition: all .2s; }
.btn-edit-field:hover { background: #1565C0 !important; color: #fff !important; }

/* ====== 反馈弹窗样式 ====== */
.feedback-dialog { max-width:360px !important; }
.feedback-options { display:flex; flex-direction:column; gap:10px; padding:0 8px; }
.feedback-btn { display:flex; align-items:center; gap:12px; width:100%; padding:14px 20px; border:2px solid #eee; border-radius:12px; background:#fff; cursor:pointer; font-size:15px; transition:all .2s; }
.feedback-btn:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(0,0,0,.1); }
.feedback-btn:active { transform:translateY(0); }
.feedback-good:hover { border-color:#4CAF50; background:#E8F5E9; }
.feedback-neutral:hover { border-color:#FF9800; background:#FFF3E0; }
.feedback-bad:hover { border-color:#f44336; background:#FFEBEE; }
.feedback-icon { font-size:28px; }
.feedback-label { font-weight:600; color:#333; }
.btn-ghost { display:block; width:100%; padding:8px; background:transparent; border:none; color:#999; cursor:pointer; font-size:13px; text-align:center; }
.btn-ghost:hover { color:#666; }

/* ── 小程序 WebView 适配 ── */
.mini-program-fix {
  min-height: auto !important;
}
.mini-program-fix .page {
  min-height: auto !important;
}
.mini-program-fix .login-container {
  min-height: auto !important;
}
