.spinner{justify-content:center;align-items:center;display:inline-flex}.spinner-circle{opacity:.85;border:2px solid;border-top-color:#0000;border-radius:50%;width:15px;height:15px;animation:.7s linear infinite spinner-rotate}@keyframes spinner-rotate{to{transform:rotate(360deg)}}
.btn{justify-content:center;align-items:center;gap:var(--space-2);font-family:var(--font-body);border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;border:none;padding:10px 18px;font-size:14px;font-weight:700;text-decoration:none;transition:transform .15s,box-shadow .15s,filter .15s;display:inline-flex;position:relative}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:active:not(:disabled){transition-duration:80ms;transform:translateY(0)scale(.97)}.btn:after{content:"";background:radial-gradient(closest-side, var(--color-accent), transparent 70%);filter:blur(5px);opacity:0;pointer-events:none;height:10px;transition:opacity .2s,transform .2s;position:absolute;bottom:-7px;left:10%;right:10%;transform:scaleX(.6)}.btn:hover:not(:disabled):after{opacity:.9;transform:scaleX(1)}.btn:disabled{cursor:not-allowed;opacity:.6;filter:none;transform:none}.btn:disabled:after{opacity:0}.btn-primary{background:var(--color-accent);color:var(--color-accent-fg)}.btn-primary:after{opacity:0;background:radial-gradient(closest-side,#fff,#0000 70%)}.btn-primary:hover:not(:disabled){box-shadow:0 10px 18px -6px color-mix(in srgb, var(--color-accent) 55%, transparent)}.btn-primary:hover:not(:disabled):after{opacity:.35}.btn-dark{background:var(--color-text-1);color:var(--color-bg)}.btn-dark:hover:not(:disabled){box-shadow:0 10px 18px -6px color-mix(in srgb, var(--color-accent) 55%, transparent)}.btn-ghost{color:var(--color-text-2);background:0 0;padding:0;font-weight:500}.btn-ghost:after{border-radius:var(--radius-pill);background:var(--color-accent);filter:none;transform-origin:50%;height:2px;bottom:-3px;left:0;right:0;transform:scaleX(0)}.btn-ghost:hover:not(:disabled){color:var(--color-text-1);transform:none}.btn-ghost:hover:not(:disabled):after{opacity:1;transform:scaleX(1)}.btn-outline{color:var(--color-text-2);border:1px solid var(--color-border-card);background:0 0}.btn-outline:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-text-1);box-shadow:0 10px 18px -6px color-mix(in srgb, var(--color-accent) 45%, transparent)}
.carousel{align-items:center;gap:var(--space-2);display:flex}.carousel-track{gap:var(--space-4);scroll-snap-type:x proximity;scroll-behavior:smooth;scrollbar-width:none;cursor:grab;flex:1;display:flex;overflow-x:auto}.carousel-track.is-dragging{cursor:grabbing;scroll-snap-type:none;-webkit-user-select:none;user-select:none}.carousel-track::-webkit-scrollbar{display:none}.carousel-track>*{scroll-snap-align:start;flex:none}.carousel-arrow{background:var(--color-surface);border:1px solid var(--color-border-card);width:36px;height:36px;color:var(--color-text-1);cursor:pointer;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:13px;transition:filter .15s,opacity .15s;display:flex}.carousel-arrow:hover:not(:disabled){filter:brightness(.92)}.carousel-arrow:active:not(:disabled){transition-duration:80ms;transform:scale(.92)}.carousel-arrow:disabled{opacity:.35;cursor:default}[data-theme=light] .carousel-arrow{border-width:1.5px}@media (max-width:768px){.carousel-arrow{display:none}.carousel-track{gap:var(--space-2)}}
.match-badge{font-family:var(--font-body);border-radius:var(--radius-pill);background:var(--color-accent);color:var(--color-accent-fg);white-space:nowrap;opacity:0;align-items:center;font-weight:800;display:inline-flex;transform:scale(.6)}@keyframes match-badge-pop-in{0%{opacity:0;transform:scale(.6)}70%{opacity:1;transform:scale(1.08)}to{opacity:1;transform:scale(1)}}.match-badge--visible{animation:.32s cubic-bezier(.34,1.56,.64,1) forwards match-badge-pop-in}.match-badge-md{padding:3px 10px;font-size:13px}.match-badge-sm{padding:2px 9px;font-size:11.5px}.match-badge-lg{padding:5px 13px;font-size:15px}@media (max-width:768px){.match-badge-sm{padding:2px 7px;font-size:10.5px}.match-badge-lg{padding:2px 8px;font-size:10.5px}}
.not-found-icon{border-radius:var(--radius-lg);background:var(--color-accent-soft);width:76px;height:76px;margin-bottom:var(--space-6);color:var(--color-accent);justify-content:center;align-items:center;font-size:30px;display:flex}.not-found-code{font-family:var(--font-display);letter-spacing:-.02em;margin-bottom:6px;font-size:56px;font-weight:800;line-height:1}.not-found-code-accent{color:var(--color-accent)}.not-found-title{font-family:var(--font-display);margin-bottom:8px;font-size:19px;font-weight:700}.not-found-description{color:var(--color-text-3);max-width:360px;margin:0 0 28px;font-size:13.5px}.not-found-search{align-items:center;gap:var(--space-2);width:100%;margin-bottom:var(--space-6);background:#ffffff0f;border:1px solid #ffffff1a;border-radius:11px;padding:12px 14px;display:flex}.not-found-search-icon{color:var(--color-text-4);flex-shrink:0;font-size:13px}.not-found-search input{min-width:0;font-family:var(--font-body);color:var(--color-text-1);background:0 0;border:none;outline:none;flex:1;font-size:13.5px}.not-found-search input::placeholder{color:var(--color-text-4)}.not-found-actions{gap:var(--space-3);flex-wrap:wrap;justify-content:center;display:flex}
.engine-error-icon{border-radius:var(--radius-lg);background:color-mix(in srgb, var(--color-danger) 12%, transparent);width:76px;height:76px;margin-bottom:var(--space-6);color:var(--color-danger);justify-content:center;align-items:center;font-size:28px;display:flex}.engine-error-title{font-family:var(--font-display);margin-bottom:8px;font-size:24px;font-weight:800}.engine-error-description{color:var(--color-text-3);max-width:380px;margin:0 0 24px;font-size:13.5px}.engine-error-code{border-radius:var(--radius-md);width:100%;margin-bottom:var(--space-6);text-align:left;color:var(--color-text-4);background:#ffffff0a;border:1px solid #ffffff14;padding:12px 16px;font-family:ui-monospace,Menlo,monospace;font-size:11px}.engine-error-actions{gap:var(--space-3);flex-wrap:wrap;justify-content:center;display:flex}
