.sn-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border-radius:var(--sn-r-md);font:var(--sn-fw-semi) var(--sn-fs-sm)/1.2 var(--sn-font);border:1px solid transparent;cursor:pointer;text-decoration:none;white-space:nowrap}
.sn-btn:disabled{opacity:.45;pointer-events:none}
.sn-btn-primary{background:var(--sn-brand-soft);border-color:var(--sn-brand-border);color:var(--sn-brand-text)}
.sn-btn-primary:hover{background:rgba(225,29,72,.28)}
.sn-btn-secondary{background:var(--sn-surface-2);border-color:var(--sn-line);color:var(--sn-text)}
.sn-btn-ghost{background:transparent;border-color:transparent;color:var(--sn-text-muted)}
.sn-btn-danger{background:rgba(248,113,113,.12);border-color:rgba(248,113,113,.4);color:#fecaca}
.sn-btn-icon{width:40px;padding:0}
.sn-btn-sm{min-height:32px;padding:0 12px;font-size:var(--sn-fs-xs)}
.sn-card{background:var(--sn-surface);border:1px solid var(--sn-line);border-radius:var(--sn-r-lg);padding:var(--sn-s-5);min-width:0}
.sn-card-title{margin:0 0 var(--sn-s-2);font:var(--sn-fw-semi) var(--sn-fs-lg)/1.3 var(--sn-font);color:var(--sn-text)}
.sn-card-muted{margin:0;color:var(--sn-text-muted);font-size:var(--sn-fs-sm)}
.sn-input,.sn-select{width:100%;min-height:40px;padding:0 12px;border-radius:var(--sn-r-md);border:1px solid var(--sn-line);background:var(--sn-surface-2);color:var(--sn-text);font:var(--sn-fs-sm)/1.4 var(--sn-font);outline:none}
.sn-input:focus{border-color:var(--sn-brand-border);box-shadow:0 0 0 3px var(--sn-brand-soft)}
.sn-empty{text-align:center;padding:var(--sn-s-10) var(--sn-s-4);color:var(--sn-text-muted)}
.sn-empty h3{margin:0 0 var(--sn-s-2);color:var(--sn-text);font:var(--sn-fw-semi) var(--sn-fs-lg)/1.3 var(--sn-font)}
.sn-empty p{margin:0 0 var(--sn-s-5);font-size:var(--sn-fs-sm)}

/* Phase 10 — empty / loading / error */
.sn-state{text-align:center;padding:var(--sn-s-10) var(--sn-s-4);color:var(--sn-text-muted)}
.sn-state h3{margin:0 0 var(--sn-s-2);color:var(--sn-text);font:var(--sn-fw-semi) var(--sn-fs-lg)/1.3 var(--sn-font)}
.sn-state p{margin:0 0 var(--sn-s-5);font-size:var(--sn-fs-sm);max-width:320px;margin-left:auto;margin-right:auto}
.sn-state-error h3{color:var(--sn-danger)}
.sn-skeleton-line{height:12px;margin:8px 0;border-radius:6px;background:linear-gradient(90deg,var(--sn-surface-2),var(--sn-elevated),var(--sn-surface-2));background-size:200% 100%;animation:snSk 1.2s ease-in-out infinite}
.sn-skeleton-card{min-height:88px;border-radius:var(--sn-r-lg);border:1px solid var(--sn-line);background:var(--sn-surface)}
@keyframes snSk{0%{background-position:200% 0}100%{background-position:-200% 0}}
