.btn{border:0;border-radius:var(--radius-md);padding:12px 22px;font-size:var(--font-body-size);font-weight:var(--font-body-bold-weight);white-space:nowrap;flex-shrink:0;transition:var(--transition-card)}.btn:active{transform:scale(.98)}.btn-primary{background:var(--role-primary);color:#fff}.btn-soft{background:var(--role-surface);color:var(--role-primary);border:1px solid var(--role-border)}.btn-ghost{background:#fff;border:1px solid var(--color-border-default)}.role-switch{display:inline-flex;gap:6px;background:#fff;border:1px solid var(--color-border-default);padding:5px;border-radius:var(--radius-full);box-shadow:0 8px 30px rgba(15,23,42,.07)}.role-switch button{border:0;background:transparent;padding:11px 18px;border-radius:var(--radius-full);font-weight:700;color:var(--color-text-muted);transition:var(--transition-role)}.role-switch button.active{color:#fff;background:var(--role-primary)}.categories{display:grid;grid-template-columns:repeat(6,1fr);gap:16px}.category{background:#fff;border:1px solid var(--color-border-default);border-radius:var(--radius-md);padding:24px 12px;text-align:center;box-shadow:var(--shadow-card);transition:var(--transition-card)}.category:hover{border-color:var(--role-border);background:var(--role-surface);transform:translateY(-4px)}.category b{display:block;margin-top:12px;font-size:13px}.category-icon{width:44px;height:44px;margin:0 auto;display:grid;place-items:center;border-radius:14px;background:var(--role-surface);color:var(--role-primary);transition:var(--transition-card)}.category-icon svg{width:22px;height:22px}.category:hover .category-icon{background:var(--role-primary);color:#fff;transform:scale(1.06)}.category-icon-emoji{font-size:20px}.masonry{columns:4 230px;column-gap:20px}.card{display:inline-block;width:100%;break-inside:avoid;margin:0 0 20px;background:#fff;border:1px solid var(--color-border-default);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card);transition:var(--transition-card)}.card:hover{transform:translateY(-6px);box-shadow:var(--role-shadow);border-color:var(--role-border)}.card-media{position:relative;min-height:170px;background:linear-gradient(135deg,var(--role-surface),#fff);display:grid;place-items:center;color:var(--role-primary);font-weight:800}.card-media img{width:100%;height:100%;display:block;object-fit:cover;aspect-ratio:4/3}.card-media canvas[data-watermark]{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}.card-media-fallback{font-weight:800;letter-spacing:.06em;color:var(--role-primary)}.card-body{padding:18px}.list-item{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:18px;margin-bottom:14px;background:#fff;border:1px solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-card);transition:var(--transition-card)}.list-item:hover{border-color:var(--role-border)}.list-main{flex:1;min-width:220px}.list-title{font-weight:700;font-size:15px}.list-title:hover{color:var(--role-primary)}.list-main p{margin:6px 0 0}.list-side{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.list-expand{width:100%}.list-expand:empty{display:none}.publish-form{background:var(--role-surface);border:1px solid var(--role-border);border-radius:var(--radius-lg);padding:24px;margin-bottom:22px}.publish-form h3{margin:0 0 4px;font-size:19px}.form-hint{margin:0 0 18px;font-size:12px}.nav-user{font-weight:700;font-size:13px;color:var(--color-text-muted);align-self:center;padding:0 4px}.card-title{font-size:var(--font-title-card-size);line-height:var(--font-title-card-line);font-weight:var(--font-title-card-weight);margin-bottom:10px}.price{font-weight:800;color:var(--role-primary)}.tag,.badge{display:inline-block;font-size:var(--font-micro-size);font-weight:var(--font-micro-weight);padding:5px 8px;border-radius:var(--radius-sm);background:var(--role-surface);color:var(--role-primary);margin:3px}.badge-success{background:#ecfdf5;color:var(--color-status-success)}.badge-unverified{background:#f1f3f5;color:var(--color-text-muted,#7a8794)}.toast{position:fixed;right:24px;bottom:24px;z-index:100;background:var(--color-text-main);color:#fff;padding:13px 18px;border-radius:var(--radius-md);opacity:0;transform:translateY(12px);transition:.3s}.toast.show{opacity:1;transform:none}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:12px;border-bottom:1px solid var(--color-border-subtle);text-align:left;font-size:12px}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.stat{padding:18px;border:1px solid var(--color-border-default);border-radius:var(--radius-md);background:#fff}.stat strong{font-size:24px;display:block;margin-top:5px}@media(max-width:760px){.categories{grid-template-columns:repeat(3,1fr)}.stat-grid{grid-template-columns:1fr}}
/* ── 三级级联分类 ── */
.cat-level1{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px}
.cat-level1 .category.active{border-color:var(--role-primary);background:var(--role-surface);box-shadow:0 0 0 2px var(--role-primary)}
.cat-level2{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:16px;padding:12px 16px;background:var(--role-surface);border-radius:var(--radius-md);border:1px solid var(--color-border-subtle)}
.cat-label{font-size:13px;font-weight:600;color:var(--color-text-muted);white-space:nowrap}
.cat-tag{border:1px solid var(--color-border-default);background:#fff;padding:6px 14px;border-radius:var(--radius-full);font-size:13px;cursor:pointer;transition:var(--transition-card)}
.cat-tag:hover{border-color:var(--role-border);background:var(--role-surface)}
.cat-tag.active{background:var(--role-primary);color:#fff;border-color:var(--role-primary)}
.cat-level3{margin-top:12px;padding:10px 16px;border-radius:var(--radius-md);border:1px solid var(--color-border-subtle)}
.cat-breadcrumb{font-size:12px;color:var(--color-text-muted);margin-bottom:8px}
.cat-breadcrumb a{color:var(--role-primary)}
.cat-level3-tags{display:flex;flex-wrap:wrap;gap:6px}
.cat-loading-glow{animation:catGlow 1.5s ease-in-out infinite;text-align:center;padding:40px 20px}
@keyframes catGlow{0%,100%{opacity:.5}50%{opacity:1}}
