/* tsqtshop Custom Styles */
/* Pico.css provides the foundation; these are custom overrides */
/* Grid/tooltip styles → backpack.css */

/* 用 :root:root（特异性 0,2,0）覆盖,压过 Pico 的主题选择器
   （:root:not([data-theme]) / [data-theme=light] 均为 0,2,0 或更低），
   确保 --pico-* 覆盖真正生效，否则仙侠色压不过 Pico 默认色。 */
:root:root {
    /* ===== 仙侠水墨主题（tsqtshop 外壳）===== */
    --primary: #2f6b53;            /* 翠玉·主色 */
    --primary-hover: #265643;
    --accent: #b23b35;             /* 朱砂·价格/警示 */
    --gold: #b8860b;               /* 鎏金·稀有 */
    --paper: #ece1c6;              /* 宣纸·背景 */
    --paper-2: #f5ecd8;            /* 浅宣·卡片 */
    --ink: #2b2620;                /* 墨·正文 */
    --ink-mute: #7a6f57;           /* 淡墨·次要 */
    --line: #cdbb91;               /* 宣纸纹·分隔线 */

    /* —— Pico v2 变量覆盖：表格/表单/按钮/卡片自动换肤 —— */
    --pico-primary: #2f6b53;
    --pico-primary-background: #2f6b53;          /* v2:按钮/实心元素背景(漏了它,按钮一直蓝) */
    --pico-primary-border: var(--pico-primary-background);
    --pico-primary-hover: #265643;
    --pico-primary-hover-background: #265643;
    --pico-primary-hover-border: var(--pico-primary-hover-background);
    --pico-primary-focus: rgba(47,107,83,.125);
    --pico-primary-inverse: #fff;
    --pico-background-color: #ece1c6;
    --pico-color: #2b2620;
    --pico-h1-color: #2f6b53;
    --pico-h2-color: #2f6b53;
    --pico-h3-color: #2b2620;
    --pico-muted-color: #7a6f57;
    --pico-card-background-color: #f5ecd8;
    --pico-card-border-color: #cdbb91;
    --pico-card-sectioning-background-color: #efe6cf;
    --pico-secondary-background: #e3d7b8;
    --pico-secondary-hover: #d8c9a4;
    --pico-secondary-color: #2b2620;
    --pico-muted-border-color: #cdbb91;
    --pico-form-element-background-color: #fbf6e8;
    --pico-form-element-selected-background-color: #efe6cf;
    --pico-form-element-border-color: #cdbb91;
    --pico-form-element-color: #2b2620;
    --pico-form-element-placeholder-color: #9c8e6a;
    --pico-form-element-focus-color: #2f6b53;
    --pico-font-family-sans-serif: "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; /* 试系统字体；原衬线栈： "Noto Serif SC", "STKaiti", "KaiTi", "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif */
    --pico-border-radius: 4px;
}

/* Layout */
body > header {
    border-bottom: 2px solid var(--primary);
    margin-bottom: 1rem;
}

body > footer {
    margin-top: 3rem;
    text-align: center;
    color: var(--pico-muted-color);
}

h1 { color: var(--primary); }

article h3 { margin-bottom: 0.5rem; }

article p[style*="font-size:2em"] {
    font-weight: bold;
    color: var(--primary);
    margin: 0;
}

.badge {
    display: inline-block;
    padding: 0.1rem 0.5rem;
    background: var(--pico-secondary-background);
    border-radius: 4px;
    font-size: 0.85em;
}

table { font-size: 0.9em; }
table th { white-space: nowrap; }

button.small, a[role="button"].small {
    padding: 0.25rem 0.5rem;
    font-size: 0.85em;
}

.grid { gap: 1rem; }

@media (max-width: 768px) { .grid { grid-template-columns: 1fr; } }

.status-pending { color: #f0ad4e; }
.status-completed { color: #5cb85c; }
.status-failed { color: #d9534f; }
.status-cancelled { color: #999; }
.status-processing { color: #5bc0de; }

/* ============================================================================
   Item Icon + Hover Tooltip (legacy — for home.html cards)
   ============================================================================ */

.item-icon-wrapper {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 128px;
  background: var(--pico-secondary-background);
  border-radius: 8px;
  overflow: hidden;
  cursor: pointer;
}
.item-icon {
  width: 96px;
  height: 96px;
  object-fit: contain;
  transition: transform 0.15s ease;
}
.item-icon-wrapper:hover .item-icon { transform: scale(1.1); }
.item-icon-placeholder { font-size: 3rem; opacity: 0.25; }

@media (max-width: 768px) {
  .item-icon-wrapper { height: 100px; }
  .item-icon { width: 72px; height: 72px; }
}

/* ============================================================================
   Detail Modal（游戏风格详情弹窗）
   ============================================================================ */

.bp-modal-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.72);
    z-index: 5000;
    justify-content: center;
    align-items: center;
}
.bp-modal-overlay--open { display: flex; }

.bp-modal {
    background: #1a1008;
    border: 2px solid #4a3828;
    border-radius: 8px;
    padding: 24px;
    max-width: 420px;
    width: 90vw;
    color: #ccc;
    box-shadow: 0 8px 32px rgba(0,0,0,0.8);
    position: relative;
    max-height: 90vh;
    overflow-y: auto;
}

.bp-modal-close {
    position: absolute;
    top: 8px; right: 12px;
    background: none; border: none;
    color: #888; font-size: 22px;
    cursor: pointer; padding: 4px 8px; line-height: 1;
}
.bp-modal-close:hover { color: #fff; }

.bp-modal-icon {
    width: 96px; height: 96px;
    object-fit: contain;
    display: block; margin: 0 auto 16px;
    image-rendering: pixelated;
}

.bp-modal-name {
    font-size: 18px; font-weight: bold;
    text-align: center; margin-bottom: 8px;
}

.bp-modal-meta {
    display: flex; gap: 12px;
    justify-content: center; margin-bottom: 14px;
    font-size: 13px; color: #999;
}

.bp-modal-desc {
    font-size: 13px; line-height: 1.7;
    margin-bottom: 18px; max-height: 180px; overflow-y: auto;
}

.bp-modal-desc font[color="#FFFFFF"],
.bp-modal-desc font[color="#ffffff"] { color: #E5E7EB !important; }
.bp-modal-desc font[color="#00FF00"],
.bp-modal-desc font[color="#00ff00"] { color: #4ADE80 !important; }

.bp-modal-actions { text-align: center; }

.bp-modal-btn {
    display: inline-block;
    background: #4472C4; color: #fff;
    padding: 10px 28px; border-radius: 4px;
    text-decoration: none; font-size: 14px;
    border: none; cursor: pointer;
    transition: background 0.15s ease;
}
.bp-modal-btn:hover { background: #365899; color: #fff; text-decoration: none; }

/* ============================================================================
   搜索栏 & 分页
   ============================================================================ */

.bp-search-bar {
    display: flex; gap: 8px; margin-bottom: 16px;
    align-items: center; flex-wrap: wrap;
    max-width: 640px;
}
.bp-search-bar input[type="search"] {
    flex: 1 1 220px; min-width: 160px; max-width: 320px;
    background: #1a1008; border: 1px solid #4a3828;
    color: #ccc; padding: 6px 12px; border-radius: 4px; font-size: 14px;
}
.bp-search-bar input[type="search"]:focus {
    border-color: var(--bp-highlight-color);
    outline: none;
    box-shadow: 0 0 0 2px rgba(245,158,11,0.2);
}
.bp-search-bar select {
    background: #1a1008; border: 1px solid #4a3828;
    color: #ccc; padding: 6px 10px; border-radius: 4px; font-size: 14px;
}
.bp-search-bar button {
    background: var(--accent); color: #fff; border: none;
    padding: 6px 16px; border-radius: 4px; cursor: pointer; font-size: 14px;
}
.bp-search-bar button:hover { background: #963028; }

.bp-pagination {
    display: flex; gap: 6px; margin-top: 16px;
    justify-content: center; flex-wrap: wrap;
}
.bp-pagination button {
    background: #1a1008; border: 1px solid #4a3828;
    color: #ccc; padding: 4px 12px; border-radius: 4px;
    cursor: pointer; font-size: 13px; min-width: 36px;
}
.bp-pagination button:hover { background: #3a3a3a; border-color: var(--bp-highlight-color); }
.bp-pagination button.bp-pagination--active { background: var(--accent); border-color: var(--accent); color: #fff; }

/* ============================================================================
   响应式
   ============================================================================ */

@media (max-width: 768px) {
    :root { --bp-cell-size: 40px; --bp-icon-size: 28px; --bp-cols: 5; }
    .bp-count { font-size: 10px; }
    .bp-tooltip { width: 220px; font-size: 11px; }
}

@media (max-width: 480px) {
    :root { --bp-cell-size: 36px; --bp-icon-size: 26px; --bp-cols: 4; }
}

/* ============================================================================
   仙侠水墨 · 应用外壳（左侧栏 + 服务区书签 + 主区）
   Phase 1：仅前端，不动 Go 路由
   ============================================================================ */
html, body { background: var(--paper); }
body { font-family: "PingFang SC","Microsoft YaHei",system-ui,sans-serif; } /* 原衬线栈： "Noto Serif SC","STKaiti","KaiTi","PingFang SC","Microsoft YaHei",serif */

.app-shell { display:grid; grid-template-columns:248px 1fr; min-height:100vh; max-width:1400px; margin:0 auto; box-shadow:0 0 0 1px var(--line); }

/* ---------- 左侧栏 ---------- */
.sidebar { background:var(--paper-2); border-right:1px solid var(--line); padding:16px 14px; display:flex; flex-direction:column; gap:12px; position:sticky; top:0; height:100dvh; overflow:auto; }
.brand { display:flex; align-items:center; gap:10px; padding-bottom:10px; border-bottom:1px solid var(--line); }
.brand .logo { width:34px; height:34px; border-radius:6px; background:var(--accent); color:#fbe9c8; display:flex; align-items:center; justify-content:center; font-size:17px; font-weight:700; box-shadow:0 1px 0 rgba(0,0,0,.08); }
.brand b { font-size:16px; color:var(--ink); }
.brand small { display:block; font-size:11px; color:var(--ink-mute); font-weight:400; }
.role-badge { align-self:flex-start; font-size:11px; padding:3px 10px; border-radius:999px; background:rgba(47,107,83,.12); color:var(--primary); font-weight:600; white-space:nowrap; }

/* 服务区书签 */
.zone-label { font-size:11px; letter-spacing:.10em; color:var(--ink-mute); padding:2px 4px 6px; }
.zone-list { display:flex; flex-direction:column; gap:3px; }
.zone-item { display:flex; align-items:center; gap:9px; padding:7px 10px; border-radius:6px; color:var(--ink); font-size:13.5px; border:1px solid transparent; text-decoration:none; }
.zone-item .zdot { width:7px; height:7px; border-radius:50%; background:var(--ink-mute); flex:none; }
.zone-item:hover { background:rgba(47,107,83,.09); }
.zone-item.is-active { background:rgba(178,59,53,.10); border-color:var(--accent); color:var(--accent); font-weight:600; }
.zone-item.is-active .zdot { background:var(--accent); }
.zone-empty { font-size:12px; color:var(--ink-mute); padding:6px 10px; }

/* 角色导航 */
.role-nav { flex:1 1 auto; min-height:0; overflow:auto; }
.nav-title { font-size:11px; letter-spacing:.08em; color:var(--ink-mute); padding:8px 10px 4px; }
.nav-item { display:flex; align-items:center; gap:10px; padding:7px 10px; border-radius:6px; color:var(--ink); font-size:13.5px; text-decoration:none; }
.nav-item .ico { width:18px; text-align:center; opacity:.85; }
.nav-item:hover { background:rgba(47,107,83,.09); }
.nav-item.is-active { background:var(--primary); color:#fff; font-weight:600; }
.nav-item.is-active .ico { opacity:1; }
.nav-cta { margin-top:6px; border:1px solid var(--gold); background:rgba(184,134,11,.10); color:var(--gold); font-weight:600; }
.nav-cta:hover { background:var(--gold); color:#fff; }
.nav-cta-muted { border-color:var(--line); background:transparent; color:var(--ink-mute); font-weight:500; }
.nav-cta-muted:hover { background:rgba(0,0,0,.04); color:var(--ink-mute); }

/* 用户区 */
.me { margin-top:auto; padding-top:10px; border-top:1px solid var(--line); display:flex; align-items:center; gap:10px; position:relative; }
.me .ava { width:30px; height:30px; border-radius:50%; background:rgba(47,107,83,.16); color:var(--primary); display:flex; align-items:center; justify-content:center; font-weight:700; }
.me .who { font-size:12.5px; line-height:1.3; color:var(--ink); }
.me .who small { display:block; color:var(--ink-mute); font-size:11px; }
.me-actions { margin-left:auto; display:flex; flex-direction:column; gap:2px; }
.me-act { display:flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:6px; color:var(--ink-mute); cursor:pointer; text-decoration:none; font-size:15px; line-height:1; transition:background .15s ease, color .15s ease; }
.me-act:hover { background:rgba(47,107,83,.10); color:var(--primary); }
.me-act.danger:hover { background:rgba(178,59,53,.10); color:var(--accent); }

/* 角色切换浮层（多角色用户：点头像/用户名向上弹出；脱离底部，规避手机系统栏遮挡） */
.role-switcher { position:absolute; bottom:100%; left:0; right:0; margin-bottom:6px; display:flex; flex-direction:column; gap:4px; padding:6px; background:var(--paper-2); border:1px solid var(--line); border-radius:6px; box-shadow:0 4px 12px rgba(0,0,0,.18); z-index:40; }
.role-switcher[hidden] { display:none; }

/* ---------- 主区 ---------- */
.main { display:flex; flex-direction:column; min-width:0; }
.topbar { display:flex; align-items:center; gap:12px; padding:10px 22px; border-bottom:1px solid var(--line); background:var(--paper-2); }
.topbar .chip { font-size:12.5px; padding:4px 12px; border-radius:999px; background:rgba(178,59,53,.10); color:var(--accent); font-weight:600; }
.content { padding:18px 22px; flex:1; }
.content > h1:first-child { margin-top:.2rem; }

/* 旧 .server-badge 复用为朱砂 chip（home/product_list 仍在用）*/
.server-badge { display:inline-block; padding:3px 11px; border-radius:999px; background:rgba(178,59,53,.10); color:var(--accent); font-size:12.5px; font-weight:600; }

/* 表格/卡片贴合宣纸 */
table { background:var(--paper-2); }
article { border-color:var(--line); }

/* ---------- 响应式：窄屏 off-canvas 抽屉 ---------- */
.menu-toggle { display:none; background:transparent; border:1px solid var(--line); border-radius:6px; padding:2px 9px; font-size:18px; line-height:1.2; color:var(--ink); cursor:pointer; }
.sidebar-backdrop { display:none; position:fixed; inset:0; background:rgba(0,0,0,.42); z-index:55; }
@media (max-width: 900px) {
    .app-shell { grid-template-columns:1fr; }
    .menu-toggle { display:inline-flex; align-items:center; }
    .sidebar { position:fixed; top:0; left:0; bottom:0; width:220px; max-width:84vw; height:100dvh; z-index:60; transform:translateX(-100%); transition:transform .22s ease; overflow:auto; box-shadow:0 0 30px rgba(0,0,0,.25); }
    .sidebar.open { transform:translateX(0); }
    .sidebar-backdrop.show { display:block; }
}

/* ============================================================================
   仙侠水墨 · 组件库（Phase 3，各页面内容统一风格）
   只加 class 到现有结构，保留所有 id / JS 契约
   ============================================================================ */
:root { --head-font: "PingFang SC","Microsoft YaHei",system-ui,sans-serif; } /* 原衬线栈： "Noto Serif SC","STKaiti","KaiTi","PingFang SC","Microsoft YaHei",serif */

/* 交互元素统一过渡，避免 :hover 跳变发硬 */
.nav-item, .zone-item, .xx-btn, .quick-grid a, .xx-tabs .tab-btn, .tab-bar .tab-btn { transition: background-color .15s ease, border-color .15s ease, color .15s ease; }

/* 页面标题区 */
.page-head { display:flex; align-items:baseline; gap:.6rem; margin:.1rem 0 1rem; padding-bottom:.55rem; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.page-head h1 { margin:0; font-size:1.6rem; color:var(--primary); font-family:var(--head-font); }
.page-head .page-sub { color:var(--ink-mute); font-size:.82rem; }

/* 区块小标题 */
.sec-title { font-size:1.3rem; color:var(--primary); margin:1.3rem 0 .6rem; padding-bottom:.3rem; border-bottom:1px solid var(--line); font-family:var(--head-font); }

/* KPI 数值卡 */
.stat-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:.8rem; margin-bottom:1.2rem; }
.stat-tile { background:var(--paper-2); border:1px solid var(--line); border-top:2px solid var(--primary); border-radius:4px; padding:.8rem .95rem; }
.stat-tile .stat-label { font-size:.76rem; color:var(--ink-mute); letter-spacing:.03em; }
.stat-tile .stat-value { font-size:1.8rem; font-weight:700; color:var(--ink); margin:.15rem 0 0; font-family:var(--head-font); line-height:1.2; }
.stat-tile.accent { border-top-color:var(--accent); }
.stat-tile.gold { border-top-color:var(--gold); }

/* 快捷入口网格 */
.quick-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(135px,1fr)); gap:.55rem; margin-bottom:1.2rem; }
.quick-grid a { display:flex; align-items:center; gap:.4rem; padding:.65rem .75rem; background:var(--paper-2); border:1px solid var(--line); border-radius:4px; text-decoration:none; color:var(--ink); font-size:.86rem; }
.quick-grid a:hover { border-color:var(--primary); color:var(--primary); background:rgba(47,107,83,.06); }

/* 数据表 */
.xx-table { width:100%; border-collapse:collapse; font-size:.87rem; background:var(--paper-2); }
.xx-table th { text-align:left; padding:.5rem .6rem; background:var(--paper); color:var(--primary); font-weight:600; font-size:.76rem; letter-spacing:.04em; border-bottom:2px solid var(--line); white-space:nowrap; }
.xx-table td { padding:.55rem .6rem; border-bottom:1px solid var(--line); }
.xx-table tr:hover td { background:rgba(47,107,83,.06); }
.xx-table .num { font-variant-numeric:tabular-nums; text-align:right; }

/* 标签页（兼容现有 .tab-btn / .active-tab）*/
.xx-tabs { display:flex; flex-wrap:wrap; gap:.4rem; margin:.5rem 0 1rem; }
.xx-tabs .tab-btn, .tab-bar .tab-btn { font-size:.85rem; padding:.3rem .85rem; border:1px solid var(--line); border-radius:999px; background:var(--paper-2); color:var(--ink-mute); cursor:pointer; }
.xx-tabs .tab-btn:hover, .tab-bar .tab-btn:hover { border-color:var(--primary); color:var(--primary); }
.xx-tabs .tab-btn.active-tab, .tab-bar .tab-btn.active-tab { background:var(--primary); border-color:var(--primary); color:#fff; font-weight:600; }

/* 状态印章 / 药丸 */
.pill { display:inline-block; padding:.08rem .5rem; border-radius:999px; font-size:.74rem; font-weight:600; white-space:nowrap; }
.pill.ok, .pill-completed, .pill-sale { background:rgba(47,107,83,.15); color:var(--primary); }
.pill.warn, .pill-pending, .pill-processing { background:rgba(184,134,11,.18); color:var(--gold); }
.pill.err, .pill-failed, .pill-cancelled { background:rgba(178,59,53,.13); color:var(--accent); }
.pill.muted, .pill-muted { background:var(--paper); color:var(--ink-mute); }
/* 兼容旧 .status-* 文字色 */
.status-pending { color:var(--gold); }
.status-completed { color:var(--primary); }
.status-failed, .status-cancelled { color:var(--accent); }
.status-processing { color:var(--gold); }

/* 操作按钮（兼容 Pico button.small）*/
.xx-btn { display:inline-block; padding:.34rem .8rem; font-size:.84rem; border:1px solid var(--line); border-radius:4px; background:var(--paper-2); color:var(--ink); cursor:pointer; text-decoration:none; }
.xx-btn:hover { border-color:var(--primary); color:var(--primary); }
.xx-btn.primary { background:var(--primary); border-color:var(--primary); color:#fff; }
.xx-btn.primary:hover { background:var(--primary-hover); color:#fff; }
.xx-btn.danger { color:var(--accent); border-color:rgba(178,59,53,.4); }
.xx-btn.danger:hover { background:rgba(178,59,53,.08); color:var(--accent); }
.xx-btn.gold { background:var(--gold); border-color:var(--gold); color:#fff; font-weight:600; }
.xx-btn.gold:hover { filter:brightness(1.08); color:#fff; }

/* 空状态 */
.xx-empty { text-align:center; color:var(--ink-mute); padding:2rem 1rem; font-size:.9rem; }

/* 金额强调 */
.money { color:var(--accent); font-weight:700; font-variant-numeric:tabular-nums; }

/* 支付方式图标（支付宝/微信 logo，去文字版）*/
.pay-icon { height:18px; width:auto; vertical-align:middle; display:inline-block; }

/* ============================================================================
   Toast / Confirm（替换原生 alert/confirm）
   ============================================================================ */
.toast-box { position:fixed; top:20px; left:50%; transform:translateX(-50%); z-index:10001; display:flex; flex-direction:column; gap:8px; align-items:center; pointer-events:none; }
.toast-item { background:var(--paper-2); color:var(--ink); border:1px solid var(--line); border-radius:4px; padding:.6rem 1rem; font-size:.9rem; box-shadow:0 4px 16px rgba(0,0,0,.14); opacity:0; transform:translateY(-8px); transition:opacity .2s ease, transform .2s ease; max-width:90vw; }
.toast-item.show { opacity:1; transform:translateY(0); }
.toast-item.toast-ok { background:rgba(47,107,83,.12); border-color:rgba(47,107,83,.35); }
.toast-item.toast-err { background:rgba(178,59,53,.10); border-color:rgba(178,59,53,.35); }
.toast-item.toast-warn { background:rgba(184,134,11,.14); border-color:rgba(184,134,11,.4); }

.toast-mask { position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:10002; display:flex; align-items:center; justify-content:center; opacity:0; transition:opacity .2s ease; }
.toast-mask.show { opacity:1; }
.toast-dialog { background:var(--paper-2); border:1px solid var(--line); border-radius:6px; padding:1.2rem 1.4rem; max-width:420px; width:90vw; box-shadow:0 8px 32px rgba(0,0,0,.22); transform:scale(.96); transition:transform .2s ease; }
.toast-mask.show .toast-dialog { transform:scale(1); }
.toast-dialog-msg { color:var(--ink); font-size:.95rem; line-height:1.6; white-space:pre-line; margin-bottom:1rem; }
.toast-dialog-row { display:flex; gap:.5rem; justify-content:flex-end; }
.toast-dialog-ok, .toast-dialog-cancel { padding:.42rem 1.1rem; border-radius:4px; font-size:.88rem; cursor:pointer; border:1px solid var(--line); font-family:inherit; }
.toast-dialog-ok { background:var(--primary); color:#fff; border-color:var(--primary); }
.toast-dialog-ok:hover { background:var(--primary-hover); }
.toast-dialog-cancel { background:var(--paper); color:var(--ink); }
.toast-dialog-cancel:hover { background:var(--pico-secondary-hover); }
.toast-dialog-input { width:100%; box-sizing:border-box; padding:.5rem .6rem; margin-bottom:1rem; border:1px solid var(--line); border-radius:4px; background:var(--pico-form-element-background-color); color:var(--pico-form-element-color); font-size:.92rem; font-family:inherit; }

/* ============================================================================
   站点 footer（备案/版权，config.json 的 site 配置，三项全空则不渲染）
   ============================================================================ */
.site-footer { max-width:1400px; margin:0 auto; padding:.7rem 22px; border-top:1px solid var(--line); text-align:center; font-size:.78rem; color:var(--ink-mute); }
.site-footer-inner { display:flex; flex-wrap:wrap; gap:.3rem .9rem; justify-content:center; align-items:center; }
.site-footer .sf-link { color:var(--ink-mute); text-decoration:none; }
.site-footer .sf-link:hover { color:var(--primary); text-decoration:underline; }
.site-footer .sf-wangan-icon { height:14px; width:auto; vertical-align:middle; margin-right:3px; }
.toast-dialog-input:focus { border-color:var(--primary); outline:none; box-shadow:0 0 0 2px var(--pico-primary-focus); }

/* ============================================================================
   仓库角色侧滑面板 (admin/sellers.html)
   ============================================================================ */

/* 面板容器 */
.wh-panel {
	position: fixed;
	top: 0; right: 0;
	width: 440px; max-width: 92vw;
	height: 100dvh;
	background: var(--paper);
	border-left: 1px solid var(--line);
	box-shadow: -6px 0 32px rgba(43,38,32,0.15);
	transform: translateX(100%);
	transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1);
	z-index: 1000;
	display: flex;
	flex-direction: column;
	overflow: hidden;
}
.wh-panel.open {
	transform: translateX(0);
}

/* 背板 */
.wh-panel-backdrop {
	position: fixed; inset: 0;
	background: rgba(43,38,32,0.3);
	z-index: 999;
	opacity: 0; pointer-events: none;
	transition: opacity 280ms ease;
}
.wh-panel-backdrop.show {
	opacity: 1; pointer-events: auto;
}

/* 面板头部 */
.wh-panel-head {
	display: flex; align-items: center; justify-content: space-between;
	padding: 14px 18px;
	border-bottom: 1px solid var(--line);
	background: var(--paper-2);
}
.wh-panel-head h3 { margin: 0; font-size: 1.05rem; color: var(--primary); }
.wh-panel-close {
	background: none; border: none; font-size: 1.1rem;
	color: var(--ink-mute); cursor: pointer; padding: 4px 8px;
	border-radius: 4px; line-height: 1;
}
.wh-panel-close:hover { background: var(--pico-secondary-background); color: var(--ink); }

/* 面板内容区 */
.wh-panel-body {
	flex: 1; overflow-y: auto; padding: 14px 18px;
}
.wh-panel-loading, .wh-panel-empty, .wh-panel-error {
	text-align: center; padding: 2rem 1rem; color: var(--ink-mute); font-size: .9rem;
}

/* 面板底部 */
.wh-panel-foot {
	display: flex; flex-direction: column;
	padding: 12px 18px;
	border-top: 1px solid var(--line);
	background: var(--paper-2);
	gap: 10px;
}
.wh-panel-actions {
	display: flex; gap: 8px; justify-content: flex-end;
}
.wh-changes { min-height: 0; }

/* 变更摘要 */
.wh-change {
	display: inline-block; font-size: .8rem;
	padding: 2px 8px; border-radius: 3px; margin: 2px 4px 2px 0;
}
.wh-change--add { background: rgba(47,107,83,0.12); color: var(--primary); }
.wh-change--mod { background: rgba(184,134,11,0.12); color: var(--gold); }
.wh-change--rem { background: rgba(178,59,53,0.08); color: var(--accent); }

/* 区卡片 */
.wh-server-card {
	border: 1px solid var(--line);
	border-radius: 6px; padding: 12px 14px;
	margin-bottom: 10px; background: var(--paper-2);
	transition: border-color 200ms ease, box-shadow 200ms ease;
}
.wh-server-card:hover { border-color: var(--pico-muted-border-color); }
.wh-server-card--dirty {
	border-color: var(--primary);
	box-shadow: 0 0 0 1px rgba(47,107,83,0.2);
}
.wh-server-card--c0 { border-left: 2px solid rgba(47,107,83,0.35); }
.wh-server-card--c1 { border-left: 2px solid rgba(181,122,0,0.35); }
.wh-server-card--c2 { border-left: 2px solid rgba(74,124,89,0.35); }
.wh-server-card--c3 { border-left: 2px solid rgba(139,107,74,0.35); }

.wh-server-label {
	font-weight: 600; font-size: .9rem; color: var(--ink);
	margin-bottom: 6px;
}

/* 当前角色信息 */
.wh-char-current {
	display: flex; align-items: center; gap: 8px;
	font-size: .85rem; padding: 4px 0; flex-wrap: wrap;
}
.wh-char-name { font-weight: 500; color: var(--ink); }
.wh-char-bag { color: var(--ink-mute); font-size: .8rem; }
.wh-char-remove { margin-left: auto; }
.wh-char-none {
	color: var(--ink-mute); font-size: .85rem; padding: 4px 0;
}

/* 状态点 */
.wh-dot {
	display: inline-block; width: 7px; height: 7px; border-radius: 50%;
	flex-shrink: 0;
}
.wh-dot--on { background: #5cb85c; box-shadow: 0 0 0 2px rgba(92,184,92,0.2); }
.wh-dot--off { background: #999; }

/* 角色选择下拉 */
.wh-char-pick {
	margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--line);
}
.wh-char-select {
	width: 100%; font-size: .85rem;
}

/* ============================================================================
   仓库角色按区标签 (表格列)
   ============================================================================ */
.wh-badge-row {
	display: flex; flex-wrap: wrap; gap: 3px;
}
.wh-badge {
	display: inline-block; padding: 1px 7px;
	border-radius: 3px; font-size: 11px; line-height: 1.5;
	white-space: nowrap;
}
.wh-badge--set {
	background: var(--primary); color: #fff;
}
.wh-badge--unset {
	border: 1px dashed var(--line); color: var(--ink-mute);
}
.wh-badge--skel {
	background: var(--pico-secondary-background); color: transparent;
	border-radius: 3px; animation: whPulse 1.4s ease-in-out infinite;
}
@keyframes whPulse {
	0%, 100% { opacity: .6; }
	50% { opacity: 1; }
}

