/* dream_emoji */
/* 后台：表情包网格 */
.dream-emoji-admin{max-width:none;gap:14px}
.dream-emoji-admin-section{display:grid;gap:10px;min-width:0;padding:14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg)}
.dream-emoji-admin-head{display:grid;gap:3px}
.dream-emoji-admin-head strong{color:var(--text);font-size:var(--font-size-md);line-height:1.4}
.dream-emoji-admin-head span{color:var(--text-subtle);font-size:var(--font-size-sm);line-height:1.5}
.dream-emoji-admin-notice{padding:9px 11px;border:1px solid var(--warning);border-radius:var(--radius-sm);background:var(--warning-soft);color:var(--text);font-size:var(--font-size-sm);line-height:1.5}
/* 后台：页签与关于页 */
.dream-emoji-tabs{display:flex;gap:2px;margin:0 0 14px;border-bottom:1px solid var(--line)}
.dream-emoji-tab{min-height:36px;padding:0 14px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:var(--font-size-md);cursor:pointer}
.dream-emoji-tab:hover{background:var(--brand-soft);color:var(--brand-hover)}
.dream-emoji-tab.is-active{border-bottom-color:var(--brand);color:var(--brand-hover);font-weight:500}
.dream-emoji-tab:focus{outline:none}
.dream-emoji-tab:focus-visible{outline:none;background:var(--brand-soft);color:var(--brand-hover)}
[data-dream-emoji-view][hidden]{display:none}
.dream-emoji-about{display:grid;gap:16px}
.dream-emoji-about-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
.dream-emoji-about-head strong{font-size:var(--font-size-lg)}
.dream-emoji-about-head span{color:var(--text-subtle);font-size:var(--font-size-sm)}
.dream-emoji-about-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,240px));gap:10px;margin:0}
.dream-emoji-about-meta>div{display:grid;gap:2px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel)}
.dream-emoji-about-meta dt{color:var(--text-subtle);font-size:var(--font-size-xs)}
.dream-emoji-about-meta dd{margin:0;color:var(--text);font-size:var(--font-size-sm);overflow-wrap:anywhere}
.dream-emoji-about-block{display:grid;gap:6px}
.dream-emoji-about-block h3{margin:0;font-size:var(--font-size-md)}
.dream-emoji-about-block p{margin:0;color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.7}
.dream-emoji-about-project{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel)}
.dream-emoji-about-project-text{display:grid;gap:3px;min-width:0}
.dream-emoji-about-project-text a{font-size:var(--font-size-md);overflow-wrap:anywhere}
.dream-emoji-about-project-text small{color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.5}
.dream-emoji-about-license{flex:0 0 auto;padding:2px 9px;border:1px solid var(--line);border-radius:999px;color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.7;white-space:nowrap}
.dream-emoji-about-block.is-warning{padding:12px 14px;border:1px solid var(--warning);border-radius:var(--radius-sm);background:var(--warning-soft)}
.dream-emoji-about-block.is-warning h3{color:var(--warning)}
.dream-emoji-admin-tools{display:flex;align-items:center;flex-wrap:wrap;gap:10px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.5}
.dream-emoji-link{padding:0;border:0;background:transparent;color:var(--brand-hover);font-size:var(--font-size-xs);cursor:pointer;text-decoration:underline}
.dream-emoji-link:hover{background:transparent;color:var(--brand-hover);text-decoration:underline}
.dream-emoji-admin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.dream-emoji-card{display:grid;gap:7px;min-width:0;padding:9px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);transition:border-color .15s ease,background .15s ease}
.dream-emoji-card.is-on{border-color:var(--brand);background:var(--brand-soft)}
.dream-emoji-card-pick{display:flex;align-items:center;gap:8px;min-width:0;cursor:pointer}
.dream-emoji-card-cover{flex:0 0 40px;display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg);overflow:hidden}
.dream-emoji-card-cover img{width:34px;height:34px;object-fit:contain;display:block}
.dream-emoji-card-meta{display:grid;gap:2px;min-width:0}
.dream-emoji-card-meta strong{overflow:hidden;color:var(--text);font-size:var(--font-size-md);line-height:1.4;text-overflow:ellipsis;white-space:nowrap}
.dream-emoji-card-meta small{color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.4}
.dream-emoji-card-bar{height:4px;border-radius:2px;background:var(--line-soft);overflow:hidden}
.dream-emoji-card-bar i{display:block;width:0;height:100%;border-radius:2px;background:var(--brand);transition:width .2s ease}
.dream-emoji-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.4}
.dream-emoji-card-foot span{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.dream-emoji-card-sync{min-width:0;min-height:24px;padding:0 9px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);cursor:pointer}
.dream-emoji-card-sync:hover{background:var(--panel);border-color:var(--brand);color:var(--brand-hover)}
.dream-emoji-card-sync[disabled]{border-color:var(--line-soft);background:var(--bg);color:var(--text-disabled);cursor:default;opacity:1}
.dream-emoji-card-ops{display:flex;flex:0 0 auto;align-items:center;gap:6px}
.dream-emoji-card-ops button[hidden]{display:none}
.dream-emoji-card-delete{min-width:0;min-height:24px;padding:0 9px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);cursor:pointer}
.dream-emoji-card-delete:hover{background:var(--panel);border-color:var(--danger);color:var(--danger)}
.dream-emoji-card-delete[disabled]{border-color:var(--line-soft);background:var(--bg);color:var(--text-disabled);cursor:not-allowed;opacity:1}
.dream-emoji-admin-source{grid-template-columns:minmax(0,1fr);align-items:start;margin:0}
.dream-emoji-admin-source input{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--font-size-sm)}
.dream-emoji-size-field{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin:0}
.dream-emoji-size-field>span{flex:0 0 auto;color:var(--text-muted);font-size:var(--font-size-sm)}
.dream-emoji-size-field input[type=range]{flex:1 1 200px;min-width:0;height:24px;margin:0;padding:0;border:0;background:transparent;accent-color:var(--brand)}
.dream-emoji-size-field output{flex:0 0 auto;min-width:56px;color:var(--text);font-size:var(--font-size-sm);text-align:right}
.dream-emoji-size-preview{display:flex;align-items:center;justify-content:center;min-height:80px;padding:10px;border:1px dashed var(--line-soft);border-radius:var(--radius-sm);background:var(--panel);overflow:auto}
.dream-emoji-size-preview img{display:block;width:auto;max-width:none;object-fit:contain}
.dream-emoji-admin-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
.dream-emoji-admin-actions span{color:var(--text-subtle);font-size:var(--font-size-sm);line-height:1.45}
.dream-emoji-test-result{padding:9px 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.5;overflow-wrap:anywhere}
.dream-emoji-test-result[hidden]{display:none}
.dream-emoji-test-result.is-ok{border-color:var(--success);background:var(--success-soft);color:var(--text)}
.dream-emoji-test-result.is-bad{border-color:var(--danger);background:var(--danger-soft);color:var(--text)}
/* 前台：编辑器里的入口。选择器带上容器，避免被 .reply-panel button 之类的核心规则撑宽。 */
.dream-emoji-host{display:inline-flex;align-items:center}
.dream-emoji-host-inline{display:none}
.nb-editor .dream-emoji-trigger,
.dream-emoji-host .dream-emoji-trigger{box-sizing:border-box;display:inline-flex;flex:0 0 28px;align-items:center;justify-content:center;width:28px;min-width:28px;max-width:28px;height:28px;min-height:28px;max-height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--brand-hover);line-height:1;cursor:pointer}
.nb-editor .dream-emoji-trigger svg,
.dream-emoji-host .dream-emoji-trigger svg{width:16px;height:16px;flex:0 0 16px}
.nb-editor .dream-emoji-trigger:hover,
.dream-emoji-host .dream-emoji-trigger:hover{border-color:var(--line);background:var(--panel);color:var(--brand-hover)}
.nb-editor .dream-emoji-trigger[aria-expanded="true"],
.dream-emoji-host .dream-emoji-trigger[aria-expanded="true"]{border-color:var(--brand);background:var(--panel);color:var(--brand-hover)}
/* 没有 NB 编辑器时，入口放在正文框上方，保持可用 */
.dream-emoji-host:not(.dream-emoji-host-inline){display:flex;justify-content:flex-end;margin:0 0 4px}
/* 前台：表情面板 */
.dream-emoji-panel{position:fixed;z-index:70;display:flex;flex-direction:column;height:min(60vh,380px);border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 12px 32px var(--shadow-medium);overflow:hidden}
.dream-emoji-panel[hidden]{display:none}
.dream-emoji-panel-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 8px 6px 11px;border-bottom:1px solid var(--line-soft)}
.dream-emoji-panel-title{color:var(--text-muted);font-size:var(--font-size-sm);font-weight:600}
.dream-emoji-panel-close{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:var(--font-size-lg);line-height:1;cursor:pointer}
.dream-emoji-panel-close:hover{border-color:var(--line);background:var(--bg);color:var(--text)}
.dream-emoji-panel-body{flex:1 1 auto;min-height:0;display:flex}
.dream-emoji-packs{flex:0 0 112px;display:flex;flex-direction:column;gap:3px;padding:8px 6px;border-right:1px solid var(--line-soft);background:var(--bg);overflow-y:auto}
.dream-emoji-pack{display:block;width:100%;min-height:30px;padding:0 6px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:var(--font-size-sm);line-height:30px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.dream-emoji-pack:hover{background:var(--panel);color:var(--text)}
.dream-emoji-pack.is-active{border-color:var(--brand);background:var(--panel);color:var(--brand-hover);font-weight:500}
.dream-emoji-grid{flex:1 1 auto;min-width:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(42px,1fr));align-content:start;gap:12px;padding:14px;overflow-y:auto}
.dream-emoji-item{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:1;padding:1px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;cursor:pointer}
.dream-emoji-item:hover{border-color:var(--line);background:var(--bg)}
.dream-emoji-item img{display:block;width:100%;height:100%;object-fit:contain}
.dream-emoji-empty{grid-column:1/-1;padding:22px 12px;color:var(--text-subtle);font-size:var(--font-size-sm);line-height:1.6;text-align:center}
.dream-emoji-retry{margin-top:8px;min-height:26px;padding:0 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);cursor:pointer}
.dream-emoji-retry:hover{background:var(--bg);border-color:var(--brand);color:var(--brand-hover)}
.dream-emoji-single .dream-emoji-packs{display:none}
/* 正文里的表情按行内小图显示，跟文字差不多大，不再被核心的 .post-content img 撑成整行大图 */
.post-content img[src*="dream_emoji/"]{display:inline-block;width:auto;height:var(--dream-emoji-size,40px);max-height:var(--dream-emoji-size,40px);margin:0 2px;vertical-align:middle;border-radius:0}
/* 色系切换插件的暗色模式会给所有图片加亮度滤镜；表情保持原色更清楚 */
html[data-dark-mode-theme="dark"] .post-content img[src*="dream_emoji/"],
html[data-color-scheme-dark-mode-theme="dark"] .post-content img[src*="dream_emoji/"],
html[data-dark-mode-theme="dark"] .dream-emoji-item img,
html[data-color-scheme-dark-mode-theme="dark"] .dream-emoji-item img,
html[data-dark-mode-theme="dark"] .dream-emoji-card-cover img,
html[data-color-scheme-dark-mode-theme="dark"] .dream-emoji-card-cover img{filter:none}
/* 下载中的取消按钮 */
.dream-emoji-card-sync.is-cancel{border-color:var(--danger);color:var(--danger)}
.dream-emoji-admin-actions button.is-cancel{border-color:var(--danger);color:var(--danger)}
@media(max-width:720px){
.dream-emoji-admin-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}
.dream-emoji-admin-section{padding:12px}
.dream-emoji-admin-actions{align-items:stretch;flex-direction:column}
.dream-emoji-admin-actions button{width:100%}
.dream-emoji-panel{height:min(52vh,340px)}
.dream-emoji-panel-body{flex-direction:column}
.dream-emoji-packs{flex:0 0 auto;flex-direction:row;gap:4px;padding:6px;border-right:0;border-bottom:1px solid var(--line-soft);overflow-x:auto;overflow-y:hidden}
.dream-emoji-pack{flex:0 0 auto;width:auto;min-height:28px;line-height:28px;padding:0 10px}
}