.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:var(--radius);font-weight:var(--fw-medium);border:none;cursor:pointer;transition:background-color .15s ease,color .15s ease,border-color .15s ease;text-decoration:none;white-space:nowrap;outline:none}.btn:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--color-accent-600)}.btn-loading,.btn:disabled{cursor:not-allowed;opacity:.6}.btn-full-width{width:100%}.btn-sm{height:32px;padding-left:12px;padding-right:12px;font-size:var(--text-caption);line-height:var(--text-caption-lh)}.btn-md{height:40px}.btn-lg,.btn-md{padding-left:16px;padding-right:16px;font-size:var(--text-body);line-height:var(--text-body-lh)}.btn-lg{height:44px}.btn-primary{background-color:var(--color-accent-600);color:#fff}.btn-primary:hover:not(:disabled):not(.btn-loading){background-color:var(--color-accent-700)}.btn-primary:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--color-accent-600)}.btn-secondary{background-color:var(--color-surface);color:var(--color-gray-700);border:1px solid var(--color-gray-300)}.btn-secondary:hover:not(:disabled):not(.btn-loading){background-color:var(--color-gray-50)}.btn-secondary:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--color-accent-600)}.btn-ghost{background-color:transparent;color:var(--color-gray-700)}.btn-ghost:hover:not(:disabled):not(.btn-loading){background-color:var(--color-gray-100)}.btn-ghost:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--color-accent-600)}.btn-danger{background-color:var(--color-red-600);color:#fff}.btn-danger:hover:not(:disabled):not(.btn-loading){background-color:#b91c1c}.btn-danger:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--color-red-600)}.btn-spinner{animation:btn-spin 1s linear infinite;flex-shrink:0}@keyframes btn-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.back-btn{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;padding:5px 12px 5px 8px;border:1px solid var(--color-gray-200);border-radius:8px;background-color:var(--color-surface);color:var(--color-gray-600);font-size:var(--text-body);line-height:1;text-decoration:none;cursor:pointer;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.back-btn:hover{background-color:var(--color-gray-50);border-color:var(--color-accent-200);color:var(--color-accent-700)}.back-btn:focus-visible{outline:2px solid var(--color-accent-600);outline-offset:2px}.back-btn:disabled{opacity:.5;cursor:not-allowed}.back-btn:disabled:hover{background-color:var(--color-surface);border-color:var(--color-gray-200);color:var(--color-gray-600)}.back-btn-icon{flex-shrink:0}@media (max-width:640px){.btn-sm{height:28px}.btn-md{height:36px}.btn-lg{height:40px}.back-btn{padding-top:3px;padding-bottom:3px}.back-btn-compact .back-btn-label{display:none}.back-btn-compact{min-height:44px;min-width:44px;justify-content:center}}.confirm-backdrop{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px;background-color:color-mix(in srgb,var(--color-gray-900) 68%,transparent);animation:confirm-fade .16s ease both}.confirm-dialog{width:100%;max-width:400px;padding:24px;text-align:center;background-color:var(--color-surface);border:1px solid var(--color-gray-200);border-radius:var(--radius);box-shadow:var(--shadow-lg);animation:confirm-pop .18s ease both}.confirm-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;margin:0 auto 14px;border-radius:var(--radius);color:var(--color-accent-600);background-color:var(--color-accent-50)}.confirm-icon-danger{color:var(--color-red-600);background-color:color-mix(in srgb,var(--color-red-600) 12%,transparent)}.confirm-title{margin:0 0 6px;font-size:var(--text-card-title);line-height:var(--text-card-title-lh);font-weight:var(--fw-semibold);color:var(--color-gray-900)}.confirm-message{margin:0 0 20px;font-size:var(--text-body);line-height:var(--text-body-lh);color:var(--color-gray-600)}.confirm-details{margin:0 0 20px;text-align:left}.confirm-actions{display:flex;justify-content:center;gap:10px}@keyframes confirm-fade{0%{opacity:0}to{opacity:1}}@keyframes confirm-pop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@media (max-width:480px){.confirm-dialog{padding:20px}.confirm-actions{flex-direction:column-reverse}}