/* =========================================================
   团团成长星空 · 样式表
   设计语言：深空背景 + 玻璃拟态浮层（深色玻璃）
   唯一主界面 = 全屏星空；所有功能以浮层 / 抽屉 / 模态承载
   ========================================================= */
:root{
  --bg0:#070912; --bg1:#0d1024; --bg2:#161a36;
  --glass:rgba(22,26,48,.55);
  --glass-strong:rgba(24,28,54,.86);
  --stroke:rgba(255,255,255,.12);
  --stroke-soft:rgba(255,255,255,.07);
  --txt:#eef1fb; --txt-dim:#aab0c8; --txt-faint:#717796;
  --accent:#ff7c3a; --accent2:#6ea8ff; --accent3:#b98bff;
  --ok:#5fd39a; --mid:#ffd27a; --no:#ff8a7a; --pending:#9aa2bd;
  --r:18px; --r-sm:12px;
  --shadow:0 18px 50px rgba(0,0,0,.45);
  --serif:"Noto Serif SC","Songti SC","PingFang SC","Microsoft YaHei",serif;
  --sans:"Noto Serif SC","Songti SC","PingFang SC","Microsoft YaHei",serif;
  --mono:"Noto Serif SC","Songti SC","PingFang SC","Microsoft YaHei",serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;height:100%;}
body{
  font-family:var(--sans); color:var(--txt); background:var(--bg0);
  overflow:hidden; -webkit-font-smoothing:antialiased;
}
body.galaxy-mode{
  background:
    radial-gradient(1200px 800px at 78% 18%, rgba(110,120,255,.16), transparent 60%),
    radial-gradient(1000px 760px at 16% 82%, rgba(255,124,58,.12), transparent 60%),
    radial-gradient(900px 900px at 50% 50%, #0a0d1e 0%, #06080f 70%);
}
button{font-family:inherit;cursor:pointer;color:inherit;border:none;background:none;}
input,textarea,select{font-family:inherit;color:inherit;}
::selection{background:rgba(255,124,58,.32);}
.glass{
  background:var(--glass); backdrop-filter:blur(22px) saturate(140%);
  -webkit-backdrop-filter:blur(22px) saturate(140%);
  border:1px solid var(--stroke); box-shadow:var(--shadow);
}

/* ============ 星空背景层 ============ */
#galaxy{position:fixed;inset:0;z-index:1;}
/* 彗星光标覆盖层（绘制在 galaxy 之上、UI 面板之下） */
#cometFx{position:fixed;inset:0;z-index:60;pointer-events:none;}
#galCanvas{position:absolute;inset:0;display:block;touch-action:none;}
.gal-vignette{
  position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 120% at 50% 50%, transparent 56%, rgba(4,6,14,.55) 100%);
}
.galaxy-mode .gal-title,.galaxy-mode .gal-controls,.galaxy-mode .side-panel,.galaxy-mode .ai-panel,.galaxy-mode .menu,.galaxy-mode .modal-mask{z-index:10;}

.gal-mark{position:absolute;left:26px;bottom:24px;z-index:3;pointer-events:none;}
.gal-zh{font-family:var(--serif);font-size:30px;font-weight:600;letter-spacing:2px;
  background:linear-gradient(90deg,#fff,#ffd9c2);-webkit-background-clip:text;background-clip:text;color:transparent;}
.gal-en{font-family:var(--mono);font-size:10.5px;letter-spacing:4px;color:var(--txt-faint);margin-top:2px;}

/* ---------- 拟水态阶段切换器 ---------- */
.gal-stage{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:4;
  display:flex;gap:6px;padding:6px;border-radius:999px;background:var(--glass);
  border:1px solid var(--stroke);backdrop-filter:blur(18px);box-shadow:var(--shadow);
  /* 为液体背景提供裁剪边界，保证 blob 不溢出 */
  overflow:hidden;isolation:isolate;}
.gal-stage button{position:relative;z-index:2;display:flex;align-items:center;gap:6px;padding:8px 18px;border-radius:999px;
  font-size:13.5px;color:var(--txt-dim);background:transparent;transition:color .25s ease;}
.gal-stage button.on{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.15);}
/* 液体背景 blob：由 JS 驱动位置/宽度，CSS 负责 goo 滤镜与弹性形变 */
.stage-liquid{position:absolute;top:6px;left:6px;z-index:1;height:calc(100% - 12px);width:0;border-radius:999px;opacity:0;
  background:linear-gradient(120deg,rgba(255,124,58,.92),rgba(255,140,90,.78));
  box-shadow:0 6px 18px rgba(255,124,58,.32);
  filter:url(#stageGoo);
  transform-origin:center;
  transition:transform 520ms cubic-bezier(0.34, 1.56, 0.64, 1),
             width 520ms cubic-bezier(0.34, 1.56, 0.64, 1),
             opacity .2s ease;
  will-change:transform,width;pointer-events:none;}
.stage-liquid.moving{animation:liquidMorph 520ms cubic-bezier(0.34, 1.56, 0.64, 1) both;}
@keyframes liquidMorph{
  0%{transform:scaleX(1) scaleY(1);border-radius:999px;}
  35%{transform:scaleX(1.16) scaleY(0.9);border-radius:45% 55% 55% 45% / 50% 45% 55% 50%;}
  60%{transform:scaleX(0.96) scaleY(1.06);border-radius:55% 45% 45% 55% / 55% 50% 50% 55%;}
  100%{transform:scaleX(1) scaleY(1);border-radius:999px;}
}
/* 增强按钮悬停反馈（不改变背景） */
.gal-stage button:hover{color:var(--txt);}
.gal-stage button.on:hover{color:#fff;}

.gal-hud{position:absolute;left:26px;top:92px;z-index:3;font-size:12px;line-height:1.7;color:var(--txt-dim);
  background:rgba(10,12,24,.4);border:1px solid var(--stroke-soft);border-radius:12px;padding:8px 12px;backdrop-filter:blur(10px);}
.gal-hud b{color:var(--txt);font-size:14px;}

.gal-infocard{position:absolute;right:26px;top:92px;z-index:4;width:288px;
  background:var(--glass-strong);border:1px solid var(--stroke);border-radius:14px;padding:14px 16px;
  backdrop-filter:blur(20px);box-shadow:var(--shadow);opacity:0;transform:translateY(-6px);
  transition:.18s;pointer-events:none;font-size:13px;}
.gal-infocard.show{opacity:1;transform:none;}
.gi-title{font-family:var(--serif);font-size:18px;font-weight:600;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
.gi-en{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--txt-faint);}
.gi-sub{color:var(--txt-dim);font-size:12px;margin:3px 0 8px;line-height:1.5;}
.gi-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0;border-top:1px solid var(--stroke-soft);font-size:12.5px;color:var(--txt-dim);}
.gi-row b{color:var(--txt);font-size:14px;}
.gi-row i{font-style:normal;font-size:12px;margin-left:6px;}
.gi-row i.up{color:var(--ok);} .gi-row i.down{color:var(--no);}
.gi-note{margin-top:8px;font-size:12px;line-height:1.55;color:var(--txt-dim);background:rgba(255,255,255,.05);border-radius:10px;padding:8px 10px;}
.gi-hint{margin-top:10px;font-size:11.5px;color:var(--txt-faint);}

.gal-toolbar{position:absolute;right:26px;bottom:26px;z-index:4;display:flex;flex-direction:column;gap:8px;}
.gal-toolbar button{width:42px;height:42px;border-radius:13px;background:var(--glass);border:1px solid var(--stroke);
  color:var(--txt-dim);font-size:17px;backdrop-filter:blur(16px);transition:.18s;box-shadow:var(--shadow);}
.gal-toolbar button:hover{color:var(--txt);border-color:rgba(255,124,58,.5);}
.gal-toolbar button.on{color:var(--accent);border-color:rgba(255,124,58,.55);}

.gal-legend{position:absolute;right:80px;bottom:30px;z-index:3;display:flex;flex-direction:column;gap:6px;
  font-size:11.5px;color:var(--txt-dim);background:rgba(10,12,24,.4);border:1px solid var(--stroke-soft);
  border-radius:12px;padding:10px 12px;backdrop-filter:blur(10px);}
.gal-legend .lg{display:flex;align-items:center;gap:7px;}
.gal-legend .dot{width:9px;height:9px;border-radius:50%;}
html.gal-dragging{cursor:grabbing;}

/* ============ 顶部浮层 ============ */
/* ============ 左上角标题 ============ */
.gal-title{position:fixed;top:14px;left:14px;z-index:12;display:flex;align-items:center;gap:11px;
  padding:10px 14px;border-radius:var(--r);}
.gt-mark{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;
  font-family:var(--serif);font-weight:700;font-size:19px;color:#fff;
  background:linear-gradient(135deg,var(--accent),#ff9a5a);box-shadow:0 6px 16px rgba(255,124,58,.4);}
.gt-main{font-size:16px;font-weight:600;line-height:1.15;}
.gt-main span{color:var(--accent);font-weight:600;}
.gt-sub{font-size:11.5px;color:var(--txt-dim);margin-top:1px;}
.gal-title{cursor:pointer;transition:box-shadow .15s,transform .15s;}
.gal-title:hover{box-shadow:0 0 0 1px rgba(255,124,58,.5),0 8px 22px rgba(0,0,0,.35);}
.gt-edit{margin-left:6px;font-size:13px;color:var(--accent);opacity:0;transform:translateX(-3px);transition:.15s;}
.gal-title:hover .gt-edit{opacity:.9;transform:translateX(0);}

/* ============ 右上角控制条 ============ */
.gal-controls{position:fixed;top:14px;right:14px;z-index:12;display:flex;align-items:center;gap:8px;
  padding:7px;border-radius:var(--r);}
.gc-search{position:relative;width:320px;}
.gc-search .tb-search-ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--txt-faint);}
.gc-search #searchInput{width:100%;height:38px;border-radius:12px;border:1px solid var(--stroke);
  background:rgba(10,12,24,.5);padding:0 12px 0 38px;font-size:13.5px;outline:none;transition:.18s;}
.gc-search #searchInput:focus{border-color:rgba(110,168,255,.6);background:rgba(10,12,24,.7);}
.search-results{position:absolute;top:44px;left:0;right:0;border-radius:14px;overflow:hidden;
  background:var(--glass-strong);border:1px solid var(--stroke);backdrop-filter:blur(20px);box-shadow:var(--shadow);
  display:none;max-height:60vh;overflow-y:auto;}
.search-results.show{display:block;}
.sr-item{padding:11px 14px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--stroke-soft);cursor:pointer;transition:.12s;}
.sr-item:last-child{border-bottom:none;}
.sr-item:hover{background:rgba(255,255,255,.06);}
.sr-ic{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;font-size:14px;background:rgba(255,255,255,.07);flex-shrink:0;}
.sr-tx b{font-size:13.5px;} .sr-tx i{display:block;font-style:normal;font-size:11.5px;color:var(--txt-dim);}
.sr-empty{padding:14px;text-align:center;color:var(--txt-faint);font-size:13px;}

.stage-mini{position:relative;display:flex;gap:3px;padding:4px;border-radius:11px;background:rgba(10,12,24,.5);border:1px solid var(--stroke);
  overflow:hidden;isolation:isolate;}
.stage-mini button{position:relative;z-index:2;width:34px;height:32px;border-radius:8px;font-size:15px;color:var(--txt-dim);background:transparent;transition:color .2s ease;}
.stage-mini button.on{color:#fff;}
/* .stage-mini 复用 .stage-liquid，但覆盖尺寸与圆角 */
.stage-mini .stage-liquid{top:4px;left:4px;height:calc(100% - 8px);border-radius:8px;
  background:linear-gradient(120deg,rgba(255,124,58,.9),rgba(255,140,90,.72));
  box-shadow:0 4px 12px rgba(255,124,58,.28);
  filter:url(#stageGoo);}
.stage-mini .stage-liquid.moving{animation-name:liquidMorphMini;}
@keyframes liquidMorphMini{
  0%{transform:scaleX(1) scaleY(1);border-radius:8px;}
  35%{transform:scaleX(1.1) scaleY(0.92);border-radius:45% 55% 55% 45% / 50% 45% 55% 50%;}
  60%{transform:scaleX(0.97) scaleY(1.04);border-radius:55% 45% 45% 55% / 55% 50% 50% 55%;}
  100%{transform:scaleX(1) scaleY(1);border-radius:8px;}
}
.stage-mini button:hover{color:var(--txt);}
.stage-mini button.on:hover{color:#fff;}

/* 减少动画偏好：关闭 goo 滤镜与形变，直接切换 */
@media (prefers-reduced-motion: reduce){
  .stage-liquid{transition:none !important;animation:none !important;filter:none !important;}
  .gal-stage button,.stage-mini button{transition:none !important;}
}
.icon-btn{height:42px;padding:0 14px;border-radius:12px;display:flex;align-items:center;gap:7px;
  font-size:14px;font-weight:500;color:var(--txt-dim);border:1px solid var(--stroke);background:rgba(10,12,24,.45);transition:.16s;}
.icon-btn:hover{color:var(--txt);border-color:rgba(255,124,58,.5);}
.icon-btn svg{width:18px;height:18px;}

/* ============ 右侧万能抽屉 ============ */
.side-panel{position:fixed;top:84px;right:14px;bottom:14px;width:500px;max-width:calc(100vw - 28px);
  z-index:14;border-radius:14px 14px 6px 6px;display:flex;flex-direction:column;overflow:hidden;opacity:0.80;
  transform:translateX(calc(100% + 24px));transition:transform .32s cubic-bezier(.4,0,.2,1),opacity .32s cubic-bezier(.4,0,.2,1);}
.side-panel.open{opacity:1;transform:none;}
.sp-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;
  border-bottom:1px solid var(--stroke-soft);flex-shrink:0;}
.sp-crumbs{font-size:12px;color:var(--txt-dim);display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.sp-crumbs b{color:var(--txt);font-size:14px;}
.sp-close{width:32px;height:32px;border-radius:10px;color:var(--txt-dim);font-size:16px;transition:.15s;flex-shrink:0;}
.sp-close:hover{background:rgba(255,255,255,.08);color:var(--txt);}
.sp-body{flex:1;overflow-y:auto;padding:16px;}

/* 自定义滚动条 - 玻璃拟态暗色细条，hover 显色 */
::-webkit-scrollbar{width:5px;height:5px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.10);border-radius:999px;border:1px solid rgba(255,255,255,.04);}
::-webkit-scrollbar-thumb:hover{background:rgba(255,124,58,.45);}
::-webkit-scrollbar-corner{background:transparent;}
.side-panel ::-webkit-scrollbar-thumb,.ai-panel ::-webkit-scrollbar-thumb{background:rgba(255,255,255,.08);}
.side-panel ::-webkit-scrollbar-thumb:hover,.ai-panel ::-webkit-scrollbar-thumb:hover{background:rgba(255,124,58,.5);}

/* AI 面板与抽屉共存：抽屉开时 AI 面板自动隐藏，避免页面元素过多 */
body.sp-open .ai-panel{display:none;}

/* ============ AI 浮动面板 ============ */
.ai-panel{position:fixed;top:84px;right:14px;bottom:14px;width:368px;max-width:calc(100vw - 28px);
  z-index:13;border-radius:var(--r);display:flex;flex-direction:column;overflow:hidden;transition:.32s cubic-bezier(.4,0,.2,1);}
.ai-panel.collapsed{transform:translateX(calc(100% + 24px));}
.ai-float-actions{display:flex;justify-content:flex-end;align-items:center;gap:6px;padding:8px 10px 4px;flex-shrink:0;}
.ai-min{margin-left:auto;width:30px;height:30px;border-radius:9px;color:var(--txt-dim);transition:.15s;}
.ai-min:hover{background:rgba(255,255,255,.08);color:var(--txt);}
.ai-status-chip{font-size:11px;color:var(--txt-dim);background:rgba(255,255,255,.06);border:1px solid var(--stroke-soft);
  padding:3px 9px;border-radius:999px;white-space:nowrap;}

/* 右上角常驻「AI」启动按钮：与搜索框同栏，关闭面板后仍可再次调出 */
.gc-ai{width:40px;height:38px;border-radius:11px;color:var(--txt);font-size:13px;font-weight:600;
  background:linear-gradient(135deg,rgba(255,124,58,.9),rgba(255,124,58,.7));border:1px solid rgba(255,255,255,.18);
  box-shadow:0 3px 12px rgba(255,124,58,.28);transition:.15s;flex-shrink:0;}
.gc-ai:hover{filter:brightness(1.06);transform:translateY(-1px);}
.gc-ai:active{transform:translateY(0) scale(.97);}
.gc-gesture{width:48px;height:38px;border-radius:11px;color:var(--txt);font-size:13px;font-weight:600;
  background:linear-gradient(135deg,rgba(60,200,160,.92),rgba(60,200,160,.7));border:1px solid rgba(255,255,255,.18);
  box-shadow:0 3px 12px rgba(60,200,160,.28);transition:.15s;flex-shrink:0;}
.gc-gesture:hover{filter:brightness(1.06);transform:translateY(-1px);}
.gc-gesture:active{transform:translateY(0) scale(.97);}

/* 手势控制浮层 */
.gesture-layer{position:fixed;left:14px;bottom:200px;z-index:30;width:240px;padding:12px;border-radius:16px;
  display:flex;flex-direction:column;gap:8px;background:rgba(14,18,34,.78);backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.14);box-shadow:0 10px 40px rgba(0,0,0,.45);}
.gesture-layer[hidden]{display:none;}
.gl-head{display:flex;align-items:center;justify-content:space-between;}
.gl-title{font-size:13px;font-weight:600;color:var(--txt);}
.gl-indicator{width:10px;height:10px;border-radius:50%;background:rgba(120,120,140,.6);
  transition:background .25s,box-shadow .25s;}
.gl-indicator.active{background:rgba(60,200,160,.95);box-shadow:0 0 10px rgba(60,200,160,.7);animation:gl-pulse 1.2s infinite;}
.gl-indicator.error{background:rgba(255,90,90,.95);box-shadow:0 0 10px rgba(255,90,90,.6);}
@keyframes gl-pulse{0%,100%{opacity:1;}50%{opacity:.55;}}
.gl-close{width:26px;height:26px;border-radius:8px;color:var(--txt-dim);font-size:13px;line-height:1;background:transparent;border:1px solid var(--stroke);}
.gl-close:hover{color:var(--txt);background:rgba(255,255,255,.07);}
.gl-video-wrap{position:relative;width:100%;aspect-ratio:4/3;border-radius:11px;background:#000;overflow:hidden;}
.gl-video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1);}
.gl-canvas{position:absolute;inset:0;width:100%;height:100%;transform:scaleX(-1);pointer-events:none;}
.gl-status{font-size:12px;color:#bfeede;min-height:16px;text-align:center;font-weight:500;}
.gl-hint{font-size:11px;color:var(--txt-dim);text-align:center;line-height:1.5;}
.gl-debug{font-size:10px;color:var(--txt-dim);text-align:center;line-height:1.4;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  padding:3px 6px;border-radius:6px;background:rgba(255,255,255,.03);min-height:14px;}
.ai-context{margin:12px 14px 0;padding:9px 12px;border-radius:11px;background:rgba(110,168,255,.1);
  border:1px solid rgba(110,168,255,.22);font-size:12px;color:#cfe0ff;display:flex;gap:8px;align-items:flex-start;}
.ctx-dot{width:7px;height:7px;border-radius:50%;background:var(--accent2);margin-top:4px;flex-shrink:0;}
.ai-messages{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:12px;}
.ai-quick{display:flex;flex-wrap:wrap;gap:7px;padding:0 14px 10px;}
.quick-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;
  font-size:12px;color:var(--txt-dim);background:rgba(255,255,255,.05);border:1px solid var(--stroke-soft);
  transition:.15s;}
.quick-chip:hover{color:var(--txt);background:rgba(255,124,58,.10);border-color:rgba(255,124,58,.45);}
.quick-chip:active{transform:scale(.97);}
.qc-dot{width:5px;height:5px;border-radius:50%;background:var(--accent);opacity:.7;flex-shrink:0;}
.msg{max-width:90%;}
.msg-ai{align-self:flex-start;}
.msg-user{align-self:flex-end;}
.msg-bubble{padding:10px 13px;border-radius:14px;font-size:13px;line-height:1.6;}
.msg-ai .msg-bubble{background:rgba(255,255,255,.06);border:1px solid var(--stroke-soft);border-top-left-radius:4px;}
.msg-user .msg-bubble{background:linear-gradient(135deg,var(--accent),#ff9a5a);color:#fff;border-top-right-radius:4px;}
.msg-time{font-size:10.5px;color:var(--txt-faint);margin-top:3px;text-align:right;}
.msg-ai .msg-time{text-align:left;}
.ai-composer{display:flex;align-items:flex-end;gap:8px;padding:12px 14px;border-top:1px solid var(--stroke-soft);flex-shrink:0;}
#aiInput{flex:1;resize:none;min-height:42px;max-height:120px;border-radius:12px;border:1px solid var(--stroke);
  background:rgba(10,12,24,.5);padding:11px 13px;font-size:13.5px;line-height:1.4;outline:none;}
#aiInput:focus{border-color:rgba(110,168,255,.5);}
.composer-btn{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;flex-shrink:0;transition:.15s;}
.composer-btn.send{background:linear-gradient(135deg,var(--accent),#ff9a5a);color:#fff;box-shadow:0 4px 12px rgba(255,124,58,.4);}
.composer-btn.send:hover{filter:brightness(1.08);}
/* AI 设置区与 key 输入样式已移除：Key 存于服务端 server/.env，前端免输入 */
.ai-key-status.warn{color:#e0a64a;}
.ai-set-note{font-size:10.5px;line-height:1.5;color:var(--txt-faint);margin:0;}
/* 思考中指示 */
.typing{display:inline-flex;align-items:center;gap:5px;color:var(--txt-dim);}
.typing i{width:5px;height:5px;border-radius:50%;background:var(--accent2);animation:tt-blink 1.2s infinite both;}
.typing i:nth-child(2){animation-delay:.2s;}
.typing i:nth-child(3){animation-delay:.4s;}
@keyframes tt-blink{0%,80%,100%{opacity:.25;transform:translateY(0);}40%{opacity:1;transform:translateY(-2px);}}

/* ============ AI 富文本交互（活动 / 指标 标记） ============ */
.rich-act,.rich-metric{display:inline-block;margin:6px 4px;padding:3px 10px;border-radius:3px;font-size:12.5px;line-height:1.5;
  cursor:pointer;border:1px solid transparent;transition:.15s;font-family:inherit;vertical-align:middle;}
.rich-act{color:#ffd9b0;background:rgba(255,124,58,.14);border-color:rgba(255,124,58,.4);}
.rich-act:hover{background:rgba(255,124,58,.26);transform:translateY(-1px);}
.rich-metric{color:#bcd6ff;background:rgba(90,150,255,.14);border-color:rgba(90,150,255,.4);}
.rich-metric:hover{background:rgba(90,150,255,.26);transform:translateY(-1px);}

/* 文末指标卡 */
.metric-cards{margin-top:10px;padding-top:10px;border-top:1px dashed var(--stroke-soft);}
.mc-title{font-size:11px;color:var(--txt-dim);margin-bottom:6px;letter-spacing:.04em;}
.metric-card{display:flex;align-items:center;gap:9px;width:100%;text-align:left;margin:5px 0;padding:9px 12px;border-radius:12px;
  background:rgba(255,255,255,.05);border:1px solid var(--stroke-soft);cursor:pointer;transition:.15s;color:var(--txt);font-family:inherit;}
.metric-card:hover{background:rgba(90,150,255,.14);border-color:rgba(90,150,255,.5);transform:translateX(2px);}
.mc-ico{font-size:16px;flex-shrink:0;}
.mc-body{flex:1;display:flex;flex-direction:column;gap:1px;}
.mc-lab{font-size:13px;font-weight:600;}
.mc-dom{font-size:11px;color:var(--txt-dim);}
.mc-go{font-size:11.5px;color:var(--accent2);flex-shrink:0;}

/* 活动弹窗内容 */
.ac-goal{font-size:13px;line-height:1.7;margin:0 0 12px;color:var(--txt);}
.ac-sec{margin-bottom:12px;}
.ac-sec>b{display:block;font-size:12.5px;color:var(--accent2);margin-bottom:5px;letter-spacing:.02em;}
.ac-sec ol{margin:0;padding-left:18px;}
.ac-sec li{font-size:13px;line-height:1.65;margin-bottom:4px;}
.ac-sec p{margin:0;font-size:13px;line-height:1.7;}

/* ===== 任务卡生成 Loading（星空风格） ===== */
.ac-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:14px 6px 6px;}
.ac-loading[hidden]{display:none;}
/* 旋转星环 + 中心图标 */
.ld-orb{position:relative;width:64px;height:64px;display:flex;align-items:center;justify-content:center;}
.ld-orb::before{content:'';position:absolute;inset:0;border-radius:50%;
  border:2px solid transparent;border-top-color:var(--accent);border-right-color:rgba(255,124,58,.35);
  animation:ld-spin 1.1s linear infinite;}
.ld-orb::after{content:'';position:absolute;inset:7px;border-radius:50%;
  border:2px solid transparent;border-bottom-color:var(--accent2);border-left-color:rgba(110,168,255,.35);
  animation:ld-spin-rev 1.6s linear infinite;}
.ld-orb-ico{font-size:24px;animation:ld-breathe 1.6s ease-in-out infinite;}
@keyframes ld-spin{to{transform:rotate(360deg);}}
@keyframes ld-spin-rev{to{transform:rotate(-360deg);}}
@keyframes ld-breathe{0%,100%{transform:scale(1);opacity:1;}50%{transform:scale(.82);opacity:.72;}}
/* 生成中标题 */
.ld-title{font-size:13px;color:var(--txt);font-weight:600;display:flex;align-items:center;gap:6px;}
.ld-title .ld-dots{display:inline-flex;gap:4px;}
.ld-title .ld-dots i{width:5px;height:5px;border-radius:50%;background:var(--accent);animation:tt-blink 1.2s infinite both;}
.ld-title .ld-dots i:nth-child(2){animation-delay:.2s;}
.ld-title .ld-dots i:nth-child(3){animation-delay:.4s;}
/* 骨架屏：模拟任务卡布局 */
.ld-sk{width:100%;display:flex;flex-direction:column;gap:10px;}
.ld-sk-row{height:13px;border-radius:6px;background:linear-gradient(90deg,
  rgba(255,255,255,.06) 25%,rgba(255,124,58,.16) 50%,rgba(255,255,255,.06) 75%);
  background-size:200% 100%;animation:ld-shimmer 1.5s infinite linear;}
.ld-sk-row.w60{width:60%;} .ld-sk-row.w80{width:80%;} .ld-sk-row.w45{width:45%;} .ld-sk-row.w70{width:70%;}
.ld-sk-row.lg{height:15px;}
@keyframes ld-shimmer{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
/* 底部提示 */
.ld-foot{font-size:11px;color:var(--txt-dim);letter-spacing:.04em;text-align:center;}
.ac-talk{background:rgba(255,124,58,.10);border-left:3px solid rgba(255,124,58,.5);padding:8px 11px;border-radius:8px;color:var(--txt);}

/* ============ 全局菜单 ============ */
.menu-mask{position:fixed;inset:0;z-index:20;background:rgba(4,6,14,.5);backdrop-filter:blur(3px);
  opacity:0;pointer-events:none;transition:.2s;}
.menu-mask.show{opacity:1;pointer-events:auto;}
.menu{position:fixed;top:14px;right:14px;bottom:14px;width:340px;max-width:calc(100vw - 28px);z-index:21;
  border-radius:var(--r);padding:14px;display:flex;flex-direction:column;gap:4px;overflow-y:auto;
  transform:translateX(calc(100% + 24px));transition:transform .3s cubic-bezier(.4,0,.2,1);}
.menu.open{transform:none;}
.menu-head{display:flex;align-items:center;gap:10px;padding:8px 6px 14px;}
.menu-head b{font-size:15px;}
.menu-sub{display:block;font-size:11px;color:var(--txt-dim);margin-top:1px;}
.menu-close{margin-left:auto;width:30px;height:30px;border-radius:9px;color:var(--txt-dim);font-size:15px;}
.menu-close:hover{background:rgba(255,255,255,.08);color:var(--txt);}
.menu-section{font-size:11px;letter-spacing:1px;color:var(--txt-faint);padding:12px 8px 4px;text-transform:uppercase;}
.menu-item{display:flex;align-items:center;gap:12px;padding:12px;border-radius:13px;text-align:left;transition:.15s;}
.menu-item:hover{background:rgba(255,255,255,.06);}
.mi-ic{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;font-size:18px;
  background:rgba(255,255,255,.06);flex-shrink:0;}
.mi-tx b{font-size:14px;font-weight:600;}
.mi-tx i{display:block;font-style:normal;font-size:11.5px;color:var(--txt-dim);margin-top:2px;line-height:1.4;}

/* ============ 通用组件（侧栏 / 模态内部共用） ============ */
.card{background:rgba(255,255,255,.045);border:1px solid var(--stroke-soft);border-radius:var(--r-sm);padding:14px;margin-bottom:12px;}
.card-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.card-h h3{margin:0;font-size:14px;font-weight:600;}
.card-b{font-size:13px;line-height:1.6;}
.glass-card{background:rgba(255,255,255,.045);border:1px solid var(--stroke-soft);border-radius:var(--r-sm);padding:14px;}

.btn{height:38px;padding:0 16px;border-radius:11px;font-size:13.5px;font-weight:500;color:var(--txt);
  border:1px solid var(--stroke);background:rgba(255,255,255,.05);transition:.15s;display:inline-flex;align-items:center;gap:7px;}
.btn:hover{background:rgba(255,255,255,.1);}
.btn.primary{background:linear-gradient(135deg,var(--accent),#ff9a5a);border-color:transparent;color:#fff;box-shadow:0 6px 16px rgba(255,124,58,.32);}
.btn.primary:hover{filter:brightness(1.06);}
.btn.danger{color:var(--no);border-color:rgba(255,138,122,.4);}
.btn.danger:hover{background:rgba(255,138,122,.12);}
.btn.sm{height:32px;padding:0 12px;font-size:12.5px;}
.btn.block{width:100%;justify-content:center;}

.field{margin-bottom:12px;}
.field label{display:block;font-size:12.5px;color:var(--txt-dim);margin-bottom:6px;}
.field input,.field textarea,.field select,.glass-field{width:100%;border-radius:11px;border:1px solid var(--stroke);
  background:rgba(10,12,24,.5);padding:10px 13px;font-size:13.5px;outline:none;color:var(--txt);transition:.15s;}
.field textarea{resize:vertical;min-height:74px;line-height:1.5;}
.field input:focus,.field textarea:focus,.field select:focus,.glass-field:focus{border-color:rgba(110,168,255,.55);}
.grid{display:grid;gap:12px;}
.grid.g-2{grid-template-columns:1fr 1fr;}
.grid.g-3{grid-template-columns:repeat(3,1fr);}
.grid.g-4{grid-template-columns:repeat(4,1fr);}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}
.row.mb{margin-bottom:12px;}
.mt{margin-top:12px;} .mb{margin-bottom:12px;}

.kpi{background:rgba(255,255,255,.05);border:1px solid var(--stroke-soft);border-radius:12px;padding:11px 13px;}
.kpi-v{font-size:22px;font-weight:700;font-family:var(--serif);}
.kpi-u{font-size:12px;color:var(--txt-dim);margin-left:3px;}
.kpi-l{font-size:11.5px;color:var(--txt-dim);margin-top:2px;}

.chart-wrap{background:rgba(255,255,255,.04);border:1px solid var(--stroke-soft);border-radius:12px;padding:8px 4px;}
.hint{font-size:11.5px;color:var(--txt-faint);line-height:1.55;}
.empty{padding:34px 18px;text-align:center;color:var(--txt-faint);font-size:13.5px;line-height:1.7;}
.empty .ee{display:block;font-size:30px;margin-bottom:8px;opacity:.6;}

table{width:100%;border-collapse:collapse;font-size:12.5px;}
thead th{text-align:left;color:var(--txt-dim);font-weight:600;font-size:11.5px;padding:7px 8px;border-bottom:1px solid var(--stroke);}
tbody td{padding:8px;border-bottom:1px solid var(--stroke-soft);vertical-align:top;line-height:1.5;}
tbody tr:last-child td{border-bottom:none;}
td.num,th.num{text-align:right;white-space:nowrap;}
b.up{color:var(--ok);} b.down{color:var(--no);}

.chip{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;border:1px solid var(--stroke);color:var(--txt-dim);}
.tag{display:inline-block;padding:3px 10px;border-radius:8px;font-size:11.5px;background:rgba(255,255,255,.05);border:1px solid var(--stroke-soft);color:var(--txt-dim);margin:3px 4px 3px 0;}

.lv{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid;}
.lv-ok{color:var(--ok);border-color:rgba(95,211,154,.5);background:rgba(95,211,154,.12);}
.lv-mid{color:var(--mid);border-color:rgba(255,210,122,.5);background:rgba(255,210,122,.12);}
.lv-no{color:var(--no);border-color:rgba(255,138,122,.5);background:rgba(255,138,122,.12);}
.lv-pending,.lv-untest{color:var(--pending);border-color:rgba(154,162,189,.4);background:rgba(154,162,189,.1);}

/* 段落 / 文档 */
.para{font-size:13px;line-height:1.65;color:var(--txt-dim);}
.doc{padding:4px;}
.doc h1{font-family:var(--serif);font-size:21px;margin:0 0 4px;}
.doc-sub{font-size:12px;color:var(--txt-dim);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--stroke-soft);}
.doc h2{font-size:15px;margin:18px 0 8px;color:var(--txt);padding-left:9px;border-left:3px solid var(--accent);}
.doc p{font-size:13px;line-height:1.7;color:var(--txt-dim);margin:6px 0;}
.doc ul,.doc ol{font-size:13px;line-height:1.7;color:var(--txt-dim);padding-left:20px;margin:6px 0;}
.doc .sig{margin-top:18px;text-align:right;font-size:13px;color:var(--txt);}

.dc-title{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px;}
.dc-title h3{margin:0;font-size:16px;font-family:var(--serif);}
.dc-title .sub{font-size:13px;color:var(--txt-dim);}
.spread{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.sec-t{font-size:12px;color:var(--txt-dim);margin:14px 0 8px;padding-bottom:5px;border-bottom:1px solid var(--stroke-soft);}

/* 档案文件链接 */
.files{display:flex;flex-direction:column;gap:6px;margin-top:8px;}
.file{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:10px;background:rgba(255,255,255,.04);
  border:1px solid var(--stroke-soft);text-decoration:none;color:var(--txt);font-size:12.5px;transition:.12s;}
.file:hover{background:rgba(255,255,255,.09);}
.ft{width:26px;height:26px;border-radius:7px;display:grid;place-items:center;font-size:10px;font-weight:700;color:#fff;flex-shrink:0;}
.ft.pdf{background:#e0584f;} .ft.docx{background:#3a6fe0;} .ft.xlsx{background:#2f9e54;} .ft.pptx{background:#d9792a;} .ft.doc{background:#3a6fe0;}

/* 评价记录列表 */
.note-item{background:rgba(255,255,255,.04);border:1px solid var(--stroke-soft);border-radius:12px;padding:11px 13px;margin-bottom:9px;}
.note-item .ni-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px;}
.note-item .ni-date{font-size:12px;color:var(--txt-dim);}
.note-item .ni-tx{font-size:13px;line-height:1.55;color:var(--txt);}
.note-item .ni-del{color:var(--txt-faint);font-size:13px;padding:2px 6px;border-radius:6px;}
.note-item .ni-del:hover{color:var(--no);background:rgba(255,138,122,.1);}

/* 学科卡 */
.subj-card{background:rgba(255,255,255,.045);border:1px solid var(--stroke-soft);border-radius:var(--r-sm);margin-bottom:11px;overflow:hidden;}
.subj-card .sc-head{display:flex;align-items:center;gap:11px;padding:12px 14px;cursor:pointer;transition:.12s;}
.subj-card .sc-head:hover{background:rgba(255,255,255,.05);}
.sc-ic{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:18px;color:#fff;flex-shrink:0;}
.sc-name{font-size:14.5px;font-weight:600;}
.sc-sub{font-size:11.5px;color:var(--txt-dim);}
.sc-chev{margin-left:auto;color:var(--txt-faint);transition:.2s;}
.subj-card.open .sc-chev{transform:rotate(180deg);}
.sc-body{padding:0 14px 14px;display:none;}
.subj-card.open .sc-body{display:block;}
.theme-row{padding:9px 0;border-top:1px solid var(--stroke-soft);}
.theme-row .th-name{font-size:13px;font-weight:600;margin-bottom:5px;}
.ind-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:8px;font-size:11.5px;
  background:rgba(255,255,255,.05);border:1px solid var(--stroke-soft);margin:3px 5px 3px 0;color:var(--txt-dim);
  cursor:pointer;transition:.12s;}
.ind-pill:hover{background:rgba(255,124,58,.16);border-color:var(--accent);color:var(--txt);}
.ind-pill:active{transform:scale(.97);}
.ind-pill .ip-tx{display:inline-block;}
.ind-theme{font-size:10px;line-height:1;padding:1px 6px;border-radius:6px;background:rgba(255,255,255,.08);color:var(--txt-dim);border:1px solid var(--stroke-soft);white-space:nowrap;}

/* 小学指标评价卡片（6 字段优化卡片） */
.ind-card .ind-meta{display:flex;flex-direction:column;gap:8px;margin:12px 0 4px;
  padding:12px;border-radius:var(--r-sm);background:rgba(255,255,255,.04);border:1px solid var(--stroke-soft);}
.ind-field{display:flex;gap:10px;align-items:flex-start;font-size:13px;}
.ind-field .if-k{flex:0 0 92px;color:var(--txt-dim);font-size:12px;padding-top:1px;}
.ind-field .if-v{flex:1;color:var(--txt);line-height:1.5;}
.ind-field.if-desc .if-v{color:var(--txt-dim);}
.ind-field.if-desc .if-v{max-height:140px;overflow:auto;}
/* 指标情景故事：在指标描述下方，用温润卡片呈现，帮助受众理解评价场景与表现形式 */
.ind-story{margin-top:12px;padding:13px 14px;border-radius:var(--r-sm);
  background:linear-gradient(180deg, rgba(255,124,58,.10), rgba(255,124,58,.04));
  border:1px solid rgba(255,124,58,.28);position:relative;}
.ind-story .is-h{display:flex;align-items:center;gap:7px;margin-bottom:7px;}
.ind-story .is-ic{font-size:14px;line-height:1;}
.ind-story .is-t{font-size:12.5px;font-weight:600;color:var(--accent);letter-spacing:.5px;}
.ind-story .is-body{margin:0;font-size:13px;line-height:1.72;color:#f3e7dc;}
.ind-story .is-body::before{content:"“";color:rgba(255,124,58,.55);font-size:18px;font-weight:700;margin-right:1px;}
.ind-story .is-body::after{content:"”";color:rgba(255,124,58,.55);font-size:18px;font-weight:700;margin-left:1px;}
/* 指标三级判定标准：家长可直接对照的「符合 / 较符合 / 不符合」场景化描述 */
.ind-criteria{margin-top:12px;padding:13px 14px;border-radius:var(--r-sm);
  background:rgba(255,255,255,.03);border:1px solid var(--stroke-soft);}
.ind-criteria .ic-h{display:flex;align-items:center;gap:7px;margin-bottom:9px;}
.ind-criteria .ic-ic{font-size:14px;line-height:1;}
.ind-criteria .ic-t{font-size:12.5px;font-weight:600;color:var(--txt);letter-spacing:.5px;}
.ind-criteria .ic-row{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;margin-top:7px;border-radius:var(--r-sm);
  border:1px solid var(--stroke-soft);background:rgba(255,255,255,.02);}
.ind-criteria .ic-row:first-of-type{margin-top:0;}
.ind-criteria .ic-lv{flex:0 0 64px;text-align:center;font-size:12px;font-weight:700;padding:3px 0;border-radius:999px;line-height:1.3;}
.ind-criteria .ic-tx{flex:1;font-size:12.5px;line-height:1.65;color:var(--txt-dim);}
.ind-criteria .ic-ok{border-color:rgba(95,211,154,.4);background:rgba(95,211,154,.08);}
.ind-criteria .ic-ok .ic-lv{color:#5fd39a;background:rgba(95,211,154,.16);}
.ind-criteria .ic-mid{border-color:rgba(255,196,84,.4);background:rgba(255,196,84,.07);}
.ind-criteria .ic-mid .ic-lv{color:#ffc454;background:rgba(255,196,84,.16);}
.ind-criteria .ic-no{border-color:rgba(255,107,107,.4);background:rgba(255,107,107,.07);}
.ind-criteria .ic-no .ic-lv{color:#ff6b6b;background:rgba(255,107,107,.16);}
.lp{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--txt-dim);padding:3px 0;flex-wrap:wrap;}
.lp b{color:var(--txt);font-weight:600;}
.lp-src{font-size:10px;padding:1px 7px;border-radius:999px;border:1px solid;}
.lp-src.kg{color:#9bd0ff;border-color:rgba(110,168,255,.5);background:rgba(110,168,255,.12);}
.lp-src.curr{color:#ffd27a;border-color:rgba(255,210,122,.5);background:rgba(255,210,122,.12);}
.lp-desc{width:100%;font-size:11px;color:var(--txt-dim);opacity:.85;margin-top:1px;}

/* 列表型条目（通用） */
.list-item{display:flex;align-items:center;gap:11px;padding:11px 13px;border-radius:12px;background:rgba(255,255,255,.04);
  border:1px solid var(--stroke-soft);margin-bottom:9px;cursor:pointer;transition:.12s;}
.list-item:hover{background:rgba(255,255,255,.08);}
.li-ic{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:16px;background:rgba(255,255,255,.07);flex-shrink:0;}
.li-tx{flex:1;min-width:0;}
.li-tx b{font-size:13.5px;font-weight:600;}
.li-tx i{display:block;font-style:normal;font-size:11.5px;color:var(--txt-dim);margin-top:2px;line-height:1.4;}
.li-meta{font-size:12px;color:var(--txt-dim);text-align:right;flex-shrink:0;}
.li-score{display:inline-flex;align-items:center;padding:2px 7px;border-radius:999px;font-size:11.5px;font-weight:700;border:1px solid;margin-left:6px;vertical-align:middle;}
.dom-card{align-items:flex-start;}
.dom-card .li-tx b{display:flex;align-items:center;justify-content:space-between;}
.dom-card .li-tx i{margin-top:5px;line-height:1.45;}

/* 评级选择 */
.rate-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px;align-items:center;}
.rate-btn{position:relative;padding:8px 16px;border-radius:10px;font-size:13px;border:1px solid var(--stroke);background:rgba(255,255,255,.05);color:var(--txt-dim);transition:.15s;min-width:66px;text-align:center;}
.rate-btn:hover{background:rgba(255,255,255,.12);transform:translateY(-1px);}
.rate-btn.ok{color:#6ff0b0;border-color:rgba(95,211,154,.65);background:rgba(95,211,154,.08);}
.rate-btn.mid{color:#ffe8a6;border-color:rgba(255,210,122,.65);background:rgba(255,210,122,.08);}
.rate-btn.no{color:#ffb8ae;border-color:rgba(255,138,122,.65);background:rgba(255,138,122,.08);}
.rate-btn.sel{transform:scale(1.08);z-index:1;border-width:2px;color:#fff;font-weight:700;
  background:linear-gradient(180deg,rgba(255,124,58,.55),rgba(255,124,58,.32));border-color:#ff9a6a;
  box-shadow:0 0 0 2px rgba(255,124,58,.25),0 0 18px rgba(255,124,58,.45),0 6px 18px rgba(0,0,0,.25);}
.rate-btn.sel:hover{filter:brightness(1.1);}
.rate-btn.sel::after{content:'✓';position:absolute;right:4px;top:2px;font-size:9px;opacity:.9;}

/* 指标描述：高对比度、色弱友好 */
.metric-desc{padding:10px 13px;margin:8px 0 4px;border-radius:10px;background:rgba(255,255,255,.07);
  border-left:3px solid var(--accent);color:var(--txt);font-size:13px;line-height:1.65;}
.metric-desc .md-label{display:inline-block;font-size:11px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.6px;margin-bottom:3px;}
.hint{color:#c8cde6;font-size:12px;line-height:1.6;}

/* 习惯打卡网格 */
.habit-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:8px;}
.habit-day{aspect-ratio:1;border-radius:9px;border:1px solid var(--stroke-soft);display:grid;place-items:center;font-size:12px;color:var(--txt-dim);background:rgba(255,255,255,.03);cursor:pointer;transition:.12s;}
.habit-day.d1{background:rgba(95,211,154,.22);border-color:rgba(95,211,154,.5);color:var(--ok);}
.habit-day.d2{background:rgba(255,210,122,.2);border-color:rgba(255,210,122,.5);color:var(--mid);}
.habit-row{margin-bottom:14px;}
.habit-row .hr-name{font-size:13px;font-weight:600;margin-bottom:6px;display:flex;align-items:center;gap:8px;}

/* ============ 模态框 ============ */
.modal-mask{position:fixed;inset:0;z-index:30;background:rgba(4,6,14,.6);backdrop-filter:blur(4px);
  display:flex;align-items:center;justify-content:center;padding:20px;opacity:0;pointer-events:none;transition:.2s;}
.modal-mask.show{opacity:1;pointer-events:auto;}
.modal{width:min(640px,100%);max-height:88vh;overflow-y:auto;border-radius:var(--r);padding:22px;
  transform:translateY(10px) scale(.98);transition:.2s;}
.modal-mask.show .modal{transform:none;}
.modal h2{margin:0 0 4px;font-family:var(--serif);font-size:19px;}
.modal .m-sub{font-size:12.5px;color:var(--txt-dim);margin-bottom:16px;}
.modal .m-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;}

/* ============ Toast ============ */
.toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%) translateY(20px);z-index:40;
  background:var(--glass-strong);border:1px solid var(--stroke);border-radius:12px;padding:11px 20px;font-size:13px;
  box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.25s;backdrop-filter:blur(18px);}
.toast.show{opacity:1;transform:translateX(-50%);}

/* ============ 响应式 ============ */
@media (max-width:880px){
  .gal-title{top:10px;left:10px;padding:8px 12px;}
  .gt-mark{width:32px;height:32px;font-size:16px;}
  .gt-main{font-size:14px;}
  .gal-controls{top:10px;right:10px;gap:6px;padding:6px 8px;}
  .gc-search{width:140px;}
  .gc-search #searchInput{height:34px;font-size:12.5px;padding:0 10px 0 34px;}
  .gc-search .tb-search-ic{left:10px;}
  .stage-mini button{width:30px;height:28px;font-size:14px;}
  .icon-btn{height:36px;padding:0 10px;font-size:13px;}
  .icon-btn svg{width:16px;height:16px;}
  .side-panel,.ai-panel{width:calc(100vw - 28px);top:auto;height:72vh;}
  .ai-panel{top:84px;bottom:14px;}
  body.sp-open .ai-panel{display:none;}
  .gal-hud{top:78px;}
  .gal-infocard{width:240px;top:78px;right:14px;}
  .gal-legend{display:none;}
}
@media print{
  body{overflow:visible;background:#fff;}
  #galaxy,.gal-title,.gal-controls,.side-panel,.ai-panel,.menu,.modal-mask,.toast,.gal-legend{display:none !important;}
  .modal-mask.show{display:block !important;opacity:1;pointer-events:auto;background:#fff;backdrop-filter:none;padding:0;}
  .modal{box-shadow:none;border:none;background:#fff;color:#111;width:100%;max-height:none;overflow:visible;}
  *{color:#111 !important;}
}
