.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border:1px solid transparent;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.button:focus-visible,.input:focus-visible,.select:focus-visible,.textarea:focus-visible,.toast button:focus-visible{outline:3px solid rgba(37,99,235,.28);outline-offset:2px}.button:disabled{cursor:not-allowed;opacity:.65}.button-primary{background:var(--primary);color:#fff}.button-primary:hover{background:var(--primary-hover)}.button-secondary{border-color:var(--border);background:var(--surface);color:var(--text-primary)}.button-secondary:hover{border-color:#cbd5e1;background:#f8fafc}.button-success{background:var(--support);color:#fff}.button-success:hover{background:var(--support-hover)}.button.dashboard-export-button{border-color:#22c55e;background:#f0fdf4;color:#15803d;box-shadow:0 1px 2px rgba(15,23,42,.08)}.button.dashboard-export-button:hover{border-color:#16a34a;background:#dcfce7;color:#166534}.button.dashboard-export-button:active{background:#bbf7d0}.button.dashboard-export-button:focus-visible{outline-color:rgba(34,197,94,.35)}.button-warning{background:var(--warning);color:#fff}.button-warning:hover{background:var(--warning-hover)}.button-danger{background:var(--error);color:#fff}.button-danger:hover{background:var(--error-hover)}.button-ghost{background:transparent;color:var(--text-secondary)}.button-ghost:hover{background:#f1f5f9;color:var(--text-primary)}.button-spinner{width:16px;height:16px;border:2px solid;border-right:2px solid transparent;border-radius:999px;animation:spin .7s linear infinite}.badge{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;font-size:13px;font-weight:600}.badge-primary{background:var(--primary-light);color:var(--primary)}.badge-success{background:var(--support-light);color:var(--support)}.badge-warning{background:var(--warning-light);color:var(--warning)}.badge-error{background:var(--error-light);color:var(--error)}.badge-process{background:var(--process-light);color:var(--process)}.badge-neutral{background:#f1f5f9;color:var(--text-secondary)}.badge-sky{background:#e0f2fe;color:#0284c7}.badge-orange{background:#ffedd5;color:#ea580c}.card{padding:22px;border:1px solid var(--border);border-radius:14px;background:var(--surface);box-shadow:var(--shadow)}.card-header{display:grid;grid-gap:6px;gap:6px;margin-bottom:18px}.card-title{margin:0;font-size:18px;font-weight:600}.card-description{margin:0;color:var(--text-secondary);font-size:14px;line-height:1.6}.card-content{display:grid;grid-gap:16px;gap:16px}.form-field{display:grid;grid-gap:7px;gap:7px}.form-label{font-weight:600}.form-label,.input,.select,.textarea{color:var(--text-primary);font-size:14px}.input,.select,.textarea{width:100%;border:1px solid var(--border);border-radius:8px;background:var(--surface);transition:border-color .16s ease,box-shadow .16s ease}.input,.select{min-height:42px;padding:0 12px}.textarea{min-height:112px;resize:vertical;padding:11px 12px;line-height:1.6}.input::placeholder,.textarea::placeholder{color:var(--text-muted)}.input:hover,.select:hover,.textarea:hover{border-color:#cbd5e1}.input-error{border-color:var(--error)}.form-message{color:var(--text-secondary);font-size:12px;line-height:1.5}.form-message-error{color:var(--error)}.table-container{width:100%;overflow-x:auto;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.table{width:100%;min-width:640px;border-collapse:collapse;font-size:14px}.table-header{background:#f8fafc}.table-head{padding:13px 16px;color:var(--text-secondary);font-size:13px;font-weight:700;text-align:left}.table-cell,.table-head{border-bottom:1px solid var(--border)}.table-cell{padding:14px 16px;color:var(--text-primary);vertical-align:middle}.table-body .table-row:last-child .table-cell{border-bottom:0}.skeleton-group{display:grid;grid-gap:10px;gap:10px}.skeleton-line{display:block;width:100%;height:14px;border-radius:999px;background:linear-gradient(90deg,#e2e8f0,#f8fafc,#e2e8f0);background-size:200% 100%;animation:shimmer 1.2s ease-in-out infinite}.skeleton-line:nth-child(2n){width:86%}.skeleton-line:nth-child(3n){width:68%}.state-panel{display:grid;justify-items:center;grid-gap:10px;gap:10px;padding:32px 20px;border:1px solid var(--border);border-radius:14px;background:var(--surface);text-align:center}.state-panel h2{margin:4px 0 0;font-size:18px;font-weight:600}.state-panel p{max-width:440px;margin:0;color:var(--text-secondary);font-size:14px;line-height:1.6}.state-panel-error{border-color:#fecaca}.state-icon{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:999px}.state-icon-neutral{background:#f1f5f9;color:var(--text-secondary)}.state-icon-error{background:var(--error-light);color:var(--error)}.state-action{margin-top:8px}.pagination{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.pagination-current,.pagination-summary{color:var(--text-secondary);font-size:14px}.pagination-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.toast-viewport{position:fixed;right:18px;bottom:18px;z-index:50;display:grid;width:min(380px,calc(100vw - 36px));grid-gap:10px;gap:10px}.toast.toast-top-center{position:fixed;top:80px;left:50%;z-index:1;width:min(520px,calc(100vw - 32px));min-width:min(360px,calc(100vw - 32px));padding:16px 18px;transform:translateX(-50%);box-shadow:0 12px 30px rgba(15,23,42,.16)}.toast{display:grid;grid-template-columns:auto 1fr auto;grid-gap:10px;gap:10px;align-items:flex-start;padding:14px;border:1px solid var(--border);border-radius:12px;background:var(--surface);box-shadow:var(--shadow)}.toast strong{display:block;margin-bottom:2px;font-size:14px}.toast p{margin:0;color:var(--text-secondary);font-size:13px;line-height:1.5}.toast button{border:0;background:transparent;color:var(--text-muted);cursor:pointer}.toast-success{border-color:#bbf7d0;color:var(--support)}.toast-error{border-color:#fecaca;color:var(--error)}.toast-warning{border-color:#fde68a;color:var(--warning)}.toast-info{border-color:#bfdbfe;color:var(--primary)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes spin{to{transform:rotate(1turn)}}