:root{--ff-space-0:0px;--ff-space-px:1px;--ff-space-0-5:2px;--ff-space-1:4px;--ff-space-1-5:6px;--ff-space-2:8px;--ff-space-2-5:10px;--ff-space-3:12px;--ff-space-3-5:14px;--ff-space-4:16px;--ff-space-5:20px;--ff-space-6:24px;--ff-space-7:28px;--ff-space-8:32px;--ff-space-9:36px;--ff-space-10:40px;--ff-space-12:48px;--ff-space-14:56px;--ff-space-16:64px;--ff-space-20:80px;--ff-space-24:96px;--ff-space-xs:var(--ff-space-1);--ff-space-sm:var(--ff-space-2);--ff-space-md:var(--ff-space-4);--ff-space-lg:var(--ff-space-6);--ff-space-xl:var(--ff-space-8);--ff-space-2xl:var(--ff-space-12);--ff-space-3xl:var(--ff-space-16);--ff-radius-none:0px;--ff-radius-sm:2px;--ff-radius-base:4px;--ff-radius-md:6px;--ff-radius-lg:8px;--ff-radius-xl:12px;--ff-radius-2xl:16px;--ff-radius-3xl:24px;--ff-radius-full:9999px;--ff-radius-button:var(--ff-radius-md);--ff-radius-input:var(--ff-radius-md);--ff-radius-card:var(--ff-radius-lg);--ff-font-sans:"Inter",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--ff-font-mono:"JetBrains Mono","Fira Code",Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ff-text-xs:12px;--ff-text-sm:14px;--ff-text-base:16px;--ff-text-lg:18px;--ff-text-xl:20px;--ff-text-2xl:24px;--ff-text-3xl:30px;--ff-font-thin:100;--ff-font-light:300;--ff-font-normal:400;--ff-font-medium:500;--ff-font-semibold:600;--ff-font-bold:700;--ff-leading-tight:1.25;--ff-leading-normal:1.5;--ff-leading-relaxed:1.625;--ff-shadow-sm:0 1px 2px 0 rgba(0,0,0,.05);--ff-shadow-base:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--ff-shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--ff-shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--ff-ring-base:0 0 0 2px rgba(59,130,246,.5);--ff-ring-error:0 0 0 2px rgba(239,68,68,.5);--ff-ring-success:0 0 0 2px rgba(34,197,94,.5);--ff-ring-warning:0 0 0 2px rgba(245,158,11,.5)}:root,[data-theme=light]{--ff-bg-primary:#fff;--ff-bg-secondary:#f9fafb;--ff-bg-tertiary:#f3f4f6;--ff-text-primary:#111827;--ff-text-secondary:#4b5563;--ff-text-tertiary:#6b7280;--ff-text-inverse:#fff;--ff-border-primary:#e5e7eb;--ff-border-secondary:#d1d5db;--ff-border-focus:#3b82f6;--ff-color-primary:#2563eb;--ff-color-primary-hover:#1d4ed8;--ff-color-primary-active:#1e40af;--ff-color-secondary:#f3f4f6;--ff-color-secondary-hover:#e5e7eb;--ff-color-secondary-active:#d1d5db;--ff-color-error:#ef4444;--ff-color-warning:#f59e0b;--ff-color-success:#22c55e;--ff-color-info:#3b82f6;--ff-button-focus-ring:var(--ff-ring-base);--ff-input-focus-ring:var(--ff-ring-base)}[data-theme=dark]{--ff-bg-primary:#111827;--ff-bg-secondary:#1f2937;--ff-bg-tertiary:#374151;--ff-text-primary:#f9fafb;--ff-text-secondary:#d1d5db;--ff-text-tertiary:#9ca3af;--ff-text-inverse:#111827;--ff-border-primary:#374151;--ff-border-secondary:#4b5563;--ff-border-focus:#60a5fa;--ff-color-primary:#3b82f6;--ff-color-primary-hover:#60a5fa;--ff-color-primary-active:#93c5fd;--ff-color-secondary:#374151;--ff-color-secondary-hover:#4b5563;--ff-color-secondary-active:#6b7280;--ff-color-error:#f87171;--ff-color-warning:#fbbf24;--ff-color-success:#4ade80;--ff-color-info:#60a5fa;--ff-button-focus-ring:0 0 0 2px rgba(96,165,250,.5);--ff-input-focus-ring:0 0 0 2px rgba(96,165,250,.5)}.ff-component{box-sizing:border-box;font-family:var(--ff-font-sans)}.ff-focus-visible:focus-visible{outline:none;box-shadow:var(--ff-button-focus-ring)}@media (prefers-reduced-motion:reduce){.ff-component,.ff-component *,.ff-component :after,.ff-component :before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.ff-button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-family:var(--ff-font-sans);font-weight:var(--ff-font-medium);line-height:var(--ff-leading-normal);text-align:center;text-decoration:none;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:1px solid transparent;cursor:pointer;transition:all .15s ease-in-out;border-radius:var(--ff-radius-button);background:none;padding:0;margin:0;outline:none}.ff-button--primary{background-color:var(--ff-color-primary);color:var(--ff-text-inverse);border-color:var(--ff-color-primary)}.ff-button--primary:hover:not(:disabled){background-color:var(--ff-color-primary-hover);border-color:var(--ff-color-primary-hover)}.ff-button--primary:active:not(:disabled){background-color:var(--ff-color-primary-active);border-color:var(--ff-color-primary-active)}.ff-button--secondary{background-color:var(--ff-color-secondary);color:var(--ff-text-primary);border-color:var(--ff-border-primary)}.ff-button--secondary:hover:not(:disabled){background-color:var(--ff-color-secondary-hover);border-color:var(--ff-border-secondary)}.ff-button--secondary:active:not(:disabled){background-color:var(--ff-color-secondary-active)}.ff-button--ghost{background-color:transparent;color:var(--ff-text-primary);border-color:transparent}.ff-button--ghost:hover:not(:disabled){background-color:var(--ff-color-secondary)}.ff-button--ghost:active:not(:disabled){background-color:var(--ff-color-secondary-hover)}.ff-button--danger{background-color:var(--ff-color-error);color:var(--ff-text-inverse);border-color:var(--ff-color-error)}.ff-button--danger:hover:not(:disabled){background-color:var(--ff-color-error);opacity:.9}.ff-button--danger:active:not(:disabled){opacity:.8}.ff-button--sm{padding:var(--ff-space-2) var(--ff-space-3);font-size:var(--ff-text-sm);gap:var(--ff-space-1-5)}.ff-button--md{padding:var(--ff-space-2-5) var(--ff-space-4);font-size:var(--ff-text-base);gap:var(--ff-space-2)}.ff-button--lg{padding:var(--ff-space-3) var(--ff-space-5);font-size:var(--ff-text-lg);gap:var(--ff-space-2)}.ff-button--full{width:100%}.ff-button--loading{cursor:default;pointer-events:none}.ff-button__spinner{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}.ff-button__spinner-icon{width:1em;height:1em;stroke:currentColor}.ff-button__content--loading{opacity:0}.ff-button__content{display:flex;align-items:center;gap:inherit}.ff-button:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ff-button:focus-visible{outline:none;box-shadow:var(--ff-button-focus-ring)}@media (prefers-contrast:high){.ff-button{border-width:2px}}@media (prefers-reduced-motion:reduce){.ff-button{transition:none}.ff-button__spinner-icon *{animation:none}}.ff-input-wrapper{display:flex;flex-direction:column;gap:var(--ff-space-1-5)}.ff-input-wrapper--full{width:100%}.ff-input__label{font-family:var(--ff-font-sans);font-size:var(--ff-text-sm);font-weight:var(--ff-font-medium);color:var(--ff-text-primary);line-height:var(--ff-leading-normal);margin-bottom:var(--ff-space-1-5)}.ff-input__required{color:var(--ff-color-error);margin-left:var(--ff-space-1)}.ff-input__field-wrapper{position:relative;display:flex;align-items:center}.ff-input{width:100%;font-family:var(--ff-font-sans);line-height:var(--ff-leading-normal);color:var(--ff-text-primary);border:1px solid var(--ff-border-primary);border-radius:var(--ff-radius-input);transition:all .15s ease-in-out;outline:none;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ff-input,.ff-input--default{background-color:var(--ff-bg-primary)}.ff-input--filled{background-color:var(--ff-bg-secondary);border-color:transparent}.ff-input--filled:focus{background-color:var(--ff-bg-primary);border-color:var(--ff-border-focus)}.ff-input--sm{padding:var(--ff-space-2) var(--ff-space-3);font-size:var(--ff-text-sm)}.ff-input--md{padding:var(--ff-space-2-5) var(--ff-space-3-5);font-size:var(--ff-text-base)}.ff-input--lg{padding:var(--ff-space-3) var(--ff-space-4);font-size:var(--ff-text-lg)}.ff-input--with-left-icon{padding-left:var(--ff-space-10)}.ff-input--with-right-icon{padding-right:var(--ff-space-10)}.ff-input__icon{position:absolute;display:flex;align-items:center;justify-content:center;color:var(--ff-text-secondary);pointer-events:none;z-index:1}.ff-input__icon--left{left:var(--ff-space-3)}.ff-input__icon--right{right:var(--ff-space-3)}.ff-input__icon svg{width:1.25em;height:1.25em}.ff-input:hover:not(:disabled){border-color:var(--ff-border-secondary)}.ff-input:focus{border-color:var(--ff-border-focus);box-shadow:var(--ff-input-focus-ring)}.ff-input:disabled{background-color:var(--ff-bg-secondary);color:var(--ff-text-tertiary);cursor:not-allowed;opacity:.6}.ff-input--error,.ff-input-wrapper--error .ff-input{border-color:var(--ff-color-error)}.ff-input--error:focus,.ff-input-wrapper--error .ff-input:focus{box-shadow:var(--ff-ring-error)}.ff-input__messages{display:flex;flex-direction:column;gap:var(--ff-space-1)}.ff-input__error{color:var(--ff-color-error)}.ff-input__error,.ff-input__helper{font-size:var(--ff-text-sm);line-height:var(--ff-leading-normal)}.ff-input__helper{color:var(--ff-text-secondary)}.ff-input::placeholder{color:var(--ff-text-tertiary);opacity:1}.ff-input:disabled::placeholder{color:var(--ff-text-tertiary);opacity:.6}@media (prefers-contrast:high){.ff-input{border-width:2px}.ff-input:focus{border-width:3px}}@media (prefers-reduced-motion:reduce){.ff-input{transition:none}}.ff-input:-webkit-autofill,.ff-input:-webkit-autofill:focus,.ff-input:-webkit-autofill:hover{-webkit-box-shadow:0 0 0 1000px var(--ff-bg-primary) inset;-webkit-text-fill-color:var(--ff-text-primary);border-color:var(--ff-border-focus)}.ff-card{display:flex;flex-direction:column;background-color:var(--ff-bg-primary);border-radius:var(--ff-radius-card);position:relative;overflow:hidden;transition:all .15s ease-in-out}.ff-card--elevated{box-shadow:var(--ff-shadow-base);border:1px solid transparent}.ff-card--outlined{border:1px solid var(--ff-border-primary);box-shadow:none}.ff-card--filled{background-color:var(--ff-bg-secondary);border:1px solid transparent;box-shadow:none}.ff-card--padding-none{padding:0}.ff-card--padding-sm{padding:var(--ff-space-4)}.ff-card--padding-md{padding:var(--ff-space-6)}.ff-card--padding-lg{padding:var(--ff-space-8)}.ff-card--interactive{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ff-card--interactive:hover{transform:translateY(-1px)}.ff-card--interactive.ff-card--elevated:hover{box-shadow:var(--ff-shadow-md)}.ff-card--interactive.ff-card--outlined:hover{border-color:var(--ff-border-secondary)}.ff-card--interactive.ff-card--filled:hover{background-color:var(--ff-bg-tertiary)}.ff-card--interactive:active{transform:translateY(0)}.ff-card--interactive.ff-card--elevated:active{box-shadow:var(--ff-shadow-sm)}.ff-card--interactive:focus-visible{outline:none;box-shadow:var(--ff-ring-base),var(--ff-shadow-base)}.ff-card--interactive.ff-card--elevated:focus-visible{box-shadow:var(--ff-ring-base),var(--ff-shadow-md)}.ff-card__header{flex-shrink:0}.ff-card__body{flex:1 1;min-height:0}.ff-card__footer{flex-shrink:0;margin-top:auto}.ff-card--padding-sm .ff-card__body,.ff-card--padding-sm .ff-card__footer,.ff-card--padding-sm .ff-card__header{padding:0}.ff-card--padding-sm .ff-card__header{padding:var(--ff-space-4) var(--ff-space-4) var(--ff-space-2) var(--ff-space-4)}.ff-card--padding-sm .ff-card__body{padding:var(--ff-space-2) var(--ff-space-4)}.ff-card--padding-sm .ff-card__footer{padding:var(--ff-space-2) var(--ff-space-4) var(--ff-space-4) var(--ff-space-4)}.ff-card--padding-md .ff-card__body,.ff-card--padding-md .ff-card__footer,.ff-card--padding-md .ff-card__header{padding:0}.ff-card--padding-md .ff-card__header{padding:var(--ff-space-6) var(--ff-space-6) var(--ff-space-3) var(--ff-space-6)}.ff-card--padding-md .ff-card__body{padding:var(--ff-space-3) var(--ff-space-6)}.ff-card--padding-md .ff-card__footer{padding:var(--ff-space-3) var(--ff-space-6) var(--ff-space-6) var(--ff-space-6)}.ff-card--padding-lg .ff-card__body,.ff-card--padding-lg .ff-card__footer,.ff-card--padding-lg .ff-card__header{padding:0}.ff-card--padding-lg .ff-card__header{padding:var(--ff-space-8) var(--ff-space-8) var(--ff-space-4) var(--ff-space-8)}.ff-card--padding-lg .ff-card__body{padding:var(--ff-space-4) var(--ff-space-8)}.ff-card--padding-lg .ff-card__footer{padding:var(--ff-space-4) var(--ff-space-8) var(--ff-space-8) var(--ff-space-8)}.ff-card__body+.ff-card__footer,.ff-card__header+.ff-card__body{position:relative}.ff-card__body+.ff-card__footer:before,.ff-card__header+.ff-card__body:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background-color:var(--ff-border-primary)}.ff-card--padding-none .ff-card__body+.ff-card__footer:before,.ff-card--padding-none .ff-card__header+.ff-card__body:before{left:var(--ff-space-6);right:var(--ff-space-6)}@media (prefers-contrast:high){.ff-card--outlined{border-width:2px}.ff-card--interactive:focus-visible{outline:2px solid currentColor;outline-offset:2px}}@media (prefers-reduced-motion:reduce){.ff-card{transition:none}.ff-card--interactive:active,.ff-card--interactive:hover{transform:none}}.ff-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ff-radii-full);font-weight:500;white-space:nowrap;transition:all .2s ease-in-out;border:1px solid transparent}.ff-badge--sm{padding:var(--ff-spacing-1) var(--ff-spacing-2);font-size:.75rem;line-height:1rem}.ff-badge--md{padding:var(--ff-spacing-1) var(--ff-spacing-3)}.ff-badge--lg,.ff-badge--md{font-size:.875rem;line-height:1.25rem}.ff-badge--lg{padding:var(--ff-spacing-2) var(--ff-spacing-4)}.ff-badge--default{background-color:#f3f4f6;color:#374151;border-color:#e5e7eb}.ff-badge--success{background-color:#d1fae5;color:#065f46;border-color:#a7f3d0}.ff-badge--warning{background-color:#fef3c7;color:#92400e;border-color:#fde68a}.ff-badge--danger{background-color:#fee2e2;color:#991b1b;border-color:#fecaca}.ff-badge--info{background-color:#dbeafe;color:#1e40af;border-color:#93c5fd}.ff-alert{border-radius:var(--ff-radii-md);border:1px solid;padding:var(--ff-spacing-4);position:relative}.ff-alert__content{width:100%}.ff-alert__header{display:flex;align-items:center;gap:var(--ff-spacing-2);margin-bottom:var(--ff-spacing-2)}.ff-alert__icon{flex-shrink:0;width:1.25rem;height:1.25rem;display:flex;align-items:center;justify-content:center}.ff-alert__title{font-weight:600;font-size:.875rem;line-height:1.25rem;margin:0}.ff-alert__body{font-size:.875rem;line-height:1.5}.ff-alert__header+.ff-alert__body{margin-top:var(--ff-spacing-1)}.ff-alert--default{background-color:#f9fafb;border-color:#e5e7eb;color:#374151}.ff-alert--default .ff-alert__title{color:#111827}.ff-alert--success{background-color:#ecfdf5;border-color:#a7f3d0;color:#065f46}.ff-alert--success .ff-alert__title{color:#064e3b}.ff-alert--warning{background-color:#fffbeb;border-color:#fde68a;color:#92400e}.ff-alert--warning .ff-alert__title{color:#78350f}.ff-alert--destructive{background-color:#fef2f2;border-color:#fecaca;color:#991b1b}.ff-alert--destructive .ff-alert__title{color:#7f1d1d}.ff-alert--info{background-color:#eff6ff;border-color:#93c5fd;color:#1e40af}.ff-alert--info .ff-alert__title{color:#1e3a8a}.ff-skeleton{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%);background-size:200% 100%;animation:ff-skeleton-loading 1.5s infinite}@keyframes ff-skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.ff-skeleton--text{height:1rem;border-radius:var(--ff-radii-sm)}.ff-skeleton--rectangular{border-radius:var(--ff-radii-md)}.ff-skeleton--circular{border-radius:var(--ff-radii-full)}.ff-skeleton--text:not([style*=width]){width:100%}.ff-skeleton--text:not([style*=height]){height:1rem}