/* ═══════════════════════════════════════════════════════
   Sable · Mono
   ─── Design Language ───
   · 纯黑白灰，所有"彩色"全部映射到 zinc 灰阶
   · 强调色 = 反向极色（light: 黑；dark: 白），通过 --on-accent 自动反转
   · 灰色用于过渡，避免纯黑/纯白边缘的视觉突兀
   · 玻璃面 + 中性阴影 (rgba(0,0,0,X))
   · 16–22px 圆角，宽松呼吸感保留
   ═══════════════════════════════════════════════════════ */
:root{
  --bg-0:#F2F2F2; --bg-1:#EBEBEB; --bg-2:#E0E0E0; --bg-3:#CCCCCC; --bg-4:#B3B3B3; --bg-5:#A6A6A6;
  --tx-1:#1A1A1A; --tx-2:#4D4D4D; --tx-3:#808080;
  --accent:#1A1A1A; --accent-h:#000000; --accent-dim:rgba(26,26,26,.06);
  --accent-grad:#1A1A1A;
  --accent-grad-soft:#E8E8E8;
  --glow:0 8px 28px -8px rgba(0,0,0,.14);
  --green:#1A1A1A; --red:#4D4D4D; --amber:#808080; --blue:#1A1A1A;
  --radius:12px; --radius-md:14px; --radius-lg:18px; --radius-xl:22px;
  --nav-h:64px;
  --shadow-sm:0 1px 2px rgba(0,0,0,.05);
  --shadow-md:0 6px 20px -8px rgba(0,0,0,.10);
  --shadow-lg:0 18px 48px -12px rgba(0,0,0,.16);
  --surface:rgba(242,242,242,.75);
  --surface-strong:rgba(242,242,242,.88);
  --hairline:rgba(0,0,0,.07);
  --border:#A3A3A3;
  --border-strong:#8C8C8C;
  --on-accent:#F2F2F2;
  --bar:#E0E0E0;
  --msg-quote-bg:var(--accent-dim);
  --msg-quote-border:var(--hairline);
  --msg-quote-fg:var(--tx-1);
}

/* ═══ Reset ═══ */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;overflow:hidden}
body{
  font-family:-apple-system,BlinkMacSystemFont,'Inter','SF Pro Display','PingFang SC','HarmonyOS Sans SC','Microsoft YaHei',sans-serif;
  background:var(--bg-0); color:var(--tx-1);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  letter-spacing:.005em;
}
*{scrollbar-width:none}
::-webkit-scrollbar{display:none}
/* 表单控件默认不继承字体，会掉回浏览器的系统字体（各平台不一）。多数控件已逐条写了
   font-family:inherit，这里统一兜底，避免漏写的按钮/菜单项字体和正文对不上 */
button,input,select,textarea{font-family:inherit}

/* 鼠标点击时不显示浏览器默认 focus 蓝框；键盘 Tab 仍保留 :focus-visible */
:focus:not(:focus-visible){outline:none}
*,*::before,*::after{-webkit-tap-highlight-color:transparent}
button,a,[role="button"],.btn,.btn-icon,.bottom-nav-item,.toggle,.tab-btn,.qp-toggle,.qp-item-tap,.qp-cat-cell,.qp-tab,.conv-card,.setup-module-item,.qp-qcmd-card,.send-btn,.plus-btn,.toolbar-action-btn{
  -webkit-tap-highlight-color:transparent;
  tap-highlight-color:transparent;
}

/* ═══ Utilities ═══ */
.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}
.gap-1{gap:4px}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}
.flex-1{flex:1;min-width:0;min-height:0}.shrink-0{flex-shrink:0}
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hidden{display:none!important}.w-full{width:100%}.h-full{height:100%}
.text-xs{font-size:12px}.text-sm{font-size:13px}.text-base{font-size:15px}.text-lg{font-size:18px}.text-xl{font-size:22px}
.font-medium{font-weight:500}.font-bold{font-weight:700}
.text-muted{color:var(--tx-3)}.text-secondary{color:var(--tx-2)}.text-accent{color:var(--accent)}
.coin-inline{display:inline-flex;align-items:center;gap:3px}
.coin-icon{width:1.15em;height:1.15em;vertical-align:-.2em;flex-shrink:0}

/* ═══ Buttons ═══ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:9px 18px;border:none;border-radius:var(--radius-md);
  font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;
  white-space:nowrap;letter-spacing:.01em;
  transition:transform .2s ease,box-shadow .25s ease,background .25s ease,color .2s ease,border-color .2s ease,opacity .2s;
}
.btn:active{transform:translateY(0)}
.btn-primary{background:var(--accent);color:var(--on-accent);box-shadow:var(--glow)}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 12px 32px -8px rgba(0,0,0,.25)}
.btn-primary:disabled{opacity:.45;transform:none;box-shadow:none;cursor:not-allowed}
.btn-outline{background:transparent;border:1px solid var(--border);color:var(--tx-2)}
.btn-outline:hover{background:var(--bg-1);border-color:var(--border-strong);color:var(--tx-1)}
.btn-ghost{background:transparent;color:var(--tx-2);padding:6px 12px}
.btn-ghost:hover{background:var(--accent-dim);color:var(--tx-1)}
.btn-danger{background:var(--bg-2);color:var(--tx-1);border:1px solid var(--border-strong);box-shadow:none}
.btn-danger:hover{transform:translateY(-1px);background:var(--bg-3);border-color:var(--bg-5);box-shadow:0 6px 18px -6px rgba(0,0,0,.18)}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:10px}
.btn-icon{
  width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;
  background:var(--bg-2);border:1px solid var(--border);border-radius:11px;
  color:var(--tx-2);cursor:pointer;font-family:inherit;font-size:15px;flex-shrink:0;
  transition:background .2s,color .2s,border-color .2s,transform .15s;
}
.btn-icon:hover{background:var(--bg-3);color:var(--tx-1);border-color:var(--border-strong)}
.btn-icon:active{transform:scale(.96)}

/* ═══ Input ═══ */
.input{
  width:100%;padding:11px 14px;background:var(--bg-1);
  border:1px solid var(--border);border-radius:var(--radius);
  color:var(--tx-1);font-size:14px;font-family:inherit;outline:none;
  transition:border-color .2s,box-shadow .2s,background-color .2s;
}
.input:focus{border-color:var(--accent);background-color:var(--bg-0);box-shadow:0 0 0 4px var(--accent-dim)}
.input::placeholder{color:var(--tx-3)}
textarea.input{resize:vertical;line-height:1.65}
select.input{cursor:pointer;appearance:none;-webkit-appearance:none;background-color:var(--bg-1);background-image:none;padding-right:32px}
select.input:focus{background-color:var(--bg-0);background-image:none}
.select-chevron-wrap{position:relative;display:block;width:100%}
.select-chevron-wrap::after{content:'';position:absolute;right:14px;top:50%;width:6px;height:6px;margin-top:1px;border-right:1.5px solid var(--tx-3);border-bottom:1.5px solid var(--tx-3);transform:translateY(-50%) rotate(45deg);pointer-events:none;transition:border-color .2s}
.select-chevron-wrap:focus-within::after{border-color:var(--tx-2)}

.prompt-trig-mode-row{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.prompt-trig-mode-row .form-group{margin:0}
.prompt-trig-mode-row + [data-trig-keyword-panel]{margin-top:12px}
.prompt-trig-kw-row{display:flex;gap:8px;align-items:flex-start;width:100%;max-height:140px;overflow-y:auto;overflow-x:hidden;padding:2px 0;-webkit-overflow-scrolling:touch}
.prompt-trig-kw-row .form-group{flex:1 1 0;min-width:0;margin:0}
.prompt-trig-kw-row .form-group--logic{flex:0 0 108px;max-width:108px}
.prompt-trig-kw-input{resize:none;min-height:56px;max-height:112px;overflow-y:auto;overflow-wrap:anywhere;word-break:break-word;line-height:1.45}
.prompt-trig-kw-row select.input{min-height:38px}

/* ═══ Checkbox (round, theme accent; excludes slot-toggle switches) ═══ */
input[type="checkbox"]{
  -webkit-appearance:none;appearance:none;
  width:18px;height:18px;margin:0;flex-shrink:0;
  border:1.5px solid var(--border-strong);border-radius:50%;
  background:var(--bg-0);cursor:pointer;vertical-align:middle;
  transition:background .2s ease,border-color .2s ease,box-shadow .2s ease;
}
input[type="checkbox"]:checked{
  border-color:var(--accent);background-color:var(--accent);
  background-image:var(--sable-cb-check-img,none);
  background-repeat:no-repeat;background-position:center;background-size:11px;
}
input[type="checkbox"]:focus-visible{outline:none;box-shadow:0 0 0 3px var(--accent-dim)}
input[type="checkbox"]:disabled{opacity:.45;cursor:default}

/* ═══ Badge ═══ */
.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.02em}
.badge-accent{background:var(--bg-2);color:var(--tx-1);border:1px solid var(--border)}
.badge-green,
.badge-amber,
.badge-muted,
.badge-red,
.badge-blue,
.badge-purple{background:var(--bg-2);color:var(--tx-2);border:1px solid var(--border)}

/* ═══ Toggle ═══ */
.toggle{position:relative;z-index:1;width:38px;height:22px;border-radius:11px;background:var(--bg-4);cursor:pointer;transition:background .3s;flex-shrink:0;touch-action:manipulation}
.toggle.on{background:var(--accent-grad)}
.toggle::after{content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .3s cubic-bezier(.4,.8,.2,1);box-shadow:0 2px 6px rgba(0,0,0,.18)}
.toggle.on::after{transform:translateX(16px);background:var(--on-accent)}
.toggle.disabled{opacity:.42;pointer-events:none;cursor:default}

/* ═══ Card ═══ */
.card{
  background:var(--bg-0);border:1px solid var(--border);
  border-radius:var(--radius-lg);overflow:hidden;
  box-shadow:var(--shadow-sm);
  transition:border-color .25s,box-shadow .25s,transform .25s;
}
.card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(-2px)}

/* ═══ Layout ═══ */
#app{display:flex;flex-direction:column;height:100vh;position:relative}
@supports(height:100dvh){#app{height:100dvh}}
.main{flex:1;display:flex;min-height:0;position:relative}
.page{display:none;width:100%;height:100%;flex-direction:column;overflow:hidden}
.page.active{display:flex}
.page-header{
  height:54px;display:flex;align-items:center;justify-content:space-between;
  padding:0 20px;
  background:var(--bar);
  border-bottom:1px solid var(--hairline);
  flex-shrink:0;
  position:relative;
}
.page-header > *{position:relative;z-index:1}
.page-header-title{font-size:17px;font-weight:700;letter-spacing:.005em;color:var(--tx-1);position:absolute;left:0;right:0;text-align:center;pointer-events:none;z-index:0;display:flex;align-items:center;justify-content:center;gap:6px}
.page-header-logo{filter:drop-shadow(0 2px 6px rgba(0,0,0,.18))}
.page-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}

/* ═══ Bottom Nav ═══ */
.bottom-nav{
  height:var(--nav-h);display:flex;align-items:center;justify-content:space-around;
  padding:0 8px;padding-bottom:env(safe-area-inset-bottom);flex-shrink:0;z-index:40;
  background:var(--bar);
  border-top:1px solid var(--hairline);
}
.bottom-nav-item{
  display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:6px 14px;cursor:pointer;color:var(--tx-3);border:none;background:none;
  font-family:inherit;-webkit-tap-highlight-color:transparent;
  transition:color .2s,transform .15s;
}
.bottom-nav-item:active{transform:scale(.95)}
.bottom-nav-item .nav-icon{display:flex;align-items:center;justify-content:center;line-height:1}
.bottom-nav-item .nav-label{font-size:10px;font-weight:600;letter-spacing:.02em}
.bottom-nav-item.active{color:var(--tx-1)}
.bottom-nav-item.active .nav-icon{filter:none}
.bottom-nav-item:not(.active):hover{color:var(--tx-2)}

/* ═══ Crop / Media ═══ */
.editor-av-preview img{display:block;width:100%;height:100%;object-fit:cover}
.editor-av-preview .media-crop-fill{display:block;width:100%;height:100%}
.text-crop-stage{max-width:50vw;width:100%;margin-top:8px;overflow:hidden;position:relative}
.text-crop-stage-wrap{border-radius:8px;border:1px solid var(--border);background:var(--bg-2);overflow:hidden}
.text-crop-toolbar{position:relative;z-index:2}
.text-crop-inner{position:relative;display:block;width:100%;overflow:visible}
.text-crop-inner img{display:block;width:100%;height:auto;vertical-align:top;user-select:none;-webkit-user-drag:none;border-radius:8px}
.text-crop-rect{position:absolute;box-sizing:border-box;box-shadow:0 0 0 9999px rgba(0,0,0,.45);cursor:grab;touch-action:none;border:1.5px solid #fff;border-radius:4px}
.text-crop-rect:active{cursor:grabbing}
.text-crop-handle{position:absolute;width:16px;height:16px;background:var(--accent);border:2px solid #fff;border-radius:3px;box-shadow:0 1px 4px rgba(0,0,0,.35);z-index:4;touch-action:none}
.text-crop-handle--nw{left:-8px;top:-8px;cursor:nwse-resize}
.text-crop-handle--ne{right:-8px;top:-8px;cursor:nesw-resize}
.text-crop-handle--sw{left:-8px;bottom:-8px;cursor:nesw-resize}
.text-crop-handle--se{right:-8px;bottom:-8px;cursor:nwse-resize}
.conv-avatar .media-crop-fill,.ai-av-thumb .media-crop-fill{display:block;width:100%;height:100%}
.chat-header-avatar.ai-has-img .media-crop-fill,.msg-avatar.msg-avatar--img .media-crop-fill{display:block;width:100%;height:100%}
.editor-showcase-item{position:relative;border-radius:10px;overflow:hidden;border:1px solid var(--border);flex-shrink:0}
.editor-showcase-item img{width:100%;height:100%;object-fit:cover;display:block;cursor:pointer}
#editorShowcaseThumbs{display:flex;flex-wrap:wrap;gap:6px}
#editorShowcaseThumbs .editor-showcase-item{width:calc((100% - 12px) / 3);aspect-ratio:1}
.editor-showcase-item button{position:absolute;top:4px;right:4px;width:22px;height:22px;font-size:12px;background:rgba(0,0,0,.65);color:#fff;border:none;border-radius:6px;cursor:pointer}
/* 首图封面角标；缩略图可长按拖排，故禁用图片原生拖拽与选中 */
.img-cover-tag{position:absolute;top:4px;left:4px;padding:2px 6px;border-radius:6px;background:rgba(0,0,0,.65);color:#fff;font-size:10px;font-weight:600;line-height:1.4;letter-spacing:.02em;pointer-events:none}
/* 长按要用来拖排序：图片不参与命中测试，长按落在外层格子上，不会触发选中/iOS 长按菜单 */
.editor-showcase-item,.pub-cover-img-wrap{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}
.editor-showcase-item:not(.editor-showcase-add){cursor:pointer}
.editor-showcase-item img,.pub-cover-img-wrap img{-webkit-user-drag:none;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;pointer-events:none}
.editor-showcase-add,.pub-cover-img-add{display:flex;align-items:center;justify-content:center;cursor:pointer;border:2px dashed var(--bg-4);background:var(--bg-1);color:var(--tx-3);transition:border-color .15s,color .15s}
.editor-showcase-add:hover,.pub-cover-img-add:hover{border-color:var(--accent);color:var(--accent)}

/* ═══ Store Page ═══ */
.store-header{padding:16px 20px 12px}
.store-balance{
  display:inline-flex;align-items:center;justify-content:center;
  padding:6px 14px;border-radius:999px;
  background:var(--bg-2);
  border:1px solid var(--border);
  font-size:12px;font-weight:700;color:var(--tx-1);cursor:pointer;
  letter-spacing:.02em;
  transition:transform .2s,box-shadow .2s;
}
.store-balance:hover{transform:translateY(-1px);background:var(--bg-3);box-shadow:0 6px 18px -6px rgba(0,0,0,.18)}
.store-balance .coin-icon{width:1.7em;height:1.7em}
.store-toolbar{padding:12px 16px;background:var(--bar);border-bottom:1px solid var(--hairline);flex-shrink:0}
.store-search-wrap{position:relative;margin-bottom:12px}
.store-search-wrap .store-search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:15px;color:var(--tx-3);pointer-events:none}
.store-search-input{padding-left:38px!important;border-radius:999px!important;background:var(--bg-1)!important}

/* ── Search dropdown (popular + history) ── */
.store-search-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--bg-0);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.15);z-index:200;max-height:320px;overflow-y:auto;padding:12px 14px}
.search-dd-section{margin-bottom:10px}
.search-dd-section:last-child{margin-bottom:0}
.search-dd-label{font-size:11px;font-weight:700;color:var(--tx-3);margin-bottom:6px;display:flex;align-items:center;justify-content:space-between}
.search-dd-clear{font-size:11px;font-weight:500;color:var(--accent);cursor:pointer}
.search-dd-chips{display:flex;flex-wrap:wrap;gap:6px}
.search-dd-chip{padding:5px 12px;border-radius:999px;font-size:12px;background:var(--bg-1);color:var(--tx-2);border:1px solid var(--border);cursor:pointer;transition:all .15s}
.search-dd-chip:hover{border-color:var(--accent);color:var(--tx-1)}
.search-dd-history-item{display:flex;align-items:center;justify-content:space-between;padding:6px 4px;border-radius:6px;cursor:pointer;transition:background .15s}
.search-dd-history-item:hover{background:var(--bg-1)}
.search-dd-history-text{font-size:13px;color:var(--tx-1);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.search-dd-history-del{font-size:14px;color:var(--tx-3);cursor:pointer;padding:0 4px;flex-shrink:0}
.search-dd-history-del:hover{color:var(--danger)}
.search-dd-empty{font-size:12px;color:var(--tx-3);text-align:center;padding:12px 0}

/* ── Search results overlay ── */
.search-results-overlay{position:fixed;inset:0;background:var(--bg-0);z-index:79;display:flex;flex-direction:column;overflow:hidden}
.search-results-header{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--bg-2)}
.search-results-input-wrap{flex:1;margin-bottom:0}
.search-results-tabs{display:flex;width:100%;gap:0;border-bottom:1px solid var(--bg-2);padding:0;flex-shrink:0}
.search-tab{flex:1 1 0;min-width:0;padding:12px 8px;font-size:13px;font-weight:600;color:var(--tx-3);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font-family:inherit;transition:all .15s;text-align:center}
.search-tab:hover{color:var(--tx-1)}
.search-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.search-results-overlay .store-toolbar{background:var(--bg-0)}
.search-results-body{flex:1;overflow-y:auto;padding:12px 14px}
.search-results-tab-pane{min-height:100%}
.search-results-body .store-grid{gap:12px}
.search-results-loading{text-align:center;color:var(--tx-3);padding:40px 0;font-size:13px;grid-column:1/-1;width:100%}

/* Skeleton / shimmer placeholders */
@keyframes skel-shine{
  0%{transform:translateX(-100%)}
  100%{transform:translateX(100%)}
}
.skel-block{
  display:block;
  background:var(--bg-2);
  border-radius:6px;
  position:relative;
  overflow:hidden;
}
.skel-block::after{
  content:'';
  position:absolute;
  inset:0;
  background:linear-gradient(90deg,transparent 0%,var(--bg-1) 50%,transparent 100%);
  animation:skel-shine 1.4s ease-in-out infinite;
  will-change:transform;
}
.skel-card{cursor:default;pointer-events:none}
.skel-card.store-mall-card:hover,
.skel-card.store-mall-card:focus-visible{border-color:var(--border);box-shadow:var(--shadow-sm)}
.skel-media{border-radius:0;animation-delay:.05s}
.skel-line{height:12px;margin-top:6px}
.skel-line:first-child{margin-top:0}
.skel-line--title{height:15px;width:88%}
.skel-line--sub{height:11px;width:52%}
.skel-line--price{height:14px;width:38%;margin-top:8px}
.skel-line--stat{height:10px;width:62%;margin-top:4px}
.skel-line--author{height:13px;width:36%;margin-top:0}
.skel-line--bio{height:11px;width:58%}
.skel-line--body{height:12px;width:100%;margin-top:8px}
.skel-line--body.skel-line--short{width:72%}
.skel-row{display:flex;gap:6px;align-items:center}
.skel-row--tags{margin-top:4px;min-height:18px}
.skel-row--author{gap:10px;align-items:flex-start}
.skel-row--stats{margin-top:12px;gap:14px}
.skel-chip{width:44px;height:18px;border-radius:6px;display:inline-block}
.skel-chip:nth-child(2){animation-delay:.12s}
.skel-chip:nth-child(3){animation-delay:.24s}
.skel-avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0}
.skel-pill{width:40px;height:12px;border-radius:999px}
.skel-pill:nth-child(2){animation-delay:.1s}
.skel-conv-avatar{width:100%;height:100%;border-radius:14px;display:block}
/* 骨架屏里的头像位不需要 .conv-avatar 的浅色底＋描边，否则内外圆角错位会在四角露出浅色 */
.skel-card .conv-avatar{background:transparent;border-color:transparent}
.skel-line--conv-title{height:14px;width:68%;margin-bottom:8px}
.skel-line--conv-preview{height:12px;width:44%}
.skel-line--conv-time{width:34px;height:10px;border-radius:4px}
.skel-card.conv-card:hover{background:transparent}
.skel-card:nth-child(2) .skel-conv-avatar{animation-delay:.06s}
.skel-card:nth-child(3) .skel-conv-avatar{animation-delay:.12s}
.skel-card:nth-child(4) .skel-conv-avatar{animation-delay:.18s}
.skel-card:nth-child(5) .skel-conv-avatar{animation-delay:.24s}
.skel-card:nth-child(2) .skel-media{animation-delay:.08s}
.skel-card:nth-child(3) .skel-media{animation-delay:.16s}
.skel-card:nth-child(4) .skel-media{animation-delay:.24s}
.skel-card:nth-child(5) .skel-media{animation-delay:.32s}
.store-feed-more,.search-feed-more{text-align:center;color:var(--tx-3);padding:16px 0;font-size:13px;grid-column:1/-1;width:100%}
.search-results-empty{text-align:center;color:var(--tx-3);padding:40px 0;font-size:13px}

/* ── Search user cards ── */
.search-user-list{display:flex;flex-direction:column;gap:8px}
.search-user-card{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;cursor:pointer;transition:background .15s}
.search-user-card:hover{background:var(--bg-1)}
.search-user-avatar{width:40px;height:40px;border-radius:50%;flex-shrink:0;overflow:visible;box-sizing:border-box}
.search-user-avatar.search-user-avatar--legacy{overflow:hidden}
.search-user-avatar--img{background:var(--bg-2);padding:0;border:1px solid var(--border);display:flex;align-items:center;justify-content:center}
.search-user-avatar--img img{width:100%;height:100%;object-fit:cover;display:block}
.search-user-info{flex:1;min-width:0}
.search-user-nick{font-size:14px;font-weight:600;color:var(--tx-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.search-user-uid{font-size:11px;color:var(--tx-3)}

/* ── Search post cards ── */
.search-post-list{display:flex;flex-direction:column;gap:6px}
.search-post-card{padding:10px 12px;border-radius:10px;cursor:pointer;transition:background .15s}
.search-post-card:hover{background:var(--bg-1)}
.search-post-title{font-size:14px;font-weight:600;color:var(--tx-1);margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.search-post-meta{font-size:11px;color:var(--tx-3);display:flex;gap:4px;margin-bottom:4px}
.search-post-excerpt{font-size:12px;color:var(--tx-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.store-rank-tabs{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.store-rank-tab{padding:7px 14px;border-radius:999px;font-size:12px;font-weight:600;cursor:pointer;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;transition:all .2s}
.store-rank-tab:hover{border-color:var(--accent);color:var(--tx-1)}
.store-rank-tab.active{background:var(--accent);border-color:transparent;color:var(--on-accent);box-shadow:0 4px 14px -4px rgba(0,0,0,.25)}
.store-filters{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap;align-items:center}
.store-filters-label{font-size:11px;font-weight:700;color:var(--tx-3);margin-right:4px;flex-shrink:0;letter-spacing:.08em;text-transform:uppercase}
/* 性别符号：中性灰，不做男蓝女粉这类着色 */
#profileGender{font-size:15px;font-weight:500;color:var(--tx-3);margin-left:5px;vertical-align:1px}
.pe-gender-group{display:flex;gap:8px}
.pe-gender-btn{flex:1;padding:8px 0;border-radius:var(--radius);font-size:13px;cursor:pointer;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;transition:all .2s}
.pe-gender-btn:hover{border-color:var(--accent);color:var(--tx-1)}
.pe-gender-btn.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.store-type-btn,.store-price-btn,.store-orient-btn{padding:6px 13px;border-radius:999px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;transition:all .2s}
.store-type-btn:hover,.store-price-btn:hover,.store-orient-btn:hover{border-color:var(--accent);color:var(--tx-1)}
.store-type-btn.active,.store-price-btn.active,.store-orient-btn.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent);box-shadow:0 3px 10px -3px rgba(0,0,0,.25)}
.store-tag-panel{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.store-tag-scroll{display:flex;gap:6px;flex-wrap:wrap;flex:1;min-width:0;align-items:center}
.store-tag-chip{padding:6px 13px;border-radius:999px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;transition:all .2s;white-space:nowrap}
.store-tag-chip:hover{border-color:var(--accent);color:var(--tx-1)}
.store-tag-chip.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent);box-shadow:0 3px 10px -3px rgba(0,0,0,.25)}
.store-tag-clear{margin-left:4px;padding:4px 10px;border-radius:8px;font-size:11px;font-weight:600;cursor:pointer;border:1px dashed var(--bg-4);background:transparent;color:var(--tx-3);font-family:inherit}
.store-tag-clear:hover{color:var(--accent);border-color:var(--accent)}
.store-filter-toggle{padding:6px 14px;border-radius:999px;font-size:12px;font-weight:600;cursor:pointer;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;transition:all .2s;margin-left:auto}
.store-filter-toggle:hover{border-color:var(--accent);color:var(--tx-1)}
.store-filter-dropdown{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .25s ease,opacity .2s ease}
.store-filter-dropdown.open{grid-template-rows:1fr;opacity:1}
.store-filter-dropdown-inner{overflow:hidden;padding-top:0;transition:padding .2s ease}
.store-filter-dropdown.open .store-filter-dropdown-inner{padding-top:12px}
.store-tag-chip{position:relative}
.store-tag-x{margin-left:4px;font-size:13px;opacity:.4;cursor:pointer;transition:opacity .15s}
.store-tag-x:hover{opacity:1;color:var(--red,#e53e3e)}
.store-tag-add{padding:6px 13px;border-radius:999px;font-size:12px;font-weight:600;cursor:pointer;border:1px dashed var(--bg-4);background:transparent;color:var(--tx-3);font-family:inherit;transition:all .15s;display:inline-flex;align-items:center;gap:5px;flex-shrink:0;white-space:nowrap;line-height:1.4}
.store-tag-add .tag-add-ico{font-size:14px;font-weight:600;line-height:1;margin-top:-1px}
.store-tag-add:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-dim)}
.store-tag-add-wrap{display:inline-flex;align-items:center;flex-shrink:0}
.store-tag-input{width:80px;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid var(--accent);background:var(--bg-0);color:var(--tx-1);font-family:inherit;outline:none}
.tag-picker-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
.tag-picker-card{width:100%;max-width:420px;max-height:min(70vh,560px);display:flex;flex-direction:column;background:var(--bg-0);border:1px solid var(--border);border-radius:16px;box-shadow:0 20px 60px -12px rgba(0,0,0,.4);overflow:hidden}
.tag-picker-title{padding:18px 20px 12px;font-size:15px;font-weight:700;color:var(--tx-1);border-bottom:1px solid var(--border)}
.tag-picker-search{position:relative;padding:16px 20px 12px}
.tag-picker-search-icon{position:absolute;left:32px;top:50%;transform:translateY(-50%);display:flex;color:var(--tx-3);pointer-events:none}
.tag-picker-input{width:100%;box-sizing:border-box;padding:10px 14px 10px 40px;border-radius:999px;font-size:14px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-1);font-family:inherit;outline:none;transition:border-color .15s}
.tag-picker-input:focus{border-color:var(--accent)}
.tag-picker-list{flex:1;min-height:0;overflow-y:auto;padding:6px 16px 10px;display:flex;flex-direction:column;gap:6px}
.tag-picker-row{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:10px 14px;border-radius:10px;border:1px solid transparent;background:var(--bg-1);color:var(--tx-2);font-family:inherit;font-size:13px;cursor:pointer;text-align:left;transition:all .15s}
.tag-picker-row:hover{border-color:var(--accent);color:var(--tx-1)}
.tag-picker-row.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}
.tag-picker-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tag-picker-count{flex-shrink:0;font-size:12px;font-weight:500;color:var(--tx-3)}
.tag-picker-row.active .tag-picker-count{color:var(--accent)}
.tag-picker-empty{padding:24px 14px;text-align:center;font-size:13px;color:var(--tx-3)}
.tag-picker-cancel{margin:6px 16px 16px;padding:11px;border-radius:10px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s}
.tag-picker-cancel:hover{border-color:var(--accent);color:var(--accent)}
.setup-mount-chain{min-height:36px;padding:8px;background:var(--bg-1);border:1px dashed var(--border);border-radius:var(--radius);margin-bottom:10px;display:flex;flex-direction:column;gap:6px}
.setup-mount-chip{display:flex;align-items:center;gap:6px;padding:8px 10px;background:var(--bg-0);border:1px solid var(--border);border-radius:10px;font-size:12px;width:100%;box-sizing:border-box}
.setup-mount-chip .mount-order-btn{padding:3px 8px;font-size:11px;border-radius:6px;border:1px solid var(--border);background:var(--bg-1);cursor:pointer;color:var(--tx-2);font-family:inherit;transition:.15s}
.setup-mount-chip .mount-order-btn:hover{border-color:var(--accent);color:var(--accent)}
.setup-mount-chip .mount-remove{margin-left:auto;padding:2px 6px;font-size:13px;border:none;background:none;cursor:pointer;color:var(--tx-3);transition:.15s}
.setup-mount-chip .mount-remove:hover{color:var(--red)}
.setup-text-pick-actions{display:flex;gap:6px;flex-shrink:0}
.setup-text-pick-actions button{padding:4px 8px;font-size:10px;border-radius:6px;border:1px solid var(--border);background:var(--bg-1);cursor:pointer;color:var(--tx-2);font-family:inherit}
.store-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:18px;padding:18px 20px 28px}
@media (max-width:520px){
  .store-grid{grid-template-columns:repeat(auto-fill,minmax(156px,1fr));gap:12px;padding:14px 12px 24px}
  .store-toolbar{padding:10px 12px}
  .quick-popup{width:100%}
  .msg{padding:10px 0;gap:6px}
  .msg-avatar{width:30px;height:30px}
  .msg-text{font-size:13px;line-height:1.65}
  .msg-role{font-size:10px}
  .chat-messages{padding:14px 12px}
  .settings-body{padding:20px 14px 40px}
  .theme-card-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .theme-card{padding:10px;border-radius:12px;gap:8px;min-width:0}
  .theme-card-name{font-size:12px;gap:6px;min-width:0}
  .theme-card-name>span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex-shrink:1}
  .theme-card-desc{font-size:11px;word-break:break-word;line-break:auto;overflow-wrap:anywhere}
  .theme-card-check{width:18px;height:18px;top:12px;right:12px}
  .floating-ball{width:var(--sable-float-ball-size,42px);height:var(--sable-float-ball-size,42px)}
  .page-header{padding:10px 12px}
  .page-header-title{font-size:15px}
}
.store-card{display:flex;flex-direction:column}
.store-card-header{padding:14px 14px 10px}
.store-card-footer{margin-top:auto;padding:10px 14px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.store-card-tags{display:flex;gap:4px;flex-wrap:wrap;padding:0 14px 10px}
.store-card-tags span{padding:2px 8px;background:var(--bg-2);border-radius:6px;font-size:10px;color:var(--tx-2)}
.store-price{font-size:14px;font-weight:700;color:var(--tx-1);letter-spacing:-.005em}
.store-price.paid{color:var(--tx-3);font-weight:600}

/* 商城卡片（图片 + 底部渐变 overlay） */
.store-mall-card{
  display:block;background:var(--bg-0);
  border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;
  box-shadow:var(--shadow-sm);
  cursor:pointer;
  transition:border-color .2s,box-shadow .2s;
  -webkit-tap-highlight-color:transparent;
}
.store-mall-card:hover,
.store-mall-card:focus-visible,
.store-mall-card:active{
  border-color:var(--accent);
  box-shadow:0 0 0 1px var(--accent);
}
.store-mall-card-media{position:relative;aspect-ratio:2/3;background:var(--bg-2);overflow:hidden;width:100%}
.store-mall-card-media > img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.store-mall-card-media > .media-crop-fill{position:absolute;inset:0;width:100%;height:100%}
.store-mall-card-media-empty{
  position:absolute;inset:0;z-index:0;background:var(--bg-2);color:var(--tx-3);pointer-events:none;
}
.store-mall-card-media-empty::before{
  content:'';position:absolute;inset:0;display:block;
  background:url(/logo.svg?v=3) center 40% / contain no-repeat;
}
.store-mall-card-shade{
  position:absolute;left:0;right:0;bottom:0;height:54%;z-index:1;pointer-events:none;
  background:linear-gradient(to top,rgba(0,0,0,.9) 0%,rgba(0,0,0,.55) 42%,rgba(0,0,0,.08) 78%,rgba(0,0,0,0) 100%);
}
.store-mall-card-overlay{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  padding:13px 13px 15px;display:flex;flex-direction:column;gap:6px;min-width:0;color:#fff;
}
.store-mall-card-title{
  font-size:15px;font-weight:700;line-height:1.3;color:#fff;margin:0;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  text-shadow:0 1px 3px rgba(0,0,0,.45);
}
.store-mall-card-sub{font-size:10px;font-weight:600;color:rgba(255,255,255,.72);margin-left:4px}
.store-mall-card-bundle{font-size:10px;font-weight:700;color:rgba(255,255,255,.88);margin-left:4px}
.store-mall-card-desc{
  font-size:11px;line-height:1.4;color:rgba(255,255,255,.84);margin:0;
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;
  text-shadow:0 1px 2px rgba(0,0,0,.35);
}
.store-mall-card-chips{display:flex;align-items:center;gap:5px;min-width:0;overflow:hidden;flex-wrap:nowrap}
.store-mall-card-meta-row{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;min-width:0;overflow:hidden}
.store-mall-card-type{font-size:9px!important;padding:2px 7px!important;line-height:1.3!important;flex-shrink:0;white-space:nowrap}
.store-mall-card-overlay .badge{background:rgba(255,255,255,.18)!important;color:#fff!important;border:1px solid rgba(255,255,255,.22)}
.store-mall-card-version{font-size:10px;font-weight:600;color:rgba(255,255,255,.78);text-shadow:0 1px 2px rgba(0,0,0,.35);flex-shrink:0;white-space:nowrap}
.store-mall-card-tags{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden;min-width:0;flex:1}
.store-mall-card-tags span{
  padding:2px 6px;border-radius:6px;font-size:10px;font-weight:600;flex-shrink:0;white-space:nowrap;
  background:rgba(255,255,255,.16);color:#fff;border:1px solid rgba(255,255,255,.14);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
}
.store-mall-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:4px}
.store-mall-card-price .store-price{font-size:15px;font-weight:700;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.store-mall-card-price .store-price.paid{color:rgba(255,255,255,.92);font-weight:700}
.store-mall-card-heat{font-size:11px;font-weight:700;color:rgba(255,255,255,.92);display:flex;align-items:center;gap:4px;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.store-mall-card-ribbons{position:absolute;top:8px;left:8px;right:8px;display:flex;flex-wrap:wrap;gap:4px;justify-content:flex-end;pointer-events:none;z-index:3}
.store-mall-ribbon{
  font-size:10px;font-weight:700;padding:3px 8px;border-radius:8px;
  background:rgba(255,255,255,.88);color:var(--tx-1);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
.store-mall-ribbon--trend{background:var(--accent);color:var(--on-accent)}
.store-mall-ribbon--new{background:var(--tx-1);color:var(--bg-0);box-shadow:0 2px 8px rgba(0,0,0,.18)}
.store-mall-empty{padding:60px 20px;text-align:center;color:var(--tx-3);grid-column:1/-1}
.store-mall-empty-icon{font-size:48px;opacity:.6;margin-bottom:12px;display:flex;align-items:center;justify-content:center;width:48px;height:48px;margin-left:auto;margin-right:auto;position:relative}
.store-mall-empty-icon::before{
  content:'';position:absolute;inset:0;background:url(/logo.svg?v=3) center/contain no-repeat;display:block;
}
.skel-card .store-mall-card-overlay .skel-block{background:rgba(255,255,255,.12)!important}
.skel-card .store-mall-card-overlay .skel-block::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.18),transparent)!important}

/* ═══ Wallet Page ═══ */
.wallet-hero{
  text-align:center;padding:56px 20px 36px;
  background:linear-gradient(180deg,var(--bg-1),transparent);
}
.wallet-balance{font-size:46px;font-weight:800;color:var(--tx-1);margin-bottom:6px;letter-spacing:-.02em}
.wallet-label{font-size:13px;color:var(--tx-3);letter-spacing:.1em;text-transform:uppercase;font-weight:600}
.wallet-actions{display:flex;gap:12px;justify-content:center;margin-top:28px;flex-wrap:wrap}
.wallet-card{margin:16px 20px;padding:22px;background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.wallet-card h3{font-size:14px;font-weight:700;margin-bottom:14px}
.wallet-bill-section{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
.wallet-bill-item{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;justify-content:space-between;font-size:12px;padding:9px 0;border-bottom:1px solid var(--bg-2)}
.wallet-bill-item:last-child{border-bottom:none}
.wallet-bill-amt{font-weight:700;flex-shrink:0}
.wallet-bill-amt.neg{color:var(--red)}
.wallet-bill-amt.pos{color:var(--green)}

/* ═══ Create / Editor Page ═══ */
.create-landing{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;padding:48px 20px;text-align:center}
.create-types{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;width:100%;max-width:520px}
.create-type-btn{
  padding:22px 12px;border:1px solid var(--border);border-radius:var(--radius-lg);
  background:var(--bg-0);color:var(--tx-2);cursor:pointer;text-align:center;font-family:inherit;
  box-shadow:var(--shadow-sm);
  transition:transform .25s,border-color .25s,box-shadow .25s,color .25s;
}
.create-type-btn:hover{border-color:var(--bg-5);color:var(--tx-1);box-shadow:var(--shadow-md);transform:translateY(-3px)}
.create-type-btn .ct-icon{font-size:30px;margin-bottom:8px}
.create-type-btn .ct-label{font-size:12px;font-weight:700;letter-spacing:.02em}
.draft-list{padding:12px 20px}
.draft-item{display:flex;align-items:center;gap:10px;padding:11px 14px;background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:8px;cursor:pointer;transition:.2s}
.draft-item:hover{border-color:var(--accent);box-shadow:var(--shadow-sm);transform:translateX(2px)}
.editor-layout{display:flex;height:100%;flex-direction:column}
.editor-main{flex:1;display:flex;flex-direction:column;min-width:0}
.editor-toolbar{height:48px;display:flex;align-items:center;gap:8px;padding:0 16px;border-bottom:1px solid var(--hairline);background:var(--bar);flex-shrink:0;position:relative}
.editor-toolbar > *{position:relative;z-index:1}
#editorTitle{flex:1;min-width:0;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#editorTitle svg{vertical-align:-3px;flex-shrink:0}
.editor-content{flex:1;overflow-y:auto;padding:24px 20px 40px}
.editor-form{max-width:720px;margin:0 auto}
.form-group{margin-bottom:18px}
.detail-ai-params-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;margin-bottom:18px}
.detail-ai-params-grid .form-group{margin-bottom:0}
.detail-code-fold{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:18px;overflow:hidden}
.detail-code-fold-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;background:var(--bg-2);font-size:12px;font-weight:600;color:var(--tx-2);border:none;border-bottom:1px solid transparent;cursor:pointer;font-family:inherit;letter-spacing:.02em;text-align:left}
.detail-code-fold.is-open .detail-code-fold-header{border-bottom-color:var(--border)}
.detail-code-fold-chev{font-size:10px;color:var(--tx-3);flex-shrink:0}
.detail-code-fold-body{padding:12px 14px}
.detail-code-fold .qp-collapse-wrap{margin:0}
.qp-settings-grid{padding:10px 12px;display:flex;flex-direction:column;gap:14px}
.qp-settings-section{display:flex;flex-direction:column;gap:6px}
.qp-settings-title{font-size:10px;font-weight:700;color:var(--tx-3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:2px}
.qp-settings-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.qp-settings-label{font-size:12px;color:var(--tx-2);white-space:nowrap}
.qp-settings-input{width:72px;text-align:center;font-size:12px;padding:4px 6px}
.qp-settings-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--tx-2);padding:2px 0}
.form-group label{display:block;font-size:12px;font-weight:700;color:var(--tx-2);margin-bottom:6px;letter-spacing:.02em}
.form-group .hint{font-size:11px;color:var(--tx-3);margin-top:4px;line-height:1.5}
.user-mask-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.user-mask-chip{padding:6px 12px;border-radius:999px;border:1px solid var(--border);background:var(--bg-0);color:var(--tx-2);font-size:12px;cursor:pointer;font-family:inherit;transition:.15s}
.user-mask-chip:hover{border-color:var(--accent);color:var(--tx-1)}
.user-mask-chip.active{border-color:transparent;color:var(--accent);background:var(--accent-grad-soft)}
.user-mask-exp-row{display:flex;align-items:flex-start;gap:6px;margin-bottom:8px;flex-wrap:wrap}
.publish-section{padding:24px 20px;border-top:1px solid var(--border);background:var(--bg-1)}

/* ═══ Chat Layers ═══ */
.chat-layer{display:none;width:100%;height:100%;flex-direction:column;position:relative}
.chat-layer.active{display:flex}
#page-chat .chat-layer#chatDetail.active{z-index:48}

/* Chat List */
.chat-list-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--tx-3);gap:12px;padding:40px}
.chat-list-empty .icon{font-size:52px;opacity:.4}
.conv-card{
  display:flex;align-items:center;gap:14px;padding:14px 20px;
  border-bottom:1px solid var(--hairline);cursor:pointer;
  transition:background .2s;
}
.conv-card:hover{background:var(--bg-1)}
.conv-card.pinned{background:var(--bg-1)}
.conv-card.pinned:hover{background:var(--bg-2)}
.conv-avatar{
  width:48px;height:48px;border-radius:14px;
  background:#F5F5F5;
  display:flex;align-items:center;justify-content:center;font-size:20px;
  flex-shrink:0;overflow:hidden;
  border:1px solid #E0E0E0;
  box-sizing:border-box;
  /* 背景默认铺到 border box，圆角处会从 1px 描边下溢出成四个浅色角；裁到 padding box 消除 */
  background-clip:padding-box;
}
/* 深色主题下 #E0E0E0 的描边在近黑底上是一圈白边，太扎眼；改用主题自己的描边色 */
[data-theme="dark"] .conv-avatar,
[data-theme="crimson"] .conv-avatar{border-color:var(--border)}
.conv-avatar img{width:100%;height:100%;object-fit:cover}
.conv-avatar .sable-avatar-logo,.conv-avatar img[src*="logo.svg"]{filter:none!important;object-fit:contain;width:56%;height:56%;max-width:62%;max-height:62%}
.conv-avatar.conv-avatar--empty::before{
  content:'';display:block;width:56%;height:56%;max-width:62%;max-height:62%;flex-shrink:0;
  background:url(/logo.svg?v=3) center/contain no-repeat;filter:none!important;
}
.chat-header-avatar .sable-avatar-logo,.chat-header-avatar img[src*="logo.svg"]{object-fit:contain;width:56%;height:56%;max-width:62%;max-height:62%}
.conv-info{flex:1;min-width:0}
.conv-title{font-size:14px;font-weight:600;margin-bottom:3px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conv-preview{font-size:12px;color:var(--tx-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conv-meta{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex-shrink:0}
.conv-time{font-size:10px;color:var(--tx-3)}

/* Chat Setup */
.chat-setup{overflow-y:auto;padding:24px 20px}
.setup-section{margin-bottom:26px}
.setup-section-title{font-size:11px;font-weight:700;color:var(--tx-3);margin-bottom:10px;display:flex;align-items:center;gap:8px;letter-spacing:.12em;text-transform:uppercase}
.setup-module-list{max-height:220px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-1);padding:6px}
.setup-module-item{display:flex;align-items:center;gap:10px;padding:9px 12px;transition:.15s;cursor:pointer;border:1px solid var(--border);border-radius:10px;margin-bottom:6px;background:var(--bg-0)}
.setup-module-item:hover{background:var(--bg-2);border-color:var(--bg-4)}
.setup-module-item.module-on{border-color:var(--bg-5);background:var(--accent-grad-soft)}
.setup-module-item.selected{background:var(--bg-2)}
.setup-module-item .smi-icon{font-size:18px;width:28px;text-align:center;display:flex;align-items:center;justify-content:center}
.setup-module-item .smi-icon svg{flex-shrink:0}
.setup-module-item .smi-info{flex:1;min-width:0}
.setup-module-item .smi-name{font-size:13px;font-weight:600}
.setup-module-item .smi-desc{font-size:10px;color:var(--tx-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#setupMaskList .setup-module-item,#detailMaskList .setup-module-item{cursor:default}
#setupMaskList [data-setup-mask-toggle],#detailMaskList [data-detail-mask-toggle]{cursor:pointer}
.setup-search{margin-bottom:8px}

/* Publish flow */
.pub-flow-body{padding:16px 20px;flex:1;min-height:0;overflow-y:auto}
.pub-flow-hint{margin-bottom:12px}
.pub-mod-scroll{max-height:40vh;overflow-y:auto;margin-bottom:16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-1);padding:6px}
.pub-mod-search-wrap{margin-bottom:8px}
.pub-mod-empty{padding:20px 12px;text-align:center;font-size:12px;color:var(--tx-3)}
.pub-mod-list{display:flex;flex-direction:column;gap:6px}
.pub-mod-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--bg-0);cursor:pointer;transition:border-color .15s,background .15s}
.pub-mod-item:hover{background:var(--bg-2);border-color:var(--bg-4)}
.pub-mod-item.is-selected{border-color:var(--accent);background:var(--accent-grad-soft)}
.pub-mod-icon{width:28px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.pub-mod-info{flex:1;min-width:0}
.pub-mod-name{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pub-mod-type{font-size:10px;color:var(--tx-3)}
.pub-prot-section{margin-top:4px;margin-bottom:18px}
.pub-prot-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.pub-prot-bulk{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pub-prot-hint{margin:0 0 10px}
.pub-prot-list{display:flex;flex-direction:column;gap:8px}
.pub-prot-card{border:1px solid var(--border);border-radius:10px;background:var(--bg-0);padding:12px 14px}
.pub-prot-card-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.pub-prot-card-icon{width:28px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.pub-prot-card-meta{min-width:0;flex:1}
.pub-prot-card-name{font-size:13px;font-weight:600}
.pub-prot-card-type{font-size:10px;color:var(--tx-3)}
.pub-prot-rows{display:flex;flex-direction:column;gap:6px}
.pub-prot-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:4px 0}
.pub-prot-row.is-disabled{opacity:.45}
.pub-prot-row-label{font-size:12px;color:var(--tx-2)}
.pub-consent-row input[type="checkbox"]{margin-top:3px}
.pub-tag-panel{display:flex;flex-direction:column;gap:10px}
.pub-tag-chips{display:flex;flex-wrap:wrap;gap:6px}
.pub-tag-chip{padding:6px 13px;border-radius:999px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-family:inherit;transition:all .2s;white-space:nowrap}
.pub-tag-chip:hover{border-color:var(--accent);color:var(--tx-1)}
.pub-tag-chip.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent);box-shadow:0 3px 10px -3px rgba(0,0,0,.25)}
.pub-tag-airp-orient{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--bg-1)}
.pub-tag-airp-hint{margin:0}
.pub-tag-orient-group{display:flex;flex-wrap:wrap;gap:6px}
.pub-tag-orient-btn{padding:6px 13px;border-radius:999px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid var(--border);background:var(--bg-0);color:var(--tx-2);font-family:inherit;transition:all .2s}
.pub-tag-orient-btn:hover{border-color:var(--accent);color:var(--tx-1)}
.pub-tag-orient-btn.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}

/* Chat View */
.chat-main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.chat-header{
  height:54px;display:flex;align-items:center;justify-content:space-between;
  padding:0 16px;gap:10px;flex-shrink:0;
  background:var(--bar);
  border-bottom:1px solid var(--hairline);
  position:relative;z-index:7;
}
.chat-header > *{position:relative;z-index:1}
#chatTitle,#echatTitle{position:absolute;left:48px;right:48px;text-align:center;pointer-events:none;z-index:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-header-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.chat-header-avatar{width:34px;height:34px;border-radius:10px;background:var(--accent-grad-soft);display:flex;align-items:center;justify-content:center;font-size:14px;overflow:hidden;flex-shrink:0;cursor:pointer;border:1px solid var(--border)}
.chat-header-avatar img{width:100%;height:100%;object-fit:cover}
.chat-header-avatar.ai-has-img{background:transparent;border-color:transparent}
.ai-avatar-picker-overlay{position:fixed;inset:0;z-index:72;background:rgba(0,0,0,.5);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;pointer-events:none;transition:opacity .2s ease;display:flex;align-items:flex-end;justify-content:center}
.ai-avatar-picker-overlay.open{opacity:1;pointer-events:auto}
.ai-avatar-picker-panel{width:100%;max-width:420px;max-height:78vh;overflow-y:auto;background:var(--bg-0);border-top:1px solid var(--border);border-radius:20px 20px 0 0;padding:18px 18px 24px;box-shadow:0 -12px 50px rgba(0,0,0,.25)}
.ai-avatar-picker-panel h3{margin:0 0 10px;font-size:15px;font-weight:700}
.ai-av-opt{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;margin-bottom:8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-0);cursor:pointer;text-align:left;font:inherit;color:inherit;transition:.15s}
.ai-av-opt:hover{border-color:var(--accent)}
.ai-av-opt.selected{border-color:var(--accent);background:var(--accent-grad-soft)}
.ai-av-opt .ai-av-thumb{width:42px;height:42px;border-radius:10px;background:var(--accent-grad-soft);flex-shrink:0;overflow:hidden;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:var(--accent)}
.ai-av-opt .ai-av-thumb img,.ai-av-opt .ai-av-thumb .media-crop-fill{width:100%;height:100%;object-fit:cover}
.ai-av-opt .ai-av-meta{flex:1;min-width:0}
.ai-av-opt .ai-av-meta .t{font-size:13px;font-weight:600}
.ai-av-opt .ai-av-meta .s{font-size:11px;color:var(--tx-3);margin-top:2px}
.ai-avatar-picker-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.msg-avatar.msg-avatar--img{padding:0;background:transparent!important;overflow:hidden}
.msg-avatar.msg-avatar--img img{width:100%;height:100%;object-fit:cover;display:block}
.chat-messages{flex:1;overflow-y:auto;overflow-x:hidden;padding:24px 20px}
/* 输入区浮在消息区之上：仅工具栏行透明；输入框及以下有底色 */
#chatView{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.chat-render-overlay{position:absolute;inset:0;z-index:5;background:var(--bg-0);overflow:hidden;padding:24px 20px;padding-top:62px;display:flex;flex-direction:column;justify-content:flex-end}
#chatView .chat-messages{
  flex:1;min-height:0;
  padding-bottom:max(24px,calc(var(--chat-composer-inset,100px) + 8px));
}
#chatView .chat-input-area{
  position:absolute;left:0;right:0;bottom:0;z-index:6;
  padding:10px 0 0;
  background:transparent!important;
  pointer-events:none;
}
#chatView .chat-input-area > *{pointer-events:auto}
#chatView .chat-input-toolbar{
  padding:0 16px;
  background:transparent!important;
}
#chatView .chat-composer-surface{
  padding:0 16px 16px;
  background:var(--bg-0);
  pointer-events:auto;
}
.chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--tx-3);gap:14px}
.chat-empty .icon{font-size:46px;opacity:.5}
.msg{max-width:760px;width:100%;margin:0 auto;padding:14px 0;display:flex;flex-direction:column;align-items:center;gap:8px;position:relative;box-sizing:border-box;contain:layout style}
.msg-avatar{
  width:38px;height:38px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:700;flex-shrink:0;cursor:pointer;
  box-sizing:border-box;overflow:hidden;
}
.msg-avatar.msg-avatar--img{border-radius:50%}
.msg.user .msg-avatar{background:var(--bg-2);color:var(--tx-1);border:1px solid var(--border)}
.msg.assistant .msg-avatar{background:var(--bg-2);color:var(--tx-1);border:1px solid var(--border)}
.msg-avatar.msg-avatar--default{background:#F0F0F0!important;color:#1A1A1A!important;border:1px solid #E0E0E0!important}
.msg.system .msg-avatar{background:var(--bg-2);color:var(--tx-3);font-size:10px}
.msg.system .msg-text{color:var(--tx-2)}
.msg-body{width:100%;min-width:0;max-width:100%;box-sizing:border-box;position:relative}
.msg-thinking{width:100%;min-width:0;max-width:100%;box-sizing:border-box;margin:0 0 6px 0}
.msg-thinking:empty{display:none}
.msg-role{font-size:11px;font-weight:700;color:var(--tx-3);margin-bottom:2px;display:flex;align-items:center;justify-content:center;gap:6px;letter-spacing:.04em}
.msg-floor{font-size:10px;color:var(--tx-3);opacity:.75;margin-bottom:5px;text-align:center;line-height:1.2;letter-spacing:.02em}
.msg.msg-excluded-from-prompt{opacity:.58}
.msg-prompt-eye{display:inline-flex;align-items:center;justify-content:center;width:26px;height:22px;padding:0;border:1px solid var(--border);border-radius:6px;background:none;color:var(--tx-3);cursor:pointer;transition:.15s;font-family:inherit;line-height:0}
.msg-prompt-eye:hover{color:var(--accent);border-color:var(--accent)}
.msg-prompt-eye.off{color:var(--tx-3);opacity:.65}
.prompt-exclude-panel{margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.prompt-exclude-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.prompt-exclude-title{font-size:12px;font-weight:600;color:var(--tx-1)}
.prompt-exclude-hint{margin:0 0 8px;line-height:1.4}
.prompt-exclude-list{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.prompt-exclude-empty{margin:0;padding:4px 0}
.prompt-exclude-entry{display:flex;align-items:center;flex-wrap:wrap;gap:4px;font-size:12px;color:var(--tx-2)}
.prompt-exclude-entry-label{font-weight:600;color:var(--tx-1)}
.prompt-exclude-hash{color:var(--tx-3);font-size:11px}
.prompt-exclude-mid{color:var(--tx-3);margin:0 2px}
.prompt-exclude-floor-inp{width:4.2em;padding:4px 6px;font-size:12px;text-align:center}
.prompt-exclude-del{width:24px;height:24px;font-size:14px;line-height:1;color:var(--tx-3);margin-left:auto}
.prompt-exclude-clear-all{width:100%}
.prompt-exclude-panel + .detail-code-fold{margin-top:14px}
.qp-settings-grid .prompt-exclude-panel{border-top:none;padding-top:0;margin-top:4px}
.msg-actions{display:flex;gap:6px;justify-content:center;margin-top:8px;opacity:0;transition:opacity .15s;pointer-events:none}
.msg:hover .msg-actions,.msg:focus-within .msg-actions{opacity:1;pointer-events:auto}
.msg:has(.msg-edit-area) .msg-actions{display:none}
.msg:has(.typing) .msg-actions{display:none}
.msg:has(.msg-text:not([data-stream-finalized])>.msg-stream-frozen) .msg-actions{display:none}
.chat-prelude-opening .msg-role{position:relative}
.chat-prelude-opening .msg-role .msg-actions{position:absolute;top:0;right:0;margin-top:0;opacity:1;display:flex;pointer-events:auto}
.chat-prelude-opening-nav{max-width:760px;width:100%;margin:-4px auto 12px;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;box-sizing:border-box}
.msg-actions button{background:none;border:1px solid var(--border);border-radius:6px;color:var(--tx-3);font-size:10px;padding:2px 7px;cursor:pointer;transition:.15s;font-family:inherit}
.msg-actions button:hover{color:var(--accent);border-color:var(--accent)}
.msg-regen-alt-nav{position:absolute;bottom:0;right:0;display:flex;align-items:center;gap:2px;opacity:0;transition:opacity .15s;pointer-events:none}
.msg:hover .msg-regen-alt-nav,.msg:focus-within .msg-regen-alt-nav{opacity:1;pointer-events:auto}
.msg:has(.msg-edit-area) .msg-regen-alt-nav{display:none}
.delete-mode .msg-regen-alt-nav{display:none}
.msg-regen-alt-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:none;border:1px solid var(--border);border-radius:6px;color:var(--tx-3);cursor:pointer;transition:.15s;font-family:inherit}
.msg-regen-alt-btn:hover{color:var(--accent);border-color:var(--accent)}
.msg-regen-alt-count{font-size:10px;color:var(--tx-3);min-width:28px;text-align:center;user-select:none;line-height:1}
.msg-edit-area{width:100%;min-height:60px;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;font-size:14px;line-height:1.7;color:var(--tx-1);font-family:inherit;resize:vertical;white-space:pre-wrap}
.msg-edit-area:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px var(--accent-dim)}
.msg-edit-bar{display:flex;gap:6px;margin-top:8px}
.msg-text{font-size:14px;line-height:1.75;white-space:pre-wrap;word-break:break-word;overflow-wrap:break-word;min-width:0;max-width:100%;box-sizing:border-box;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
/* 段间距：渲染时换行处的额外空隙（见 _renderInlineMarkdown 的 msg-para-gap） */
.msg-para-gap{display:block;height:.5em}
/* 对话引号 <q>：浅底圆角，与 *旁白斜体* 区分（可在设置中关闭） */
[data-quote-style="on"] .msg-text q,[data-quote-style="on"] .msg-details-body q,[data-quote-style="on"] .chat-prelude-theater .msg-text q{
  quotes:none;
  font-style:normal;
  font-weight:600;
  letter-spacing:.01em;
  color:var(--msg-quote-fg);
  background:var(--msg-quote-bg);
  padding:1px 8px;
  margin:0 1px;
  border:1px solid var(--msg-quote-border);
  border-radius:6px;
  box-decoration-break:clone;
  -webkit-box-decoration-break:clone;
}
[data-quote-style="on"] .thinking-content q{
  quotes:none;
  font-style:normal;
  font-weight:500;
  color:var(--tx-2);
  background:var(--bg-2);
  padding:1px 7px;
  margin:0 1px;
  border:1px solid var(--border);
  border-radius:5px;
  box-decoration-break:clone;
  -webkit-box-decoration-break:clone;
}
.msg-text em,.thinking-content em,.msg-details-body em{font-style:italic;color:var(--tx-2);font-weight:400}
.msg-text strong,.thinking-content strong,.msg-details-body strong{font-weight:700}
.msg-text u,.thinking-content u,.msg-details-body u{text-decoration:underline;text-underline-offset:2px}
.msg-text del,.thinking-content del,.msg-details-body del{opacity:.72;text-decoration:line-through}
.msg-text a,.thinking-content a,.msg-details-body a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}
.msg-text code.msg-md-code,.thinking-content code.msg-md-code,.msg-details-body code.msg-md-code{font-family:'SF Mono','JetBrains Mono','Cascadia Code','Fira Code',monospace;font-size:.92em;background:var(--bg-2);padding:1px 6px;border-radius:4px;border:1px solid var(--border)}
.msg-text .msg-edit-area{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}
.msg-text .code-block{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);margin:10px 0;overflow:hidden;max-width:100%;box-sizing:border-box}
.msg-text .code-block-header{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--bg-2);font-size:11px;color:var(--tx-3);border-bottom:1px solid var(--border);letter-spacing:.04em}
.msg-text .code-block pre{margin:0;padding:12px 14px;font-family:'SF Mono','JetBrains Mono','Cascadia Code','Fira Code',monospace;font-size:12.5px;line-height:1.65;overflow-x:auto;white-space:pre}
.msg-text img{max-width:100%;height:auto}
.msg-text table{max-width:100%;overflow-x:auto;display:block}
.msg-text .html-render-frame{border:none;width:100%;max-width:100%;min-height:40px;background:transparent;display:block;overflow:hidden}
.typing{display:inline-flex;align-items:center;gap:6px;line-height:1;vertical-align:middle}
.typing > span{display:block;width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0;animation:chatTypingPulse 1.2s ease-in-out infinite}
.typing > span:nth-child(2){animation-delay:.15s}
.typing > span:nth-child(3){animation-delay:.3s}
@keyframes chatTypingPulse{0%,80%,100%{opacity:.35;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}

/* Delete mode — 保留 .msg-actions 占位，避免进入/退出时消息高度变化引起滚动跳动 */
.delete-mode .msg-actions,
.delete-mode .msg:hover .msg-actions,
.delete-mode .msg:focus-within .msg-actions{visibility:hidden;pointer-events:none;opacity:0!important}
.delete-mode .msg{cursor:pointer;transition:background .15s}
.delete-mode .msg:hover{opacity:.85}
.msg.del-selected{background:rgba(255,59,48,.08)}
.msg-del-check{display:none;position:absolute;left:10px;top:14px;width:22px;height:22px;padding:0;border:2px solid var(--tx-3);border-radius:50%;background:var(--bg-2);cursor:pointer;z-index:3;box-sizing:border-box;flex-shrink:0}
.delete-mode .msg-del-check{display:flex;align-items:center;justify-content:center}
.msg-del-check.on{border-color:var(--accent);background:var(--accent)}
.msg-del-check.on::after{content:'';display:block;width:5px;height:9px;margin-top:-2px;border:solid var(--on-accent);border-width:0 2px 2px 0;transform:rotate(45deg)}
.del-confirm-btn:disabled{opacity:.45;cursor:not-allowed}
.delete-toolbar{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:10px 16px;background:var(--bg-2);border-top:1px solid var(--border);z-index:20}
.del-cancel-btn{padding:6px 16px;border:1px solid var(--border);border-radius:6px;background:var(--bg-1);color:var(--tx-2);font-size:13px;cursor:pointer;font-family:inherit}
.del-cancel-btn:hover{border-color:var(--accent);color:var(--accent)}
.del-confirm-btn{padding:6px 16px;border:none;border-radius:6px;background:#ff3b30;color:#fff;font-size:13px;cursor:pointer;font-family:inherit;font-weight:600}
.del-confirm-btn:hover{background:#d62d23}
.confirm-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:9999}
.confirm-box{background:var(--bg-2);border-radius:12px;padding:24px 28px;min-width:280px;max-width:360px;box-shadow:0 8px 32px rgba(0,0,0,.2)}
.confirm-msg{font-size:14px;color:var(--tx-1);margin:0 0 18px;line-height:1.6}
.confirm-btns{display:flex;gap:10px;justify-content:flex-end}
.confirm-cancel{padding:6px 18px;border:1px solid var(--border);border-radius:6px;background:var(--bg-1);color:var(--tx-2);font-size:13px;cursor:pointer;font-family:inherit}
.confirm-cancel:hover{border-color:var(--accent);color:var(--accent)}
.confirm-ok{padding:6px 18px;border:none;border-radius:6px;background:#ff3b30;color:#fff;font-size:13px;cursor:pointer;font-family:inherit;font-weight:600}
.confirm-ok:hover{background:#d62d23}
.thinking-block{margin:8px 0}
.thinking-toggle{display:inline-flex;align-items:center;gap:6px;padding:5px 14px;background:var(--bg-1);border:1px solid var(--border);border-radius:999px;font-size:12px;color:var(--tx-3);cursor:pointer;user-select:none;transition:background .15s,color .15s,border-color .15s;font-family:inherit}
.thinking-toggle:hover{background:var(--bg-2);color:var(--tx-2);border-color:var(--bg-4)}
.thinking-toggle .thinking-arrow{display:inline-block;transition:transform .2s;font-size:9px}
.thinking-toggle.expanded .thinking-arrow{transform:rotate(90deg)}
.thinking-content{display:none;margin:6px 0 10px;padding:12px 16px;border-radius:var(--radius);background:var(--bg-1);color:var(--tx-2);font-size:13.5px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.thinking-content.expanded{display:block}
.thinking-content .code-block{background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius);margin:8px 0;overflow:hidden}
.thinking-content .code-block-header{display:flex;align-items:center;justify-content:space-between;padding:4px 12px;background:var(--bg-2);font-size:11px;color:var(--tx-3)}
.thinking-content .code-block pre{margin:0;padding:10px 12px;font-family:'SF Mono','JetBrains Mono',monospace;font-size:12px;line-height:1.6;overflow-x:auto;white-space:pre}
.thinking-content .html-render-frame{border:none;width:100%;min-height:40px;background:transparent;display:block;overflow:hidden}
.msg-details{margin:10px 0;min-width:0;max-width:100%}
.msg-details-sum{cursor:pointer;padding:2px 0;user-select:none;list-style:none;display:block}
.msg-details-sum::-webkit-details-marker{display:none}
.msg-details-sum::before{content:'';display:inline-block;width:0;height:0;border-left:5px solid currentColor;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-right:7px;opacity:.6;vertical-align:middle;transform:rotate(0deg);transition:transform .16s ease}
.msg-details[open] .msg-details-sum::before{transform:rotate(90deg)}
.msg-details-body{padding:6px 0 2px;white-space:pre-wrap;word-break:break-word;min-width:0;max-width:100%}
.msg-details-streaming>.msg-details-sum{pointer-events:none;cursor:default;opacity:.7}
.msg-details .msg-details{margin:6px 0}
.chat-input-area{padding:10px 16px 16px;flex-shrink:0}
.chat-pending-images{display:flex;gap:8px;max-width:760px;margin:0 auto 8px;overflow-x:auto;flex-wrap:nowrap;padding:2px 16px;box-sizing:border-box}
.chat-pending-images[hidden]{display:none!important}
.chat-pending-img-wrap{position:relative;width:56px;height:56px;border-radius:8px;overflow:hidden;flex-shrink:0;border:1px solid var(--border);background:var(--bg-2);cursor:grab;touch-action:none}
.chat-pending-img-wrap--drag{opacity:.45;cursor:grabbing}
.chat-pending-img-wrap img{width:100%;height:100%;object-fit:cover;display:block;pointer-events:none;user-select:none}
.chat-pending-img-del{position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;background:rgba(0,0,0,.65);color:#fff;border:none;font-size:11px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;padding:0}
.msg-images{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.msg-images .msg-image{max-width:min(240px,100%);max-height:240px;border-radius:8px;object-fit:cover;cursor:pointer;border:1px solid var(--border)}
.msg-upload-failed{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:12px;color:var(--danger)}
.msg-upload-failed button{color:var(--danger);text-decoration:underline;background:none;border:none;cursor:pointer;padding:0;font-size:12px}
.chat-input-toolbar{
  max-width:760px;margin:0 auto 8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  background:transparent!important;
  border:none;box-shadow:none;
}
.chat-input-toolbar .badge{background:var(--bg-1);color:var(--tx-2);border:1px solid var(--border);height:28px;padding:0 12px;box-sizing:border-box}
.chat-input-box{
  max-width:760px;margin:0 auto;display:flex;align-items:flex-end;gap:8px;
  background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:8px;
  transition:border-color .2s,box-shadow .2s,background .2s;
}
.chat-input-box:focus-within{border-color:var(--bg-5);background:var(--bg-0);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent)}
.chat-input-box:has(.plus-btn.qp-open){border-color:var(--bg-4);background:var(--bg-1);box-shadow:none}
.chat-input-box:has(.plus-btn.qp-open):focus-within{border-color:var(--bg-5);background:var(--bg-1);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 8%,transparent)}
.chat-input-box textarea{flex:1;background:none;border:none;outline:none;color:var(--tx-1);font-size:14px;font-family:inherit;line-height:1.55;padding:8px 10px;resize:none;max-height:160px;min-height:24px}
.chat-input-box textarea::placeholder{color:var(--tx-3)}
.send-btn{
  width:40px;height:40px;border-radius:12px;border:none;cursor:pointer;flex-shrink:0;
  background:var(--accent);color:var(--on-accent);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 18px -4px rgba(0,0,0,.25);
  transition:transform .2s,box-shadow .2s,opacity .2s;
}
.send-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 24px -4px rgba(0,0,0,.32)}
.send-btn:disabled{opacity:.3;box-shadow:none;cursor:not-allowed}
.send-btn.prot-blocked{opacity:.3;box-shadow:none;cursor:not-allowed}
.plus-btn{
  width:40px;height:40px;border-radius:12px;border:1px solid var(--border);cursor:pointer;flex-shrink:0;
  background:var(--bg-1);color:var(--tx-2);
  display:flex;align-items:center;justify-content:center;
  transition:transform .2s,background .2s,color .2s;
}
.plus-btn:hover{background:var(--bg-2);color:var(--tx-1);transform:translateY(-1px)}
.plus-btn.qp-open{background:var(--accent-grad-soft);color:var(--accent);border-color:var(--bg-4);transform:none}
.stop-stream-btn{width:40px;height:40px;border-radius:12px;background:var(--bg-2);border:1px solid var(--border);color:var(--tx-1);font-size:12px;cursor:pointer;flex-shrink:0;display:none;align-items:center;justify-content:center;transition:.15s}
.stop-stream-btn:hover{background:var(--bg-3);color:var(--red);border-color:var(--red)}
.stop-stream-btn.visible{display:flex}
.toolbar-action-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:5px;
  height:28px;padding:0 12px;border-radius:999px;
  border:1px solid var(--border);background:var(--bg-1);
  color:var(--tx-2);font-size:11px;font-weight:600;
  cursor:pointer;white-space:nowrap;flex-shrink:0;font-family:inherit;letter-spacing:.02em;
  transition:.15s;
}
.toolbar-action-btn--search[hidden]{display:none!important}
.toolbar-action-btn--search::before{
  content:'';width:6px;height:6px;border-radius:50%;flex-shrink:0;
  background:var(--tx-3);opacity:.45;
}
.toolbar-action-btn--search.toolbar-action-btn--on::before{
  background:var(--accent);opacity:1;
}
.toolbar-action-btn:hover:not(:disabled){background:var(--bg-2);color:var(--tx-1);border-color:var(--bg-4)}
.toolbar-action-btn:disabled{opacity:.4;cursor:not-allowed}
.toolbar-action-btn--ai{background:var(--accent-grad-soft);border-color:var(--bg-4);color:var(--accent);font-weight:700}
.toolbar-action-btn--ai:hover:not(:disabled){background:var(--accent);border-color:transparent;color:var(--on-accent);box-shadow:0 4px 14px -4px rgba(0,0,0,.25)}
.toolbar-action-btn--ai[hidden]{display:none !important}

/* ═══ API Config Sheet ═══ */
.api-sheet{position:fixed;bottom:0;left:0;right:0;z-index:65;background:var(--bg-0);border-top:1px solid var(--border);border-radius:22px 22px 0 0;padding:22px;transform:translateY(100%);transition:transform .35s cubic-bezier(.22,.8,.36,1),box-shadow .35s;box-shadow:none}
.api-sheet.open{transform:translateY(0);box-shadow:0 -14px 50px rgba(0,0,0,.18)}
.api-sheet-handle{width:44px;height:5px;background:var(--bg-4);border-radius:3px;margin:0 auto 18px}
.api-sheet-overlay{position:fixed;inset:0;z-index:64;background:rgba(0,0,0,.35);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);opacity:0;pointer-events:none;transition:opacity .3s ease}
.api-sheet-overlay.open{opacity:1;pointer-events:auto}
.api-sheet-header-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.api-sheet-header-row h3{font-size:16px;font-weight:700;margin:0}
.api-sheet-subtitle{font-size:12px;color:var(--tx-3);margin:0 0 12px;line-height:1.55}
.plat-group-cards{display:grid;grid-template-columns:1fr;gap:10px}
.plat-group-card{display:flex;align-items:flex-start;gap:12px;padding:16px;border:1.5px solid var(--border);border-radius:14px;background:var(--bg-1);text-align:left;cursor:pointer;font-family:inherit;color:inherit;transition:border-color .2s,background .2s}
.plat-group-card:hover{border-color:var(--accent);background:var(--bg-2)}
.plat-group-card.active{border-color:var(--accent);background:var(--accent-dim)}
.plat-group-icon{width:40px;height:40px;border-radius:10px;object-fit:cover;flex-shrink:0}
.plat-group-icon-default{display:inline-flex;align-items:center;justify-content:center;background:var(--bg-3);font-size:20px}
.plat-group-card-body{flex:1;min-width:0}
.plat-group-card-label{font-size:15px;font-weight:600}
.plat-group-card.active .plat-group-card-label{color:var(--accent)}
.plat-group-card-desc{font-size:11px;color:var(--tx-3);margin-top:2px;word-break:break-word;white-space:normal;line-height:1.4}
.plat-group-card-count{font-size:11px;color:var(--tx-3);margin-top:2px}
.plat-group-card-arrow{font-size:18px;color:var(--tx-3);flex-shrink:0}
#apiPlatformBlock{display:flex;flex-direction:column;min-height:320px;height:66vh}
.plat-nav-viewport{position:relative;flex:1;overflow:hidden}
.plat-nav-page{position:absolute;inset:0;overflow-y:auto;transform:translateX(0);transition:transform .28s cubic-bezier(.22,.8,.36,1);will-change:transform}
.plat-nav-page--right{transform:translateX(100%);pointer-events:none}
.plat-nav-page--left{transform:translateX(-100%);pointer-events:none}
.plat-nav-page--center{transform:translateX(0);pointer-events:auto}
#platModelConfirmBtn{flex-shrink:0;margin-top:12px}
.plat-group-detail-header{display:flex;align-items:center;gap:6px;margin-bottom:12px}
.plat-group-detail-title{font-size:15px;font-weight:700;color:var(--tx-1)}
.plat-group-detail-desc{font-size:12px;color:var(--tx-3);margin:0 0 10px;line-height:1.5}
.plat-model-cards{display:grid;grid-template-columns:1fr;gap:10px}
/* align-items 必须显式写：button 的 UA 样式表可能带 align-items:flex-start（旧版 Chromium），
   列向 flex 下会让子行收缩包裹靠左，价格便顶不到右边 */
.plat-model-card{display:flex;flex-direction:column;align-items:stretch;gap:3px;padding:14px;border:1.5px solid var(--border);border-radius:12px;background:var(--bg-1);text-align:left;cursor:pointer;font-family:inherit;color:inherit;transition:border-color .2s,background .2s,box-shadow .2s}
.plat-model-card:hover{border-color:var(--accent);background:var(--bg-2)}
.plat-model-card.active{border-color:var(--accent);background:var(--accent-dim);box-shadow:0 0 0 3px var(--accent-dim)}
.plat-model-row{display:flex;align-items:flex-start;gap:10px}
.plat-model-left{flex:1;min-width:0}
.plat-model-name{font-size:14px;font-weight:600}
.plat-model-desc{font-size:11px;color:var(--tx-3);margin-top:2px;word-break:break-word;white-space:normal;line-height:1.4}
.plat-model-bottom{display:flex;align-items:center;justify-content:space-between;margin-top:8px}
.plat-model-tags{display:flex;gap:6px;flex-wrap:wrap}
.plat-tag{display:inline-flex;align-items:center;padding:2px 8px;font-size:10px;font-weight:500;border-radius:10px;line-height:1.4}
.plat-tag-rt{background:var(--bg-3);color:var(--tx-2)}
.plat-model-cost{text-align:right;flex-shrink:0}
.plat-cost-num{font-size:22px;font-weight:700;line-height:1;color:var(--tx-1)}
.plat-cost-unit{display:block;font-size:10px;color:var(--tx-3);margin-top:2px}
.plat-model-cost-usage{text-align:right}
.plat-cost-head{display:block;font-size:11px;color:var(--tx-3);margin-bottom:3px}
.plat-model-cost-usage .plat-cost-num{display:block;white-space:nowrap}
.plat-cost-sep{margin:0 4px;font-size:14px;font-weight:400;color:var(--tx-3)}
.plat-model-status{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--tx-3);flex-shrink:0}
.plat-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.plat-dot-good{background:#22c55e}
.plat-dot-warn{background:#eab308}
.plat-dot-bad{background:#ef4444}
.plat-model-card.active .plat-model-name{color:var(--accent)}
.api-custom-panel{display:none;margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}
.api-custom-panel.visible{display:block}

/* ═══ Profile Page ═══ */
.profile-page-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--hairline);background:var(--bar);flex-shrink:0;position:relative}
.profile-page-head > *{position:relative;z-index:1}
.profile-page-head-title{font-size:15px;font-weight:700;letter-spacing:.005em;color:var(--tx-1);position:absolute;left:0;right:0;text-align:center;pointer-events:none;z-index:0}
#profileWalletMenuBtn{background:transparent;border:none;border-radius:8px;color:var(--tx-2);box-shadow:none}
#profileWalletMenuBtn:hover{background:var(--bg-3);color:var(--tx-1);border:none;transform:none}
#profileWalletMenuBtn:active{transform:scale(.96)}
.profile-wallet-overlay{position:fixed;inset:0;z-index:85;background:rgba(0,0,0,.35);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);opacity:0;pointer-events:none;transition:opacity .3s ease}
.profile-wallet-overlay.open{opacity:1;pointer-events:auto}
/* 抽屉打开时屏蔽 #app 的所有点击，避免 hit-test 漏到底部 nav 之类的下层元素，
 * 触发并发的 S.router.navigate 把 URL 覆盖掉。drawer / overlay 在 #app 之外，不受影响。*/
body.wallet-drawer-open #app{pointer-events:none}
.profile-wallet-drawer{position:fixed;top:0;left:0;bottom:0;width:min(320px,90vw);z-index:86;background:var(--bg-0);border-right:1px solid var(--border);transform:translateX(-100%);transition:transform .35s cubic-bezier(.22,.8,.36,1),box-shadow .35s;box-shadow:none;overflow-y:auto;display:flex;flex-direction:column}
.profile-wallet-drawer.open{transform:translateX(0);box-shadow:14px 0 40px rgba(0,0,0,.18)}
.profile-wallet-drawer-inner{padding:24px 18px 28px;display:flex;flex-direction:column;gap:14px}
.profile-wallet-drawer-inner h3{font-size:17px;margin:0 0 6px;font-weight:700}
.wallet-sidebar-balance{font-size:34px;font-weight:800;color:var(--tx-1);letter-spacing:-.02em}
.wallet-membership-tier{margin-top:8px;font-weight:600;color:var(--tx-1);line-height:1.45}
.wallet-sidebar-link-stack{display:flex;flex-direction:column;gap:10px;width:100%;margin-top:8px}
.wallet-sidebar-link-row{display:flex;align-items:center;justify-content:space-between;width:100%;box-sizing:border-box;padding:13px 16px;margin:0;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);font-size:14px;font-weight:600;color:var(--tx-1);text-decoration:none;cursor:pointer;text-align:left;transition:.2s;-webkit-tap-highlight-color:transparent}
.wallet-sidebar-link-row:visited{color:var(--tx-1)}
.wallet-sidebar-link-row:hover{background:var(--accent-dim);border-color:var(--accent);color:var(--tx-1)}
.wallet-sidebar-link-row:active{transform:scale(.98)}

/* Profile */
.profile-hero{
  text-align:center;padding:42px 20px 28px;
  background:linear-gradient(180deg,var(--bg-1),transparent);
  border-bottom:1px solid var(--hairline);
}
.profile-avatar{width:84px;height:84px;border-radius:50%;background:var(--accent-grad-soft);display:flex;align-items:center;justify-content:center;font-size:32px;color:var(--accent);margin:0 auto 14px;overflow:hidden;border:2px solid var(--bg-0);box-shadow:0 8px 24px -6px rgba(0,0,0,.20),0 0 0 4px var(--bg-2);cursor:pointer;transition:transform .25s,box-shadow .25s}
.profile-avatar:has(> .sable-avatar-wrap){background:transparent;border:none;box-shadow:none;overflow:visible;padding:0}
.profile-avatar > .sable-avatar-wrap{width:100%;height:100%}
.profile-avatar:hover{transform:scale(1.04);box-shadow:0 12px 32px -6px rgba(0,0,0,.28),0 0 0 5px var(--bg-3)}
.profile-avatar:has(> .sable-avatar-wrap):hover{box-shadow:none}
.profile-avatar img{width:100%;height:100%;object-fit:cover}
.profile-avatar .sable-avatar-logo{width:56%;height:56%;max-width:62%;max-height:62%;object-fit:contain}
.profile-avatar:has(.sable-avatar-logo),.profile-avatar:has(.sable-avatar-wrap--default){background:var(--bg-2);color:inherit;border-color:var(--border);box-shadow:0 8px 24px -6px rgba(0,0,0,.12),0 0 0 4px var(--bg-2)}
.profile-avatar:has(> .sable-avatar-wrap):has(.sable-avatar-logo),.profile-avatar:has(> .sable-avatar-wrap--default),.profile-avatar:has(> .sable-avatar-wrap[class*="--frame-"]){background:transparent;border:none;box-shadow:none}
/* 昵称行按 flex 排：等级胶囊靠 align-items 与文字居中对齐，用 vertical-align 会偏低 */
.profile-name{display:flex;align-items:center;justify-content:center;gap:5px;font-size:20px;font-weight:700;margin-bottom:4px;letter-spacing:-.005em}
/* 性别没填时那个 span 仍是 flex 项，两侧各留一份 gap，看着像空了一大块 */
.profile-name > span:empty{display:none}
/* 胶囊外面还套了一层 span，不打平的话 flex 项是这层 span，胶囊仍按 20px 文字的基线摆，还是偏低 */
#profileLevel{display:flex;align-items:center}
/* ♀/♂ 的字形左右自带很宽的边距，20px 加粗下两侧各空出十几像素；缩小并回收一点外边距 */
#profileGender{font-size:.7em;line-height:1;margin:0 -2px}
.profile-tabs{display:flex;gap:0;border-bottom:1px solid var(--hairline);background:var(--bg-0)}
.profile-tab{flex:1;padding:14px 12px;text-align:center;font-size:13px;font-weight:600;color:var(--tx-3);cursor:pointer;border:none;background:none;font-family:inherit;border-bottom:2px solid transparent;transition:.2s;letter-spacing:.02em}
.profile-tab:hover{color:var(--tx-2)}
.profile-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.repo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;padding:18px 20px}
.repo-card{padding:16px;background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:.25s;box-shadow:var(--shadow-sm)}
.repo-card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.repo-card-top{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.repo-card-icon{font-size:20px;width:36px;height:36px;border-radius:10px;background:var(--accent-grad-soft);color:var(--accent);display:flex;align-items:center;justify-content:center}
.repo-card-name{font-size:13.5px;font-weight:700}
.repo-card-type{font-size:10px;color:var(--tx-3);letter-spacing:.06em;text-transform:uppercase}
.repo-card-desc{font-size:12px;color:var(--tx-3);line-height:1.55;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.repo-copy-badge{font-size:9px;padding:2px 6px;background:var(--accent-grad-soft);color:var(--accent);border-radius:4px;margin-left:4px;font-weight:700}

/* ═══ Plugin Root ═══ */
.sable-plugin-root{position:fixed;z-index:52;top:0;left:0;width:0;height:0;pointer-events:none}
.sable-plugin-root *{pointer-events:auto}
.sable-plugin-root.sable-plugin-fullscreen{inset:0;width:100vw;height:100vh;z-index:53;pointer-events:auto}
.sable-plugin-root.sable-plugin-chrome-inset{
  top:54px;left:0;right:0;bottom:var(--nav-h);
  width:100vw;height:calc(100vh - 54px - var(--nav-h));
  z-index:45;pointer-events:auto;box-sizing:border-box;
}

/* ═══ Floating Ball ═══ */
.floating-ball{
  position:fixed;
  bottom:var(--sable-float-ball-bottom,84px);
  right:var(--sable-float-ball-right,20px);
  left:var(--sable-float-ball-left,auto);
  top:var(--sable-float-ball-top,auto);
  z-index:60;
  width:var(--sable-float-ball-size,52px);
  height:var(--sable-float-ball-size,52px);
  border-radius:var(--sable-float-ball-radius,50%);
  background:var(--sable-float-ball-bg,#fff);
  color:var(--sable-float-ball-fg,#1a1a1a);
  font-size:var(--sable-float-ball-font-size,16px);
  display:flex;align-items:center;justify-content:center;cursor:grab;
  box-shadow:var(--sable-float-ball-shadow,none);
  border:var(--sable-float-ball-border,1px solid var(--border,rgba(0,0,0,.12)));
  transition:transform .15s;
  touch-action:none;user-select:none;
}
.floating-ball.qp-hidden{opacity:0;pointer-events:none;transform:scale(.6);transition:opacity .2s,transform .2s}
.floating-ball img{display:block}
.floating-ball:hover{border-color:var(--bg-5,rgba(0,0,0,.2))}
.floating-ball:active{cursor:grabbing}
.floating-ball.dragging{transform:scale(1.12);transition:none}

/* ═══ Create-page editor assistant（与聊天页悬浮球同款；小窗固定尺寸、短信式气泡）═══ */
#createEditor .floating-ball{z-index:62}
.editor-assist-panel .quick-popup-header{flex-shrink:0;padding:12px 14px;border-bottom:1px solid var(--border);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;background:var(--bg-1);touch-action:none;cursor:grab}
.editor-assist-panel .quick-popup-header:active{cursor:grabbing}
.editor-assist-panel.quick-popup.editor-assist-panel--widget{
  position:fixed;
  z-index:63;
  width:min(360px,calc(100vw - 20px))!important;
  height:min(520px,calc(100vh - 20px));
  max-height:calc(100vh - 20px)!important;
  max-width:calc(100vw - 20px)!important;
  flex-direction:column;
  border-radius:14px;
  border:1px solid var(--hairline);
  box-shadow:0 4px 24px rgba(0,0,0,.15);
  overflow:hidden;
}
.editor-assist-body{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--bg-1)}
.editor-assist-msgs{
  flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;
  padding:12px 10px 10px;
  display:flex;flex-direction:column;gap:8px;
  background:var(--bg-0);
}
.editor-assist-row{display:flex;width:100%;align-items:flex-end}
.editor-assist-row.user{justify-content:flex-end}
.editor-assist-row.assistant{justify-content:flex-start}
.editor-assist-bubble{
  position:relative;max-width:82%;padding:10px 14px;border-radius:18px;
  font-size:13px;line-height:1.5;word-break:break-word;white-space:pre-wrap;
  box-shadow:0 1px 2px rgba(0,0,0,.06);
}
.editor-assist-bubble.user{
  background:var(--accent);color:var(--on-accent);
  border-bottom-right-radius:4px;margin-left:24px;
}
.editor-assist-bubble.assistant{
  background:var(--bg-2);color:var(--tx-1);
  border:1px solid var(--border);border-bottom-left-radius:4px;margin-right:24px;
}
.editor-assist-bubble:has(> .typing){padding:12px 16px}
.editor-assist-bubble > .typing > span{background:var(--tx-3)}
.editor-assist-hint{
  flex-shrink:0;margin:0 10px 8px;padding:8px 10px;font-size:11px;line-height:1.45;
  color:var(--tx-3);background:var(--bg-2);border-radius:8px;border:1px dashed var(--bg-4);
}
.editor-assist-model-panel{
  flex-shrink:0;padding:10px 12px;border-bottom:1px solid var(--border);background:var(--bg-1);
}
.editor-assist-model-panel .plat-model-cards{grid-template-columns:1fr 1fr;gap:8px}
.editor-assist-model-panel .plat-model-card{padding:10px 12px}
.editor-assist-model-panel .plat-model-name{font-size:12px}
.editor-assist-model-panel .plat-model-desc{font-size:10px}
.ea-actions{display:none;margin-top:4px;gap:4px;justify-content:flex-end}
.editor-assist-bubble:hover .ea-actions{display:flex}
.ea-actions button{background:none;border:none;cursor:pointer;font-size:12px;padding:1px 4px;border-radius:4px;color:var(--tx-3);opacity:.7;transition:.15s;font-family:inherit;line-height:1}
.ea-actions button:hover{opacity:1;background:var(--bg-3);color:var(--tx-1)}
.editor-assist-bubble.user .ea-actions button{color:rgba(242,242,242,.55)}
.editor-assist-bubble.user .ea-actions button:hover{color:var(--on-accent);background:rgba(255,255,255,.12)}
.ea-edit-ta{width:100%;min-height:40px;background:var(--bg-0);border:1px solid var(--border);border-radius:6px;padding:6px 8px;font-size:13px;line-height:1.5;color:var(--tx-1);font-family:inherit;resize:vertical}
.ea-edit-bar{display:flex;gap:4px;margin-top:4px}
.ea-diff-wrap{position:relative}
.ea-diff-wrap>[data-ea-diff-hidden]{visibility:hidden}
.ea-diff-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:5;border:1px solid var(--border);border-radius:6px;overflow:auto;font-size:12px;font-family:Consolas,Monaco,'Courier New',monospace;line-height:1.5;background:var(--bg-0)}
.ea-diff-lines{padding:2px 0}
.ea-diff-line{padding:1px 8px;white-space:pre-wrap;word-break:break-all}
.ea-diff-ctx{color:var(--tx-2)}
.ea-diff-del{background:rgba(220,38,38,.12);color:#b91c1c}
.ea-diff-add{background:rgba(22,163,74,.12);color:#15803d}
[data-theme="dark"] .ea-diff-del{background:rgba(248,113,113,.13);color:#fca5a5}
[data-theme="dark"] .ea-diff-add{background:rgba(74,222,128,.13);color:#86efac}
.ea-diff-bar{display:flex;gap:4px;padding:2px 6px;justify-content:flex-end;background:transparent}
.ea-diff-accept,.ea-diff-revert{border:none;cursor:pointer;font-size:11px;padding:2px 10px;border-radius:4px;font-family:inherit;line-height:1.6;transition:.15s}
.ea-diff-accept{background:var(--accent);color:var(--on-accent)}
.ea-diff-accept:hover{opacity:.85}
.ea-diff-revert{background:var(--bg-2);color:var(--tx-2)}
.ea-diff-revert:hover{background:var(--bg-3);color:var(--tx-1)}
#createEditor{position:relative}
.diff-nav-float{position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:20;display:flex;flex-direction:column;align-items:center;gap:4px;background:var(--bg-1);border:1px solid var(--hairline);border-radius:10px;padding:6px 4px;box-shadow:0 2px 8px rgba(0,0,0,.12)}
.ea-nav-btn{width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;background:var(--bg-2);color:var(--tx-1);border:none;cursor:pointer;transition:.15s;flex-shrink:0}
.ea-nav-btn:hover{background:var(--bg-3)}
.ea-hist-btn{background:none;border:none;cursor:pointer;font-size:18px;line-height:1;padding:0 2px;color:var(--tx-1);opacity:.85;transition:.15s}
.ea-hist-btn:hover:not(:disabled){opacity:1}
.ea-hist-btn:disabled{opacity:.25;cursor:default}
.editor-assist-footer{flex-shrink:0;padding:8px 10px;border-top:1px solid var(--border);background:var(--bg-0)}
.ea-input-row{display:flex;align-items:flex-end;gap:6px}
.ea-input-row textarea{flex:1;min-height:32px;max-height:100px;resize:none;line-height:1.4;padding:6px 8px;border-radius:8px}
.ea-input-row .btn{flex-shrink:0;height:32px;padding:0 12px;border-radius:8px}

/* ═══ Quick Module Popup ═══ */
.quick-popup{
  width:100%;
  max-height:0;overflow:hidden;opacity:0;
  background:transparent;
  display:flex;flex-direction:column;
  transition:max-height .25s ease,opacity .15s ease;
}
.quick-popup.open{
  height:40vh;max-height:40vh;opacity:1;
  background:var(--sable-quick-popup-bg,var(--bg-0));
}
.qp-collapse-btn{width:28px;height:28px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--tx-2)}
.quick-popup-body{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;-webkit-overflow-scrolling:touch}
/* 标签条整体不可选：长按改名时若选中了标签文字，选区会连带把旁边的删除按钮一起选上 */
.qp-tabstrip{display:flex;align-items:center;gap:4px;padding:6px 8px;border-bottom:1px solid var(--border);overflow-x:auto;flex-shrink:0;background:var(--bg-1);-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.qp-tab-wrap{display:inline-flex;align-items:center;gap:0;border-radius:8px;border:1px solid transparent;flex-shrink:0;max-width:148px;transition:.15s}
.qp-tab-wrap.active{background:var(--accent-grad-soft);border-color:var(--bg-4)}
.qp-tab{flex:1;min-width:0;padding:5px 8px;border-radius:6px;font-size:11px;cursor:pointer;border:none;background:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit;font-family:inherit;text-align:left}
.qp-tab-wrap.active .qp-tab{font-weight:700;color:var(--accent)}
/* 改名态：外观与标签按钮完全一致，只是文字可编辑 */
.qp-tab-rename-input{outline:none;-webkit-user-select:text;user-select:text;cursor:text}
.qp-tab-x{display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:none;border-radius:5px;background:transparent;color:var(--tx-3);cursor:pointer;line-height:1;flex-shrink:0;font-family:inherit;transition:.15s}
.qp-tab-x:hover{background:var(--bg-3);color:var(--red)}
.qp-tab-add,.qp-save-btn{font-size:11px;padding:5px 9px;border-radius:6px}
.qp-scroll{flex:1;min-height:0;color:var(--tx-1);overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overflow-anchor:none}
.qp-cat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:12px}
.qp-cat-cell{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 4px;border-radius:12px;background:var(--bg-1);cursor:pointer;transition:background .15s,transform .1s}
.qp-cat-cell:hover{background:var(--bg-2)}
.qp-cat-cell:active{transform:scale(.95)}
.qp-cat-cell-icon{width:44px;height:44px;border-radius:10px;background:var(--bg-2);display:flex;align-items:center;justify-content:center;color:var(--tx-1)}
.qp-cat-cell-label{font-size:11px;font-weight:600;color:var(--tx-2);text-align:center;line-height:1.2}
.qp-cat-detail-head{display:flex;align-items:center;gap:6px;padding:10px 12px;font-size:13px;font-weight:700;color:var(--tx-1);cursor:pointer;background:var(--bg-1);border-bottom:1px solid var(--border);flex-shrink:0}
.qp-cat-detail-head:hover{background:var(--bg-2)}
.qp-cat-detail-head svg{flex-shrink:0;color:var(--tx-2)}
.qp-mod-box{border:1px solid var(--border);border-radius:12px;margin-bottom:10px;overflow:hidden;background:var(--bg-0)}
.qp-mod-box-h{padding:11px 14px;font-size:12px;font-weight:700;background:var(--bg-1);cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--tx-1);transition:background .15s}
.qp-mod-box-h:hover{background:var(--bg-2)}
.qp-mod-box-h.open{border-bottom:1px solid var(--border)}
.qp-collapse-wrap{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .25s ease,opacity .2s ease}
.qp-collapse-wrap.open{grid-template-rows:1fr;opacity:1}
.qp-collapse-inner{overflow:hidden}
.qp-mod-box-b{max-height:240px;overflow-y:auto;padding:10px;background:var(--bg-0)}
.qp-cat-detail>.qp-mod-box-b,.qp-scroll>.qp-mod-box-b[data-qp-cat-wrap]{max-height:none}
.qp-slide-left{animation:qpSlideLeft .22s ease both}
.qp-slide-right{animation:qpSlideRight .22s ease both}
@keyframes qpSlideLeft{from{transform:translateX(30%);opacity:0}to{transform:translateX(0);opacity:1}}
@keyframes qpSlideRight{from{transform:translateX(-30%);opacity:0}to{transform:translateX(0);opacity:1}}
.qp-subacc{border:1px solid var(--border);border-radius:10px;margin-bottom:8px;overflow:hidden;background:var(--bg-0)}
.qp-subacc-h{padding:9px 12px;font-size:11px;font-weight:600;background:var(--bg-1);cursor:pointer;display:flex;align-items:center;gap:8px;color:var(--tx-1)}
.qp-subacc-b{padding:10px;max-height:200px;overflow-y:auto;font-size:11px;color:var(--tx-2)}
.qp-row{display:flex;align-items:flex-start;gap:10px;padding:9px 0;border-bottom:1px solid var(--border)}
.qp-row:last-child{border-bottom:none}
.qp-toggle{width:40px;height:22px;border-radius:11px;background:var(--bg-4);flex-shrink:0;position:relative;cursor:pointer;border:none;box-sizing:border-box;transition:background .3s}
.qp-toggle.on{background:var(--accent-grad)}
.qp-toggle::after{content:'';position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:2px;left:2px;transition:transform .3s cubic-bezier(.4,.8,.2,1);box-shadow:0 2px 5px rgba(0,0,0,.2)}
.qp-toggle.on::after{background:var(--on-accent)}
.qp-toggle.on::after{transform:translateX(17px)}
.qp-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.qp-mini{font-size:10px;color:var(--tx-3);line-height:1.4}
.qp-item-head{display:flex;align-items:center;gap:10px;width:100%;min-height:34px}
.qp-detail-item.qp-group-off .qp-item-tap,
.qp-detail-item.qp-parent-off .qp-item-tap{opacity:.78}
.qp-detail-item.qp-group-off .qp-item-title,
.qp-detail-item.qp-parent-off .qp-item-title{color:var(--tx-3)}
.qp-parent-off-zone{opacity:.88}
.qp-parent-off-hint{display:block;font-size:10px;line-height:1.3;color:var(--tx-4);margin-top:1px}
.qp-detail-item.qp-group-off .qp-toggle,
.qp-detail-item.qp-parent-off .qp-toggle{opacity:1}
.qp-item-tap{flex:1;min-width:0;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 6px;border-radius:6px;transition:background .15s}
.qp-item-tap-main{flex:1;min-width:0}
.qp-item-tap:hover{background:var(--bg-1)}
.qp-item-title{font-size:12px;font-weight:600;color:var(--tx-1);line-height:1.4}
.qp-chev{font-size:10px;color:var(--tx-3);flex-shrink:0;min-width:14px;text-align:center;transition:transform .2s ease-out}
.qp-detail-body{padding:6px 0 4px 50px}
.qp-detail-body.qp-nested{padding-left:8px;padding-right:8px}
/* 指令卡沿用总览分类格子（.qp-cat-cell）的观感：同样的圆角底色、同样的 11px/600/--tx-2 标签。
   但指令名比分类名长，排 3 列给字留出宽度，图标也随之放大到 52px */
.qp-qcmd-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:12px 0}
.qp-qcmd-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 6px;border:none;border-radius:12px;background:var(--bg-1);cursor:pointer;text-align:center;font-family:inherit;transition:background .15s,transform .1s}
.qp-qcmd-card:hover{background:var(--bg-2)}
.qp-qcmd-card:active{transform:scale(.95)}
.qp-qcmd-icon{width:52px;height:52px;border-radius:12px;background:var(--bg-2);display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;color:var(--tx-1)}
.qp-qcmd-icon img{width:100%;height:100%;object-fit:cover}
.qp-qcmd-icon-lg{width:56px;height:56px}
.qp-qcmd-title{width:100%;font-size:11px;font-weight:600;color:var(--tx-2);text-align:center;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qp-qcmd-empty{font-size:12px;color:var(--tx-3);text-align:center;padding:28px 0}
.msg-protected-tag{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:var(--tx-3)}
.qp-toggle-spacer{width:40px;height:22px;flex-shrink:0}
.qp-detail-item{border-bottom:1px solid var(--border);padding-bottom:6px;margin-bottom:4px}
.qp-detail-item:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}
.qp-preset-card{border:1px solid var(--border);border-radius:10px;margin-bottom:8px;overflow:hidden;background:var(--bg-1)}
.qp-preset-card .qp-subacc-b{background:var(--bg-0)}
.qp-readonly-prompt{width:100%;max-height:160px;overflow-y:auto;font-size:12px;line-height:1.5;padding:9px 11px;border-radius:8px;border:1px solid var(--border);background:var(--bg-2);color:var(--tx-2);white-space:pre-wrap;word-break:break-word;box-sizing:border-box;font-family:inherit}
.qp-edit-ta{width:100%;min-height:60px;font-size:12px;line-height:1.5;padding:9px 11px;border-radius:8px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-1);resize:vertical;font-family:inherit;box-sizing:border-box;transition:.15s}
.qp-edit-ta::placeholder{color:var(--tx-3)}
.qp-edit-ta:focus{border-color:var(--accent);outline:none;background:var(--bg-0);box-shadow:0 0 0 3px var(--accent-dim)}
input.qp-mask-input{min-height:0;padding:4px 8px;height:auto;line-height:1.5}
.qp-mask-card{border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;margin-bottom:10px;background:var(--bg-0);color:var(--tx-1)}
.qp-mask-card .text-muted{color:var(--tx-3)!important}
.qp-mask-card .input{color:var(--tx-1);background:var(--bg-1);border-color:var(--border)}
.qp-history-card{border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;margin-bottom:10px;background:var(--bg-0);color:var(--tx-1)}
.qp-history-card .text-muted{color:var(--tx-3)!important}
.qp-history-card .input{color:var(--tx-1);background:var(--bg-1);border-color:var(--border)}
.qp-mask-row .qp-item-tap{cursor:default}
.module-row{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;transition:.15s;cursor:default}
.module-row:hover{background:var(--bg-1)}
.module-row .info{flex:1;min-width:0}
.module-row .name{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px}
.module-row .desc{font-size:11px;color:var(--tx-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.role-select{padding:3px 9px;border-radius:6px;font-size:11px;font-weight:600;background:var(--bg-2);color:var(--tx-2);border:1px solid transparent;cursor:pointer;font-family:inherit;transition:.15s}
.role-select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px var(--accent-dim)}
.module-row .actions{display:flex;gap:4px;align-items:center}

/* ═══ Slot Editor ═══ */
[data-slot-idx]{position:relative}
[data-slot-idx] .form-group{margin-bottom:6px}
.preset-slot-card{background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:8px;padding:11px 13px;transition:opacity .2s,border-color .2s}
.preset-slot-card.slot-disabled{opacity:.5}
.preset-slot-header{display:flex;align-items:center;gap:6px;min-height:34px}
.preset-slot-leading{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.preset-slot-toolbar{display:flex;align-items:center;gap:4px;flex-shrink:0}
.preset-slot-expand,.preset-group-expand{flex:0 0 auto;width:34px;height:34px;display:flex;align-items:center;justify-content:center;padding:0;flex-shrink:0;border-radius:var(--radius-sm);cursor:pointer}
.preset-slot-expand .qp-chev,.preset-group-expand .qp-chev{font-size:0;display:flex;align-items:center;justify-content:center}
.preset-slot-expand .qp-chev svg,.preset-group-expand .qp-chev svg{display:block;width:14px;height:14px}
.preset-slot-body{margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.slot-name-input{background:transparent;border:none;border-bottom:1px solid transparent;color:var(--tx-1);font-size:13px;font-weight:600;padding:2px 4px;flex:1;min-width:60px;transition:border-color .2s}
.slot-name-input:hover{border-bottom-color:var(--bg-4)}
.slot-name-input:focus{border-bottom-color:var(--bg-5);outline:none}
.text-txb-body .input:focus,.preset-slot-body .input:focus{border-color:var(--bg-5);background:var(--bg-1);box-shadow:none}
.slot-type-badge{font-size:14px;flex-shrink:0}
.slot-role-sel{font-size:11px!important;padding:3px 6px!important}
.slot-comment-bar{display:flex;align-items:center;gap:4px;margin-top:4px;padding:4px 8px;background:var(--bg-1);border-radius:5px;font-size:11px}
.slot-comment-icon{font-size:12px;flex-shrink:0}
.slot-toggle{position:relative;display:inline-flex;align-items:center;cursor:pointer;flex-shrink:0}
.slot-toggle input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;border:none;border-radius:0;background:none;box-shadow:none;background-image:none!important}
.slot-toggle-track{display:block;width:30px;height:17px;background:var(--bg-4);border-radius:9px;position:relative;transition:background .3s}
.slot-toggle input:checked + .slot-toggle-track{background:var(--accent-grad)}
.slot-toggle-thumb{position:absolute;top:2px;left:2px;width:13px;height:13px;background:#fff;border-radius:50%;transition:transform .25s cubic-bezier(.4,.8,.2,1);box-shadow:0 1px 3px rgba(0,0,0,.2)}
.slot-toggle input:checked + .slot-toggle-track .slot-toggle-thumb{transform:translateX(13px);background:var(--on-accent)}
.preset-group-card{border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:10px;overflow:hidden}
.preset-group-card.group-disabled .preset-group-header,
.preset-group-card.group-disabled .preset-group-body{opacity:.55}
.preset-group-header{display:flex;align-items:center;gap:6px;padding:10px 14px;background:var(--bg-1);border-bottom:1px solid var(--border)}
.preset-group-leading{display:flex;align-items:center;gap:6px;flex:1;min-width:0}
.preset-group-toolbar{display:flex;align-items:center;gap:4px;flex-shrink:0}
.preset-group-expand{flex:0 0 auto;width:34px;height:34px;display:flex;align-items:center;justify-content:center;padding:0;flex-shrink:0;border-radius:var(--radius-sm);cursor:pointer}
.module-icon-slot .media-crop-fill{display:block;width:100%;height:100%;border-radius:inherit}
.module-icon-slot .module-icon-fallback{display:none}
.module-icon-slot.icon-fallback .module-icon-fallback{display:flex!important}
.module-icon-slot.icon-fallback>img,.module-icon-slot.icon-fallback>.media-crop-fill{display:none!important}
.group-name-input{font-weight:700;font-size:13px;flex:1;min-width:80px}
.preset-group-body{padding:10px;overflow:visible}
.preset-group-body .preset-slot-card{overflow:visible}
.preset-slot-card[data-txt-drag-item],.text-txb-card[data-txt-drag-item],.preset-group-card[data-txt-drag-item]{position:relative}
.txt-drag-handle{
  flex:0 0 auto;width:36px;height:40px;display:flex;align-items:center;justify-content:center;
  border:none;background:transparent;color:var(--tx-3);padding:0;border-radius:var(--radius-sm);
  cursor:grab;touch-action:none;user-select:none;flex-shrink:0;-webkit-user-drag:none;-webkit-touch-callout:none;
}
.txt-drag-handle:hover{color:var(--tx-2);background:var(--bg-2)}
.txt-drag-handle:active,.txt-drag-armed .txt-drag-handle{cursor:grabbing;color:var(--accent)}
.text-txb-card.txt-drag-armed,.preset-group-card.txt-drag-armed,.preset-slot-card.txt-drag-armed{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent)}
.text-txb-card.txt-dragging,.preset-group-card.txt-dragging,.preset-slot-card.txt-dragging{display:none!important}
.text-txb-drop-line{height:4px;margin:-2px 0;position:relative;z-index:2;pointer-events:none;opacity:0}
.txt-drag-active .text-txb-drop-line{pointer-events:auto;opacity:0;height:4px;margin:-2px 0}
.text-txb-drop-line.txt-drop-active::after{display:none}
.txt-drag-inline-preview{
  pointer-events:none;margin:4px 0 8px;
  border:2px dashed color-mix(in srgb,var(--accent) 60%,transparent);
  border-radius:var(--radius-md);
  background:color-mix(in srgb,var(--accent) 5%,transparent);
  opacity:.7;
}
.txt-drag-float{
  position:fixed;left:0;top:0;z-index:10050;pointer-events:none;
  opacity:.97;border-radius:var(--radius-md);
  box-shadow:0 18px 44px -14px rgba(0,0,0,.38),0 0 0 1px color-mix(in srgb,var(--accent) 22%,transparent);
  will-change:transform;
}
body.txt-editor-dragging{user-select:none;-webkit-user-select:none}
#textModEditorList,#stpbEditorList,#ppbEditorList,#slotList{display:flex;flex-direction:column;gap:0}

/* 插件开发参考页：移动端 API 表格可读性 */
.plugin-docs-api-table td{vertical-align:top}
.plugin-docs-api-table td:first-child{font-family:Consolas,monospace;color:var(--tx-1);white-space:nowrap;padding:4px 8px}
.plugin-docs-api-table td:last-child{color:var(--tx-3);padding:4px 8px;word-break:break-word;overflow-wrap:anywhere;line-height:1.55}
@media (max-width:640px){
  .plugin-docs-api-table tr{display:block;border-bottom:1px solid var(--bg-4);padding:8px 0}
  .plugin-docs-api-table tr:last-child{border-bottom:none}
  .plugin-docs-api-table td{display:block;padding:2px 0}
  .plugin-docs-api-table td:first-child{font-weight:700;margin-bottom:4px;white-space:normal}
}

.plugin-docs-md-sep{margin:28px 0 20px;padding-top:20px;border-top:1px solid var(--bg-4)}
.plugin-docs-md-sep-label{font-size:14px;font-weight:700;color:var(--tx-1)}
.plugin-docs-md-sep-note{margin-top:4px;font-size:11px;color:var(--tx-3)}
.plugin-docs-md{font-size:12px;color:var(--tx-2);line-height:1.75}
.plugin-docs-md .plugin-docs-h2{font-size:16px;font-weight:700;color:var(--tx-1);margin:20px 0 10px}
.plugin-docs-md .plugin-docs-h2:first-child{margin-top:0}
.plugin-docs-md .plugin-docs-h3{font-size:14px;font-weight:700;color:var(--tx-1);margin:18px 0 8px}
.plugin-docs-md .plugin-docs-h4{font-size:13px;font-weight:700;color:var(--tx-1);margin:14px 0 6px}
.plugin-docs-md .plugin-docs-h5{font-size:12px;font-weight:700;color:var(--tx-1);margin:12px 0 6px}
.plugin-docs-md .plugin-docs-p{margin:0 0 10px;color:var(--tx-2)}
.plugin-docs-md .plugin-docs-quote{margin:0 0 10px;padding:8px 10px;border-left:2px solid var(--bg-4);background:var(--bg-2);color:var(--tx-2)}
.plugin-docs-md .plugin-docs-ul,.plugin-docs-md .plugin-docs-ol{margin:0 0 12px 18px;padding:0}
.plugin-docs-md .plugin-docs-ul li,.plugin-docs-md .plugin-docs-ol li{margin:4px 0;color:var(--tx-2)}
.plugin-docs-md .plugin-docs-hr{border:none;border-top:1px solid var(--bg-4);margin:18px 0}
.plugin-docs-md .plugin-docs-code{background:var(--bg-2);border-radius:6px;padding:10px 12px;margin:0 0 12px;overflow-x:auto;font-size:11px;line-height:1.65}
.plugin-docs-md .plugin-docs-code code{font-family:Consolas,monospace;color:var(--tx-1);white-space:pre}
.plugin-docs-md code{background:var(--bg-3);border-radius:3px;padding:1px 4px;font-family:Consolas,monospace;font-size:11px;color:var(--tx-1)}
.plugin-docs-md-table{width:100%;border-collapse:collapse;margin:0 0 14px;font-size:11px}
.plugin-docs-md-table th,.plugin-docs-md-table td{border:1px solid var(--bg-4);padding:6px 8px;text-align:left;vertical-align:top}
.plugin-docs-md-table th{background:var(--bg-2);color:var(--tx-1);font-weight:600}
.plugin-docs-md-table td{color:var(--tx-2);word-break:break-word;overflow-wrap:anywhere}
@media (max-width:640px){
  .plugin-docs-md-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}
}

/* ═══ Modal ═══ */
.modal-overlay{position:fixed;inset:0;z-index:200;background:rgba(0,0,0,.42);backdrop-filter:blur(12px) saturate(1.03);-webkit-backdrop-filter:blur(12px) saturate(1.03);display:flex;align-items:center;justify-content:center;padding:16px}
.modal{background:var(--bg-0);border:1px solid var(--bg-2);border-radius:var(--radius-lg);width:600px;max-width:100%;max-height:84vh;display:flex;flex-direction:column;box-shadow:0 1px 1px rgba(0,0,0,.04),0 12px 28px -10px rgba(0,0,0,.16),0 32px 64px -24px rgba(0,0,0,.24)}
.modal-header{padding:22px 24px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.modal-header .font-bold{font-size:15.5px;font-weight:600;letter-spacing:-.01em;color:var(--tx-1)}
.modal-close-btn{position:relative;z-index:10;pointer-events:auto;min-width:32px;min-height:32px;color:var(--tx-3);border-radius:10px;transition:background .15s ease,color .15s ease}
.modal-close-btn:hover{background:var(--bg-2);color:var(--tx-1)}
.modal-body{flex:1;overflow-y:auto;padding:0 24px 10px}
.modal-footer{padding:14px 24px 22px;display:flex;justify-content:flex-end;gap:8px}
@keyframes modalOverlayIn{from{opacity:0}to{opacity:1}}
.rgx-depth-info-btn{align-self:flex-end;margin-bottom:4px;background:none;border:none;padding:0;color:var(--tx-3);cursor:pointer;font-family:inherit;font-size:14px;line-height:1;transition:color .15s ease}
.rgx-depth-info-btn:hover{color:var(--tx-1)}
.rgx-depth-info-pop{position:fixed;z-index:210;background:var(--bg-0);border:1px solid var(--bg-2);border-radius:12px;padding:10px 12px;font-size:12px;line-height:1.55;color:var(--tx-2);box-shadow:0 10px 28px -10px rgba(0,0,0,.22);animation:modalOverlayIn .14s ease-out}
.regex-test-result{padding:14px;background:var(--bg-1);border-radius:var(--radius);font-size:13px;white-space:pre-wrap;margin-top:8px;max-height:200px;overflow-y:auto;border:1px solid var(--border)}
.regex-match{background:var(--accent-grad-soft);color:var(--accent);border-radius:3px;padding:0 3px;font-weight:700}

/* ═══════════ TOAST ═══════════ */
.toast-container{
  position:fixed;
  top:calc(env(safe-area-inset-top, 0px) + 10px);
  left:50%;
  transform:translateX(-50%);
  z-index:10050;
  width:min(calc(100vw - 28px), 340px);
  display:flex;
  flex-direction:column;
  align-items:stretch;
  gap:8px;
  pointer-events:none;
}
.toast{
  pointer-events:auto;
  padding:10px 18px;
  border-radius:999px;
  font-size:13px;
  font-weight:500;
  line-height:1.35;
  text-align:center;
  border:1px solid var(--border);
  background:var(--bg-0);
  color:var(--tx-1);
  box-shadow:var(--shadow-sm);
  animation:toastSlideIn .34s cubic-bezier(.22,.8,.26,1);
  touch-action:none;
  user-select:none;
  -webkit-user-select:none;
  cursor:grab;
  overflow:hidden;
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
}
.toast:active{cursor:grabbing}
.toast-success{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.toast-error{background:var(--bg-2);color:var(--tx-1);border-color:var(--border-strong)}
.toast-info{background:var(--bg-0);color:var(--tx-1);border-color:var(--border)}
@keyframes toastSlideIn{from{transform:translateY(calc(-100% - 14px));opacity:0}to{transform:translateY(0);opacity:1}}

/* ═══ Account Sub-pages (bills / imagebed) ═══ */
.account-page-overlay .bills-body{display:flex;flex-direction:column}
.creative-docs-overlay .creative-docs-body{overflow-y:auto;max-height:calc(100vh - 56px);-webkit-overflow-scrolling:touch}
.creative-docs-index-links{margin-top:0}
.bill-item-row{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;justify-content:space-between;font-size:12px;padding:11px 0;border-bottom:1px solid var(--bg-2)}
.bill-item-row:last-child{border-bottom:none}
.bill-amt{font-weight:700;flex-shrink:0}
.bill-amt-pos{color:var(--green)}
.bill-amt-neg{color:var(--red)}
.bills-tab-btn{flex:1;padding:8px 0;font-size:13px;font-weight:600;border:none;background:none;color:var(--tx-3);cursor:pointer;border-bottom:2px solid transparent;transition:.15s}
.bills-tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}
.imagebed-zone{border:2px dashed var(--bg-4);border-radius:14px;padding:36px 16px;text-align:center;cursor:pointer;background:var(--bg-1);transition:.2s;margin-bottom:18px}
.imagebed-zone:hover,.imagebed-zone.drag{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}
.imagebed-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-top:6px}
.imagebed-card{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--bg-0);transition:.2s}
.imagebed-card:hover{border-color:var(--accent);box-shadow:var(--shadow-sm)}
.imagebed-thumb{aspect-ratio:1;background:var(--bg-2);display:flex;align-items:center;justify-content:center}
.imagebed-thumb img,.imagebed-thumb video{width:100%;height:100%;object-fit:cover}
.imagebed-thumb--media{background:var(--bg-2)}
.imagebed-thumb-label{font-size:13px;font-weight:600;color:var(--tx-2);letter-spacing:.04em}
.imagebed-meta{padding:8px 10px;font-size:10px;color:var(--tx-3);word-break:break-all;line-height:1.4}
.imagebed-actions{display:flex;gap:6px;padding:0 10px 10px;flex-wrap:wrap}

/* ═══ Module Detail Page ═══ */
.mod-detail-overlay{position:fixed;inset:0;z-index:80;background:var(--bg-0);display:flex;flex-direction:column;overflow:hidden}
.mod-detail-header{display:flex;align-items:center;gap:12px;padding:14px 20px;background:var(--bar);border-bottom:1px solid var(--hairline);flex-shrink:0}
.mod-detail-header .back-btn,
.inbox-overlay-head .back-btn#inboxDmBack{
  width:34px;height:34px;border-radius:11px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-1);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s;padding:0;-webkit-appearance:none;appearance:none;flex-shrink:0;
}
.inbox-overlay-head .back-btn#inboxClose{
  width:36px;height:36px;border-radius:11px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-1);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s;padding:0;-webkit-appearance:none;appearance:none;flex-shrink:0;
}
.mod-detail-header .back-btn:hover,
.inbox-overlay-head .back-btn#inboxDmBack:hover{background:var(--bg-2);border-color:var(--bg-4)}
.inbox-overlay-head .back-btn#inboxClose:hover{background:var(--bg-2);border-color:var(--bg-4)}
.mod-detail-body{flex:1;overflow-y:auto;overflow-x:hidden;padding-bottom:90px;box-sizing:border-box}
.mod-detail-gallery{width:100%;background:var(--bg-2);position:relative}
.mod-detail-gallery-inner{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
.mod-detail-gallery-inner::-webkit-scrollbar{display:none}
.mod-detail-gallery-inner{scrollbar-width:none}
.mod-detail-gallery-img{min-width:100%;max-width:100%;max-height:420px;object-fit:contain;scroll-snap-align:start;scroll-snap-stop:always;cursor:zoom-in;background:var(--bg-2)}
.mod-detail-gallery-empty{width:100%;height:220px;background:var(--bg-2);display:flex;align-items:center;justify-content:center;position:relative}
.mod-detail-gallery-empty::before{
  content:'';width:64px;height:64px;background:url(/logo.svg?v=3) center/contain no-repeat;opacity:.45;display:block;
}
.mod-detail-gallery-nav{position:absolute;top:50%;transform:translateY(-50%);width:36px;height:36px;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2;opacity:0;transition:opacity .2s;backdrop-filter:blur(4px)}
.mod-detail-gallery:hover .mod-detail-gallery-nav{opacity:1}
.mod-detail-gallery-nav:hover{background:rgba(0,0,0,.7)}
.mod-detail-gallery-nav.left{left:10px}
.mod-detail-gallery-nav.right{right:10px}
.mod-detail-gallery-nav[disabled]{opacity:0!important;pointer-events:none}
.mod-detail-gallery-dots{display:flex;justify-content:center;gap:6px;padding:12px 0;background:var(--bg-0)}
.mod-detail-gallery-dots span{width:7px;height:7px;border-radius:50%;background:var(--bg-4);transition:.2s;cursor:pointer}
.mod-detail-gallery-dots span.active{background:var(--accent);width:22px;border-radius:4px}
.sable-lightbox{position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,0);display:flex;align-items:center;justify-content:center;touch-action:none;user-select:none;overflow:hidden;transition:background .25s}
.sable-lightbox.active{background:rgba(0,0,0,.95)}
.sable-lightbox-canvas{position:absolute;inset:0;cursor:grab}
.sable-lightbox-canvas.dragging{cursor:grabbing}
.sable-lightbox-canvas.zoomed{cursor:move}
.sable-lightbox-canvas img{position:absolute;top:50%;left:50%;pointer-events:none;will-change:transform}
.sable-lightbox-canvas img.slide-transition{transition:transform .28s cubic-bezier(.25,.1,.25,1)}
.sable-lightbox-canvas img.zoom-transition{transition:transform .3s cubic-bezier(.25,.1,.25,1)}
.sable-lightbox-close{position:fixed;top:16px;right:16px;z-index:10001;width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.12);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s,opacity .25s;opacity:0}
.sable-lightbox.active .sable-lightbox-close{opacity:1}
.sable-lightbox-close:hover{background:rgba(255,255,255,.28)}
.sable-lightbox-counter{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:10001;color:rgba(255,255,255,.7);font-size:13px;font-weight:500;pointer-events:none;opacity:0;transition:opacity .25s}
.sable-lightbox.active .sable-lightbox-counter{opacity:1}
.sable-lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);z-index:10001;width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.1);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s,opacity .25s;opacity:0}
.sable-lightbox.active .sable-lightbox-nav{opacity:1}
.sable-lightbox-nav:hover{background:rgba(255,255,255,.25)}
.sable-lightbox-nav[disabled]{opacity:0!important;pointer-events:none}
.sable-lightbox-nav.prev{left:16px}
.sable-lightbox-nav.next{right:16px}
@media(max-width:420px){.sable-lightbox-nav{display:none}}
@media(max-width:420px){.mod-detail-gallery-nav{display:none}}
.mod-detail-info{padding:22px 20px}
.mod-detail-title{font-size:22px;font-weight:700;margin-bottom:6px;letter-spacing:-.01em}
.mod-detail-author{font-size:12px;color:var(--tx-3);margin-bottom:14px}
.mod-detail-author-card{display:flex;align-items:center;gap:10px;padding:10px 12px;margin:14px 0;border-radius:12px;background:var(--bg-1);border:1px solid var(--hairline);cursor:pointer;transition:background .15s}
.mod-detail-author-card:hover{background:var(--bg-2)}
.mod-detail-author-avatar{width:36px;height:36px;border-radius:50%;background:var(--bg-2);display:flex;align-items:center;justify-content:center;overflow:visible;flex-shrink:0;box-sizing:border-box}
.mod-detail-author-avatar--img{padding:0;border:1px solid var(--border);overflow:hidden}
.mod-detail-author-avatar--img img{width:100%;height:100%;object-fit:cover;display:block}
.mod-detail-author-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.mod-detail-author-name{font-size:13px;font-weight:600;color:var(--tx-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mod-detail-author-name .level-badge,
.thread-comment-name .level-badge{margin-left:5px}
.mod-detail-author-bio{font-size:11px;color:var(--tx-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mod-detail-author-arrow{font-size:18px;color:var(--tx-3);flex-shrink:0}
.author-profile-overlay{position:fixed;inset:0;z-index:82;background:var(--bg-0);display:flex;flex-direction:column;overflow:hidden}
.author-profile-body{flex:1;overflow-y:auto;padding-bottom:20px;display:flex;flex-direction:column;min-height:0}
.author-profile-tabs{display:flex;gap:0;border-bottom:1px solid var(--hairline);background:var(--bg-0);flex-shrink:0}
.author-profile-tab{flex:1;padding:12px 8px;text-align:center;font-size:13px;font-weight:600;color:var(--tx-3);cursor:pointer;border:none;background:none;font-family:inherit;border-bottom:2px solid transparent;transition:.2s}
.author-profile-tab:hover{color:var(--tx-2)}
.author-profile-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.author-profile-content{flex:1;min-height:0}
.author-profile-works-heading{padding:12px 16px 12px;font-size:13px;font-weight:700;color:var(--tx-1);text-align:center;border-bottom:1px solid var(--hairline)}
.author-profile-uid-row{display:flex;align-items:center;justify-content:center;gap:4px;margin-top:2px}
.author-profile-uid-copy{width:28px;height:28px;padding:0;border:none;background:transparent;color:var(--tx-3);cursor:pointer;border-radius:var(--radius);display:inline-flex;align-items:center;justify-content:center}
.author-profile-uid-copy:hover{color:var(--accent)}
.profile-stats-row{display:flex;justify-content:center;align-items:center;margin-top:10px}
.profile-stat{
  display:flex;flex-direction:column;align-items:center;gap:2px;
  min-width:72px;padding:2px 4px;border:none;background:none;
  font-family:inherit;color:inherit;cursor:pointer;
}
/* 三栏之间用一根细竖线分隔，不加方框 */
.profile-stat + .profile-stat{
  border-left:1px solid var(--hairline);
}
.profile-stat:hover .profile-stat-num{color:var(--accent)}
.profile-stat--static{cursor:default}
.profile-stat--static:hover .profile-stat-num{color:var(--tx-1)}
.profile-stat-num{font-size:16px;font-weight:700;color:var(--tx-1);line-height:1.2}
.profile-stat-label{font-size:11px;color:var(--tx-3)}
/* 计数还没拉到：走通用骨架，别先显示 0 再跳成真值 */
.profile-stat-num.is-pending{display:inline-block;width:28px;height:15px;border-radius:5px;vertical-align:-1px}

.follow-list-overlay{position:fixed;inset:0;z-index:84;background:var(--bg-0);display:flex;flex-direction:column;overflow:hidden}
.follow-list-body{flex:1;overflow-y:auto;min-height:0;padding-bottom:20px}
.follow-list-row{
  display:flex;align-items:center;gap:12px;width:100%;
  padding:12px 16px;border:none;border-bottom:1px solid var(--hairline);
  background:none;font-family:inherit;text-align:left;cursor:pointer;
}
.follow-list-row:hover{background:var(--bg-1)}
.follow-list-main{flex:1;min-width:0}
.follow-list-name{display:flex;align-items:center;gap:5px;font-size:14px;font-weight:600;color:var(--tx-1)}
.follow-list-bio{
  margin-top:3px;font-size:12px;color:var(--tx-2);line-height:1.4;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.follow-list-bio--empty{color:var(--tx-3)}

.author-profile-works-more,.inbox-soc-more{display:flex;justify-content:center;padding:16px}
.author-profile-actions{display:flex;gap:10px;justify-content:center;margin-top:14px}
.author-profile-actions .btn{min-width:96px}
.author-profile-actions .btn svg{vertical-align:-2px;margin-right:4px}
.author-profile-more-wrap{position:relative}
.author-profile-more-menu{display:none;position:absolute;right:0;top:100%;min-width:120px;background:var(--bg-2);border:1px solid var(--bg-4);border-radius:var(--radius-lg);box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:90;padding:4px 0;overflow:hidden}
.author-profile-more-menu.open{display:block}
.author-more-item{display:block;width:100%;text-align:left;padding:10px 16px;font-size:13px;background:none;border:none;color:var(--tx-1);cursor:pointer}
.author-more-item:hover{background:var(--bg-3)}
.author-more-item--danger{color:var(--tx-1)}
.report-dialog-reasons{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.report-reason-label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--tx-1);cursor:pointer}
.report-reason-label input[type="radio"]{accent-color:var(--accent)}
.mod-detail-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}
.mod-detail-tags span{padding:4px 11px;background:var(--bg-2);border-radius:999px;font-size:11px;color:var(--tx-2);font-weight:600}
.mod-detail-badge{display:inline-flex;align-items:center;padding:4px 11px;border-radius:999px;font-size:11px;font-weight:700;margin-bottom:14px}
.mod-detail-desc{font-size:14px;line-height:1.8;color:var(--tx-2);white-space:pre-wrap;word-break:break-word}
.mod-detail-section{padding:18px 20px;border-top:1px solid var(--border)}
.mod-detail-section-title{font-size:11px;font-weight:700;color:var(--tx-3);margin-bottom:10px;letter-spacing:.14em;text-transform:uppercase}
.mod-detail-social-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:12px}
/* 点赞 / 收藏计数：尺寸恒定（等宽数字 + 固定图标框），只有颜色和图标 transform 变化 */
.mod-stat-btn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 13px;border:1px solid var(--hairline);border-radius:999px;background:var(--bg-1);color:var(--tx-2);font-size:13px;font-weight:600;line-height:1;cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.mod-stat-btn:hover{background:var(--bg-2);color:var(--tx-1)}
.mod-stat-btn .mod-stat-icon{width:16px;height:16px;flex-shrink:0;fill:none;transition:fill .15s,stroke .15s}
/* is-on＝已点赞 / 已购买（已收藏） */
.mod-stat-btn.is-on{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}
.mod-stat-btn.is-on .mod-stat-icon{fill:currentColor}
/* 收藏＝购买数，只读展示，不可点 */
.mod-stat-btn--static{cursor:default}
.mod-stat-btn--static:hover{background:var(--bg-1);color:var(--tx-2)}
.mod-stat-btn--static.is-on:hover{background:var(--accent-dim);color:var(--accent)}
.mod-stat-count{min-width:1em;text-align:center;font-variant-numeric:tabular-nums;color:var(--tx-3)}
.mod-stat-btn.is-on .mod-stat-count{color:inherit}
.mod-stat-btn.is-pending .mod-stat-count{opacity:0}
.mod-stat-icon.pop{animation:modLikePop .3s cubic-bezier(.22,1,.36,1)}
@keyframes modLikePop{0%{transform:scale(1)}35%{transform:scale(1.22)}100%{transform:scale(1)}}
.mod-detail-comment-list{display:flex;flex-direction:column;gap:0;margin-top:8px;max-height:360px;overflow-y:auto}
.thread-comment-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:50vh;color:var(--tx-3);font-size:13px}

/* ── Threaded comment layout (avatar column + stacked meta/body/footer) ── */
.thread-comment{display:flex;gap:10px;padding:0;border-bottom:none}
.thread-comment:not(:last-child){padding-bottom:14px;border-bottom:1px solid var(--hairline)}
.thread-comment:not(:first-child){padding-top:14px}
.thread-comment-av{flex-shrink:0;cursor:pointer}
.thread-comment-avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0;overflow:visible;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box}
.thread-comment-main{flex:1;min-width:0}
.thread-comment-name{font-size:13px;font-weight:600;color:var(--tx-1);cursor:pointer;display:inline}
.thread-comment-name:hover{color:var(--accent)}
.thread-comment-reply-ref{font-weight:400;font-size:12px;color:var(--tx-3)}
.thread-comment-text{font-size:13px;line-height:1.6;color:var(--tx-1);margin-top:4px;white-space:pre-wrap;word-break:break-word}
.thread-comment-foot{display:flex;align-items:center;gap:12px;margin-top:6px;font-size:12px;color:var(--tx-3)}
.thread-comment-time{color:var(--tx-3)}
.thread-comment-reply-btn{cursor:pointer;color:var(--tx-3)}
.thread-comment-reply-btn:hover{color:var(--accent)}
/* 商品详情：头部三点菜单 */
.mod-detail-more-btn{width:34px;height:34px;border-radius:10px;border:none;background:transparent;color:var(--tx-2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mod-detail-more-btn:hover{background:var(--bg-2);color:var(--tx-1)}
.mod-detail-more-menu{position:absolute;top:52px;right:16px;z-index:12;min-width:132px;background:var(--bg-1);border:1px solid var(--hairline);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.18);padding:6px;display:none;flex-direction:column;gap:2px}
.mod-detail-more-menu.open{display:flex}
.mod-detail-more-item{text-align:left;padding:9px 12px;border:none;background:transparent;border-radius:8px;font-size:14px;color:var(--tx-1);cursor:pointer}
.mod-detail-more-item:hover{background:var(--bg-2)}
.mod-detail-more-item--danger{color:var(--tx-1)}
/* 商品详情：详情/评论 导航栏 */
.mod-detail-nav{display:flex;gap:8px;margin:16px 0 4px;border-bottom:1px solid var(--hairline)}
.mod-detail-nav-btn{position:relative;padding:9px 4px;margin-right:12px;border:none;background:transparent;font-size:15px;font-weight:600;color:var(--tx-3);cursor:pointer}
.mod-detail-nav-btn.active{color:var(--tx-1)}
.mod-detail-nav-btn.active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
.mod-detail-pane{padding-top:12px}
#modDetailPaneComments .mod-detail-comment-list{max-height:none;overflow:visible}
/* 商品详情：单条评论三点菜单 + 点击回复 */
.thread-comment{position:relative;cursor:pointer}
.thread-comment-more{position:absolute;right:0;bottom:0;width:28px;height:24px;border:none;background:transparent;color:var(--tx-3);cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px}
.thread-comment-more:hover{background:var(--bg-2);color:var(--tx-1)}
.thread-comment-menu{position:absolute;right:0;bottom:26px;z-index:5;min-width:104px;background:var(--bg-1);border:1px solid var(--hairline);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.18);padding:5px;display:none;flex-direction:column;gap:2px}
.thread-comment-menu.open{display:flex}
.thread-comment-menu-item{text-align:left;padding:8px 12px;border:none;background:transparent;border-radius:7px;font-size:13px;color:var(--tx-1);cursor:pointer}
.thread-comment-menu-item:hover{background:var(--bg-2)}
.thread-comment-menu-item--danger{color:var(--tx-1)}
/* 商品详情：固定评论输入栏 + loader */
.mod-detail-compose{position:fixed;bottom:0;left:0;right:0;z-index:81;padding:12px 20px;background:var(--bar);border-top:1px solid var(--hairline);display:flex;flex-direction:column;gap:6px}
.mod-detail-comment-loader{display:flex;justify-content:center;padding:14px 0}
.mod-detail-spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--bg-4);border-top-color:var(--accent);border-radius:50%;animation:modDetailSpin .6s linear infinite}
.mod-detail-btn-spinner{border-top-color:var(--on-accent);border-color:rgba(255,255,255,.4);border-top-color:var(--on-accent)}
@keyframes modDetailSpin{to{transform:rotate(360deg)}}
.store-inbox-btn{position:relative;width:42px;height:42px;border-radius:12px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.15s}
.store-inbox-btn:hover{background:var(--bg-2);color:var(--accent);border-color:var(--accent)}
.store-inbox-badge{position:absolute;top:-2px;right:-2px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:var(--on-accent);font-size:10px;font-weight:700;line-height:18px;text-align:center;display:none;box-shadow:0 2px 6px rgba(0,0,0,.25)}

/* ═══ Inbox ═══ */
.inbox-overlay{position:fixed;inset:0;z-index:90;background:var(--bg-0);display:flex;flex-direction:column;overflow:hidden}
.inbox-overlay-head{display:flex;align-items:center;gap:10px;padding:14px 16px;background:var(--bar);border-bottom:1px solid var(--hairline);flex-shrink:0}
.inbox-overlay-head h2{flex:1;margin:0;font-size:16px;font-weight:700;color:var(--tx-1);min-width:0}
.inbox-overlay-head .back-btn#inboxDmBack[hidden],.inbox-overlay-head .back-btn#inboxClose[hidden]{display:none!important}
.inbox-overlay-head--thread h2{text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inbox-overlay-head--thread::after{content:'';width:34px;flex-shrink:0}
.inbox-tabs--hidden{display:none!important}
.inbox-head-add-btn{
  width:36px;height:36px;border-radius:11px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-1);
  cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;
  transition:.15s;-webkit-appearance:none;appearance:none;font-family:inherit;line-height:0;
}
.inbox-head-add-btn:hover{background:var(--bg-2);border-color:var(--accent);color:var(--accent)}
.inbox-head-add-btn[hidden]{display:none!important}
.inbox-tabs{display:flex;gap:0;border-bottom:1px solid var(--hairline);background:var(--bg-0);flex-shrink:0}
.inbox-tabs button{flex:1;padding:14px 8px;border:none;background:transparent;color:var(--tx-3);font-size:13px;font-weight:600;border-bottom:2px solid transparent;cursor:pointer;transition:.2s;font-family:inherit;display:inline-flex;align-items:center;justify-content:center;gap:5px}
.inbox-tabs button:hover{color:var(--tx-2)}
.inbox-tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}
.inbox-tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--accent);color:var(--on-accent);font-size:10px;font-weight:700;line-height:1;flex-shrink:0}
.inbox-tab-badge[hidden]{display:none!important}
.inbox-soc-subtab{display:inline-flex;align-items:center;justify-content:center;gap:4px}
.inbox-soc-subtab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:14px;height:14px;padding:0 3px;border-radius:7px;background:var(--accent);color:var(--on-accent);font-size:9px;font-weight:700;line-height:1;flex-shrink:0}
.inbox-soc-subtab-badge[hidden]{display:none!important}
.inbox-body{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-height:0}
.inbox-body.inbox-body--thread{overflow:hidden;display:flex;flex-direction:column}

/* ── Default user avatar (no custom photo) ── */
.sable-avatar--default{display:inline-flex;align-items:center;justify-content:center;background:var(--bg-2);border:1px solid var(--border);overflow:hidden;flex-shrink:0;box-sizing:border-box}
.sable-avatar--default::before,.sable-avatar-wrap--default::before{content:'';display:block;width:56%;height:56%;max-width:62%;max-height:62%;flex-shrink:0;background:url(/logo.svg?v=3) center/contain no-repeat}
.sable-avatar-logo{width:56%;height:56%;max-width:62%;max-height:62%;object-fit:contain;display:block;flex-shrink:0}
.msg-avatar.sable-avatar--default,.msg-avatar.msg-avatar--default{background:var(--bg-2)!important;color:inherit!important;border:1px solid var(--border)!important}
.chat-header-avatar.sable-avatar--default{display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--bg-2)!important;border:1px solid var(--border)!important}

/* ── DM thread list ── */
.inbox-dm-row{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--hairline);cursor:pointer;transition:background .2s}
.inbox-dm-row:hover{background:var(--bg-1)}
.inbox-dm-av{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:visible;box-sizing:border-box;border:none;background:none;padding:0}
.inbox-dm-av-btn{cursor:pointer;font-family:inherit;-webkit-tap-highlight-color:transparent;transition:opacity .15s,transform .15s;appearance:none;-webkit-appearance:none;line-height:1;border:none;background:none;padding:0}
.inbox-dm-av-btn:hover{opacity:.88}
.inbox-dm-av-btn:active{transform:scale(.96)}
.inbox-dm-preview{flex:1;min-width:0}
.inbox-dm-preview .t{font-weight:700;font-size:14px;margin-bottom:2px;display:flex;align-items:center;gap:6px}
.inbox-dm-preview .p{font-size:12px;color:var(--tx-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inbox-dm-unread{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:var(--on-accent);font-size:10px;font-weight:700;line-height:1}
.inbox-dm-time{font-size:11px;color:var(--tx-3);flex-shrink:0;white-space:nowrap}

/* ── DM thread view (SMS-style) ── */
.inbox-thread-scroll{flex:1;overflow-y:auto;padding:8px 0 12px;background:var(--bg-0)}
.inbox-date-divider{text-align:center;padding:10px 16px 4px;font-size:11px;color:var(--tx-3);font-weight:500;letter-spacing:.01em}
.inbox-date-divider span{display:inline-block;padding:4px 10px;border-radius:6px;background:var(--bg-2);line-height:1.4}
.inbox-msg-wrap{display:flex;align-items:flex-start;gap:8px;padding:3px 16px}
.inbox-msg-mine{justify-content:flex-end}
.inbox-msg-theirs{justify-content:flex-start}
.inbox-msg-av{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:visible;box-sizing:border-box;border:none;background:none;padding:0}
.inbox-msg-av-spacer{width:32px;flex-shrink:0}
.inbox-bubble-me,.inbox-bubble-them{max-width:calc(75% - 40px);padding:10px 14px;border-radius:18px;font-size:14px;line-height:1.5;word-break:break-word}
.inbox-bubble-me{background:var(--accent);color:var(--on-accent);border-top-right-radius:4px;box-shadow:0 2px 8px -2px rgba(0,0,0,.18)}
.inbox-bubble-them{background:var(--bg-1);color:var(--tx-1);border:1px solid var(--border);border-top-left-radius:4px}
.inbox-msg-fail-dot{width:8px;height:8px;border-radius:50%;background:#e5484d;align-self:center;flex-shrink:0;display:none}
.inbox-msg-failed .inbox-msg-fail-dot{display:block}

/* ── DM search ── */
.inbox-search-results{max-height:min(320px,50vh);overflow-y:auto;margin-top:10px}
.inbox-search-row{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius);cursor:pointer;transition:background .15s}
.inbox-search-row:hover{background:var(--bg-2)}
.inbox-search-av{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:visible;box-sizing:border-box}
.inbox-search-info{flex:1;min-width:0}
.inbox-search-nick{font-size:14px;font-weight:600;color:var(--tx-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inbox-search-uid{font-size:11px;color:var(--tx-3)}
.inbox-search-empty{padding:24px 12px;text-align:center;color:var(--tx-3);font-size:13px}

/* ── Shared ── */
.inbox-sys-row,.inbox-soc-row{padding:14px 16px;border-bottom:1px solid var(--hairline)}
.inbox-sys-row.unread,.inbox-soc-row.unread{background:var(--accent-grad-soft)}
.inbox-soc-row[data-target-type]{cursor:pointer}
.inbox-soc-row[data-target-type]:hover{background:var(--bg-1)}
.inbox-soc-row-inner{display:flex;align-items:flex-start;gap:10px}
.inbox-soc-row-body{flex:1;min-width:0}
.inbox-soc-author{cursor:pointer;flex-shrink:0}
.inbox-soc-author-name{cursor:pointer}
.inbox-soc-author-name:hover{color:var(--accent);text-decoration:underline}
.inbox-soc-subtabs{display:flex;gap:0;border-bottom:1px solid var(--hairline);padding:0 12px}
.inbox-soc-subtab{flex:1;background:none;border:none;font-size:13px;padding:10px 0;color:var(--tx-2);cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}
.inbox-soc-subtab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.inbox-empty{text-align:center;padding:48px 24px;color:var(--tx-3);font-size:14px}
.inbox-compose{padding:10px 16px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--border);background:var(--bg-0);display:flex;gap:8px;flex-shrink:0;align-items:flex-end}
.inbox-compose input{flex:1}
.inbox-compose .btn{width:40px;height:40px;padding:0;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.mod-detail-footer{position:fixed;bottom:0;left:0;right:0;z-index:81;padding:14px 20px;background:var(--bar);border-top:1px solid var(--hairline);display:flex;align-items:center;justify-content:space-between;gap:12px}
.mod-detail-price{font-size:20px;font-weight:800;color:var(--tx-1);letter-spacing:-.005em}
.mod-detail-price.paid{color:var(--tx-3);font-weight:600}
.mod-detail-footer .btn{flex:1;max-width:220px;padding:11px 0;font-size:14px;font-weight:700}
/* 已发布条目的「编辑 / 下架」：并排靠右，各自按文字撑开，不再被挤成窄条 */
.mod-detail-pub-actions{display:flex;align-items:center;gap:10px;margin-left:auto;flex:1;justify-content:flex-end}
.mod-detail-pub-actions .btn{flex:0 0 auto;max-width:none;min-width:88px;padding:11px 18px;white-space:nowrap}
/* 下架：底栏本身就是 --bar，描边按钮须自带比底栏更亮的面，否则糊成一片像禁用态 */
.mod-detail-pub-actions .btn-outline{background:var(--bg-0);border-color:var(--border-strong);color:var(--tx-1)}
.mod-detail-pub-actions .btn-outline:hover{background:var(--bg-1);border-color:var(--tx-2);color:var(--tx-1)}
.mod-detail-pub-actions .btn-outline:active{background:var(--bg-2)}
.repo-group-overlay .mod-detail-footer .btn.rgd-footer-del{flex:none;max-width:none;width:auto;padding:11px 22px;font-size:14px;font-weight:700;white-space:nowrap;min-height:42px;box-sizing:border-box}
.repo-group-overlay .mod-detail-footer > div:first-child .btn{flex:none;max-width:none;padding:11px 22px}
.repo-group-row{padding:10px 12px;margin-bottom:8px;display:flex;align-items:center;gap:10px}
.repo-group-row-main{position:relative;flex:1;min-width:0}
.repo-group-row-info{margin-left:calc(var(--rg-thumb-w, 32px) + 10px);min-width:0}
.repo-group-row-thumb{position:absolute;left:0;top:0;border-radius:8px;overflow:hidden;background:var(--bg-2)}
.repo-group-row-thumb .media-crop-fill,.repo-group-row-thumb img{width:100%;height:100%;display:block;object-fit:cover}
.repo-group-row-icon{position:absolute;left:0;top:0;display:flex;align-items:center;font-size:22px;line-height:1;height:100%}

/* ═══ Login Gate ═══ */
/* 居中靠卡片的 margin:auto 而不是 align-items:center——后者在内容比视口高时会把顶部裁掉且没法滚 */
.login-gate{display:none;position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,.6);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);align-items:flex-start;justify-content:center;padding:24px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.login-gate.open{display:flex}
.login-gate-card{
  width:100%;max-width:400px;background:var(--bg-0);
  border:1px solid var(--border);border-radius:var(--radius-xl);
  padding:32px 28px;
  box-shadow:0 30px 70px -10px rgba(0,0,0,.35);
  margin:auto;
}
.login-gate-card h2{font-size:22px;font-weight:700;margin-bottom:6px;color:var(--tx-1);text-align:center;letter-spacing:-.01em}
.login-gate-card .lg-hint{font-size:12px;color:var(--tx-3);margin-bottom:18px;line-height:1.6;text-align:center}
/* 没有 .lg-hint 的面板（注册），补回说明文字原本撑开的那段间距 */
.login-gate-card h2+.form-group{margin-top:18px}
.login-gate-notice{font-size:12px;color:#e2a03f;background:rgba(226,160,63,.12);border:1px solid rgba(226,160,63,.3);border-radius:var(--radius-md,8px);padding:8px 10px;margin:-8px 0 18px;line-height:1.5;text-align:center}
.login-gate-card .form-group{margin-bottom:14px}
/* 提交按钮：与末个输入框拉开距离，与下方链接收紧，视觉上归到表单一侧 */
.login-gate-card .btn.w-full{margin-top:10px}
.login-gate-err{font-size:12px;color:var(--red);margin-top:6px;min-height:14px;text-align:center}
/* 注册同意勾选：紧贴注册按钮上方 */
.legal-consent{display:flex;align-items:flex-start;gap:8px;margin-top:14px;font-size:12px;line-height:1.6;color:var(--tx-2);cursor:pointer}
.legal-consent input{margin:2px 0 0;flex-shrink:0;accent-color:var(--accent);cursor:pointer}
.legal-consent a{color:var(--accent);text-decoration:none}
.legal-consent a:hover{text-decoration:underline}
/* 登录门（z-index 10000）之上的法律文本浮层 */
.legal-dialog-overlay{position:fixed;inset:0;z-index:10002;background:rgba(0,0,0,.5);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;padding:20px}
.legal-dialog{width:640px;max-width:100%;max-height:82vh;display:flex;flex-direction:column;background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:0 30px 70px -10px rgba(0,0,0,.35)}
.legal-dialog-header{display:flex;align-items:center;gap:12px;padding:18px 20px 12px;color:var(--tx-1)}
.legal-dialog-close{border:none;background:transparent;color:var(--tx-3);font-size:15px;line-height:1;padding:4px 6px;border-radius:8px;cursor:pointer}
.legal-dialog-close:hover{background:var(--bg-2);color:var(--tx-1)}
.legal-dialog-body{flex:1;overflow-y:auto;padding:0 20px 20px;font-size:13px;color:var(--tx-2);line-height:1.85}
.login-gate-links{display:flex;justify-content:center;gap:16px;margin-top:2px;font-size:13px}
.login-gate-links a{color:var(--tx-2);text-decoration:none;transition:color .15s}
.login-gate-links a:hover{color:var(--accent);text-decoration:underline}
.input-password-wrap{position:relative;display:block}
.login-gate .input-password-wrap .input{width:100%;box-sizing:border-box;padding-right:42px}
.pwd-toggle-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:34px;height:34px;padding:0;border:none;background:transparent;color:var(--tx-3);cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;line-height:0}
.pwd-toggle-btn:hover,.pwd-toggle-btn:focus-visible{color:var(--tx-1);background:var(--bg-2);outline:none}
.pwd-toggle-icon{flex-shrink:0}

/* 验证码：发送按钮嵌在输入框右内侧，与密码显隐按钮同一套做法 */
.code-input-wrap{position:relative;display:block}
.code-input-wrap .input{width:100%;box-sizing:border-box;padding-right:104px}
/* min-width 固定：倒计时文案变短时分隔线不会逐秒跳动 */
.code-send-btn{position:absolute;right:1px;top:1px;bottom:1px;min-width:92px;padding:0 14px;border:none;border-left:1px solid var(--border);background:transparent;color:var(--accent);font-size:13px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;border-radius:0 var(--radius) var(--radius) 0;transition:background-color .2s,color .2s}
.code-send-btn:hover:not(:disabled),.code-send-btn:focus-visible:not(:disabled){background:var(--bg-2);outline:none}
.code-send-btn:disabled{color:var(--tx-3);cursor:not-allowed}

.wallet-actions{flex-wrap:wrap}
#sableOfflineBanner.sable-offline-banner{position:fixed;top:0;left:0;right:0;z-index:10000;padding:11px 16px;background:var(--bg-2);color:var(--tx-1);border-bottom:1px solid var(--bg-4);font-size:13px;font-weight:600;text-align:center;box-shadow:0 6px 18px -4px rgba(0,0,0,.20);letter-spacing:.02em}
#sableOfflineBanner.sable-offline-banner.hidden{display:none}

#sableRateGuardBanner.sable-rate-guard-banner{position:fixed;top:0;left:0;right:0;z-index:10001;padding:13px 16px;background:#d32f2f;color:#fff;font-size:14px;font-weight:700;text-align:center;box-shadow:0 6px 24px -4px rgba(211,47,47,.45);letter-spacing:.03em;animation:sableRateGuardPulse 2s ease-in-out infinite}
#sableRateGuardBanner.sable-rate-guard-banner.hidden{display:none}
#sableRateGuardBanner .sable-rate-guard-countdown{font-variant-numeric:tabular-nums;margin-left:2px}
@keyframes sableRateGuardPulse{0%,100%{opacity:1}50%{opacity:.85}}
.sable-rate-guard-overlay{position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,.35);pointer-events:all;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.sable-rate-guard-overlay.hidden{display:none}

/* ═══ Update notice (version refresh prompt) ═══ */
.sable-update-overlay{z-index:10002;background:rgba(0,0,0,.52);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.sable-update-card{width:min(380px,calc(100vw - 32px));padding:28px 24px 22px;border-radius:20px;background:var(--bg-0);border:1px solid var(--border);box-shadow:0 24px 64px -12px rgba(0,0,0,.45);text-align:center;animation:sableUpdateIn .32s cubic-bezier(.22,1,.36,1)}
@keyframes sableUpdateIn{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
.sable-update-icon{width:56px;height:56px;margin:0 auto 16px;border-radius:16px;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);display:flex;align-items:center;justify-content:center}
.sable-update-icon svg{animation:sableUpdateSpin 2.4s ease-in-out infinite}
@keyframes sableUpdateSpin{0%,100%{transform:rotate(0deg)}35%{transform:rotate(-18deg)}65%{transform:rotate(18deg)}}
.sable-update-title{margin:0 0 8px;font-size:18px;font-weight:700;color:var(--tx-1);letter-spacing:-.01em}
.sable-update-desc{margin:0;font-size:14px;line-height:1.6;color:var(--tx-2)}
.sable-update-changes{margin:10px 0 0;padding:0 0 0 20px;text-align:left;font-size:13px;line-height:1.6;color:var(--tx-2)}
.sable-update-changes li{margin:2px 0}
.sable-update-urgent{margin:10px 0 0;font-size:13px;line-height:1.5;color:var(--accent);font-weight:600}
.sable-update-actions{display:flex;gap:10px;margin-top:22px;justify-content:center}
.sable-update-btn{flex:1;min-height:42px;padding:0 16px;font-size:14px;border-radius:12px}
.sable-update-btn--primary{flex:1.2;font-weight:600}

/* ═══ Pull to refresh + composer image grid (shared) ═══ */
.ptr-indicator{height:0;overflow:hidden;display:flex;align-items:flex-end;justify-content:center;color:var(--tx-3);flex-shrink:0;pointer-events:none;user-select:none}
.ptr-indicator.ptr-indicator--anim{transition:height .22s ease}
.ptr-indicator-inner{display:flex;align-items:center;gap:6px;padding:0 0 10px;font-size:12px;line-height:1}
.ptr-icon{display:inline-flex;align-items:center;justify-content:center;opacity:.55;transition:transform .15s ease,opacity .15s ease;will-change:transform}
.ptr-indicator--ready .ptr-icon{opacity:1}
.ptr-indicator--refreshing .ptr-icon{opacity:1;animation:ptrSpin .75s linear infinite}
@keyframes ptrSpin{to{transform:rotate(360deg)}}
.pub-cover-images{display:flex;flex-wrap:wrap;gap:6px;padding:8px 0}
.pub-cover-img-wrap{position:relative;width:min(108px,calc((100% - 12px) / 3));aspect-ratio:1;border-radius:10px;overflow:hidden;background:var(--bg-2);border:1px solid var(--border)}
.pub-cover-img-wrap img{width:100%;height:100%;object-fit:cover;display:block;cursor:pointer}
.pub-cover-img-del{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;border:none;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1}
.mod-detail-comment-compose{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.mod-detail-comment-input-row{display:flex;gap:8px;align-items:center}
.mod-detail-reply-hint{font-size:12px;color:var(--tx-2);padding:6px 10px;background:var(--bg-1);border-radius:6px;line-height:1.4}
.thread-comment-del-btn{cursor:pointer;color:var(--tx-3)}
.thread-comment-del-btn:hover{color:var(--red)}

/* ═══ Shop ═══ */
.shop-balance-cards{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px;
  padding:12px 16px 10px;
  flex-shrink:0;
  background:var(--bg-0);
  border-bottom:1px solid var(--hairline);
}
.shop-balance-cards:has(.shop-balance-card--bonus:not(.hidden)){
  grid-template-columns:repeat(3,minmax(0,1fr));
}
.shop-balance-card{
  padding:12px 14px;
  border-radius:12px;
  border:1px solid var(--hairline);
  background:var(--bg-1);
  display:flex;
  flex-direction:column;
  gap:4px;
  min-width:0;
}
.shop-balance-card--ss .shop-balance-card-value{color:var(--tx-1)}
.shop-balance-card--bonus .shop-balance-card-value{color:#b45309}
.shop-balance-card-label{font-size:11px;font-weight:600;color:var(--tx-3);letter-spacing:.02em}
.shop-balance-card-value{font-size:20px;font-weight:800;color:var(--tx-1);letter-spacing:-.02em;line-height:1.15;font-variant-numeric:tabular-nums}
.shop-balance-card.hidden{display:none}
.shop-balance-card.skel-card{pointer-events:none}
@media (max-width:520px){
  .shop-balance-cards:has(.shop-balance-card--bonus:not(.hidden)){
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  .shop-balance-card--bonus{grid-column:1/-1}
  .shop-balance-card-value{font-size:18px}
}
#shopPendingBar{padding:10px 16px 0;background:var(--bg-0)}
#shopPendingBar:empty{padding:0}
.shop-tabs{display:flex;gap:0;padding:0 16px;border-bottom:1px solid var(--hairline);background:var(--bg-0);flex-shrink:0}
.shop-tab{flex:1;padding:12px 8px;font-size:14px;font-weight:600;color:var(--tx-3);background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;font-family:inherit;transition:color .15s,border-color .15s}
.shop-tab.active{color:var(--tx-1);border-bottom-color:var(--accent)}
.shop-scroll{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:calc(16px + env(safe-area-inset-bottom))}
.shop-pane{display:none;padding:16px 20px 24px}
.shop-pane.active{display:block}
.shop-section{margin-bottom:28px}
.shop-section-title{margin:0 0 12px;font-size:15px;font-weight:700;color:var(--tx-1)}
.shop-mem-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.shop-mem-card{padding:14px;border-radius:12px;border:1px solid var(--hairline);background:var(--bg-1)}
.shop-mem-card--active{border-color:var(--accent);background:var(--accent-dim)}
.shop-mem-card-name{font-size:13px;font-weight:700;color:var(--tx-1)}
.shop-mem-card-status{display:block;margin-top:6px;font-size:12px;color:var(--tx-2)}
.shop-daily-row{display:flex;align-items:center;justify-content:space-between;margin-top:14px;padding:12px 14px;border-radius:10px;background:var(--bg-1);border:1px solid var(--hairline)}
.shop-daily-value{font-size:15px;font-weight:700;color:var(--tx-1)}
.shop-boost-btn{margin-top:12px;width:100%}
.shop-subtabs{display:flex;gap:8px;margin-bottom:12px}
.shop-subtab{flex:1;padding:8px 12px;border-radius:999px;border:1px solid var(--hairline);background:var(--bg-1);font-size:13px;font-weight:600;color:var(--tx-2);cursor:pointer;font-family:inherit}
.shop-subtab.active{background:var(--accent);color:var(--on-accent);border-color:transparent}
.shop-mem-price-card{padding:20px;border-radius:14px;border:1px solid var(--hairline);background:var(--bg-1);text-align:center}
.shop-mem-price-yuan{font-size:32px;font-weight:800;color:var(--tx-1);letter-spacing:-.02em}
.shop-mem-price-unit{font-size:14px;color:var(--tx-3);margin-left:4px}
.shop-mem-price-name{margin:8px 0 16px;font-size:13px;color:var(--tx-2)}
.shop-compare-wrap{
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior-x:contain;
  margin:0 -20px;
  padding:0 20px 4px;
  scrollbar-width:thin;
}
.shop-compare-table{width:100%;min-width:min(100%, 360px);border-collapse:collapse;font-size:12px;table-layout:fixed}
.shop-compare-table th,.shop-compare-table td{padding:10px 6px;text-align:center;border-bottom:1px solid var(--hairline);vertical-align:middle;word-break:break-word}
.shop-compare-table th{font-weight:600;color:var(--tx-2);font-size:11px}
.shop-compare-table td:first-child,.shop-compare-table th:first-child{
  text-align:left;
  font-weight:600;
  color:var(--tx-1);
  width:38%;
  min-width:108px;
  position:sticky;
  left:0;
  z-index:1;
  background:var(--bg-0);
  box-shadow:4px 0 8px -6px rgba(0,0,0,.18);
}
.shop-compare-table th:not(:first-child),.shop-compare-table td:not(:first-child){width:20.666%}
@media (max-width:520px){
  .shop-pane{padding-left:16px;padding-right:16px}
  .shop-compare-wrap{margin:0 -16px;padding:0 16px 6px}
  .shop-compare-table{font-size:11px;min-width:320px}
  .shop-compare-table th,.shop-compare-table td{padding:8px 4px}
  .shop-compare-table td:first-child,.shop-compare-table th:first-child{min-width:96px;width:34%}
}
.shop-check{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;font-size:13px;font-weight:700}
.shop-check--yes{background:rgba(34,197,94,.15);color:#16a34a}
.shop-check--no{color:var(--tx-3)}
.shop-tier-hint{margin:0 0 10px;font-size:12px;color:var(--tx-3);line-height:1.45}
.shop-tier-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.shop-tier-card{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px 10px;border-radius:12px;border:1px solid var(--hairline);background:var(--bg-1);cursor:pointer;font-family:inherit;transition:border-color .15s,background .15s}
.shop-tier-card:hover{border-color:var(--accent);background:var(--bg-2)}
.shop-tier-yuan{font-size:12px;font-weight:600;color:var(--tx-3)}
.shop-tier-amount{font-size:18px;font-weight:800;color:var(--tx-1);letter-spacing:-.02em}
/* ── 邀请码 ── */
.invite-code-label{display:block;margin-bottom:8px}
.invite-code-box{display:flex;align-items:center;gap:10px;padding:10px 12px 10px 16px;border-radius:12px;border:1px solid var(--border);background:var(--bg-1)}
.invite-code-value{flex:1;min-width:0;font-size:24px;font-weight:800;letter-spacing:.18em;color:var(--tx-1);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.invite-copy-btn{flex-shrink:0}
.invite-poster-wrap{display:flex;flex-direction:column;align-items:center;gap:10px}
/* 长按保存要能触发系统菜单，别把 img 的默认长按行为禁掉 */
.invite-poster-img{display:block;width:100%;max-width:320px;height:auto;border-radius:12px}
.invite-poster-hint{margin:0;text-align:center}
.invite-tagline{margin:12px 0 0;font-size:14px;color:var(--tx-2);line-height:1.5}
.invite-progress-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.invite-progress-num{font-size:15px;font-weight:700;color:var(--tx-1)}
.invite-progress-track{height:8px;border-radius:999px;background:var(--accent-dim);overflow:hidden}
.invite-progress-fill{height:100%;border-radius:999px;background:var(--accent);transition:width .4s ease}
.invite-rows{display:flex;flex-direction:column;gap:10px;margin-top:16px}
.invite-row{display:flex;align-items:center;gap:12px}
.invite-row-av{width:44px;height:44px;flex-shrink:0}
.invite-row-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.invite-row-nick{font-size:15px;font-weight:600;color:var(--tx-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}
.invite-row-uid{font-size:12px;color:var(--tx-3);line-height:1.2}
.invite-row-reward{font-size:14px;font-weight:600;color:var(--tx-1);flex-shrink:0}
.invite-row-av-skel{width:44px;height:44px;border-radius:50%;background:var(--bg-1);border:1.5px dashed var(--border);flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--tx-3);font-size:20px;line-height:1;cursor:pointer}
.invite-row-skel{height:12px;border-radius:999px;background:var(--bg-1);border:1px solid var(--border)}
.invite-row-skel--nick{width:96px;height:14px}
.invite-row-skel--uid{width:64px}
/* 邀请页加载骨架屏（shimmer） */
.invite-skel-label{display:block;height:12px;width:76px;border-radius:6px;margin-bottom:10px}
.invite-skel-box{display:block;height:46px;width:100%;border-radius:var(--radius)}
.invite-skel-box--sm{height:40px}
.invite-skel-line{display:block;height:12px;border-radius:6px}
.invite-skel-line--tag{width:60%;margin-top:12px}
.invite-skel-line--head{width:40%}
.invite-skel-track{display:block;height:6px;width:100%;border-radius:999px;margin-top:14px}
.invite-skel-av{width:44px;height:44px;border-radius:50%;flex-shrink:0}
.invite-skel-line--nick{width:96px;height:14px}
.invite-skel-line--uid{width:64px}
.invite-skel-reward{width:36px;height:14px;border-radius:6px;flex-shrink:0}
.invite-rows .invite-skel-line{margin:0}
.invite-note{margin:14px 0 0;line-height:1.5}
.invite-redeem-row{display:flex;align-items:center;gap:10px}
.invite-redeem-input{flex:1;min-width:0;letter-spacing:.08em}
.invite-redeem-btn{flex-shrink:0}
.invite-redeem-done{display:flex;align-items:center;gap:8px;padding:12px 14px;border-radius:12px;border:1px solid var(--hairline);background:var(--bg-1);color:var(--tx-1);font-size:14px;font-weight:600}
.invite-redeem-done svg{flex-shrink:0;color:var(--accent)}
.shop-frame-section{margin-bottom:0}
.shop-frame-current{
  display:flex;
  align-items:center;
  gap:16px;
  padding:16px;
  margin-bottom:16px;
  border-radius:14px;
  border:1px solid var(--hairline);
  background:var(--bg-1);
}
.shop-frame-current-preview{flex-shrink:0;line-height:0}
.shop-frame-current-meta{flex:1;min-width:0}
.shop-frame-current-name{font-size:16px;font-weight:700;color:var(--tx-1);line-height:1.3}
.shop-frame-current-desc{margin-top:6px;font-size:13px;color:var(--tx-3);line-height:1.45}
.shop-frame-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(96px,112px));
  gap:10px;
  justify-content:flex-start;
}
.shop-frame-tile{
  display:flex;
  flex-direction:column;
  align-items:stretch;
  gap:7px;
  padding:0;
  border:none;
  background:none;
  cursor:pointer;
  font-family:inherit;
  text-align:center;
  -webkit-tap-highlight-color:transparent;
  max-width:112px;
}
/* 未拥有：整体半透明，而不是盖一层灰 —— 灰色只在部分主题下看着对 */
.shop-frame-tile--locked{cursor:not-allowed;opacity:.45}
.shop-frame-tile-box{
  aspect-ratio:1;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:7px;
  border-radius:11px;
  border:1px solid var(--hairline);
  background:var(--bg-1);
  transition:border-color .15s,background .15s;
  position:relative;
}
.shop-frame-tile.active .shop-frame-tile-box{
  border-color:color-mix(in srgb,var(--accent) 38%,var(--hairline));
  background:color-mix(in srgb,var(--accent) 10%,var(--bg-1));
}
.shop-frame-tile-name{
  font-size:12px;
  font-weight:600;
  color:var(--tx-2);
  line-height:1.25;
  padding:0 2px;
}
.shop-frame-tile.active .shop-frame-tile-name{color:var(--tx-1)}
.shop-frame-tile-visual{
  width:94%;
  max-width:none;
  aspect-ratio:1;
  border-radius:50%;
  flex-shrink:0;
}
.shop-frame-tile-visual--none{
  display:flex;
  align-items:center;
  justify-content:center;
  color:var(--tx-3);
  background:var(--bg-2);
  border:1px dashed var(--hairline);
}
.shop-frame-forbidden-icon{width:68%;height:68%;display:block}
.shop-frame-tile-visual.sable-avatar-wrap{
  display:flex;
  align-items:center;
  justify-content:center;
  overflow:visible;
}
.shop-frame-tile-hole{
  border-radius:50%;
  background:var(--bg-2);
  box-sizing:border-box;
}

/* ── Avatar frame (global) ── */
.sable-avatar-wrap{position:relative;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;flex-shrink:0;box-sizing:border-box;overflow:visible}
.sable-avatar-wrap:not([class*="--frame-"]) img,.sable-avatar-wrap:not([class*="--frame-"]) .sable-avatar-logo{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.sable-avatar-wrap:not([class*="--frame-"]) .sable-avatar-logo{width:56%;height:56%;object-fit:contain}
.sable-avatar-wrap[class*="--frame-"]{border-radius:0}
.sable-avatar-wrap--frame-beta{
  transform:scale(1.22);
  transform-origin:center center;
}
.sable-avatar-frame-hole{
  position:absolute;
  border-radius:50%;
  overflow:hidden;
  display:flex;
  align-items:center;
  justify-content:center;
  z-index:1;
  box-sizing:border-box;
}
.sable-avatar-frame-hole .sable-avatar-face,
.sable-avatar-frame-hole > img{
  width:100%;
  height:100%;
  border-radius:50%;
  object-fit:cover;
  display:block;
}
.sable-avatar-frame-hole--default::before{
  content:'';
  display:block;
  width:56%;
  height:56%;
  max-width:62%;
  max-height:62%;
  flex-shrink:0;
  background:url(/logo.svg?v=3) center/contain no-repeat;
}
.sable-avatar-frame-img{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:contain;
  pointer-events:none;
  z-index:2;
  display:block;
  border-radius:0;
}
.shop-frame-tile-visual .sable-avatar-frame-hole.shop-frame-tile-hole{
  width:auto;
  height:auto;
  inset:auto;
}

/* ═══════════════════════════════════════════════════════
   ▼▼▼  THEME: DARK (default)  ▼▼▼
   Mono 黑白灰深色面：近黑底色 → 中灰 → 浅灰文字；
   accent 反转为浅灰，--on-accent 反转为深底色。
   ═══════════════════════════════════════════════════════ */
[data-theme="dark"]{
  --bg-0:#212121; --bg-1:#292929; --bg-2:#313131; --bg-3:#3C3C3C; --bg-4:#4C4C4C; --bg-5:#5C5C5C;
  --tx-1:#F2F2F2; --tx-2:#A6A6A6; --tx-3:#737373;
  --accent:#F2F2F2; --accent-h:#FFFFFF; --accent-dim:rgba(242,242,242,.10);
  --accent-grad:#F2F2F2; --accent-grad-soft:#313131;
  --glow:0 10px 30px -6px rgba(0,0,0,.55);
  --green:#A6A6A6; --red:#737373; --amber:#A6A6A6; --blue:#A6A6A6;
  --shadow-sm:0 1px 3px rgba(0,0,0,.5); --shadow-md:0 8px 26px -8px rgba(0,0,0,.65); --shadow-lg:0 20px 50px -10px rgba(0,0,0,.75);
  --surface:rgba(33,33,33,.78); --surface-strong:rgba(33,33,33,.90);
  --hairline:rgba(255,255,255,.07); --on-accent:#212121;
  --border:#404040; --border-strong:#505050;
  --bar:#1A1A1A;
}
/* ── 浅色 · 与 :root 同系，显式声明便于切换 ── */
[data-theme="light"]{
  --bg-0:#F2F2F2; --bg-1:#EBEBEB; --bg-2:#E0E0E0; --bg-3:#CCCCCC; --bg-4:#B3B3B3; --bg-5:#A6A6A6;
  --tx-1:#1A1A1A; --tx-2:#4D4D4D; --tx-3:#808080;
  --accent:#1A1A1A; --accent-h:#000000; --accent-dim:rgba(26,26,26,.06);
  --accent-grad:#1A1A1A; --accent-grad-soft:#E8E8E8;
  --glow:0 8px 28px -8px rgba(0,0,0,.14);
  --green:#1A1A1A; --red:#4D4D4D; --amber:#808080; --blue:#1A1A1A;
  --shadow-sm:0 1px 2px rgba(0,0,0,.05); --shadow-md:0 6px 20px -8px rgba(0,0,0,.10); --shadow-lg:0 18px 48px -12px rgba(0,0,0,.16);
  --surface:rgba(242,242,242,.75); --surface-strong:rgba(242,242,242,.88);
  --hairline:rgba(0,0,0,.07); --on-accent:#F2F2F2;
  --border:#A3A3A3; --border-strong:#8C8C8C;
  --bar:#E0E0E0;
}
/* ── 绛 · #8C3232 + #363636 + #CAD2C5 ──
 *  底色=#363636系  文字=#CAD2C5  按钮=#8C3232
 */
[data-theme="crimson"]{
  --bg-0:#1E201E; --bg-1:#272927; --bg-2:#303230; --bg-3:#363636; --bg-4:#4A4C4A; --bg-5:#5E605E;
  --tx-1:#CAD2C5; --tx-2:#9EA69A; --tx-3:#6E756A;
  --accent:#8C3232; --accent-h:#A84040; --accent-dim:rgba(140,50,50,.12);
  --accent-grad:#8C3232; --accent-grad-soft:#2A1818;
  --glow:0 10px 30px -6px rgba(140,50,50,.30);
  --green:#CAD2C5; --red:#8C3232; --amber:#6E756A; --blue:#CAD2C5;
  --shadow-sm:0 1px 3px rgba(0,0,0,.5); --shadow-md:0 8px 26px -8px rgba(0,0,0,.6); --shadow-lg:0 20px 50px -10px rgba(0,0,0,.7);
  --surface:rgba(30,32,30,.78); --surface-strong:rgba(30,32,30,.90);
  --hairline:rgba(140,50,50,.10); --on-accent:#CAD2C5;
  --border:#4A4C4A; --border-strong:#5E605E;
  --bar:#151715;
  --radius:12px; --radius-md:14px; --radius-lg:18px; --radius-xl:22px; --nav-h:64px;
}
/* ── 钢蓝 · #5B7FA7 + #50BDA3 + #ABDEF1 + #FFFFFF ──
 *  底=#FFFFFF  边框=#ABDEF1  文字2=#5B7FA7  按钮=#50BDA3
 */
[data-theme="steel"]{
  --bg-0:#FFFFFF; --bg-1:#F5FAFF; --bg-2:#EAF2FB; --bg-3:#ABDEF1; --bg-4:#87C8E6; --bg-5:#5B7FA7;
  --tx-1:#1A2A3A; --tx-2:#5B7FA7; --tx-3:#8AADCA;
  --accent:#50BDA3; --accent-h:#45A891; --accent-dim:rgba(80,189,163,.08);
  --accent-grad:#50BDA3; --accent-grad-soft:#E6F7F3;
  --glow:0 8px 28px -8px rgba(80,189,163,.20);
  --green:#50BDA3; --red:#5B7FA7; --amber:#ABDEF1; --blue:#5B7FA7;
  --shadow-sm:0 1px 2px rgba(0,0,0,.05); --shadow-md:0 6px 20px -8px rgba(0,0,0,.10); --shadow-lg:0 18px 48px -12px rgba(0,0,0,.14);
  --surface:rgba(255,255,255,.78); --surface-strong:rgba(255,255,255,.90);
  --hairline:rgba(91,127,167,.12); --on-accent:#FFFFFF;
  --border:#87C8E6; --border-strong:#5B7FA7;
  --bar:#E4EFF8;
  --radius:12px; --radius-md:14px; --radius-lg:18px; --radius-xl:22px; --nav-h:64px;
}
/* ── 紫雾 · #6D5B71 + #B8B0B9 + #FDFBF7 ──
 *  底色=#FDFBF7  边框/卡面=#B8B0B9  按钮=#6D5B71
 */
[data-theme="lavender"]{
  --bg-0:#FDFBF7; --bg-1:#F5F2EE; --bg-2:#EEEBE6; --bg-3:#DDD8D4; --bg-4:#C8C2BE; --bg-5:#B8B0B9;
  --tx-1:#2E2630; --tx-2:#524858; --tx-3:#7E7484;
  --accent:#6D5B71; --accent-h:#5A4A5E; --accent-dim:rgba(109,91,113,.08);
  --accent-grad:#6D5B71; --accent-grad-soft:#F0EDE8;
  --glow:0 8px 28px -8px rgba(109,91,113,.18);
  --green:#6D5B71; --red:#B8B0B9; --amber:#7E7484; --blue:#6D5B71;
  --shadow-sm:0 1px 2px rgba(0,0,0,.05); --shadow-md:0 6px 20px -8px rgba(0,0,0,.10); --shadow-lg:0 18px 48px -12px rgba(0,0,0,.14);
  --surface:rgba(253,251,247,.78); --surface-strong:rgba(253,251,247,.90);
  --hairline:rgba(109,91,113,.10); --on-accent:#FDFBF7;
  --border:#B8B0B9; --border-strong:#7E7484;
  --bar:#EDE9E4;
  --radius:12px; --radius-md:14px; --radius-lg:18px; --radius-xl:22px; --nav-h:64px;
}
/* ── 明黄 · 浅灰底 + 白色面板 + 高饱和黄点缀 ──
 *  底=#F0F0F0(浅灰)  卡面=#FFFFFF  按钮=#FFD60A
 */
[data-theme="golden"]{
  --bg-0:#F0F0F0; --bg-1:#FFFFFF; --bg-2:#F7F7F7; --bg-3:#E0E0E0; --bg-4:#C8C8C8; --bg-5:#A0A0A0;
  --tx-1:#1A1A1A; --tx-2:#5C5C5C; --tx-3:#8C8C8C;
  --accent:#C8A200; --accent-h:#B89500; --accent-dim:rgba(200,162,0,.12);
  --accent-grad:#C8A200; --accent-grad-soft:#FFF8D6;
  --glow:0 8px 28px -8px rgba(200,162,0,.22);
  --green:#C8A200; --red:#E0E0E0; --amber:#C8C8C8; --blue:#C8A200;
  --shadow-sm:0 1px 2px rgba(0,0,0,.05); --shadow-md:0 6px 20px -8px rgba(0,0,0,.10); --shadow-lg:0 18px 48px -12px rgba(0,0,0,.14);
  --surface:rgba(240,240,240,.78); --surface-strong:rgba(240,240,240,.90);
  --hairline:rgba(0,0,0,.08); --on-accent:#1A1A1A;
  --border:#B0B0B0; --border-strong:#949494;
  --bar:#E2E2E2;
  --radius:12px; --radius-md:14px; --radius-lg:18px; --radius-xl:22px; --nav-h:64px;
}


[data-theme="dark"] img[src*="logo.svg"],
[data-theme="crimson"] img[src*="logo.svg"],
[data-theme="dark"] .sable-avatar--default::before,
[data-theme="dark"] .sable-avatar-wrap--default::before,
[data-theme="dark"] .sable-avatar-frame-hole--default::before,
[data-theme="dark"] .store-mall-card-media-empty::before,
[data-theme="dark"] .mod-detail-gallery-empty::before,
[data-theme="dark"] .store-mall-empty-icon::before,
[data-theme="crimson"] .sable-avatar--default::before,
[data-theme="crimson"] .sable-avatar-wrap--default::before,
[data-theme="crimson"] .sable-avatar-frame-hole--default::before,
[data-theme="crimson"] .store-mall-card-media-empty::before,
[data-theme="crimson"] .mod-detail-gallery-empty::before,
[data-theme="crimson"] .store-mall-empty-icon::before{filter:invert(.92) brightness(1.05)}
.floating-ball img[src*="logo.svg"]{filter:none!important}

/* ═══════════════════════════════════════════════════════
   ▼▼▼  SETTINGS PAGE (route /settings)  ▼▼▼
   ═══════════════════════════════════════════════════════ */
.theme-settings-btn{position:absolute;bottom:20px;right:20px;width:40px;height:40px;border-radius:50%;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .45s ease,color .25s,border-color .25s,background .25s;z-index:2;font-family:inherit;padding:0;text-decoration:none}
.theme-settings-btn:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-dim);transform:rotate(80deg)}

.settings-overlay .mod-detail-header{padding:14px 20px;border-bottom:1px solid var(--hairline)}
.settings-body{padding:30px 22px 60px;max-width:780px;margin:0 auto;width:100%;box-sizing:border-box;overflow-x:hidden}
.settings-section{margin-bottom:40px}
.settings-section-label{font-size:11px;font-weight:700;color:var(--tx-3);letter-spacing:.24em;text-transform:uppercase;margin-bottom:10px}
.settings-section-desc{font-size:13.5px;color:var(--tx-2);line-height:1.7;margin-bottom:20px;max-width:540px}
/* 设置页「其他」分组：整行可点，右侧 › 指向弹窗或子页 */
.settings-nav-row{
  display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;
  padding:12px 0;border:0;border-bottom:1px solid var(--hairline);border-radius:0;
  background:transparent;font-family:inherit;text-align:left;color:inherit;cursor:pointer;
  transition:opacity .15s;
}
.settings-nav-row:hover{opacity:.7}
.settings-nav-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.settings-nav-title{font-size:14px;font-weight:500;color:var(--tx-1)}
.settings-nav-desc{font-size:12px;color:var(--tx-3);line-height:1.45}
.settings-nav-chevron{flex-shrink:0;font-size:18px;line-height:1;color:var(--tx-3);opacity:.55}
/* 退出登录：设置页最末一项，单独占一行 */
.settings-logout-section{margin-bottom:0}
.settings-logout-btn{width:100%;display:flex;align-items:center;justify-content:center;padding:11px 16px;font-size:14px;font-weight:500;box-sizing:border-box}
.settings-import-mode-list{display:flex;flex-direction:column;gap:10px}
.settings-import-mode-opt{
  display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;
  padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius);
  background:var(--bg-1);cursor:pointer;font-family:inherit;text-align:left;color:inherit;
  transition:border-color .15s,background .15s;
}
.settings-import-mode-opt:hover{border-color:var(--bg-5);background:var(--bg-2)}
.settings-import-mode-opt--danger:hover{border-color:color-mix(in srgb,var(--error) 35%,var(--bg-3))}
.settings-import-mode-opt-title{font-size:14px;font-weight:600;color:var(--tx-1)}
.settings-import-mode-opt--danger .settings-import-mode-opt-title{color:var(--error)}
.settings-import-mode-opt-desc{font-size:12px;color:var(--tx-3);line-height:1.45}
.plugin-backup-progress{position:fixed;inset:0;z-index:10050;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(0,0,0,.45);pointer-events:auto}
.plugin-backup-progress-card{width:min(320px,100%);padding:20px 22px;border-radius:var(--radius-lg);background:var(--bg-1);border:1px solid var(--border);box-shadow:var(--shadow-lg)}
.plugin-backup-progress-title{font-size:15px;font-weight:700;color:var(--tx-1);margin-bottom:14px}
.plugin-backup-progress-bar{height:6px;border-radius:999px;background:var(--bg-3);overflow:hidden}
.plugin-backup-progress-fill{height:100%;width:0;border-radius:999px;background:var(--accent);transition:width .18s ease}
.plugin-backup-progress-pct{margin-top:10px;font-size:22px;font-weight:700;color:var(--tx-1);font-variant-numeric:tabular-nums}
.plugin-backup-progress-detail{margin-top:6px;font-size:12px;color:var(--tx-3);line-height:1.5;min-height:18px}
.theme-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.settings-section .theme-card-grid{margin-top:20px}
.theme-card{position:relative;display:flex;flex-direction:column;gap:14px;padding:16px;border:1px solid var(--border);border-radius:16px;background:var(--bg-1);text-align:left;cursor:pointer;font-family:inherit;color:inherit;transition:border-color .25s,transform .25s,box-shadow .25s;min-width:0;max-width:100%;box-sizing:border-box;-webkit-appearance:none;appearance:none}
.theme-card:hover{border-color:var(--bg-5);transform:translateY(-3px);box-shadow:var(--shadow-md)}
.theme-card.active{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}
.theme-card-preview{width:100%;aspect-ratio:16/10;border-radius:10px;overflow:hidden;border:1px solid var(--border);position:relative;display:flex;flex-direction:column}
.theme-card-preview .tcp-bar{height:18px;display:flex;align-items:center;gap:6px;padding:0 8px;flex-shrink:0}
.theme-card-preview .tcp-dot{width:6px;height:6px;border-radius:50%}
.theme-card-preview .tcp-title{display:block;height:4px;width:48px;border-radius:2px}
.theme-card-preview .tcp-body{flex:1;display:flex;flex-direction:column;gap:6px;padding:8px}
.theme-card-preview .tcp-card{flex:1;border-radius:6px;padding:6px 8px;display:flex;flex-direction:column;gap:4px;justify-content:center}
.theme-card-preview .tcp-line{height:4px;border-radius:2px;width:60%}
.theme-card-preview .tcp-line--lg{width:80%;height:5px}
.theme-card-preview .tcp-line--inv{width:50%}
.theme-card-preview .tcp-nav{height:18px;display:flex;align-items:center;justify-content:space-around;flex-shrink:0;padding:0 8px}
.theme-card-preview .tcp-nav span{width:10px;height:3px;border-radius:2px;display:block}
.theme-card-preview .tcp-nav span.tcp-nav-cta{width:14px;height:14px;border-radius:50%}
.theme-card-preview--dark{background:#212121}
.theme-card-preview--dark .tcp-bar{background:#1A1A1A;border-bottom:1px solid #404040}
.theme-card-preview--dark .tcp-dot{background:#4C4C4C}
.theme-card-preview--dark .tcp-title{background:#4C4C4C}
.theme-card-preview--dark .tcp-card{background:#292929;border:1px solid #404040}
.theme-card-preview--dark .tcp-card--accent{background:#313131;border:1px solid #4C4C4C}
.theme-card-preview--dark .tcp-line{background:#4C4C4C}
.theme-card-preview--dark .tcp-line--inv{background:#737373}
.theme-card-preview--dark .tcp-nav{background:#1A1A1A;border-top:1px solid #404040}
.theme-card-preview--dark .tcp-nav span{background:#4C4C4C}
.theme-card-preview--dark .tcp-nav span.tcp-nav-cta{background:#A6A6A6;width:14px;height:14px}
/* ── Crimson 绛 · 底=#363636 文=#CAD2C5 按钮=#8C3232 ── */
.theme-card-preview--crimson{background:#1E201E}
.theme-card-preview--crimson .tcp-bar{background:#151715;border-bottom:1px solid #363636}
.theme-card-preview--crimson .tcp-dot{background:#8C3232}
.theme-card-preview--crimson .tcp-title{background:#CAD2C5}
.theme-card-preview--crimson .tcp-card{background:#272927;border:1px solid #363636}
.theme-card-preview--crimson .tcp-card--accent{background:#363636;border:1px solid #4A4C4A}
.theme-card-preview--crimson .tcp-line{background:#CAD2C5}
.theme-card-preview--crimson .tcp-line--inv{background:#8C3232}
.theme-card-preview--crimson .tcp-nav{background:#151715;border-top:1px solid #363636}
.theme-card-preview--crimson .tcp-nav span{background:#CAD2C5}
.theme-card-preview--crimson .tcp-nav span.tcp-nav-cta{background:#8C3232;width:14px;height:14px}
/* ── Steel 钢蓝 · 底=#FFFFFF 边框=#ABDEF1 文=#5B7FA7 按钮=#50BDA3 ── */
.theme-card-preview--steel{background:#FFFFFF}
.theme-card-preview--steel .tcp-bar{background:#E4EFF8;border-bottom:1px solid #ABDEF1}
.theme-card-preview--steel .tcp-dot{background:#50BDA3}
.theme-card-preview--steel .tcp-title{background:#5B7FA7}
.theme-card-preview--steel .tcp-card{background:#F5FAFF;border:1px solid #ABDEF1}
.theme-card-preview--steel .tcp-card--accent{background:#ABDEF1;border:1px solid #87C8E6}
.theme-card-preview--steel .tcp-line{background:#ABDEF1}
.theme-card-preview--steel .tcp-line--inv{background:#50BDA3}
.theme-card-preview--steel .tcp-nav{background:#E4EFF8;border-top:1px solid #ABDEF1}
.theme-card-preview--steel .tcp-nav span{background:#ABDEF1}
.theme-card-preview--steel .tcp-nav span.tcp-nav-cta{background:#50BDA3;width:14px;height:14px}
/* ── Lavender 紫雾 · 底=#FDFBF7 边框=#B8B0B9 按钮=#6D5B71 ── */
.theme-card-preview--lavender{background:#FDFBF7}
.theme-card-preview--lavender .tcp-bar{background:#EDE9E4;border-bottom:1px solid #B8B0B9}
.theme-card-preview--lavender .tcp-dot{background:#6D5B71}
.theme-card-preview--lavender .tcp-title{background:#B8B0B9}
.theme-card-preview--lavender .tcp-card{background:#FDFBF7;border:1px solid #B8B0B9}
.theme-card-preview--lavender .tcp-card--accent{background:#B8B0B9;border:1px solid #C8C2BE}
.theme-card-preview--lavender .tcp-line{background:#B8B0B9}
.theme-card-preview--lavender .tcp-line--inv{background:#6D5B71}
.theme-card-preview--lavender .tcp-nav{background:#EDE9E4;border-top:1px solid #B8B0B9}
.theme-card-preview--lavender .tcp-nav span{background:#B8B0B9}
.theme-card-preview--lavender .tcp-nav span.tcp-nav-cta{background:#6D5B71;width:14px;height:14px}
/* ── Golden 明黄 · 底=#F0F0F0(浅灰) 卡=#FFFFFF 按钮=#FFD60A ── */
.theme-card-preview--golden{background:#F0F0F0}
.theme-card-preview--golden .tcp-bar{background:#E2E2E2;border-bottom:1px solid #E0E0E0}
.theme-card-preview--golden .tcp-dot{background:#FFD60A}
.theme-card-preview--golden .tcp-title{background:#C8C8C8}
.theme-card-preview--golden .tcp-card{background:#FFFFFF;border:1px solid #E0E0E0}
.theme-card-preview--golden .tcp-card--accent{background:#FFF8D6;border:1px solid #FFD60A}
.theme-card-preview--golden .tcp-line{background:#E0E0E0}
.theme-card-preview--golden .tcp-line--inv{background:#FFD60A}
.theme-card-preview--golden .tcp-nav{background:#E2E2E2;border-top:1px solid #E0E0E0}
.theme-card-preview--golden .tcp-nav span{background:#C8C8C8}
.theme-card-preview--golden .tcp-nav span.tcp-nav-cta{background:#FFD60A;width:14px;height:14px}

.theme-card-preview--light{background:#F2F2F2}
.theme-card-preview--light .tcp-bar{background:#E0E0E0;border-bottom:1px solid #CCCCCC}
.theme-card-preview--light .tcp-dot{background:#B3B3B3}
.theme-card-preview--light .tcp-title{background:#B3B3B3}
.theme-card-preview--light .tcp-card{background:#F2F2F2;border:1px solid #CCCCCC}
.theme-card-preview--light .tcp-card--accent{background:#E8E8E8;border:1px solid #B3B3B3}
.theme-card-preview--light .tcp-line{background:#CCCCCC}
.theme-card-preview--light .tcp-line--inv{background:#A6A6A6}
.theme-card-preview--light .tcp-nav{background:#E0E0E0;border-top:1px solid #CCCCCC}
.theme-card-preview--light .tcp-nav span{background:#B3B3B3}
.theme-card-preview--light .tcp-nav span.tcp-nav-cta{background:#1A1A1A}
.theme-card-meta{display:flex;flex-direction:column;gap:4px;padding:0 2px 2px;min-width:0}
.theme-card-name{font-size:14.5px;font-weight:700;color:var(--tx-1);letter-spacing:.01em;display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}
.theme-card-name>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:1}
.theme-card-tag{font-size:9px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;padding:2px 9px;border-radius:999px;background:var(--bg-2);color:var(--tx-2);border:1px solid var(--border);flex-shrink:0}
.theme-card-desc{font-size:12.5px;color:var(--tx-2);line-height:1.6}
.theme-card-check{position:absolute;top:20px;right:20px;width:22px;height:22px;border-radius:50%;border:1px solid var(--bg-4);display:flex;align-items:center;justify-content:center;background:transparent;transition:.25s}
.theme-card-check::after{content:'';width:11px;height:6px;border-left:1.5px solid var(--on-accent);border-bottom:1.5px solid var(--on-accent);transform:rotate(-45deg) translate(1px,-1px);opacity:0;transition:opacity .2s}
.theme-card.active .theme-card-check{background:var(--accent);border-color:transparent;box-shadow:0 4px 12px -3px rgba(0,0,0,.25)}
.theme-card.active .theme-card-check::after{opacity:1}

/* hover micro-feedback */
.btn,.btn-icon,.toolbar-action-btn,.store-rank-tab,.store-type-btn,.store-price-btn,.store-tag-chip,.store-filter-toggle{transition:background .25s ease,border-color .25s ease,color .25s ease,transform .25s ease,box-shadow .25s ease}
.btn-icon:hover{transform:translateY(-1px)}
.btn-icon:active{transform:translateY(0) scale(.96)}
.store-mall-card,.repo-card,.create-type-btn{transition:border-color .3s ease,transform .3s ease,box-shadow .3s ease,background .3s ease}
.conv-card{transition:background .25s ease}

.input,.toggle,.toggle::after,.qp-toggle,.qp-toggle::after,.slot-toggle-track,.slot-toggle-thumb{transition:background .3s ease,border-color .25s ease,color .25s ease,transform .3s cubic-bezier(.4,.8,.2,1),box-shadow .3s ease}
a,.profile-tab,.inbox-tabs button{transition:color .25s ease,border-color .25s ease,background .25s ease}
.typing > span{will-change:opacity,transform}

@media (prefers-reduced-motion: reduce){
  .page.active,.chat-layer.active,.mod-detail-overlay,.modal,.settings-section,.theme-card,.qp-collapse-wrap,.search-results-overlay,.search-results-body,.search-results-tab-pane,.store-search-dropdown{animation:none!important;transition:none!important}
  *{transition-duration:.01ms!important}
}

/* Search indicator */
.search-indicator{font-size:12px;color:var(--tx-3);margin-top:8px;padding:6px 10px;background:var(--bg-1);border-radius:var(--radius);display:inline-flex;align-items:center;gap:6px}
.search-indicator.search-active{color:var(--accent)}
.search-indicator.search-done{color:var(--tx-2)}
.search-done-tag{display:block;width:fit-content;font-size:11px;color:var(--tx-3);background:var(--bg-1);border:1px solid var(--border);border-radius:4px;padding:1px 6px;margin:12px 0}
.search-indicator-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:searchPulse 1s infinite}
@keyframes searchPulse{0%,100%{opacity:1}50%{opacity:.3}}

/* Link cards */
.msg-text .link-card{white-space:normal}
.link-card{display:flex;gap:10px;max-width:360px;padding:10px 12px;margin:8px 0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-1);text-decoration:none;color:inherit;cursor:pointer;transition:border-color .15s,box-shadow .15s;overflow:hidden}
.link-card:hover{border-color:var(--accent);box-shadow:0 2px 8px rgba(0,0,0,.08)}
.link-card-thumb{flex-shrink:0;width:56px;height:56px;border-radius:6px;object-fit:cover;background:var(--bg-2)}
.link-card-body{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:2px}
.link-card-title{font-size:13px;font-weight:600;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.link-card-desc{font-size:11px;color:var(--tx-3);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.link-card-domain{font-size:10px;color:var(--tx-4);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.link-card--pending{opacity:.92}
.link-card--pending .link-card-desc{color:var(--accent);font-style:normal}

/* ═══ Editor Chat ═══ */
#editorChatView.active{display:flex;flex-direction:column;height:100%}
#editorChatView .echat-chat-host{
  flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;
}
#editorChatView .echat-chat-host > #chatView{
  flex:1;min-height:0;display:flex;flex-direction:column;
}
#editorChatView #chatView.editor-chat-reuse #chatDetailBtn{display:none}

/* Mini Editor Panel (floating, draggable — same size as editor-assist) */
.mini-editor-overlay{position:fixed;z-index:900;left:0;top:0;width:min(360px,calc(100vw - 20px));height:min(520px,calc(100vh - 20px));max-width:calc(100vw - 20px);max-height:calc(100vh - 20px);display:flex;flex-direction:column;border-radius:14px;border:1px solid var(--hairline);box-shadow:0 4px 24px rgba(0,0,0,.15);overflow:hidden}
.mini-editor-panel{display:flex;flex-direction:column;height:100%;background:var(--bg-0);overflow:hidden}
.mini-editor-header{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border);background:var(--bg-1);touch-action:none;cursor:grab;flex-shrink:0}
.mini-editor-header:active{cursor:grabbing}
.mini-editor-body{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:0}
.mini-editor-body .editor-form{padding:10px 12px;font-size:12px;max-width:100%}
.mini-editor-body .editor-form textarea,.mini-editor-body .editor-form input{font-size:11px}
.mini-editor-body .editor-form .form-group{margin-bottom:8px}
.mini-editor-body .editor-form img{max-width:100%;height:auto}
.mini-editor-body .ea-diff-overlay{font-size:11px}
.mini-editor-form{display:flex;flex-direction:column;gap:10px}
.mini-editor-field{display:flex;flex-direction:column;gap:4px}
.mini-editor-field label{font-weight:500;color:var(--tx-2)}
.mini-editor-field textarea{resize:vertical;min-height:48px}
.mini-editor-diff{border-radius:6px;overflow:hidden;border:1px solid var(--bg-2);max-height:200px;overflow-y:auto}

/* Prompt Slots Overlay */
.prompt-slots-overlay{position:fixed;inset:0;z-index:850;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;padding:16px}
.prompt-slots-panel{background:var(--bg-0);border-radius:12px;width:100%;max-width:560px;max-height:85vh;display:flex;flex-direction:column;box-shadow:0 8px 32px rgba(0,0,0,.3)}
.prompt-slots-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--bg-2);flex-wrap:wrap;gap:6px}
.prompt-slots-body{flex:1;overflow-y:auto;padding:12px 16px}
.prompt-slots-footer{padding:10px 16px;border-top:1px solid var(--bg-2)}

.prompt-slot-item{border:1px solid var(--bg-2);border-radius:8px;margin-bottom:8px;background:var(--bg-1);transition:box-shadow .2s}
.prompt-slot-item.dragging{opacity:.5;box-shadow:0 4px 16px rgba(0,0,0,.2)}
.prompt-slot-header{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--bg-2)}
.prompt-slot-drag-handle{cursor:grab;opacity:.5;font-size:14px}
.prompt-slot-content{padding:8px 12px}
.prompt-slot-content textarea{width:100%;resize:vertical;min-height:60px}
.prompt-slot-locked{opacity:.6;font-style:italic}
.prompt-slot-locked pre{margin:0;white-space:pre-wrap;word-break:break-all}

/* Editor Chat floating ball */
#editorChatView .floating-ball{position:fixed;bottom:100px;right:20px;z-index:800;cursor:grab;width:48px;height:48px;border-radius:50%;background:var(--bg-0);box-shadow:0 2px 12px rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;touch-action:none;user-select:none;transition:transform .2s,opacity .2s}
#editorChatView .floating-ball:hover{transform:scale(1.06)}
#editorChatView .floating-ball.qp-hidden{opacity:0;pointer-events:none;transform:scale(.6)}
#editorChatView .floating-ball.dragging{cursor:grabbing;transform:scale(1.08);transition:none}
#editorChatView .floating-ball.qp-hidden:hover{transform:scale(.6)}

/* ═══════════ 仓库文件夹（苹果 App 文件夹式） ═══════════ */
/* 文件夹卡片封面：2×2 内部封面小宫格 */
.repo-folder-cover{position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:3px;padding:3px;background:var(--bg-2)}
.repo-folder-cell{position:relative;overflow:hidden;border-radius:8px;background:var(--bg-3)}
.repo-folder-cell > img,.repo-folder-cell > .media-crop-fill{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.repo-folder-card .store-mall-card-media{background:var(--bg-3)}

/* 长按拖拽：卡片内部不接收指针（长按抓到卡片本身而非图片），并禁原生图片拖拽/长按菜单 */
#profileContent .store-mall-card,.repo-folder-grid .store-mall-card{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}
#profileContent .store-mall-card *,.repo-folder-grid .store-mall-card *{pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none}
#profileContent .store-mall-card img,.repo-folder-grid .store-mall-card img,.repo-folder-cover img{-webkit-user-drag:none;user-select:none;pointer-events:none}
/* 拖拽中：源卡片淡出、ghost 跟手、文件夹高亮 */
body.repo-drag-active{user-select:none;-webkit-user-select:none}
.store-mall-card.repo-dragging,.editor-showcase-item.repo-dragging,.pub-cover-img-wrap.repo-dragging{opacity:.32;transition:opacity .12s}
.repo-drag-ghost{position:fixed;z-index:9999;margin:0;pointer-events:none;border-radius:14px;overflow:hidden;
  box-shadow:0 12px 32px rgba(0,0,0,.4);transform:scale(1.06);opacity:.96;transition:none}
.store-mall-card.repo-folder-droptarget{outline:3px solid var(--accent);outline-offset:-1px;border-radius:14px;transform:scale(1.04);transition:transform .1s}

/* 文件夹悬浮小面板 */
.repo-folder-overlay{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;
  padding:24px;background:rgba(0,0,0,.5);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  animation:repoFolderFade .16s ease}
@keyframes repoFolderFade{from{opacity:0}to{opacity:1}}
.repo-folder-panel{width:min(420px,80vw);max-height:70vh;display:flex;flex-direction:column;
  background:var(--bg-1);border:1px solid var(--bg-4);border-radius:22px;overflow:hidden;
  box-shadow:0 24px 64px rgba(0,0,0,.45);animation:repoFolderPop .18s cubic-bezier(.2,.9,.3,1.1)}
@keyframes repoFolderPop{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}
.repo-folder-panel-head{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--bg-4)}
.repo-folder-name{flex:1;min-width:0;display:flex;align-items:center;gap:6px;background:transparent;border:none;
  color:var(--tx-1);font-size:16px;font-weight:700;cursor:pointer;text-align:left;padding:4px 6px;border-radius:8px}
.repo-folder-name:hover{background:var(--bg-2)}
.repo-folder-name > span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.repo-folder-head-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
.repo-folder-head-actions .back-btn{font-size:22px;line-height:1;width:32px;height:32px;display:flex;align-items:center;justify-content:center}
.repo-folder-panel-body{overflow-y:auto;padding:4px 4px 8px}
.repo-folder-grid{grid-template-columns:repeat(2,minmax(0,1fr));padding:14px 14px 6px}
.repo-folder-grid:empty{padding:0}
.repo-folder-hint{text-align:center;padding:6px 18px 16px;margin:0}
/* 从文件夹面板(z-index 90)里点开的模块详情需盖在其上 */
.repo-group-overlay{z-index:100}

/* ═══════════ 设置页语言选择器 ═══════════ */
.settings-lang-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:2px 0}
.settings-lang-info{display:flex;align-items:center;gap:10px;min-width:0;color:var(--tx-1);font-size:14px;font-weight:500}
.settings-lang-info svg{width:18px;height:18px;color:var(--tx-3);flex-shrink:0}
.settings-lang-select-wrap{position:relative;display:inline-flex;align-items:center;flex-shrink:0}
.settings-lang-select{appearance:none;-webkit-appearance:none;-moz-appearance:none;min-width:150px;padding:9px 36px 9px 14px;border-radius:10px;border:1px solid var(--hairline);background:var(--bg-2);color:var(--tx-1);font-size:14px;font-weight:500;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;text-align:left;font-family:inherit;line-height:1.2}
.settings-lang-select>span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.settings-lang-select:hover{border-color:var(--accent)}
.settings-lang-select:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(0,0,0,.06)}
.settings-lang-select-wrap.open .settings-lang-select{border-color:var(--accent)}
.settings-lang-select-wrap>svg{position:absolute;right:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--tx-3);pointer-events:none;transition:transform .18s ease}
.settings-lang-select-wrap.open>svg{transform:translateY(-50%) rotate(180deg)}
.settings-lang-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;min-width:100%;background:var(--bg-1);border:1px solid var(--hairline);border-radius:10px;box-shadow:0 10px 28px rgba(0,0,0,.18);padding:4px;display:none;flex-direction:column;gap:2px;z-index:60}
.settings-lang-select-wrap.open .settings-lang-menu{display:flex}
.settings-lang-option{appearance:none;-webkit-appearance:none;border:none;background:none;text-align:left;font-family:inherit;font-size:14px;font-weight:500;color:var(--tx-1);padding:9px 12px;border-radius:7px;cursor:pointer;transition:background .12s ease}
.settings-lang-option:hover{background:var(--bg-3)}
.settings-lang-option.is-active{color:var(--accent);font-weight:600}

/* ═══════════ 新手教程 ═══════════ */
/* root 必须让出事件：它铺满全屏，否则事件在这一层就被吃掉，
   子元素 .tour-mask 的 clip-path 挖洞根本轮不到生效。 */
.tour-root{position:fixed;inset:0;z-index:2000;display:none;pointer-events:none}
.tour-root.active{display:block}
/* 弹确认框时临时收起，避免 z-index 更低的 .modal-overlay 被埋住 */
.tour-root.tour-suspended{display:none}
/* 降级时必须放行点击：没有洞的遮罩会把整个页面锁死，
   而降级文案写的是「点任意处继续」，不放行就是骗人。 */
.tour-root.tour-degraded .tour-mask{pointer-events:none}
.tour-mask{position:absolute;inset:0;background:rgba(0,0,0,.55);pointer-events:auto}
.tour-boxes{position:absolute;inset:0;pointer-events:none}
.tour-box{position:absolute;top:0;left:0;box-sizing:border-box;border:2px dashed rgba(255,255,255,.92);border-radius:12px;pointer-events:none;will-change:transform}
.tour-arrow{position:absolute;inset:0;pointer-events:none}
.tour-arrow-line{stroke:#fff;stroke-width:2.2;stroke-linecap:round;fill:none}
.tour-arrow-head{fill:#fff;stroke:none}
/* 说明文字直接压在遮罩上，不做背景框。
   整体 pointer-events:none —— 无论落在哪都绝不会挡住高亮区里的按钮，
   只有「跳过」自己收回点击。 */
.tour-bubble{position:absolute;left:0;right:0;padding:0 20px;box-sizing:border-box;pointer-events:none;text-align:center}
/* 暗带越窄，--tour-scale 越小；字变小的同时放宽行宽，减少换行拉高 */
.tour-bubble .tour-skip,.tour-bubble .tour-next{padding:calc(5px * var(--tour-scale,1)) calc(14px * var(--tour-scale,1));font-size:calc(12px * var(--tour-scale,1))}
.tour-bubble-text{font-size:calc(14px * var(--tour-scale,1));line-height:1.5;color:#fff;font-weight:500;text-shadow:0 1px 4px rgba(0,0,0,.8);max-width:calc(270px + (1 - var(--tour-scale,1)) * 260px);margin:0 auto;text-wrap:pretty}
.tour-bubble-foot{display:flex;align-items:center;justify-content:center;gap:calc(12px * var(--tour-scale,1));margin-bottom:calc(10px * var(--tour-scale,1))}
.tour-progress{font-size:12px;color:rgba(255,255,255,.65);letter-spacing:.08em;text-shadow:0 1px 3px rgba(0,0,0,.6)}
.tour-skip{pointer-events:auto;padding:5px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.35);background:transparent;color:rgba(255,255,255,.8);font-size:12px;font-family:inherit;cursor:pointer;transition:all .2s}
.tour-skip:hover{color:#fff;border-color:#fff;background:rgba(255,255,255,.1)}
/* 手动「下一步」：比「跳过教程」更实心，它才是这一步的主操作 */
.tour-next{pointer-events:auto;padding:5px 16px;border-radius:999px;border:1px solid #fff;background:#fff;color:#111;font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .2s;margin-right:8px}
.tour-next:hover{background:rgba(255,255,255,.85)}
.tour-next[hidden]{display:none}

/* 注册后的两个引导页 */
.ob-page{position:fixed;inset:0;z-index:2100;background:var(--bg-0);display:flex;flex-direction:column;align-items:center}
.ob-card{width:100%;max-width:400px;flex:1;min-height:0;display:flex;flex-direction:column;padding:32px 24px 0;box-sizing:border-box;overflow-y:auto}
.ob-title{font-size:24px;font-weight:700;letter-spacing:-.01em;margin:0 0 8px;color:var(--tx-1)}
.ob-sub{font-size:13px;color:var(--tx-3);margin:0 0 28px;line-height:1.6}
.ob-field{margin-bottom:20px}
.ob-field > label{display:block;font-size:12px;font-weight:600;color:var(--tx-3);margin-bottom:8px;letter-spacing:.04em}
.ob-avatar-row{display:flex;justify-content:center;margin-bottom:26px}
.ob-avatar{width:84px;height:84px;border-radius:50%;border:1px dashed var(--bg-4);display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;background:var(--bg-1);color:var(--tx-3);font-size:11px;text-align:center}
.ob-avatar img{width:100%;height:100%;object-fit:cover}
.ob-avatar:hover{border-color:var(--accent);color:var(--accent)}
.ob-choices{display:flex;flex-wrap:wrap;gap:8px}
.ob-choices-col{flex-direction:column;flex-wrap:nowrap}
.ob-choice{padding:9px 16px;border-radius:999px;border:1px solid var(--border);background:var(--bg-1);color:var(--tx-2);font-size:13px;font-family:inherit;cursor:pointer;transition:all .2s}
.ob-choice:hover{border-color:var(--accent);color:var(--tx-1)}
.ob-choice.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.ob-choice-wide{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border-radius:14px;padding:12px 16px;width:100%;text-align:left}
.ob-choice-label{font-size:14px;font-weight:600}
.ob-choice-desc{font-size:12px;opacity:.7}
/* 主按钮固定在屏幕底部，与滚动内容分离 */
.ob-foot{width:100%;max-width:400px;padding:16px 24px calc(20px + env(safe-area-inset-bottom));box-sizing:border-box;flex-shrink:0}
.ob-next{width:100%;padding:13px}
.ob-card-tour{text-align:center;justify-content:center}
.ob-card-icon{display:flex;justify-content:center;margin-bottom:14px;color:var(--accent);transform:scale(2.2);transform-origin:center;height:34px}
.ob-card-desc{font-size:16px;line-height:1.7;color:var(--tx-2);margin:0 0 22px}
.ob-dots{display:flex;justify-content:center;gap:6px;margin-bottom:20px}
.ob-dot{width:6px;height:6px;border-radius:50%;background:var(--bg-4)}
.ob-dot.active{background:var(--accent);width:16px;border-radius:3px}

/* ═══════════ 创作者等级：胶囊 + 详情弹窗 ═══════════ */
/* 每级一个色，由 --lv-color 注入；底色和描边都从同一个色派生，避免逐级写死配色 */
.level-badge{
  display:inline-flex;align-items:center;justify-content:center;
  padding:1px 7px;border-radius:999px;
  font-size:10px;font-weight:800;line-height:1.5;letter-spacing:.03em;
  color:#fff;background:var(--lv-color);border:none;
  vertical-align:middle;white-space:nowrap;flex-shrink:0;
}
.level-badge-sm{padding:1px 6px;font-size:9px;letter-spacing:.02em}
.level-badge-btn{cursor:pointer;font-family:inherit;transition:transform .12s}
.level-badge-btn:active{transform:scale(.94)}

.level-overlay{
  position:fixed;inset:0;z-index:1400;
  display:flex;align-items:center;justify-content:center;padding:20px;
  background:rgba(0,0,0,.45);
}
.level-sheet{
  position:relative;width:100%;max-width:380px;max-height:82vh;
  display:flex;flex-direction:column;
  background:var(--bg-0);border-radius:18px;border:1px solid var(--border);
  box-shadow:0 18px 60px rgba(0,0,0,.28);overflow:hidden;
}
.level-close{
  position:absolute;top:10px;right:10px;width:28px;height:28px;
  display:flex;align-items:center;justify-content:center;
  border:none;border-radius:50%;background:var(--bg-2);color:var(--tx-2);cursor:pointer;
}
.level-hero{padding:26px 20px 14px;text-align:center}
.level-avatar{width:76px;height:76px;margin:0 auto 10px}
.level-nick{font-size:17px;font-weight:700;letter-spacing:-.005em}
.level-badge-row{margin-top:8px}

.level-progress-block{padding:0 20px 18px}
.level-progress-track{height:8px;border-radius:999px;background:var(--bg-2);overflow:hidden}
.level-progress-fill{height:100%;border-radius:999px;background:var(--lv-color);transition:width .3s}
.level-progress-meta{
  display:flex;justify-content:space-between;gap:10px;
  margin-top:7px;font-size:11px;color:var(--tx-3);
}

.level-scroll{
  flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:4px 20px 16px;
}
.level-log-title{font-size:12px;font-weight:700;color:var(--tx-2);margin-bottom:6px}
.level-rules{margin-bottom:18px}
.level-rule-table{width:100%;border-collapse:collapse}
.level-rule-table td{padding:5px 0;font-size:12px;color:var(--tx-1);vertical-align:middle}
.level-rule-table tr+tr td{border-top:1px solid var(--hairline)}
.level-rule-num{width:132px;min-width:132px;text-align:left;white-space:nowrap;font-weight:800;font-variant-numeric:tabular-nums}
/* 数值列定宽左对齐，靠这两列吃掉多余宽度，数字才会各行起点一致 */
.level-rule-name,.level-rule-req{width:100%}
.level-rule-num.up{color:var(--green)}
.level-rule-num.down{color:var(--red)}
.level-rule-note{margin-left:6px;font-size:11px;font-weight:400;color:var(--tx-3);white-space:nowrap}
.level-rule-head td{font-size:11px;color:var(--tx-3);font-weight:600;padding-bottom:2px}
/* 表头第二格要跟下面「所需经验」那列同样的左内边距，否则表头和列内容对不齐 */
.level-rule-head td:nth-child(2){padding-left:14px}
.level-rule-head+tr td{border-top:1px solid var(--hairline)}
/* 选择器要带上 td：.level-rule-table td 的 padding 简写比单类名更具体，会把这里的 padding-left 顶掉 */
.level-rule-table td.level-rule-req{font-size:11px;color:var(--tx-2);font-variant-numeric:tabular-nums;padding-left:14px}
.level-rule-foot{margin:10px 0 0;font-size:11px;color:var(--tx-3)}

.level-log-row{
  display:flex;align-items:center;gap:10px;
  padding:8px 0;border-bottom:1px solid var(--hairline);
}
.level-log-row:last-child{border-bottom:none}
.level-log-main{flex:1;min-width:0}
.level-log-reason{display:block;font-size:12px;font-weight:600;color:var(--tx-1)}
.level-log-detail{
  display:block;font-size:11px;color:var(--tx-3);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.level-log-right{text-align:right;flex-shrink:0}
.level-log-delta{display:block;font-size:13px;font-weight:800}
.level-log-delta.up{color:var(--green)}
.level-log-delta.down{color:var(--red)}
.level-log-time{display:block;font-size:10px;color:var(--tx-3)}
.level-log-pager{display:flex;align-items:center;justify-content:center;gap:12px;padding-top:10px}
