/* ================================================================
 * mm.css —— minggg.online 前端组件库（无构建、零依赖）
 * ----------------------------------------------------------------
 * 设计语言：宣纸底 / 墨色 / 朱砂红 / 靛青
 * 所有页面共用这里的 token 与组件，页面只写自己的布局差异。
 * ================================================================ */
:root{
  --paper:#EDE6DA; --paper-deep:#D8CDB9; --card:#FCFAF6; --paper-2:#F5F0E7;
  --ink:#26221C; --ink-soft:#4A443B; --ink-mute:#8B8172;
  --red:#C0362C; --red-deep:#9E2A22; --red-soft:#F2E2DC;
  --blue:#2B5C7E; --blue-soft:#E3ECF2;
  --green:#3E6B4F; --green-soft:#E4EEE7;
  --amber:#A9772B; --amber-soft:#F5EAD6;
  --line:#D9CFBC; --line-2:#E7DFCF;
  --shadow:0 10px 30px rgba(38,34,28,.10);
  --shadow-lg:0 24px 70px rgba(38,34,28,.22);
  --r-sm:6px; --r-md:10px; --r-lg:16px; --r-pill:999px;
  --serif:"Noto Serif SC","Songti SC","SimSun",serif;
  --sans:"Noto Sans SC","PingFang SC",system-ui,sans-serif;
  --mono:"JetBrains Mono","IBM Plex Mono",ui-monospace,monospace;
  --ease:cubic-bezier(.22,.61,.36,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--serif);color:var(--ink);min-height:100vh;
  background:var(--paper);
  background-image:
    radial-gradient(circle at 15% 20%, rgba(192,54,44,.04), transparent 40%),
    radial-gradient(circle at 85% 80%, rgba(43,92,126,.05), transparent 45%);
}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.mono{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:var(--ink-mute);text-transform:uppercase}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ---------------- 顶栏 ---------------- */
.mm-topbar{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:16px 28px;border-bottom:1px solid var(--line);
  background:rgba(237,230,218,.86);backdrop-filter:blur(8px);
  position:sticky;top:0;z-index:30;
}
.mm-brand{display:flex;align-items:center;gap:12px;min-width:0}
.mm-brand h1{font-size:19px;letter-spacing:.12em;white-space:nowrap}
.mm-brand .mono{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mm-account{display:flex;align-items:center;gap:10px;font-family:var(--sans);font-size:13px;color:var(--ink-soft);flex-wrap:wrap;justify-content:flex-end}
.mm-account .who{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------------- 按钮 ---------------- */
.mm-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  font-family:var(--sans);font-size:12.5px;font-weight:700;letter-spacing:.1em;
  padding:9px 18px;border-radius:var(--r-sm);border:1px solid var(--red);
  background:var(--red);color:#FCFAF6;cursor:pointer;
  transition:opacity .15s,transform .1s,background .15s,box-shadow .15s;
  -webkit-tap-highlight-color:transparent;
}
.mm-btn:hover{opacity:.9}
.mm-btn:active{transform:scale(.97)}
.mm-btn[disabled]{opacity:.5;cursor:not-allowed;transform:none}
.mm-btn.ghost{background:none;color:var(--red)}
.mm-btn.ghost:hover{background:var(--red-soft);opacity:1}
.mm-btn.blue{background:var(--blue);border-color:var(--blue)}
.mm-btn.blue-ghost{background:none;border-color:var(--blue);color:var(--blue)}
.mm-btn.blue-ghost:hover{background:var(--blue-soft)}
.mm-btn.quiet{background:none;border-color:var(--line);color:var(--ink-soft)}
.mm-btn.quiet:hover{background:var(--paper-2)}
.mm-btn.sm{padding:6px 12px;font-size:11.5px;letter-spacing:.06em}
.mm-btn.icon{padding:8px;border-radius:var(--r-pill);letter-spacing:0}
.mm-btn svg{flex:none}

/* ---------------- 卡片 / 面板 ---------------- */
.mm-card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);
  box-shadow:0 1px 0 rgba(38,34,28,.02);
}
.mm-panel{padding:22px 24px}
.mm-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.mm-panel-head h2{font-size:17px;letter-spacing:.08em}
.mm-panel-head .hint{font-family:var(--sans);font-size:11.5px;color:var(--ink-mute);margin-top:4px;line-height:1.6}
.mm-kicker{font-family:var(--mono);font-size:9px;letter-spacing:.26em;color:var(--red);text-transform:uppercase;margin-bottom:6px}
.mm-divider{height:1px;background:var(--line-2);margin:18px 0}

/* ---------------- 徽标 / 标签 ---------------- */
.mm-badge{
  display:inline-flex;align-items:center;gap:4px;
  font-family:var(--sans);font-size:10.5px;font-weight:700;letter-spacing:.06em;
  padding:3px 9px;border-radius:var(--r-pill);
  background:var(--paper-2);color:var(--ink-soft);border:1px solid var(--line-2);
}
.mm-badge.red{background:var(--red-soft);color:var(--red-deep);border-color:transparent}
.mm-badge.blue{background:var(--blue-soft);color:var(--blue);border-color:transparent}
.mm-badge.green{background:var(--green-soft);color:var(--green);border-color:transparent}
.mm-badge.amber{background:var(--amber-soft);color:var(--amber);border-color:transparent}

/* ---------------- 分段控件 / 标签页 ---------------- */
.mm-seg{display:inline-flex;background:var(--paper-2);border:1px solid var(--line-2);border-radius:var(--r-pill);padding:3px;gap:2px}
.mm-seg button{
  font-family:var(--sans);font-size:12px;font-weight:700;color:var(--ink-mute);
  background:none;border:0;border-radius:var(--r-pill);padding:7px 15px;cursor:pointer;
  transition:background .18s,color .18s,box-shadow .18s;white-space:nowrap;
}
.mm-seg button:hover{color:var(--ink-soft)}
.mm-seg button[aria-selected="true"]{background:var(--card);color:var(--ink);box-shadow:0 2px 8px rgba(38,34,28,.08)}

/* ---------------- 表单 ---------------- */
.mm-field{display:flex;flex-direction:column;gap:6px}
.mm-field label{font-family:var(--sans);font-size:11px;font-weight:700;letter-spacing:.14em;color:var(--ink-soft)}
.mm-input,.mm-textarea,.mm-select{
  width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--paper-2);font-family:var(--sans);font-size:13.5px;color:var(--ink);
  outline:none;transition:border-color .15s,box-shadow .15s;
}
.mm-input:focus,.mm-textarea:focus,.mm-select:focus{border-color:var(--red);box-shadow:0 0 0 3px rgba(192,54,44,.1)}
.mm-textarea{resize:vertical;min-height:84px;line-height:1.7}

/* ---------------- 骨架屏 / 空状态 ---------------- */
.mm-skeleton{
  background:linear-gradient(90deg,var(--paper-2) 25%,#EFE8DC 37%,var(--paper-2) 63%);
  background-size:400% 100%;animation:mm-shimmer 1.4s ease infinite;border-radius:var(--r-sm);
}
@keyframes mm-shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
.mm-empty{
  text-align:center;padding:36px 20px;color:var(--ink-mute);
  font-family:var(--sans);font-size:12.5px;line-height:1.9;
}
.mm-empty .big{font-family:var(--serif);font-size:16px;color:var(--ink-soft);margin-bottom:6px;letter-spacing:.08em}
.mm-error{font-family:var(--sans);font-size:12.5px;color:var(--red-deep);background:var(--red-soft);border-radius:var(--r-sm);padding:10px 12px;line-height:1.7}

/* ---------------- Toast ---------------- */
.mm-toasts{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;width:max-content;max-width:92vw}
.mm-toast{
  pointer-events:auto;font-family:var(--sans);font-size:12.5px;line-height:1.5;
  background:rgba(38,34,28,.94);color:#FCFAF6;padding:10px 16px;border-radius:var(--r-pill);
  box-shadow:var(--shadow);animation:mm-toast-in .22s var(--ease);
}
.mm-toast.ok{background:rgba(62,107,79,.96)}
.mm-toast.err{background:rgba(158,42,34,.97)}
.mm-toast.out{animation:mm-toast-out .2s ease forwards}
@keyframes mm-toast-in{from{opacity:0;transform:translateY(8px) scale(.97)}}
@keyframes mm-toast-out{to{opacity:0;transform:translateY(6px) scale(.98)}}

/* ---------------- 模态框 ---------------- */
.mm-mask{
  position:fixed;inset:0;background:rgba(38,34,28,.45);
  display:flex;align-items:center;justify-content:center;padding:20px;z-index:150;
  opacity:0;pointer-events:none;transition:opacity .2s ease;
}
.mm-mask.show{opacity:1;pointer-events:auto}
.mm-modal{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);
  width:100%;max-width:400px;padding:26px 26px 22px;box-shadow:var(--shadow-lg);
  transform:translateY(10px) scale(.98);transition:transform .22s var(--ease);
  max-height:88vh;overflow:auto;
}
.mm-mask.show .mm-modal{transform:none}
.mm-modal h3{font-size:17px;letter-spacing:.08em;margin-bottom:8px}
.mm-modal .body{font-family:var(--sans);font-size:13px;line-height:1.8;color:var(--ink-soft);white-space:pre-line}
.mm-modal .actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}

/* ---------------- 统计数字 / 卡片 ---------------- */
.mm-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}
.mm-stat{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);
  padding:16px 18px;position:relative;overflow:hidden;
}
.mm-stat::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--red);opacity:.55}
.mm-stat.blue::after{background:var(--blue)}
.mm-stat.green::after{background:var(--green)}
.mm-stat.amber::after{background:var(--amber)}
.mm-stat .label{font-family:var(--sans);font-size:11px;letter-spacing:.12em;color:var(--ink-mute);margin-bottom:8px}
.mm-stat .value{font-family:var(--serif);font-size:26px;line-height:1.1;letter-spacing:.02em}
.mm-stat .value small{font-family:var(--sans);font-size:12px;color:var(--ink-mute);margin-left:3px;letter-spacing:0}
.mm-stat .foot{font-family:var(--sans);font-size:11px;color:var(--ink-mute);margin-top:7px}

/* ---------------- 图表 ---------------- */
.mm-chart{position:relative;width:100%}
.mm-chart svg{display:block;width:100%;height:auto;overflow:visible}
.mm-chart .axis{stroke:var(--line-2);stroke-width:1}
.mm-chart .grid{stroke:var(--line-2);stroke-width:1;stroke-dasharray:2 4}
.mm-chart text{font-family:var(--mono);font-size:9px;fill:var(--ink-mute);letter-spacing:.04em}
.mm-chart .series-line{fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.mm-chart .series-area{opacity:.12}
.mm-chart .dot{stroke:var(--card);stroke-width:1.5}
.mm-legend{display:flex;flex-wrap:wrap;gap:12px;font-family:var(--sans);font-size:11px;color:var(--ink-soft);margin-top:10px}
.mm-legend i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}
.mm-chart-tip{
  position:absolute;pointer-events:none;z-index:5;background:rgba(38,34,28,.92);color:#FCFAF6;
  font-family:var(--sans);font-size:11px;padding:6px 9px;border-radius:5px;opacity:0;
  transform:translate(-50%,-120%);transition:opacity .12s;white-space:nowrap;
}
.mm-chart-tip.show{opacity:1}

/* ---------------- 表格 ---------------- */
.mm-table{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:12.5px}
.mm-table th{text-align:left;font-size:10.5px;letter-spacing:.12em;color:var(--ink-mute);font-weight:700;padding:0 10px 9px;border-bottom:1px solid var(--line)}
.mm-table td{padding:10px;border-bottom:1px solid var(--line-2);vertical-align:middle}
.mm-table tr:last-child td{border-bottom:0}
.mm-table .num{font-family:var(--mono);font-size:11.5px;color:var(--ink-soft)}

/* ---------------- 进度条 ---------------- */
.mm-progress{height:6px;background:var(--paper-2);border-radius:var(--r-pill);overflow:hidden}
.mm-progress > i{display:block;height:100%;background:var(--red);border-radius:inherit;transition:width .5s var(--ease)}
.mm-progress.blue > i{background:var(--blue)}
.mm-progress.green > i{background:var(--green)}

/* ================================================================
 * AI 悬浮助手
 * 收起：一枚印章球；第一次点击：横向滑出输入条；
 * 发送 / 展开：完整的对话面板。移动端自动变成底部抽屉。
 * ================================================================ */
.mm-ai-root{position:fixed;right:22px;bottom:22px;z-index:120;font-family:var(--sans)}
.mm-ai-ball{
  width:56px;height:56px;border-radius:50%;border:0;cursor:pointer;position:relative;
  background:linear-gradient(145deg,var(--red) 0%,var(--red-deep) 100%);color:#FCFAF6;
  box-shadow:0 10px 28px rgba(158,42,34,.35),inset 0 1px 0 rgba(255,255,255,.22);
  display:flex;align-items:center;justify-content:center;
  /* 位移与缩放都走变量，hover/按下/拖拽只是改数值，不会互相覆盖 transform 造成跳变 */
  --mm-ai-dx:0px;--mm-ai-dy:0px;--mm-ai-s:1;
  transform:translate3d(var(--mm-ai-dx),var(--mm-ai-dy),0) scale(var(--mm-ai-s));
  transition:transform .2s var(--ease),box-shadow .2s;
  will-change:transform;
  -webkit-tap-highlight-color:transparent;
}
.mm-ai-ball:hover{--mm-ai-s:1.04;box-shadow:0 14px 34px rgba(158,42,34,.42)}
.mm-ai-ball:active{--mm-ai-s:.96}
.mm-ai-ball svg{width:24px;height:24px}
.mm-ai-ball .ping{
  position:absolute;inset:0;border-radius:50%;border:1.5px solid rgba(192,54,44,.55);
  animation:mm-ai-ping 2.8s ease-out infinite;pointer-events:none;
}
@keyframes mm-ai-ping{0%{transform:scale(1);opacity:.7}70%,100%{transform:scale(1.55);opacity:0}}
.mm-ai-ball .dot{
  position:absolute;top:2px;right:2px;width:12px;height:12px;border-radius:50%;
  background:var(--green);border:2px solid var(--paper);display:none;
}
.mm-ai-root.has-unread .mm-ai-ball .dot{display:block}
.mm-ai-hint{
  position:absolute;right:68px;bottom:18px;white-space:nowrap;
  background:rgba(38,34,28,.92);color:#FCFAF6;border-radius:var(--r-pill);
  font-family:var(--sans);font-size:11px;letter-spacing:.06em;padding:5px 11px;
  opacity:0;transform:translateX(6px);transition:opacity .18s,transform .18s;
  pointer-events:none;box-shadow:var(--shadow);
}
.mm-ai-ball:hover + .mm-ai-hint,.mm-ai-ball:focus-visible + .mm-ai-hint{opacity:1;transform:none}
.mm-ai-root[data-open="bar"] .mm-ai-hint,.mm-ai-root[data-open="panel"] .mm-ai-hint{display:none}

/* 横向输入条 */
.mm-ai-bar{
  position:absolute;right:68px;bottom:4px;width:min(390px,calc(100vw - 108px));
  display:flex;align-items:center;gap:8px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:6px 6px 6px 16px;box-shadow:var(--shadow-lg);
  transform-origin:right center;
  opacity:0;transform:translateX(14px) scale(.92);pointer-events:none;
  transition:opacity .2s var(--ease),transform .24s var(--ease);
}
.mm-ai-root[data-open="bar"] .mm-ai-bar{opacity:1;transform:none;pointer-events:auto}
.mm-ai-bar input{
  flex:1;min-width:0;border:0;background:none;outline:none;
  font-family:var(--sans);font-size:13.5px;color:var(--ink);padding:8px 0;
}
.mm-ai-bar input::placeholder{color:var(--ink-mute)}
.mm-ai-bar .send{
  width:36px;height:36px;border-radius:50%;border:0;background:var(--red);color:#fff;
  cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;
  transition:transform .15s,opacity .15s;
}
.mm-ai-bar .send:hover{transform:scale(1.06)}
.mm-ai-bar .send[disabled]{opacity:.45;cursor:not-allowed;transform:none}

/* 对话面板 */
.mm-ai-panel{
  position:absolute;right:0;bottom:70px;
  width:min(392px,calc(100vw - 32px));height:min(590px,calc(100vh - 120px));
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);display:flex;flex-direction:column;overflow:hidden;
  opacity:0;transform:translateY(14px) scale(.97);transform-origin:bottom right;
  pointer-events:none;transition:opacity .22s var(--ease),transform .26s var(--ease);
}
.mm-ai-root[data-open="panel"] .mm-ai-panel{opacity:1;transform:none;pointer-events:auto}
.mm-ai-head{
  display:flex;align-items:center;gap:10px;padding:14px 14px 12px 18px;
  border-bottom:1px solid var(--line-2);
  /* 跟随页面主题：浅色页接近宣纸，深色页自动变深，避免暗色页面出现亮色横条 */
  background:linear-gradient(180deg,var(--paper-2),var(--card));
}
.mm-ai-head .seal{
  width:30px;height:30px;border-radius:8px;background:var(--red);color:#fff;
  display:flex;align-items:center;justify-content:center;flex:none;
}
.mm-ai-head .t{flex:1;min-width:0}
.mm-ai-head .t b{display:block;font-family:var(--serif);font-size:14px;letter-spacing:.1em}
.mm-ai-head .t span{display:block;font-size:10px;color:var(--ink-mute);letter-spacing:.06em;margin-top:2px}
.mm-ai-close{
  width:30px;height:30px;border:0;background:none;border-radius:var(--r-sm);
  color:var(--ink-mute);cursor:pointer;display:flex;align-items:center;justify-content:center;
}
.mm-ai-close:hover{background:var(--paper-2);color:var(--ink)}
.mm-ai-new:hover{background:rgba(192,54,44,.1);color:var(--red)}
.mm-ai-new:disabled{opacity:.45;cursor:wait}
.mm-ai-new svg{transition:transform .45s var(--ease)}
.mm-ai-new:hover svg{transform:rotate(-35deg)}

.mm-ai-body{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:16px;scroll-behavior:smooth}
.mm-ai-body::-webkit-scrollbar{width:8px}
.mm-ai-body::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px;border:2px solid var(--card)}
.mm-ai-welcome{padding:6px 2px 10px}
.mm-ai-welcome h4{font-size:15px;letter-spacing:.06em;margin-bottom:5px}
.mm-ai-welcome p{font-size:11.5px;line-height:1.8;color:var(--ink-mute)}
.mm-ai-chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:13px}
.mm-ai-chip{
  font-family:var(--sans);font-size:11.5px;color:var(--ink-soft);
  background:var(--paper-2);border:1px solid var(--line-2);border-radius:var(--r-pill);
  padding:6px 11px;cursor:pointer;transition:background .15s,border-color .15s,color .15s;
}
.mm-ai-chip:hover{background:var(--red-soft);border-color:transparent;color:var(--red-deep)}
.mm-ai-msg{display:flex;gap:9px;margin-bottom:16px;animation:mm-ai-msg-in .22s var(--ease)}
@keyframes mm-ai-msg-in{from{opacity:0;transform:translateY(5px)}}
.mm-ai-msg .avatar{
  width:26px;height:26px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  font-family:var(--serif);font-size:11px;background:var(--paper-2);color:var(--ink-soft);border:1px solid var(--line-2);
}
.mm-ai-msg.me{flex-direction:row-reverse}
.mm-ai-msg.me .avatar{background:var(--blue);color:#fff;border-color:transparent}
.mm-ai-msg.bot .avatar{background:var(--red);color:#fff;border-color:transparent}
.mm-ai-bubble{
  max-width:calc(100% - 40px);font-size:13px;line-height:1.75;color:var(--ink);
  background:var(--paper-2);border-radius:3px 12px 12px 12px;padding:10px 13px;
  overflow-wrap:anywhere;
}
.mm-ai-msg.me .mm-ai-bubble{background:var(--blue-soft);color:var(--ink);border-radius:12px 3px 12px 12px}
.mm-ai-bubble p{margin:0 0 8px}
.mm-ai-bubble p:last-child{margin-bottom:0}
.mm-ai-bubble h1,.mm-ai-bubble h2,.mm-ai-bubble h3{font-size:13.5px;margin:10px 0 6px;letter-spacing:.04em}
.mm-ai-bubble ul,.mm-ai-bubble ol{margin:4px 0 8px;padding-left:20px}
.mm-ai-bubble li{margin:3px 0}
.mm-ai-bubble code{font-family:var(--mono);font-size:11.5px;background:var(--line-2);padding:1px 5px;border-radius:4px}
.mm-ai-bubble pre{background:var(--line-2);padding:10px;border-radius:6px;overflow-x:auto;margin:8px 0}
.mm-ai-bubble pre code{background:none;padding:0}
.mm-ai-bubble strong{font-weight:700}
.mm-ai-bubble .meta{display:block;margin-top:7px;font-size:9.5px;color:var(--ink-mute);letter-spacing:.04em}
.mm-ai-bubble a{color:var(--red-deep);text-decoration:underline;text-underline-offset:2px}
.mm-ai-bubble blockquote{margin:7px 0;padding:5px 10px;border-left:2px solid var(--line);color:var(--ink-soft);background:var(--paper-2)}
.mm-ai-bubble hr{border:0;border-top:1px dashed var(--line);margin:10px 0}
.mm-ai-bubble .tbl{overflow-x:auto;margin:8px -2px;max-width:100%}
.mm-ai-bubble table{border-collapse:collapse;font-size:11.5px;min-width:100%}
.mm-ai-bubble th,.mm-ai-bubble td{border:1px solid var(--line-2);padding:5px 7px;text-align:left;white-space:nowrap}
.mm-ai-bubble th{background:var(--line-2);font-weight:700}
.mm-ai-bubble.err-bubble{background:var(--red-soft);border:1px solid rgba(192,54,44,.18)}
.mm-ai-retry{
  display:inline-flex;align-items:center;gap:5px;margin-top:8px;padding:5px 11px;
  border:1px solid var(--red);border-radius:var(--r-pill);background:var(--card);
  color:var(--red);font-family:var(--sans);font-size:11px;font-weight:700;letter-spacing:.06em;cursor:pointer;
}
.mm-ai-retry:hover{background:var(--red);color:#fff}
.mm-ai-acts{display:flex;justify-content:flex-end;margin-top:5px;opacity:0;transition:opacity .15s}
.mm-ai-bubble:hover .mm-ai-acts,.mm-ai-acts:focus-within{opacity:1}
.mm-ai-msg.me .mm-ai-acts{display:none}
.mm-ai-mini{
  border:0;background:none;padding:2px 4px;color:var(--ink-mute);
  font-family:var(--sans);font-size:9.5px;letter-spacing:.08em;cursor:pointer;border-radius:3px;
}
.mm-ai-mini:hover{color:var(--red);background:var(--red-soft)}
.mm-ai-waiting .mm-ai-bubble{position:relative}
.mm-ai-typing{display:inline-flex;gap:4px;align-items:center;padding:4px 2px}
.mm-ai-typing i{width:5px;height:5px;border-radius:50%;background:var(--ink-mute);animation:mm-ai-blink 1.2s infinite}
.mm-ai-typing i:nth-child(2){animation-delay:.15s}
.mm-ai-typing i:nth-child(3){animation-delay:.3s}
@keyframes mm-ai-blink{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-2px)}}
.mm-ai-foot{border-top:1px solid var(--line-2);padding:10px 12px 12px;background:var(--card)}
.mm-ai-composer{
  display:flex;align-items:flex-end;gap:8px;background:var(--paper-2);
  border:1px solid var(--line);border-radius:12px;padding:7px 7px 7px 12px;
  transition:border-color .15s,box-shadow .15s;
}
.mm-ai-composer:focus-within{border-color:var(--red);box-shadow:0 0 0 3px rgba(192,54,44,.08)}
.mm-ai-composer textarea{
  flex:1;border:0;background:none;outline:none;resize:none;
  font-family:var(--sans);font-size:13px;line-height:1.6;color:var(--ink);
  max-height:108px;min-height:24px;padding:4px 0;
}
.mm-ai-composer textarea::placeholder{color:var(--ink-mute)}
.mm-ai-send{
  width:34px;height:34px;border-radius:9px;border:0;background:var(--red);color:#fff;
  cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;
  transition:transform .15s,opacity .15s;
}
.mm-ai-send:hover{transform:scale(1.05)}
.mm-ai-send[disabled]{opacity:.4;cursor:not-allowed;transform:none}
.mm-ai-foot .row{display:flex;justify-content:space-between;align-items:center;margin-top:7px;padding:0 3px}
.mm-ai-foot .note{font-size:9.5px;color:var(--ink-mute);letter-spacing:.03em;line-height:1.5}
.mm-ai-foot .count{font-family:var(--mono);font-size:9.5px;color:var(--ink-mute);flex:none;margin-left:8px}
.mm-ai-foot .count.near{color:var(--red);font-weight:700}
.mm-ai-backdrop{display:none}
.mm-ai-panel::before{
  content:'';position:absolute;top:0;left:0;right:0;height:2px;z-index:2;
  background:linear-gradient(90deg,var(--red),#D98B6A 55%,var(--blue));opacity:.85;
}
.mm-ai-root[data-open="panel"] .mm-ai-ball{--mm-ai-s:.94;box-shadow:0 6px 18px rgba(158,42,34,.3)}
.mm-ai-root[data-open="panel"] .mm-ai-ball .ping{display:none}
html.mm-ai-locked,html.mm-ai-locked body{overflow:hidden}

@media (max-width:640px){
  .mm-ai-root{right:14px;bottom:14px;padding-bottom:env(safe-area-inset-bottom)}
  .mm-ai-ball{width:52px;height:52px}
  .mm-ai-hint{display:none}
  /* 抽屉铺满底部，悬浮球会盖住发送键：面板打开时收起 */
  .mm-ai-root[data-open="panel"] .mm-ai-ball{display:none}
  .mm-ai-bar{right:62px;bottom:2px;width:calc(100vw - 90px)}
  .mm-ai-panel{
    position:fixed;left:0;right:0;bottom:0;width:100%;height:min(82vh,640px);
    border-radius:18px 18px 0 0;transform:translateY(30px);transform-origin:bottom center;
    padding-bottom:env(safe-area-inset-bottom);
  }
  .mm-ai-root[data-open="panel"] .mm-ai-panel{transform:none}
  .mm-ai-backdrop{
    display:block;position:fixed;inset:0;background:rgba(38,34,28,.38);z-index:-1;
    opacity:0;pointer-events:none;transition:opacity .22s;
  }
  .mm-ai-root[data-open="panel"] .mm-ai-backdrop{opacity:1;pointer-events:auto}
  .mm-ai-acts{opacity:1}
  .mm-ai-bubble{max-width:calc(100% - 34px)}
}

/* 触屏设备：聚焦字号小于 16px 的输入框会让 iOS Safari 把整页放大 */
@media (pointer:coarse){
  .mm-ai-bar input,.mm-ai-composer textarea,.mm-input,.mm-textarea,.mm-select{font-size:16px}
  .mm-ai-bar .send,.mm-ai-send,.mm-ai-close,.mm-ai-chip{touch-action:manipulation}
}

@media (prefers-reduced-motion:reduce){
  .mm-ai-msg,.mm-toast,.mm-ai-ball .ping{animation:none}
  .mm-ai-bar,.mm-ai-panel,.mm-mask,.mm-modal{transition:none}
}

/* ---------------- 页面骨架 ---------------- */
.mm-page{max-width:1120px;margin:0 auto;padding:26px 24px 80px;width:100%}
.mm-page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:22px}
.mm-page-head h1{font-size:26px;letter-spacing:.1em;line-height:1.25}
.mm-page-head .sub{font-family:var(--sans);font-size:12.5px;color:var(--ink-mute);margin-top:6px;line-height:1.7}
.mm-grid{display:grid;gap:16px}
.mm-grid.two{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.mm-grid.three{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.mm-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.mm-spacer{flex:1}
@media (max-width:640px){
  .mm-topbar{padding:13px 16px}
  .mm-brand h1{font-size:17px}
  .mm-page{padding:18px 14px 72px}
  .mm-page-head h1{font-size:22px}
  .mm-panel{padding:18px 16px}
}
