/* 一记 · 双主题变量体系（默认浅色，html[data-theme=dark] 切换深色）
   核心色板引用 design-tokens.css 的语义 token（唯一真源 design-system/yiji/design-tokens.json）；
   带 alpha 的“功能性”遮罩/光晕等仍为字面值（用于透明度控制）。
   字体遵循 design-system：标题 Caveat，正文/数字 Quicksand（本地 woff2，随仓库分发）。 */
@import url("design-tokens.css?v=3");

/* 字体：Caveat（标题/手写）+ Quicksand（正文/数字），本地变量字重 400-700 */
@font-face{
  font-family:'Caveat';
  font-style:normal;
  font-weight:400 700;
  font-display:swap;
  src:url('fonts/caveat-latin.woff2') format('woff2');
}
@font-face{
  font-family:'Quicksand';
  font-style:normal;
  font-weight:400 700;
  font-display:swap;
  src:url('fonts/quicksand-latin.woff2') format('woff2');
}

:root{
  --font-heading:   'Caveat','PingFang SC','Microsoft YaHei',cursive;
  --font-body:      'Quicksand','PingFang SC','Microsoft YaHei',system-ui,sans-serif;
  --font-number:    'Quicksand',system-ui,sans-serif;
  --bg:             var(--color-background);
  --panel:          var(--color-surface);
  --panel-strong:   var(--color-surface-muted);
  --panel-border:   var(--color-border);
  --ink:            var(--color-foreground);
  --sub:            var(--color-text-subtle);
  --sub-strong:     var(--color-text-muted);
  --line:           var(--color-border);
  --line-strong:    var(--color-border-strong);
  --hover:          var(--color-surface-muted);
  --accent:         var(--color-primary);
  --accent-strong:  var(--color-primary);
  --accent-weak:    rgba(37,99,235,.10);
  --warn:           var(--color-warning);
  --warn-weak:      rgba(245,158,11,.10);
  --ok:             var(--color-success);
  --bad:            var(--color-danger);
  --grad:           linear-gradient(135deg, var(--color-primary), var(--color-tertiary) 50%, var(--color-secondary));
  --radius:         var(--radius-card);
  --shadow:         var(--shadow-card);
  --shadow-lg:      var(--shadow-float);
  --side-bg:        var(--color-glass-bg);
  --topbar-bg:      var(--color-glass-bg);
  --overlay-bg:     rgba(24,27,35,.35);
  --mask-bg:        rgba(246,247,251,.8);
  --toast-bg:       rgba(24,27,35,.92);
  --glow-a:         rgba(37,99,235,.16);
  --glow-b:         rgba(139,92,246,.14);
  --glow-c:         rgba(14,159,138,.12);
  --glass-panel:    rgba(255,255,255,.38);
  --glass-bar:      rgba(255,255,255,.28);
  --sheen:          rgba(255,255,255,.45);
}
/* 深夜只覆盖“带 alpha 的功能性变量”；色板本身已通过 token 级联自动切到深夜值 */
html[data-theme="dark"]{
  --accent-weak:    rgba(96,165,250,.18);
  --warn-weak:      rgba(251,191,36,.14);
  --overlay-bg:     rgba(4,6,10,.6);
  --mask-bg:        rgba(5,7,12,.72);
  --toast-bg:       rgba(20,24,36,.92);
  --glow-a:         rgba(96,165,250,.28);
  --glow-b:         rgba(139,92,246,.22);
  --glow-c:         rgba(52,211,153,.16);
  --glass-panel:    rgba(21,31,51,.34);
  --glass-bar:      rgba(21,31,51,.24);
  --sheen:          rgba(255,255,255,.10);
}
*{box-sizing:border-box; margin:0; padding:0;}
html{color-scheme:light;}
html[data-theme="dark"]{color-scheme:dark;}
body{
  font-family:var(--font-body);
  background:
    radial-gradient(1100px 640px at 8% -8%, var(--glow-a), transparent 62%),
    radial-gradient(1000px 600px at 96% 4%, var(--glow-b), transparent 60%),
    radial-gradient(900px 620px at 50% 118%, var(--glow-c), transparent 62%),
    var(--bg);
  background-attachment:fixed;
  color:var(--ink);
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
}
::-webkit-scrollbar{width:9px;height:9px;}
::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:8px;}
::-webkit-scrollbar-thumb:hover{background:var(--sub);}
.wrap{display:flex; min-height:100vh;}
h1,h2,h3,h4,h5,h6{font-family:var(--font-heading); font-weight:700; line-height:1.2;}
.ic{width:1em; height:1em; vertical-align:-.12em; display:inline-block; flex:0 0 auto;}

/* 侧边栏 */
.side{
  width:208px; flex:0 0 208px;
  background:var(--glass-bar);
  backdrop-filter:blur(var(--primitive-blur-xl)); -webkit-backdrop-filter:blur(var(--primitive-blur-xl));
  box-shadow:inset -1px 0 0 var(--sheen);
  border-right:1px solid var(--line);
  color:var(--sub);
  display:flex; flex-direction:column; padding:22px 14px;
  position:sticky; top:0; height:100vh;
}
.side .logo{font-family:var(--font-heading); font-size:22px; font-weight:700; letter-spacing:2px; padding:0 10px 20px;
  background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent;}
.side .ver{font-size:10px; background:var(--accent-weak); color:var(--accent-strong);
  padding:2px 7px; border-radius:var(--radius-pill); vertical-align:middle; letter-spacing:0;}
.side .nav{list-style:none;}
.side .nav li{padding:11px 13px; border-radius:var(--radius-control); font-size:14px; cursor:pointer;
  display:flex; align-items:center; gap:9px; margin-bottom:3px;
  color:var(--sub); transition:all .18s ease;}
.side .nav li .ic{width:16px; height:16px;}
.side .nav li:hover{background:var(--panel-strong); color:var(--ink); transform:translateX(2px);}
.side .nav li.on{background:var(--accent-weak); color:var(--accent-strong); font-weight:700;
  border:1px solid var(--line-strong);}
.side .foot{margin-top:auto; font-size:11px; color:var(--sub); line-height:1.8; padding:14px 10px;
  border-top:1px solid var(--line); opacity:.9;}

/* 主区 */
.main{flex:1; display:flex; flex-direction:column; min-width:0;}
.topbar{
  height:60px; flex:0 0 60px;
  background:var(--glass-bar);
  backdrop-filter:blur(var(--primitive-blur-xl)); -webkit-backdrop-filter:blur(var(--primitive-blur-xl));
  box-shadow:inset 0 -1px 0 var(--sheen);
  border-bottom:1px solid var(--line);
  display:flex; align-items:center; gap:14px; padding:0 24px;
  position:sticky; top:0; z-index:50;
}
.space-seg{display:flex; border:1px solid var(--line); border-radius:var(--radius-control); overflow:hidden; background:var(--panel);}
.space-seg span{padding:7px 15px; font-size:13px; cursor:pointer; color:var(--sub); transition:all .15s; display:flex; align-items:center; gap:6px;}
.space-seg span:hover{color:var(--ink);}
.space-seg span.on{background:var(--accent-weak); color:var(--accent-strong); font-weight:700;}
.search{flex:1; font-size:13px; color:var(--sub);}
.me{font-size:12px; color:var(--sub);}
.content{flex:1; padding:26px 28px; overflow-y:auto;}
.hide{display:none !important;}

/* 卡片（玻璃拟态：半透明底 + 玻璃描边 + 模糊） */
.card{
  background:var(--glass-panel);
  border:1px solid var(--color-glass-border);
  border-radius:var(--radius);
  padding:18px 20px; margin-bottom:16px;
  box-shadow:var(--shadow), inset 0 1px 0 var(--sheen);
  backdrop-filter:blur(var(--primitive-blur-lg)); -webkit-backdrop-filter:blur(var(--primitive-blur-lg));
  transition:box-shadow .2s ease, border-color .2s ease;
}
.card:hover{border-color:var(--line-strong);}
/* 高亮 CTA 渐变卡：降饱和/降亮，避免过艳 */
.card.hero{ filter:saturate(.72) brightness(.9); }
.pt{font-family:var(--font-heading); font-size:16.5px; font-weight:700; letter-spacing:.2px; margin-bottom:14px;
  display:flex; align-items:center; justify-content:space-between;}
.pt .sub{font-family:var(--font-body); font-size:12px; color:var(--sub); font-weight:400;}

/* 按钮 */
.btn{display:inline-flex; align-items:center; gap:6px; padding:8px 16px; border-radius:var(--radius-control); font-size:13px; font-weight:700;
  cursor:pointer; border:1px solid transparent; transition:all .18s ease; user-select:none;}
.btn.primary{background:var(--grad); color:#fff;
  box-shadow:0 4px 14px rgba(37,99,235,.30);}
.btn.primary:hover{filter:brightness(1.06); transform:translateY(-1px);
  box-shadow:0 8px 20px rgba(37,99,235,.38);}
.btn.primary:active{transform:translateY(0) scale(.98);}
.btn.ghost{background:var(--panel); color:var(--sub-strong); border-color:var(--line-strong);}
.btn.ghost:hover{border-color:var(--accent); color:var(--accent-strong); background:var(--accent-weak);}
.btn.warn{background:linear-gradient(135deg, var(--color-gradient-expense-start), var(--color-gradient-expense-end)); color:#fff;}
.btn.mini{padding:4px 11px; font-size:12px; border-radius:var(--radius-control);}
.btn .ic{width:15px; height:15px;}
.btn:disabled{opacity:.45; cursor:default;}

/* KPI */
.kpis{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:16px;}
.kpi{
  background:var(--glass-panel);
  border:1px solid var(--color-glass-border);
  border-radius:var(--radius); padding:16px 18px;
  box-shadow:var(--shadow), inset 0 1px 0 var(--sheen);
  backdrop-filter:blur(var(--primitive-blur-lg)); -webkit-backdrop-filter:blur(var(--primitive-blur-lg));
  position:relative; overflow:hidden;
}
.kpi::after{content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(240px 90px at 85% -20%, var(--accent-weak), transparent 70%);}
.kpi .lbl{font-size:12px; color:var(--sub);}
.kpi .num{font-family:var(--font-number); font-size:27px; font-weight:700; margin-top:5px; letter-spacing:-.5px;
  font-variant-numeric:tabular-nums;}
.kpi .delta{font-size:12px; margin-top:4px; color:var(--sub);}
.down{color:var(--ok);} .up{color:var(--warn);}

/* 网格与图表 */
.grid2{display:grid; grid-template-columns:1.2fr 1fr; gap:14px;}
.bars{display:flex; align-items:flex-end; gap:4px; height:150px; padding-top:10px;}
.bars i{flex:1; border-radius:6px 6px 2px 2px; min-height:3px; position:relative;
  background:linear-gradient(180deg, var(--color-gradient-income-start), var(--color-gradient-income-end));
  transition:filter .15s;}
.bars i:hover{filter:brightness(1.1);}
.bars i span{position:absolute; bottom:-19px; left:50%; transform:translateX(-50%);
  font-size:9px; color:var(--sub); white-space:nowrap;}
.cat-row{display:flex; align-items:center; gap:8px; margin:8px 0; font-size:13px;}
.cat-name{width:60px; color:var(--sub-strong);}
.cat-bar{flex:1; height:9px; background:var(--panel-strong); border-radius:6px; overflow:hidden;}
.cat-bar i{display:block; height:100%; border-radius:6px;}
.cat-pct{width:96px; text-align:right; color:var(--sub); font-size:12px;
  font-variant-numeric:tabular-nums;}

/* 表格 */
table{width:100%; border-collapse:collapse; font-size:13px;}
th{text-align:left; color:var(--sub); font-weight:600; font-size:12px;
  padding:10px; border-bottom:1px solid var(--line); white-space:nowrap; letter-spacing:.3px;}
td{padding:11px 10px; border-bottom:1px solid var(--line); vertical-align:middle;}
tr{transition:background .15s;}
tbody tr:hover, tr:hover{background:var(--hover);}
tr.warn-row{background:var(--warn-weak);}
tr.warn-row:hover{background:var(--warn-weak);}

/* chips 与标签 */
.chip{font-size:11px; padding:3px 9px; border-radius:var(--radius-pill);
  background:var(--panel-strong); border:1px solid var(--line);
  color:var(--sub-strong); white-space:nowrap; display:inline-block; margin:1px 3px 1px 0;}
.chip.ok{background:rgba(16,185,129,.10); border-color:rgba(16,185,129,.25); color:var(--ok);}
.chip.warn{background:var(--warn-weak); border-color:rgba(245,158,11,.3); color:var(--warn);}
.chip.blue{background:var(--accent-weak); border-color:rgba(37,99,235,.25); color:var(--accent-strong);}
.chip.nchip{cursor:pointer; transition:all .15s;}
.chip.nchip:hover{border-color:var(--accent); color:var(--accent-strong);}
.chip.nchip.on{background:var(--accent-weak); border-color:rgba(37,99,235,.35); color:var(--accent-strong); font-weight:700;}

/* 工具行与控件 */
.toolrow{display:flex; gap:10px; align-items:center; margin-bottom:12px; flex-wrap:wrap;}
.sel{border:1px solid var(--line); border-radius:var(--radius-control); padding:7px 12px; font-size:13px;
  background:var(--panel); color:var(--ink); cursor:pointer;}
.sel:hover{border-color:var(--accent);}
.sel option{background:var(--panel); color:var(--ink);}
input[type=date]{color:var(--ink);}
input[type=checkbox]{accent-color:var(--color-primary);}
.bulk{background:var(--accent-weak); border:1px solid rgba(37,99,235,.25);
  border-radius:var(--radius); padding:9px 14px; font-size:13px;
  display:flex; gap:12px; align-items:center; margin-bottom:12px; flex-wrap:wrap;}
.bulk b{color:var(--accent-strong);}
.note-banner{font-size:12.5px; color:var(--sub); background:var(--panel-strong);
  border:1px solid var(--line); border-radius:var(--radius-control); padding:9px 12px; margin-bottom:12px;}
.banner-warn{font-size:12.5px; color:var(--warn); background:var(--warn-weak);
  border:1px solid rgba(245,158,11,.3); border-radius:var(--radius-control); padding:9px 12px; margin-bottom:12px;}
.amt{font-weight:700; white-space:nowrap; font-variant-numeric:tabular-nums;}

/* 表单 */
.fld{margin-bottom:12px;}
.fld label{font-size:12px; color:var(--sub); display:block; margin-bottom:5px;}
.fld .inp{width:100%; border:1px solid var(--line); border-radius:var(--radius-control); padding:10px 12px;
  font-size:14px; font-family:inherit; color:var(--ink);
  background:var(--panel); transition:all .18s;}
.fld .inp:focus{outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-weak);}
.fld textarea.inp{resize:vertical;}
.fld select.inp option{background:var(--panel); color:var(--ink);}
.row2{display:flex; gap:10px;}
.row2 .fld{flex:1;}

/* 弹层（玻璃拟态） */
.overlay{position:fixed; inset:0; background:var(--overlay-bg); backdrop-filter:blur(4px);
  display:flex; align-items:center; justify-content:center; z-index:90;}
.modal{
  background:var(--glass-panel);
  border:1px solid var(--color-glass-border);
  border-radius:var(--radius-card); padding:26px; width:500px; max-width:92vw; max-height:86vh; overflow-y:auto;
  box-shadow:var(--shadow-lg), inset 0 1px 0 var(--sheen);
  backdrop-filter:blur(var(--primitive-blur-xl)); -webkit-backdrop-filter:blur(var(--primitive-blur-xl));
}
.modal .btnrow{margin-top:6px;}
.btnrow{display:flex; gap:10px; margin-top:4px;}
.btnrow .btn{flex:1; text-align:center; justify-content:center;}

/* 登录（玻璃拟态） */
.authmask{position:fixed; inset:0; background:var(--mask-bg); backdrop-filter:blur(10px);
  display:none; align-items:center; justify-content:center; z-index:100;}
.authcard{
  background:var(--glass-panel);
  border:1px solid var(--color-glass-border);
  border-radius:var(--radius-card); padding:34px 30px; width:360px; text-align:center;
  box-shadow:var(--shadow-lg), inset 0 1px 0 var(--sheen);
  backdrop-filter:blur(var(--primitive-blur-xl)); -webkit-backdrop-filter:blur(var(--primitive-blur-xl));
  position:relative; overflow:hidden;
}
.authcard::before{content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(300px 140px at 50% -30%, var(--accent-weak), transparent 70%);}
.authcard .logo{font-family:var(--font-heading); font-size:30px; font-weight:700; letter-spacing:3px; position:relative;
  background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent;}
.authcard .sub{font-size:12px; color:var(--sub); margin:8px 0 22px; position:relative;}
.authcard .inp{width:100%; border:1px solid var(--line); border-radius:var(--radius-control); padding:12px 14px;
  font-size:14px; margin-bottom:11px; display:block; font-family:inherit; color:var(--ink);
  background:var(--panel); transition:all .18s; position:relative;}
.authcard .inp:focus{outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-weak);}
.hint{font-size:12px; color:var(--sub); margin-top:14px; position:relative;}

/* 提醒/待办条目 */
.todo{display:flex; align-items:center; gap:10px; padding:12px 0;
  border-bottom:1px dashed var(--line); font-size:13.5px;}
.todo .t{flex:1;}
.todo .m{font-size:12px; color:var(--sub);}
.todo .box{width:18px; height:18px; border:1.5px solid var(--line-strong); border-radius:6px; flex:0 0 18px;}
.todo.done .box{background:var(--grad); border-color:transparent;}
.todo.done .txt{color:var(--sub); text-decoration:line-through;}
.rep-txt{font-size:13.5px; line-height:2; color:var(--sub-strong); white-space:pre-wrap;}

/* 日历 */
.cal{display:grid; grid-template-columns:repeat(7,1fr); gap:4px; font-size:11px; text-align:center;}
.cal .d{padding:5px 0; color:var(--sub);}
.cal .n{padding:5px 0; position:relative; border-radius:6px;}
.cal .n:hover{background:var(--panel-strong);}
.cal .n.dot::after{content:""; position:absolute; left:50%; transform:translateX(-50%); bottom:2px;
  width:4px; height:4px; border-radius:2px; background:var(--warn);}
.cal .n.today{background:var(--accent-weak); color:var(--accent-strong); font-weight:700;}

/* 快捷选择 seg */
.seg{display:flex; gap:8px; margin:0 0 12px;}
.seg .s{flex:1; text-align:center; font-size:13px; padding:8px 0; border-radius:var(--radius-control);
  background:var(--panel-strong); border:1px solid transparent; color:var(--sub); cursor:pointer; transition:all .15s; display:flex; align-items:center; justify-content:center; gap:6px;}
.seg .s:hover{color:var(--ink);}
.seg .s.on{background:var(--accent-weak); border-color:rgba(37,99,235,.3); color:var(--accent-strong); font-weight:700;}
.seg2{display:flex; gap:10px;}
.seg2 .s2{flex:1; text-align:center; padding:12px 8px; border:1px solid var(--line);
  border-radius:var(--radius-control); font-size:13px; color:var(--sub); cursor:pointer; transition:all .15s; display:flex; align-items:center; justify-content:center; gap:6px;}
.seg2 .s2:hover{color:var(--ink); border-color:var(--line-strong);}
.seg2 .s2.on{border-color:var(--accent); background:var(--accent-weak); color:var(--accent-strong); font-weight:700;}

/* 提示 */
.toast{position:fixed; top:74px; right:26px;
  background:var(--toast-bg); backdrop-filter:blur(var(--primitive-blur-md)); -webkit-backdrop-filter:blur(var(--primitive-blur-md));
  color:#fff; padding:11px 18px; border-radius:var(--radius-control); font-size:13px; z-index:99;
  opacity:0; transform:translateY(-6px); transition:all .3s ease;
  box-shadow:0 12px 40px rgba(24,27,35,.25);}
.toast.show{opacity:1; transform:translateY(0);}

/* 时间线 */
.tl-item{display:flex; gap:10px; padding:13px 16px; border-bottom:1px solid var(--line);
  align-items:flex-start; transition:background .15s;}
.tl-item:hover{background:var(--hover);}
.tl-ic{width:38px; height:38px; border-radius:var(--radius-control);
  background:var(--panel-strong); border:1px solid var(--line);
  display:flex; align-items:center; justify-content:center; font-size:18px; flex:0 0 38px;}
.tl-body{flex:1; min-width:0;}
.tl-t{font-family:var(--font-heading); font-size:14px; font-weight:700; color:var(--ink);}
.tl-m{font-size:12px; color:var(--sub); margin-top:2px;}
.tl-tags{margin-top:5px; display:flex; gap:6px; flex-wrap:wrap;}
.tl-amt{font-family:var(--font-number); font-size:15px; font-weight:700; white-space:nowrap; font-variant-numeric:tabular-nums;}

@media (max-width: 1000px){ .grid2{grid-template-columns:1fr;} .kpis{grid-template-columns:repeat(2,1fr);} }

/* ============ v3.5 AI 助手悬浮球（气泡图标 + 涟漪/呼吸特效） ============ */
.ai-fab-w{position:fixed; right:28px; bottom:28px; width:58px; height:58px; border-radius:50%; background:radial-gradient(circle at 32% 28%, var(--color-gradient-ai-start), var(--color-gradient-ai-mid) 55%, var(--color-gradient-ai-end)); color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; box-shadow:0 10px 26px rgba(124,58,237,.5), inset 0 1px 0 rgba(255,255,255,.28), inset 0 -3px 8px rgba(0,0,0,.18); transition:transform .2s, box-shadow .2s; z-index:120; border:1px solid rgba(255,255,255,.22);}
.ai-fab-w .fab-bubble{position:absolute; border-radius:50%; background:rgba(255,255,255,.5); pointer-events:none;}
.ai-fab-w .fab-bubble.b1{width:8px; height:8px; top:10px; left:12px; animation:fabFloat 3.4s ease-in-out infinite;}
.ai-fab-w .fab-bubble.b2{width:5px; height:5px; top:22px; right:11px; background:rgba(255,255,255,.4); animation:fabFloat 4.2s ease-in-out .7s infinite;}
.ai-fab-w .fab-bubble.b3{width:6px; height:6px; bottom:11px; left:15px; background:rgba(255,255,255,.35); animation:fabFloat 3.8s ease-in-out 1.3s infinite;}
@keyframes fabFloat{0%,100%{transform:translateY(0); opacity:.7;}50%{transform:translateY(-3px); opacity:1;}}
.ai-fab-w .fab-ripple{position:absolute; inset:0; border-radius:50%; pointer-events:none;}
.ai-fab-w .fab-ripple::before, .ai-fab-w .fab-ripple::after{content:""; position:absolute; inset:0; border-radius:50%; border:2px solid rgba(167,139,250,.65); animation:fabRipple 3s cubic-bezier(.2,.6,.35,1) infinite;}
.ai-fab-w .fab-ripple::after{animation-delay:1.5s; border-color:rgba(139,92,246,.4);}
@keyframes fabRipple{0%{transform:scale(1); opacity:.8;}100%{transform:scale(1.9); opacity:0;}}
.ai-fab-w::after{content:""; position:absolute; inset:-5px; border-radius:50%; background:radial-gradient(circle, rgba(139,92,246,.4), transparent 65%); z-index:-1; animation:aifabPulse 2.8s ease-in-out infinite;}
@keyframes aifabPulse{0%,100%{opacity:.45; transform:scale(1);}50%{opacity:1; transform:scale(1.14);}}
.ai-fab-w:hover{transform:translateY(-3px) scale(1.05); box-shadow:0 14px 34px rgba(124,58,237,.6), inset 0 1px 0 rgba(255,255,255,.28);}
.ai-fab-w svg{width:28px; height:28px; filter:drop-shadow(0 1px 2px rgba(0,0,0,.3)); animation:fabSway 4.5s ease-in-out infinite;}
@keyframes fabSway{0%,100%{transform:rotate(0);}25%{transform:rotate(-4deg);}75%{transform:rotate(4deg);}}
.ai-fab-w .badge{position:absolute; top:0; right:0; width:13px; height:13px; border-radius:50%; background:var(--bad); border:2px solid var(--bg);}
@media (prefers-reduced-motion: reduce){ .ai-fab-w .fab-ripple::before, .ai-fab-w .fab-ripple::after, .ai-fab-w .fab-bubble, .ai-fab-w svg, .ai-fab-w::after{animation:none;} }

/* AI 对话面板（玻璃拟态） */
.ai-panel{position:fixed; right:28px; bottom:96px; width:340px; max-width:calc(100vw - 40px); background:var(--glass-panel); border:1px solid var(--color-glass-border); border-radius:var(--radius-card); box-shadow:var(--shadow-lg, 0 10px 30px rgba(0,0,0,.25)), inset 0 1px 0 var(--sheen); backdrop-filter:blur(var(--primitive-blur-lg)); -webkit-backdrop-filter:blur(var(--primitive-blur-lg)); z-index:121; overflow:hidden;}
.ai-panel-h{display:flex; align-items:center; justify-content:space-between; padding:13px 16px; border-bottom:1px solid var(--line); font-weight:700; font-size:14px; background:linear-gradient(135deg, rgba(124,58,237,.14), rgba(139,92,246,.06));}
.ai-panel-h svg{width:18px; height:18px; vertical-align:-4px; color:var(--color-gradient-ai-mid);}
.ai-panel-t{font-family:var(--font-heading);}
.ai-panel-x{color:var(--sub); cursor:pointer; font-size:15px; padding:2px 6px;}
.ai-panel-body{padding:14px 16px; max-height:320px; overflow-y:auto;}
.ai-bubble{font-size:13px; line-height:1.7; background:var(--accent-weak); border-radius:var(--radius) var(--radius) var(--radius) 4px; padding:9px 12px; margin-bottom:8px; color:var(--ink);}
.ai-chips{display:flex; flex-wrap:wrap; gap:6px; margin-top:4px;}
.ai-panel-in{display:flex; align-items:center; gap:8px; padding:12px 14px; border-top:1px solid var(--line);}
.ai-panel-input{flex:1; border:1px solid var(--line); background:var(--bg); border-radius:var(--radius-control); padding:9px 12px; font-size:13px; color:var(--ink); font-family:inherit;}
.ai-panel-input:focus{outline:none; border-color:var(--accent);}
.ai-panel-mic{width:34px; height:34px; border-radius:50%; background:var(--bg); border:1px solid var(--line); display:flex; align-items:center; justify-content:center; cursor:pointer; font-size:15px;}
.ai-panel-mic .ic{width:16px; height:16px; vertical-align:baseline;}
.ai-panel-send{background:var(--accent); color:#fff; border:none; border-radius:var(--radius-control); padding:9px 14px; font-size:13px; font-weight:700; cursor:pointer;}
