/* ==========================================================================
   复旦求是学院 · AI 助学（AI Assistant）专属样式
   基于 ui/prototype/assets/fd.css（设计系统 v1.0，复旦蓝+金）
   覆盖：AI 智能助手全局组件 / AI 错题讲解 / AI 薄弱点分析与学习规划
   ========================================================================== */

/* ---------- 悬浮球 Floating Action Button ---------- */
.ai-fab{position:fixed;right:28px;bottom:28px;z-index:var(--fd-z-toast);width:60px;height:60px;border:0;border-radius:50%;cursor:pointer;background:linear-gradient(150deg,var(--fd-blue-800),var(--fd-blue-600));color:var(--fd-gold-300);box-shadow:var(--fd-shadow-lg),0 0 0 4px rgba(201,160,99,.25);display:grid;place-items:center;transition:transform var(--fd-dur-base) var(--fd-ease),box-shadow var(--fd-dur-base) var(--fd-ease)}
.ai-fab:hover{transform:translateY(-3px) scale(1.04);box-shadow:var(--fd-shadow-lg),0 0 0 6px rgba(201,160,99,.35)}
.ai-fab::before{content:"";position:absolute;inset:-6px;border-radius:50%;border:1.5px solid var(--fd-gold-400);opacity:.6;animation:ai-pulse 2.4s var(--fd-ease) infinite}
@keyframes ai-pulse{0%{transform:scale(.92);opacity:.7}70%{transform:scale(1.18);opacity:0}100%{transform:scale(1.18);opacity:0}}
.ai-fab__icon{display:grid;place-items:center;transition:transform .3s var(--fd-ease)}
.ai-fab.is-open .ai-fab__icon{transform:rotate(90deg)}
.ai-fab__badge{position:absolute;top:2px;right:2px;width:11px;height:11px;border-radius:50%;background:var(--fd-gold-400);border:2px solid var(--fd-blue-800)}
.ai-fab__label{position:absolute;right:72px;top:50%;transform:translateY(-50%);white-space:nowrap;font-size:var(--fd-text-micro);font-weight:600;color:var(--fd-blue-900);background:var(--fd-color-surface);border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-full);padding:6px 14px;box-shadow:var(--fd-shadow-md);opacity:0;pointer-events:none;transition:opacity var(--fd-dur-base) var(--fd-ease)}
.ai-fab:hover .ai-fab__label{opacity:1}

/* ---------- 对话面板 Chat Panel ---------- */
.ai-panel{position:fixed;right:28px;bottom:100px;z-index:calc(var(--fd-z-toast) - 1);width:400px;max-width:calc(100vw - 32px);height:560px;max-height:calc(100vh - 140px);display:flex;flex-direction:column;background:var(--fd-color-surface);border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-xl);box-shadow:var(--fd-shadow-lg);overflow:hidden;opacity:0;transform:translateY(16px) scale(.98);pointer-events:none;transition:opacity .28s var(--fd-ease),transform .28s var(--fd-ease)}
.ai-panel.is-open{opacity:1;transform:none;pointer-events:auto}
.ai-panel__head{display:flex;align-items:center;gap:12px;padding:14px 18px;background:linear-gradient(120deg,var(--fd-blue-900),var(--fd-blue-700));color:#fff;flex:0 0 auto}
.ai-panel__avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--fd-gold-400),var(--fd-gold-500));color:var(--fd-text-on-gold,#3A2A0E);box-shadow:var(--fd-shadow-sm);flex:0 0 auto}
.ai-panel__title{font-family:var(--fd-font-serif);font-size:var(--fd-text-body);font-weight:700;letter-spacing:.06em}
.ai-panel__status{display:flex;align-items:center;gap:6px;font-size:11px;color:rgba(255,255,255,.72)}
.ai-panel__status i{width:7px;height:7px;border-radius:50%;background:#4ADE80;box-shadow:0 0 6px #4ADE80}
.ai-panel__close{margin-left:auto;width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:var(--fd-radius-sm);background:rgba(255,255,255,.1);color:#fff;cursor:pointer;transition:background var(--fd-dur-fast) var(--fd-ease)}
.ai-panel__close:hover{background:rgba(255,255,255,.22)}

/* 消息区 */
.ai-body{flex:1;min-height:0;overflow-y:auto;padding:16px;background:var(--fd-gray-50);display:flex;flex-direction:column;gap:14px}
.ai-msg{display:flex;gap:10px;align-items:flex-start;animation:ai-pop .3s var(--fd-ease)}
@keyframes ai-pop{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.ai-msg__avatar{width:30px;height:30px;flex:0 0 auto;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700}
.ai-msg__avatar--ai{background:linear-gradient(135deg,var(--fd-gold-400),var(--fd-gold-500));color:var(--fd-text-on-gold,#3A2A0E)}
.ai-msg__avatar--user{background:var(--fd-blue-800);color:#fff}
.ai-msg__body{max-width:78%;display:flex;flex-direction:column;gap:6px}
.ai-msg--user{align-items:flex-end;flex-direction:row-reverse}
.ai-msg__bubble{padding:11px 15px;border-radius:var(--fd-radius-lg);font-size:var(--fd-text-body-sm);line-height:1.7;word-break:break-word}
.ai-msg--ai .ai-msg__bubble{background:var(--fd-color-surface);border:1px solid var(--fd-color-border);border-left:3px solid var(--fd-gold-500);box-shadow:var(--fd-shadow-sm)}
.ai-msg--user .ai-msg__bubble{background:var(--fd-blue-800);color:#fff;border-bottom-right-radius:4px}
.ai-msg__meta{font-size:10px;color:var(--fd-text-tertiary);padding:0 2px}
.ai-msg--user .ai-msg__meta{text-align:right}

/* 思考/加载态 */
.ai-thinking{display:inline-flex;align-items:center;gap:5px;padding:14px 16px}
.ai-thinking i{width:7px;height:7px;border-radius:50%;background:var(--fd-gold-500);animation:ai-blink 1.1s var(--fd-ease) infinite}
.ai-thinking i:nth-child(2){animation-delay:.18s}
.ai-thinking i:nth-child(3){animation-delay:.36s}
@keyframes ai-blink{0%,100%{opacity:.25;transform:translateY(0)}45%{opacity:1;transform:translateY(-3px)}}

/* 来源引用 */
.ai-cite{display:flex;align-items:center;gap:10px;background:var(--fd-blue-50);border:1px solid var(--fd-blue-200);border-radius:var(--fd-radius-md);padding:9px 13px;margin-top:8px;text-decoration:none;transition:all var(--fd-dur-fast) var(--fd-ease)}
.ai-cite:hover{background:var(--fd-blue-100);text-decoration:none;transform:translateX(2px)}
.ai-cite__icon{width:26px;height:26px;flex:0 0 auto;border-radius:7px;display:grid;place-items:center;background:var(--fd-blue-800);color:var(--fd-gold-300)}
.ai-cite__txt{flex:1;min-width:0}
.ai-cite__txt b{display:block;font-size:var(--fd-text-micro);color:var(--fd-blue-900)}
.ai-cite__txt span{font-size:11px;color:var(--fd-text-secondary)}
.ai-cite svg{color:var(--fd-blue-600);flex:0 0 auto}

/* 反馈 */
.ai-feedback{display:flex;gap:6px;margin-top:6px}
.ai-feedback button{width:26px;height:26px;display:grid;place-items:center;border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-sm);background:var(--fd-color-surface);color:var(--fd-text-tertiary);cursor:pointer;transition:all var(--fd-dur-fast) var(--fd-ease)}
.ai-feedback button:hover{border-color:var(--fd-gold-500);color:var(--fd-gold-600)}

/* 底部：快捷提问 + 输入 */
.ai-chips{display:flex;gap:8px;overflow-x:auto;padding:10px 14px 0;flex:0 0 auto}
.ai-chip{flex:0 0 auto;padding:6px 13px;border-radius:var(--fd-radius-full);border:1px solid var(--fd-gold-300);background:var(--fd-gold-50);color:var(--fd-gold-600);font-size:var(--fd-text-micro);font-weight:600;cursor:pointer;transition:all var(--fd-dur-fast) var(--fd-ease);white-space:nowrap}
.ai-chip:hover{background:var(--fd-gold-500);color:var(--fd-text-on-gold,#3A2A0E);border-color:var(--fd-gold-500)}
.ai-inputbar{display:flex;gap:10px;align-items:flex-end;padding:12px 14px 14px;border-top:1px solid var(--fd-gray-100);flex:0 0 auto}
.ai-input{flex:1;min-height:42px;max-height:96px;resize:none;border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-md);padding:11px 14px;font-family:var(--fd-font-sans);font-size:var(--fd-text-body-sm);line-height:1.5;transition:all var(--fd-dur-fast) var(--fd-ease)}
.ai-input:focus{outline:none;border-color:var(--fd-blue-500);box-shadow:var(--fd-shadow-focus)}
.ai-send{width:42px;height:42px;flex:0 0 auto;display:grid;place-items:center;border:0;border-radius:var(--fd-radius-md);background:linear-gradient(135deg,var(--fd-gold-400),var(--fd-gold-500));color:var(--fd-text-on-gold,#3A2A0E);cursor:pointer;box-shadow:var(--fd-shadow-gold);transition:all var(--fd-dur-fast) var(--fd-ease)}
.ai-send:hover{filter:brightness(1.05);transform:translateY(-1px)}
.ai-send[disabled]{opacity:.5;pointer-events:none;box-shadow:none}

/* ---------- AI 错题讲解 ---------- */
.ai-explain{background:linear-gradient(160deg,var(--fd-gold-50),#fff 60%);border:1px solid var(--fd-gold-300);border-radius:var(--fd-radius-lg);overflow:hidden;box-shadow:var(--fd-shadow-sm)}
.ai-explain__head{display:flex;align-items:center;gap:12px;padding:14px 18px;background:linear-gradient(120deg,var(--fd-blue-900),var(--fd-blue-700));color:#fff}
.ai-explain__icon{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--fd-gold-400),var(--fd-gold-500));color:var(--fd-text-on-gold,#3A2A0E)}
.ai-explain__title{font-family:var(--fd-font-serif);font-size:var(--fd-text-body);font-weight:700;letter-spacing:.05em}
.ai-explain__sub{font-size:11px;color:rgba(255,255,255,.75)}
.ai-explain__body{padding:var(--fd-space-5)}
.ai-review{font-size:var(--fd-text-body-sm);color:var(--fd-text-secondary);background:var(--fd-color-surface);border:1px dashed var(--fd-gold-300);border-radius:var(--fd-radius-md);padding:12px 16px;margin-bottom:var(--fd-space-4)}
.ai-step{display:flex;gap:14px;margin-bottom:var(--fd-space-4);position:relative}
.ai-step:not(:last-child)::before{content:"";position:absolute;left:15px;top:34px;bottom:-14px;width:2px;background:linear-gradient(180deg,var(--fd-gold-400),rgba(201,160,99,.2))}
.ai-step__no{width:32px;height:32px;flex:0 0 auto;display:grid;place-items:center;border-radius:50%;background:var(--fd-gold-500);color:var(--fd-text-on-gold,#3A2A0E);font-family:var(--fd-font-serif);font-weight:700;font-size:var(--fd-text-body-sm);box-shadow:var(--fd-shadow-sm);z-index:1}
.ai-step__body{flex:1;min-width:0;background:var(--fd-color-surface);border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-md);padding:12px 16px;font-size:var(--fd-text-body-sm);line-height:1.75;color:var(--fd-text-primary)}
.ai-step__body b{color:var(--fd-blue-800)}
.ai-step__body .katex{font-size:1.02em}
.ai-points{display:flex;gap:8px;flex-wrap:wrap;margin:var(--fd-space-4) 0}
.ai-similar{display:flex;gap:12px;align-items:center;background:var(--fd-blue-50);border:1px solid var(--fd-blue-200);border-radius:var(--fd-radius-md);padding:12px 16px;margin-bottom:8px}
.ai-similar__tag{flex:0 0 auto}
.ai-similar__txt{flex:1;font-size:var(--fd-text-body-sm);color:var(--fd-text-primary)}
.ai-similar__txt small{display:block;color:var(--fd-text-tertiary);font-size:11px}
.ai-foot-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:var(--fd-space-4)}

/* ---------- AI 薄弱点分析 / 学习规划 ---------- */
.ai-card{background:var(--fd-color-surface);border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-lg);padding:var(--fd-space-6);box-shadow:var(--fd-shadow-sm)}
.ai-card__head{display:flex;align-items:center;gap:12px;margin-bottom:var(--fd-space-5);flex-wrap:wrap}
.ai-card__icon{width:44px;height:44px;border-radius:var(--fd-radius-md);display:grid;place-items:center;background:linear-gradient(150deg,var(--fd-blue-900),var(--fd-blue-600));color:var(--fd-gold-300);box-shadow:var(--fd-shadow-md)}
.ai-card__title{font-family:var(--fd-font-serif);font-size:var(--fd-text-h4);font-weight:700;color:var(--fd-blue-900)}
.ai-card__meta{margin-left:auto;font-size:var(--fd-text-micro);color:var(--fd-text-tertiary)}
.weak-row{display:grid;grid-template-columns:170px 1fr 70px;gap:var(--fd-space-3);align-items:center;padding:9px 0;border-bottom:1px dashed var(--fd-gray-100)}
.weak-row:last-child{border-bottom:0}
.weak-row__name{font-size:var(--fd-text-body-sm);color:var(--fd-gray-800);display:flex;align-items:center;gap:8px}
.weak-row__name .fd-tag{flex:0 0 auto}
.weak-row__pct{font-family:var(--fd-font-serif);font-weight:700;color:var(--fd-blue-800);text-align:right}
.ai-advice{display:flex;gap:12px;background:var(--fd-gold-50);border:1px solid var(--fd-gold-300);border-radius:var(--fd-radius-md);padding:12px 16px;margin-top:var(--fd-space-4);font-size:var(--fd-text-body-sm);color:var(--fd-text-secondary)}
.ai-advice b{color:var(--fd-gold-600)}
.ai-advice__icon{color:var(--fd-gold-600);flex:0 0 auto;margin-top:2px}

.plan-week{display:grid;grid-template-columns:repeat(7,1fr);gap:10px;margin-top:var(--fd-space-4)}
.plan-day{border:1px solid var(--fd-color-border);border-radius:var(--fd-radius-md);padding:12px 10px;text-align:center;transition:all var(--fd-dur-fast) var(--fd-ease);position:relative;background:var(--fd-color-surface)}
.plan-day:hover{transform:translateY(-3px);box-shadow:var(--fd-shadow-md)}
.plan-day--today{border-color:var(--fd-gold-500);box-shadow:var(--fd-shadow-gold)}
.plan-day--today::before{content:"今日";position:absolute;top:-9px;left:50%;transform:translateX(-50%);background:var(--fd-gold-500);color:var(--fd-text-on-gold,#3A2A0E);font-size:10px;font-weight:700;padding:1px 10px;border-radius:var(--fd-radius-full)}
.plan-day--done{opacity:.62}
.plan-day__dow{font-size:var(--fd-text-micro);color:var(--fd-text-tertiary)}
.plan-day__title{font-size:var(--fd-text-body-sm);font-weight:700;color:var(--fd-blue-900);margin:6px 0 3px;line-height:1.4}
.plan-day__detail{font-size:11px;color:var(--fd-text-secondary);line-height:1.5}
.plan-day__time{display:inline-block;margin-top:6px;font-size:10px;color:var(--fd-gold-600);background:var(--fd-gold-50);border-radius:var(--fd-radius-full);padding:1px 9px}

/* 响应式 */
@media (max-width:768px){
  .plan-week{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
}
@media (max-width:390px){
  .ai-fab{right:16px;bottom:16px;width:52px;height:52px}
  .ai-panel{right:0;bottom:0;left:0;width:100%;height:100%;max-height:100%;max-width:100%;border:0;border-radius:var(--fd-radius-lg) var(--fd-radius-lg) 0 0}
  .weak-row{grid-template-columns:120px 1fr 56px}
  .ai-explain__body{padding:var(--fd-space-4)}
}
