/* Mod Converter — Shared animation layer + custom components * Applied ON TOP of the Tailwind-based Stitch pages. * Adds smooth scroll animations, hover lifts, page transitions, and custom MC version selector. */ /* --- Keyframes --- */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: scale(1); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: translateX(0); } } @keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0); } 50% { box-shadow: 0 0 12px 2px rgba(74, 222, 128, 0.15); } } @keyframes progressPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* --- Page transition --- */ html { scroll-behavior: smooth; } body { animation: fadeIn 0.25s ease-out; } /* --- Scroll-triggered animations --- */ .reveal { opacity: 0; transform: translateY(16px); transition: opacity 0.4s ease-out, transform 0.4s ease-out; } .reveal.visible { opacity: 1; transform: translateY(0); } .reveal-scale { opacity: 0; transform: scale(0.96); transition: opacity 0.35s ease-out, transform 0.35s ease-out; } .reveal-scale.visible { opacity: 1; transform: scale(1); } /* Stagger children on reveal */ .stagger > * { opacity: 0; transform: translateY(10px); transition: opacity 0.3s ease-out, transform 0.3s ease-out; } .stagger.visible > *:nth-child(1) { transition-delay: 0ms; opacity: 1; transform: none; } .stagger.visible > *:nth-child(2) { transition-delay: 70ms; opacity: 1; transform: none; } .stagger.visible > *:nth-child(3) { transition-delay: 140ms; opacity: 1; transform: none; } .stagger.visible > *:nth-child(4) { transition-delay: 210ms; opacity: 1; transform: none; } .stagger.visible > *:nth-child(5) { transition-delay: 280ms; opacity: 1; transform: none; } .stagger.visible > *:nth-child(6) { transition-delay: 350ms; opacity: 1; transform: none; } /* --- Hover lifts --- */ .lift { transition: transform 0.2s ease, box-shadow 0.2s ease; } .lift:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25); } /* --- Interactive states --- */ button, a { transition: all 0.15s ease; } button:active { transform: scale(0.97); } /* --- Progress bar smooth fill --- */ [class*="bg-emerald"] { transition: width 0.5s ease-in-out, background-color 0.3s ease; } /* --- Active pulse for running status --- */ .animate-pulse { animation: progressPulse 1.5s ease-in-out infinite; } /* --- Terminal auto-scroll --- */ .terminal-scroll { scroll-behavior: smooth; } /* --- Dropzone drag feedback --- */ .dropzone-active { border-color: #4ade80 !important; background: rgba(74, 222, 128, 0.03) !important; } /* --- Responsive sidebar --- */ @media (max-width: 768px) { aside.fixed { display: none !important; } div.md\:pl-64 { padding-left: 0 !important; margin-left: 0 !important; } } /* --- Fix AI-generated tells --- */ /* Remove excessive uppercase tracking in footers */ footer span.tracking-widest { letter-spacing: 0.08em; font-size: 0.7rem; } /* Tone down glow effects */ .shadow-\[0_0_15px_rgba\(16\,185\,129\,0\.2\)\] { box-shadow: 0 0 12px rgba(16, 185, 129, 0.12); } .shadow-\[0_0_5px_rgba\(52\,211\,153\,0\.8\)\], .shadow-\[0_0_5px_rgba\(251\,191\,36\,0\.8\)\] { box-shadow: 0 0 4px currentColor; } /* Smoother badge dots */ .inline-flex span.w-1\.5 { transition: opacity 0.2s ease; } /* ============================================ Custom MC Version Selector ============================================ */ /* Selector container needs stacking context control */ .mc-selector { position: relative; z-index: 1; } /* When any selector is open, boost it above all siblings */ .mc-selector.selector-open { z-index: 50; } /* Trigger button */ .mc-selector-trigger { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background: #0f172a; border: 1px solid #334155; border-radius: 10px; color: #e2e8f0; font-family: 'Manrope', sans-serif; font-size: 0.875rem; cursor: pointer; transition: border-color 0.2s ease, box-shadow 0.2s ease; } .mc-selector-trigger:hover { border-color: #4ade80; } .mc-selector-trigger.open { border-color: #4ade80; box-shadow: 0 0 0 3px rgba(74, 222, 128, 0.08); } .mc-selector-trigger .mc-selector-value { color: #94a3b8; transition: color 0.2s ease; white-space: nowrap; overflow: visible; } .mc-selector-trigger.has-value .mc-selector-value { color: #e2e8f0; font-weight: 600; font-family: 'JetBrains Mono', monospace; font-size: 0.8125rem; letter-spacing: 0.02em; } /* Arrow icon rotation */ .mc-selector-arrow { font-size: 20px; color: #64748b; transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s ease; } .mc-selector-trigger.open .mc-selector-arrow { transform: rotate(180deg); color: #4ade80; } /* Dropdown panel */ .mc-selector-panel { position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: 9999; background: #0f172a; border: 1px solid #1e293b; border-radius: 12px; box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(74, 222, 128, 0.05); overflow: hidden; /* Animation: scale + fade from top */ opacity: 0; transform: translateY(-8px) scale(0.98); transform-origin: top center; pointer-events: none; transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), transform 0.2s cubic-bezier(0.4, 0, 0.2, 1); } .mc-selector-panel.open { opacity: 1; transform: translateY(0) scale(1); pointer-events: auto; } /* Search bar */ .mc-selector-search { display: flex; align-items: center; gap: 8px; padding: 10px 14px; border-bottom: 1px solid #1e293b; background: #020617; } .mc-selector-search .material-symbols-outlined { font-size: 18px; color: #475569; } .mc-selector-search input { flex: 1; background: transparent; border: none; outline: none; color: #e2e8f0; font-family: 'Manrope', sans-serif; font-size: 0.8125rem; } .mc-selector-search input::placeholder { color: #475569; } /* Version list */ .mc-selector-list { max-height: 240px; overflow-y: auto; padding: 6px; scroll-behavior: smooth; } .mc-selector-list::-webkit-scrollbar { width: 4px; } .mc-selector-list::-webkit-scrollbar-track { background: transparent; } .mc-selector-list::-webkit-scrollbar-thumb { background: #334155; border-radius: 2px; } /* Group label */ .mc-selector-group { margin-bottom: 4px; } .mc-selector-group-label { padding: 8px 12px 4px; font-family: 'Plus Jakarta Sans', sans-serif; font-size: 0.65rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: #475569; } /* Option button */ .mc-selector-option { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 10px 12px; border: none; border-radius: 8px; background: transparent; color: #cbd5e1; font-family: 'JetBrains Mono', monospace; font-size: 0.8125rem; cursor: pointer; transition: background 0.15s ease, color 0.15s ease, transform 0.15s ease; } .mc-selector-option:hover { background: #1e293b; color: #e2e8f0; transform: translateX(4px); } .mc-selector-option.selected { background: rgba(74, 222, 128, 0.08); color: #4ade80; } .mc-selector-option:active { transform: scale(0.98); } /* Version name */ .mc-version-name { font-weight: 500; } /* Version tag */ .mc-version-tag { font-family: 'Plus Jakarta Sans', sans-serif; font-size: 0.6rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; padding: 2px 8px; border-radius: 4px; } .mc-version-tag.latest { background: rgba(74, 222, 128, 0.15); color: #4ade80; border: 1px solid rgba(74, 222, 128, 0.2); } .mc-version-tag.stable { background: rgba(99, 102, 241, 0.12); color: #818cf8; border: 1px solid rgba(99, 102, 241, 0.2); } /* Hidden option (filtered out) */ .mc-selector-option.hidden { display: none; } .mc-selector-group.hidden { display: none; } /* Fix stacking context: when a selector is open, boost it above all siblings */ .mc-selector.selector-open { z-index: 50; } /* When selector is open, give its card a high z-index to stack above siblings */ :has(.mc-selector.selector-open) { position: relative; z-index: 40 !important; }