/* Shared components. Buttons, cards, inputs, badges, alerts, tables, skeleton, empty state, dialog. */
.fd-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-4);border-radius:var(--r-md);border:1px solid var(--fd-border);background:var(--fd-surface);color:var(--fd-text-strong);font:600 var(--fs-sm) var(--fd-font);text-decoration:none;cursor:pointer;transition:background .15s,border-color .15s,transform .1s;white-space:nowrap}
.fd-btn:hover{background:var(--fd-surface-2)}.fd-btn:active{transform:scale(.98)}
.fd-btn--primary{background:var(--fd-primary);border-color:var(--fd-primary);color:var(--fd-on-primary)}.fd-btn--primary:hover{background:var(--fd-primary-hover);border-color:var(--fd-primary-hover)}
.fd-btn--ghost{background:transparent;border-color:transparent;color:var(--fd-primary)}
.fd-btn--danger{color:var(--fd-danger);border-color:var(--fd-danger)}
.fd-btn[disabled],.fd-btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.fd-btn--icon{width:var(--tap);padding:0}
.fd-card{background:var(--fd-surface);border:1px solid var(--fd-border);border-radius:var(--r-lg);padding:var(--sp-4)}
.fd-card--link{transition:box-shadow .18s,transform .18s}.fd-card--link:hover{box-shadow:var(--fd-shadow);transform:translateY(-1px)}
.fd-field{display:block;margin-bottom:var(--sp-4)}
.fd-field label{display:block;font:600 var(--fs-sm) var(--fd-font);color:var(--fd-text-strong);margin-bottom:var(--sp-1)}
.fd-field input,.fd-field select,.fd-field textarea{width:100%;min-height:var(--tap);padding:10px var(--sp-3);border:1px solid var(--fd-border);border-radius:var(--r-md);background:var(--fd-surface);color:var(--fd-text);font:var(--fs-md) var(--fd-font)}
.fd-field input:focus,.fd-field select:focus,.fd-field textarea:focus{border-color:var(--fd-primary);outline:3px solid var(--fd-primary-soft)}
.fd-field__hint{font-size:var(--fs-xs);color:var(--fd-text-muted);margin-top:var(--sp-1)}
.fd-field.has-error input{border-color:var(--fd-danger)}.fd-field.has-error .fd-field__hint{color:var(--fd-danger)}
.fd-badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:var(--r-pill);font:600 var(--fs-xs) var(--fd-font);background:var(--fd-surface-2);color:var(--fd-text-muted)}
.fd-badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.fd-badge--success{background:var(--fd-success-bg);color:var(--fd-success)}.fd-badge--warning{background:var(--fd-warning-bg);color:var(--fd-warning)}
.fd-badge--danger{background:var(--fd-danger-bg);color:var(--fd-danger)}.fd-badge--info{background:var(--fd-info-bg);color:var(--fd-info)}
.fd-alert{padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);font-size:var(--fs-sm);background:var(--fd-info-bg);color:var(--fd-info)}
.fd-alert--success{background:var(--fd-success-bg);color:var(--fd-success)}.fd-alert--warning{background:var(--fd-warning-bg);color:var(--fd-warning)}.fd-alert--danger{background:var(--fd-danger-bg);color:var(--fd-danger)}
.fd-table{width:100%;border-collapse:collapse;background:var(--fd-surface);border:1px solid var(--fd-border);font-size:var(--fs-sm)}
.fd-table th{text-align:left;background:var(--fd-surface-2);color:var(--fd-text-muted);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.05em;padding:var(--sp-3)}
.fd-table td{padding:var(--sp-3);border-top:1px solid var(--fd-border)}
@media(max-width:640px){.fd-table thead{display:none}.fd-table tr{display:block;border-top:1px solid var(--fd-border);padding:var(--sp-2) 0}.fd-table td{display:flex;justify-content:space-between;border:0;padding:var(--sp-1) var(--sp-3)}.fd-table td::before{content:attr(data-label);color:var(--fd-text-muted)}}
.fd-skeleton{height:14px;border-radius:6px;background:linear-gradient(90deg,var(--fd-surface-2),var(--fd-border),var(--fd-surface-2));background-size:200% 100%;animation:fd-sh 1.2s linear infinite}
@keyframes fd-sh{to{background-position:-200% 0}}
.fd-empty{text-align:center;padding:var(--sp-6) var(--sp-4);color:var(--fd-text-muted)}.fd-empty strong{display:block;color:var(--fd-text-strong);margin-bottom:var(--sp-1)}
dialog.fd-dialog{border:1px solid var(--fd-border);border-radius:var(--r-lg);background:var(--fd-surface);color:var(--fd-text);box-shadow:var(--fd-shadow-lg);max-width:400px;width:calc(100% - 32px);padding:var(--sp-5)}
dialog.fd-dialog::backdrop{background:rgba(15,23,42,.5)}
