.card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); box-shadow: var(--shadow); transition: box-shadow .18s ease, border-color .18s ease; }
.card:hover { border-color: #c7d8eb; box-shadow: 0 16px 40px rgb(15 23 42 / 12%); }
.button { display: inline-flex; align-items: center; justify-content: center; min-height: 2.75rem; padding: .625rem 1rem; border: 1px solid transparent; border-radius: var(--radius-small); cursor: pointer; font-weight: 600; text-decoration: none; transition: background .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease; }
.button:hover { text-decoration: none; }
.button:disabled { cursor: not-allowed; opacity: .48; box-shadow: none; }
.button:focus-visible, a:focus-visible { outline: 3px solid #93c5fd; outline-offset: 3px; }
.button-primary { background: var(--color-blue); color: #fff; }
.button-primary:not(:disabled):hover { background: var(--color-blue-dark); box-shadow: 0 8px 18px rgb(22 119 255 / 22%); transform: translateY(-1px); }
.button-secondary { background: #fff; border-color: var(--color-border); color: var(--color-navy); }
.alert { padding: var(--space-3); border-radius: var(--radius-small); }
.alert-success { background: #ecfdf3; color: var(--color-success); }
.alert-error { background: #fef3f2; color: var(--color-error); }
.badge { display: inline-flex; padding: .2rem .55rem; border-radius: 999px; font-size: .7rem; font-weight: 700; letter-spacing: .08em; }
.badge-test { background: #fff3cd; color: #8a5b00; }
.badge-active { background: #dcfce7; color: var(--color-success); }
.loader { display: inline-flex; align-items: center; gap: var(--space-1); color: var(--color-muted); }
.spinner { width: 1rem; height: 1rem; border: 2px solid var(--color-border); border-top-color: var(--color-blue); border-radius: 50%; animation: spin .8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; } }
