/* ═══════════════════════════════════════════════════════
   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}

/* 鼠标点击时不显示浏览器默认 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)}

/* ═══ 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)}
.bottom-nav-item.create-btn{
  position:relative;top:-14px;width:54px;height:54px;border-radius:50%;
  background:var(--accent);color:var(--on-accent);
  box-shadow:0 10px 30px -6px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.08);
  justify-content:center;padding:0;gap:0;
}
.bottom-nav-item.create-btn .nav-label{display:none}
.bottom-nav-item.create-btn.active{color:var(--on-accent)}
.bottom-nav-item.create-btn:hover{transform:translateY(-2px) scale(1.04)}

/* ═══ 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}
.editor-showcase-add,.forum-composer-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,.forum-composer-img-add:hover{border-color:var(--accent);color:var(--accent)}

/* ═══ Store Page ═══ */
.store-header{padding:16px 20px 12px}
.store-balance{
  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-toolbar{padding:12px 16px 14px;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-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}
.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;margin-bottom:12px;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}
.store-type-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{border-color:var(--accent);color:var(--tx-1)}
.store-type-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:flex-start;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-toggle.has-filter{border-color:var(--accent);color:var(--accent);background:var(--accent-dim)}
.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{width:28px;height:28px;border-radius:999px;font-size:16px;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;justify-content:center;flex-shrink:0}
.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;transition:width .2s}
.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 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;
}
.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}
.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-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}
/* 对话引号 <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-left:2px solid var(--accent);border-radius:0 var(--radius) var(--radius) 0;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;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-1);overflow:hidden}
.msg-details-sum{cursor:pointer;font-size:12px;font-weight:600;color:var(--tx-2);padding:9px 14px;user-select:none;list-style:none;display:block}
.msg-details-sum::-webkit-details-marker{display:none}
.msg-details:not([open]) .msg-details-sum::before{content:'▶';font-size:9px;opacity:.6;margin-right:6px;display:inline-block}
.msg-details[open] .msg-details-sum::before{content:'▼';font-size:9px;opacity:.6;margin-right:6px;display:inline-block}
.msg-details-body{padding:10px 14px 14px;border-top:1px solid var(--border);color:var(--tx-1);font-size:14px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.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 0}
.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)}
.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)}
.chat-input-toolbar .badge.badge-accent{background:var(--bg-2);color:var(--tx-1)}
.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}
.plat-model-card{display:flex;flex-direction:column;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-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}
.api-provider-presets{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.api-preset-chip{display:inline-flex;align-items:center;padding:4px 10px;font-size:11px;font-family:inherit;font-weight:500;border:1px solid var(--border);border-radius:16px;background:var(--bg-1);color:var(--tx-2);cursor:pointer;transition:border-color .2s,background .2s,color .2s}
.api-preset-chip:hover{border-color:var(--accent);color:var(--accent)}
.api-preset-chip.active{border-color:var(--accent);background:var(--accent-dim);color:var(--accent);font-weight:600}

/* ═══ 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}
.profile-name{font-size:20px;font-weight:700;margin-bottom:4px;letter-spacing:-.005em}
.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)}
.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{flex:1;min-width:0;max-width:100%;padding:3px 6px;border-radius:4px;border:1px solid var(--accent);background:var(--bg-0);color:var(--tx-1);font-size:11px;font-weight:600;font-family:inherit;box-sizing:border-box;outline:none;box-shadow:0 0 0 3px var(--accent-dim)}
.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;font-size:16px;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-qcmd-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;padding:4px 0}
.qp-qcmd-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 10px;border:1px solid var(--border);border-radius:12px;background:var(--bg-1);cursor:pointer;text-align:center;transition:background .15s,transform .1s,border-color .15s}
.qp-qcmd-card:hover:not(.is-disabled){background:var(--bg-2);border-color:var(--bg-4)}
.qp-qcmd-card:active:not(.is-disabled){transform:scale(.97)}
.qp-qcmd-card.is-disabled{opacity:.45;cursor:not-allowed}
.qp-qcmd-icon{width:44px;height:44px;border-radius:10px;background:var(--bg-2);display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;color:var(--tx-2)}
.qp-qcmd-icon img{width:100%;height:100%;object-fit:cover}
.qp-qcmd-icon-lg{width:56px;height:56px}
.qp-qcmd-body{min-width:0;width:100%}
.qp-qcmd-title{font-size:12px;font-weight:700;color:var(--tx-1);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qp-qcmd-desc{font-size:10px;color:var(--tx-3);margin-top:4px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.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-p{margin:0 0 10px;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,.45);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;padding:16px}
.modal{background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius-xl);width:600px;max-width:100%;max-height:84vh;display:flex;flex-direction:column;box-shadow:0 30px 70px -10px rgba(0,0,0,.40)}
.modal-header{padding:18px 22px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.modal-close-btn{position:relative;z-index:10;pointer-events:auto;min-width:34px;min-height:34px}
.modal-body{flex:1;overflow-y:auto;padding:22px}
.modal-footer{padding:14px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}
.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-2)}
.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-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)}
.author-profile-actions{display:flex;gap:10px;justify-content:center;margin-top:14px}
.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(--red,#e53e3e)}
.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}
.mod-detail-social-row .btn-sm{padding:8px 16px}
.mod-detail-comment-list{display:flex;flex-direction:column;gap:0;margin-top:8px;max-height:360px;overflow-y:auto}

/* ── Threaded comment layout (avatar column + stacked meta/body/footer; store + forum) ── */
.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)}
.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-end;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-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-bottom-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-bottom-left-radius:4px}

/* ── 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-avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box}
.inbox-soc-avatar--img{background:var(--bg-2);padding:0;border:1px solid var(--border)}
.inbox-soc-avatar--img img{width:100%;height:100%;object-fit:cover;display:block}
.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}
.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 ═══ */
.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:center;justify-content:center;padding:24px}
.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);
}
.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}
.login-gate-card .form-group{margin-bottom:14px}
.login-gate-err{font-size:12px;color:var(--red);margin-top:10px;min-height:18px;text-align:center}
.login-gate-links{display:flex;justify-content:center;gap:16px;margin-top:14px;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}

.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-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)}}
.forum-composer-body{padding:0 20px 20px;display:flex;flex-direction:column;gap:0}
.forum-composer-title{border:none;background:transparent;font-size:20px;font-weight:700;padding:16px 0 8px;outline:none;color:var(--tx-1);width:100%;letter-spacing:-.01em}
.forum-composer-title::placeholder{color:var(--tx-3)}
.forum-composer-content{border:none;background:transparent;font-size:15px;line-height:1.7;padding:4px 0;outline:none;color:var(--tx-1);resize:none;min-height:180px;flex:1;width:100%}
.forum-composer-content::placeholder{color:var(--tx-3)}
.forum-composer-images{display:flex;flex-wrap:wrap;gap:6px;padding:8px 0}
.forum-composer-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)}
.forum-composer-img-wrap img{width:100%;height:100%;object-fit:cover;display:block;cursor:pointer}
.forum-composer-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(--accent)}
.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}
}
.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(--accent)}
.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}
.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}
.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--locked .shop-frame-tile-box::after{
  content:'';
  position:absolute;
  inset:0;
  border-radius:inherit;
  background:rgba(120,120,128,.28);
  pointer-events:none;
}
.shop-frame-tile--locked .shop-frame-tile-name{opacity:.5}
.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:#0F0F0F; --bg-1:#161616; --bg-2:#1A1A1A; --bg-3:#2A2A2A; --bg-4:#3D3D3D; --bg-5:#4D4D4D;
  --tx-1:#F2F2F2; --tx-2:#A6A6A6; --tx-3:#737373;
  --accent:#F2F2F2; --accent-h:#FFFFFF; --accent-dim:rgba(242,242,242,.08);
  --accent-grad:#F2F2F2; --accent-grad-soft:#1A1A1A;
  --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(15,15,15,.78); --surface-strong:rgba(15,15,15,.90);
  --hairline:rgba(255,255,255,.06); --on-accent:#0F0F0F;
  --border:#2A2A2A; --border-strong:#3D3D3D;
  --bar:#080808;
}
/* ── 浅色 · 与 :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-plugin-actions{display:flex;flex-direction:column;gap:10px;width:100%}
.settings-plugin-actions .btn{width:100%;display:flex;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:#0F0F0F}
.theme-card-preview--dark .tcp-bar{background:#080808;border-bottom:1px solid #2A2A2A}
.theme-card-preview--dark .tcp-dot{background:#3D3D3D}
.theme-card-preview--dark .tcp-title{background:#3D3D3D}
.theme-card-preview--dark .tcp-card{background:#161616;border:1px solid #2A2A2A}
.theme-card-preview--dark .tcp-card--accent{background:#1A1A1A;border:1px solid #3D3D3D}
.theme-card-preview--dark .tcp-line{background:#3D3D3D}
.theme-card-preview--dark .tcp-line--inv{background:#737373}
.theme-card-preview--dark .tcp-nav{background:#080808;border-top:1px solid #2A2A2A}
.theme-card-preview--dark .tcp-nav span{background:#3D3D3D}
.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-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)}
