.ds-btn{font-family:var(--font-display);font-size:var(--text-body);font-weight:var(--weight-semibold);border:none;border-radius:var(--radius-lg);padding:12px 24px;display:inline-flex;align-items:center;gap:8px;cursor:pointer;transition:transform var(--duration-fast) var(--ease-out),filter var(--duration-base) var(--ease-standard),opacity var(--duration-base) var(--ease-standard);}
.ds-btn:active{transform:scale(.97);}
.ds-btn-primary{background:var(--gradient-brand);color:var(--text-inverse);box-shadow:var(--shadow-brand);}
.ds-btn-primary:hover{filter:brightness(1.08);}
.ds-btn-secondary{background:var(--surface-inverse);color:var(--text-inverse);}
.ds-btn-secondary:hover{filter:brightness(1.3);}
.ds-btn-ghost{background:transparent;color:var(--text-primary);border:1.5px solid var(--border-strong);}
.ds-btn-ghost:hover{background:var(--surface-muted);}
.ds-btn-sm{padding:8px 16px;font-size:var(--text-body-s);border-radius:var(--radius-md);}
.ds-btn-lg{padding:16px 32px;font-size:var(--text-body-l);}
.ds-btn:disabled{opacity:.45;cursor:not-allowed;filter:none;transform:none;}

.ds-iconbtn{width:44px;height:44px;border-radius:var(--radius-full);border:none;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:filter var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out);}
.ds-iconbtn:active{transform:scale(.93);}
.ds-iconbtn-primary{background:var(--gradient-brand);color:#fff;box-shadow:var(--shadow-brand);}
.ds-iconbtn-neutral{background:var(--surface-muted);color:var(--text-primary);}
.ds-iconbtn-neutral:hover{background:var(--gray-200);}
.ds-iconbtn-ghost{background:transparent;color:var(--text-secondary);}
.ds-iconbtn-ghost:hover{background:var(--surface-muted);}

.ds-field{display:flex;flex-direction:column;gap:6px;font-family:var(--font-body);}
.ds-label{font-size:var(--text-body-s);font-weight:var(--weight-medium);color:var(--text-primary);}
.ds-input,.ds-select{font-family:var(--font-body);font-size:var(--text-body);color:var(--text-primary);background:var(--surface-card);border:1.5px solid var(--border-default);border-radius:var(--radius-md);padding:11px 14px;outline:none;transition:border-color var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out);}
.ds-input::placeholder{color:var(--text-muted);}
.ds-input:focus,.ds-select:focus{border-color:var(--accent-primary);box-shadow:0 0 0 4px rgba(46,78,241,0.14);}
.ds-input:disabled,.ds-select:disabled{background:var(--surface-muted);color:var(--text-muted);cursor:not-allowed;}
.ds-input-error{border-color:var(--danger);}
.ds-input-error:focus{box-shadow:0 0 0 4px rgba(200,40,40,0.12);}
.ds-hint{font-size:var(--text-caption);color:var(--text-muted);}
.ds-hint-error{color:var(--danger);}
.ds-select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--gray-500) 50%),linear-gradient(135deg,var(--gray-500) 50%,transparent 50%);background-position:calc(100% - 20px) center,calc(100% - 15px) center;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:36px;}

.ds-check{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--gray-300);appearance:none;cursor:pointer;display:inline-grid;place-content:center;background:var(--surface-card);transition:background var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out);}
.ds-check:checked{background:var(--gradient-brand);border-color:transparent;}
.ds-check:checked::after{content:'';width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) translate(-1px,-1px);}
.ds-radio{width:20px;height:20px;border-radius:var(--radius-full);border:1.5px solid var(--gray-300);appearance:none;cursor:pointer;display:inline-grid;place-content:center;background:var(--surface-card);transition:border-color var(--duration-fast) var(--ease-out);}
.ds-radio:checked{border:6px solid var(--accent-primary);}
.ds-check-label,.ds-radio-label{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-body);font-size:var(--text-body);color:var(--text-primary);cursor:pointer;}

.ds-switch{width:44px;height:26px;border-radius:var(--radius-pill);background:var(--gray-200);position:relative;appearance:none;cursor:pointer;transition:background var(--duration-base) var(--ease-standard);flex:none;}
.ds-switch::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);transition:transform var(--duration-base) var(--ease-standard);}
.ds-switch:checked{background:var(--gradient-brand);}
.ds-switch:checked::after{transform:translateX(18px);}

.ds-badge{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-body);font-size:var(--text-caption);font-weight:var(--weight-semibold);padding:4px 12px;border-radius:var(--radius-pill);letter-spacing:var(--tracking-normal);}
.ds-badge-success{background:var(--success-bg);color:var(--success);}
.ds-badge-warning{background:var(--warning-bg);color:var(--warning);}
.ds-badge-danger{background:var(--danger-bg);color:var(--danger);}
.ds-badge-neutral{background:var(--surface-muted);color:var(--text-secondary);}
.ds-badge-brand{background:var(--lavender-100);color:var(--accent-primary);}

.ds-tag{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-body);font-size:var(--text-body-s);font-weight:var(--weight-medium);color:var(--text-primary);background:var(--surface-muted);border:1px solid var(--border-default);padding:6px 14px;border-radius:var(--radius-pill);cursor:default;}
.ds-tag button{border:none;background:none;color:var(--text-muted);cursor:pointer;font-size:14px;line-height:1;padding:0;}

.ds-card{background:var(--surface-card);border-radius:var(--radius-xl);box-shadow:var(--shadow-md);border:1px solid var(--border-default);padding:var(--space-6);}
.ds-card-flush{padding:0;overflow:hidden;}

.ds-tabs{display:flex;gap:var(--space-6);border-bottom:1.5px solid var(--border-default);font-family:var(--font-body);}
.ds-tab{background:none;border:none;padding:12px 2px;font-size:var(--text-body);font-weight:var(--weight-medium);color:var(--text-muted);cursor:pointer;position:relative;transition:color var(--duration-fast) var(--ease-out);}
.ds-tab-active{color:var(--text-primary);font-weight:var(--weight-semibold);}
.ds-tab-active::after{content:'';position:absolute;left:0;right:0;bottom:-1.5px;height:2.5px;border-radius:2px;background:var(--gradient-brand);}

.ds-tooltip{background:var(--surface-inverse);color:#fff;font-family:var(--font-body);font-size:var(--text-caption);padding:6px 12px;border-radius:var(--radius-sm);box-shadow:var(--shadow-md);display:inline-block;}

.ds-dialog-overlay{position:fixed;inset:0;background:rgba(1,15,45,0.55);backdrop-filter:blur(var(--blur-glass));display:flex;align-items:center;justify-content:center;}
.ds-dialog{background:var(--surface-card);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);padding:var(--space-8);max-width:420px;width:100%;font-family:var(--font-body);}
.ds-dialog h3{font-family:var(--font-display);font-size:var(--text-h2);margin:0 0 8px;color:var(--text-primary);}
.ds-dialog p{font-size:var(--text-body);color:var(--text-secondary);line-height:var(--leading-relaxed);margin:0 0 24px;}
.ds-dialog-actions{display:flex;justify-content:flex-end;gap:12px;}

.ds-toast{display:flex;align-items:flex-start;gap:12px;background:var(--surface-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:14px 18px;font-family:var(--font-body);border-left:3px solid var(--accent-primary);max-width:360px;}
.ds-toast-success{border-left-color:var(--success);}
.ds-toast-warning{border-left-color:var(--warning);}
.ds-toast-danger{border-left-color:var(--danger);}
.ds-toast strong{display:block;font-size:var(--text-body-s);color:var(--text-primary);margin-bottom:2px;}
.ds-toast span{font-size:var(--text-body-s);color:var(--text-secondary);}

.ds-icon-grad{width:48px;height:48px;display:inline-block;background:var(--gradient-brand);-webkit-mask-image:var(--icon-url);mask-image:var(--icon-url);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;}
