.ds-btn{--_bg:var(--green-500);--_fg:var(--stone-900);--_bd:transparent;--_sh:none;font-family:var(--font-sans);font-weight:var(--fw-bold);white-space:nowrap;-webkit-user-select:none;user-select:none;cursor:pointer;border:1.5px solid var(--_bd);border-radius:var(--radius-pill);background:var(--_bg);color:var(--_fg);box-shadow:var(--_sh);transition:var(--transition-colors), transform var(--dur-fast) var(--ease-out);-webkit-tap-highlight-color:transparent;justify-content:center;align-items:center;gap:.5em;line-height:1;text-decoration:none;display:inline-flex}.ds-btn:hover{background:var(--_bgh,var(--_bg));border-color:var(--_bdh,var(--_bd));color:var(--_fgh,var(--_fg))}.ds-btn:active{transform:translateY(1px)scale(.99)}.ds-btn:focus-visible{box-shadow:var(--ring);outline:none}.ds-btn[disabled],.ds-btn[aria-disabled=true]{opacity:.45;cursor:not-allowed;box-shadow:var(--_sh);transform:none}.ds-btn[disabled]:hover,.ds-btn[aria-disabled=true]:hover{background:var(--_bg);border-color:var(--_bd);color:var(--_fg)}.ds-btn--sm{height:var(--control-sm);font-size:var(--text-sm);gap:.4em;padding:0 .9rem}.ds-btn--md{height:var(--control-md);font-size:var(--text-base);padding:0 1.25rem}.ds-btn--lg{height:var(--control-lg);font-size:var(--text-md);padding:0 1.6rem}.ds-btn--block{white-space:normal;text-align:center;width:100%}.ds-btn--primary{--_bg:var(--green-500);--_fg:var(--stone-900);--_bgh:var(--green-600);--_sh:var(--shadow-xs)}.ds-btn--primary:active{--_bg:var(--green-600)}.ds-btn--secondary{--_bg:var(--white);--_fg:var(--stone-900);--_bd:var(--stone-300);--_bgh:var(--stone-100);--_bdh:var(--stone-400);--_sh:var(--shadow-xs)}.ds-btn--soft{--_bg:var(--green-50);--_fg:var(--green-800);--_bgh:var(--green-100)}.ds-btn--outline{--_bg:transparent;--_fg:var(--green-800);--_bd:var(--green-500);--_bgh:var(--green-50)}.ds-btn--ghost{--_bg:transparent;--_fg:var(--stone-800);--_bgh:var(--stone-100)}.ds-btn--danger{--_bg:var(--danger);--_fg:#fff;--_bgh:#bf2f20;--_sh:var(--shadow-xs)}.ds-btn--inverse{--_bg:var(--white);--_fg:var(--green-900);--_bgh:var(--green-50);--_sh:var(--shadow-sm)}.ds-btn--toggle{--_bg:var(--white);--_fg:var(--stone-900);--_bd:var(--stone-300);--_bgh:var(--stone-100);--_bdh:var(--stone-400)}.ds-btn--toggle[aria-pressed=true]{--_bg:var(--green-900);--_fg:var(--white);--_bd:var(--green-900);--_bgh:var(--green-950);--_bdh:var(--green-950);--_fgh:var(--white)}.ds-btn__spin{border:2px solid;border-right-color:#0000;border-radius:50%;width:1.05em;height:1.05em;animation:.6s linear infinite ds-btn-spin}.ds-btn--loading .ds-btn__label,.ds-btn--loading .ds-icon{visibility:hidden}.ds-btn--loading{position:relative}.ds-btn--loading .ds-btn__spin{position:absolute}@keyframes ds-btn-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ds-btn__spin{animation-duration:1.2s}}.ds-field{font-family:var(--font-sans);text-align:left;flex-direction:column;gap:.4rem;display:flex}.ds-field--block{width:100%}.ds-field__label{font-weight:var(--fw-bold);font-size:var(--text-sm);color:var(--stone-800);align-items:center;gap:.4rem;display:flex}.ds-field__opt{font-weight:var(--fw-medium);font-size:var(--text-xs);color:var(--stone-500)}.ds-field__req{color:var(--coral-500)}.ds-field__hint{font-size:var(--text-xs);color:var(--stone-500);margin:0}.ds-field__error{font-size:var(--text-xs);color:var(--danger);font-weight:var(--fw-semibold);align-items:center;gap:.3rem;margin:0;display:flex}.ds-input{background:var(--white);border:1.5px solid var(--stone-300);border-radius:var(--radius-md);color:var(--text-strong);transition:var(--transition-colors);align-items:center;gap:.55rem;display:flex}.ds-input:focus-within{border-color:var(--green-500);box-shadow:var(--ring)}.ds-input--err{border-color:var(--danger)}.ds-input--err:focus-within{box-shadow:0 0 0 3px var(--danger-soft)}.ds-input--sm{min-height:var(--control-sm);font-size:var(--text-sm);padding:0 .75rem}.ds-input--md{min-height:var(--control-md);font-size:var(--text-base);padding:0 .9rem}.ds-input--lg{min-height:var(--control-lg);font-size:var(--text-md);padding:0 1.05rem}.ds-input__el{min-width:0;color:inherit;font:inherit;background:0 0;border:none;outline:none;flex:1;padding:.55rem 0;font-size:max(16px,1em)}.ds-input__el::placeholder{color:var(--stone-400)}.ds-input__icon{color:var(--stone-500);flex:none;display:inline-flex}.ds-input--disabled{background:var(--stone-100);opacity:.75;cursor:not-allowed}.ds-input--disabled .ds-input__el{cursor:not-allowed}.ds-input__affix{color:var(--stone-500);white-space:nowrap;font-size:.92em;font-weight:var(--fw-semibold);flex:none}.ds-dialog__backdrop{background:var(--surface-overlay);z-index:150;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ds-dialog-fade var(--dur-base) var(--ease-out);justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.ds-dialog{background:var(--surface-card);border-radius:var(--radius-2xl);box-shadow:var(--shadow-xl);width:100%;max-height:88vh;animation:ds-dialog-pop var(--dur-base) var(--ease-out);font-family:var(--font-sans);flex-direction:column;display:flex;overflow:hidden}.ds-dialog--sm{max-width:420px}.ds-dialog--md{max-width:540px}.ds-dialog--lg{max-width:760px}.ds-dialog__head{align-items:flex-start;gap:1rem;padding:1.5rem 1.5rem .25rem;display:flex}.ds-dialog__titles{flex:1;min-width:0}.ds-dialog__title{font:var(--text-h3);color:var(--text-strong)}.ds-dialog__desc{font-size:var(--text-sm);color:var(--stone-500);margin-top:.25rem}.ds-dialog__close{border-radius:var(--radius-pill);color:var(--stone-500);transition:var(--transition-colors);flex:none;margin:-.4rem -.4rem 0 0;padding:.4rem;display:inline-flex}.ds-dialog__close:hover{background:var(--stone-100);color:var(--stone-900)}.ds-dialog__body{color:var(--text-body);font-size:var(--text-base);line-height:var(--leading-normal);padding:1rem 1.5rem;overflow:auto}.ds-dialog__foot{border-top:1px solid var(--border-subtle);flex-wrap:wrap;justify-content:flex-end;gap:.6rem;padding:1rem 1.5rem 1.5rem;display:flex}@keyframes ds-dialog-pop{0%{opacity:0;transform:translateY(10px)scale(.97)}}@keyframes ds-dialog-fade{0%{opacity:0}}@media (prefers-reduced-motion:reduce){.ds-dialog,.ds-dialog__backdrop{animation:none}}
