/* Rust Vibe Theme for Slidev */ /* Extends default theme with Rust-inspired colors and styling */ :root { --rust-orange: #f74c00; --rust-dark: #8b2500; --rust-light: #ffa366; --rust-gray: #2d3748; --rust-dark-gray: #1a202c; --rust-accent: #48bb78; /* Override Slidev color variables */ --slidev-theme-primary: #f74c00; } /* Subtle background enhancement without breaking layout */ #slideshow .slidev-layout { background-image: linear-gradient(135deg, rgba(26, 32, 44, 0.3) 0%, rgba(45, 55, 72, 0.3) 50%, rgba(26, 32, 44, 0.3) 100%); } /* Enhanced code blocks */ .slidev-code, .shiki-container { border: 1px solid rgba(247, 76, 0, 0.3); border-radius: 8px; box-shadow: 0 4px 16px rgba(247, 76, 0, 0.2); } pre.shiki { background: rgba(0, 0, 0, 0.6) !important; } /* Rust-themed syntax highlighting */ .token.keyword { color: #ff6b6b !important; } .token.string { color: #4ecdc4 !important; } .token.function { color: #ffe66d !important; } .token.comment { color: #a8a8a8 !important; font-style: italic; } .token.type { color: var(--rust-orange) !important; font-weight: bold; } /* Custom button styles */ .rust-button { background: linear-gradient(45deg, var(--rust-orange), var(--rust-light)); border: none; border-radius: 8px; padding: 12px 24px; color: white; font-weight: bold; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 16px rgba(247, 76, 0, 0.3); } .rust-button:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(247, 76, 0, 0.4); } /* Ferris animations */ @keyframes ferris-wave { 0%, 100% { transform: rotate(-10deg); } 50% { transform: rotate(10deg); } } .ferris-animate { animation: ferris-wave 2s ease-in-out infinite; } /* Poll option styling */ .poll-option { background: linear-gradient( 135deg, rgba(247, 76, 0, 0.1), rgba(247, 76, 0, 0.2) ); border: 2px solid transparent; border-radius: 12px; padding: 16px; margin: 8px 0; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; } .poll-option::before { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.1), transparent ); transition: left 0.5s; } .poll-option:hover { border-color: var(--rust-orange); transform: translateX(4px); box-shadow: -4px 0 0 var(--rust-orange); } .poll-option:hover::before { left: 100%; } /* Terminal simulation */ .terminal-simulation { background: #000; border-radius: 8px; padding: 16px; font-family: "JetBrains Mono", monospace; color: #00ff00; position: relative; } .terminal-simulation::before { content: "● ● ●"; position: absolute; top: 8px; left: 12px; color: #ff5f56; font-size: 12px; } /* Performance badges */ .performance-card { background: linear-gradient(135deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.8)); border: 1px solid rgba(247, 76, 0, 0.3); border-radius: 12px; padding: 20px; position: relative; overflow: hidden; } .performance-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--rust-orange), var(--rust-light)); } .result-badge { display: inline-block; padding: 8px 16px; border-radius: 20px; font-weight: bold; margin-top: 12px; animation: pulse 2s infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } .slow { background: linear-gradient(45deg, #ff4444, #cc1111); color: white; } .medium { background: linear-gradient(45deg, #ffaa00, #cc7700); color: white; } .fast { background: linear-gradient(45deg, #44ff44, #22cc22); color: black; } /* Company cards */ .company-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin: 20px 0; } .company-card { background: linear-gradient( 135deg, rgba(247, 76, 0, 0.1), rgba(247, 76, 0, 0.2) ); border: 1px solid var(--rust-orange); border-radius: 8px; padding: 16px; text-align: center; font-size: 0.9em; transition: all 0.3s ease; position: relative; } .company-card:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(247, 76, 0, 0.3); } /* Tool categories */ .tool-category { background: linear-gradient( 135deg, rgba(247, 76, 0, 0.05), rgba(247, 76, 0, 0.15) ); border: 1px solid rgba(247, 76, 0, 0.3); border-radius: 12px; padding: 24px; position: relative; } .tool-category h2 { color: var(--rust-orange); margin-bottom: 16px; display: flex; align-items: center; gap: 8px; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--rust-dark-gray); } ::-webkit-scrollbar-thumb { background: var(--rust-orange); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--rust-light); } /* Slide transitions */ .slide-enter-active, .slide-leave-active { transition: all 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); } .slide-enter-from { opacity: 0; transform: translateX(50px); } .slide-leave-to { opacity: 0; transform: translateX(-50px); } /* QR Code styling */ .qr-code { background: white; padding: 16px; border-radius: 8px; display: inline-block; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2); } /* Interactive elements */ .interactive-demo { border: 2px dashed var(--rust-orange); border-radius: 8px; padding: 20px; background: rgba(247, 76, 0, 0.05); position: relative; } .interactive-demo::before { content: "🔴 LIVE"; position: absolute; top: -10px; right: 20px; background: #ff0000; color: white; padding: 4px 8px; border-radius: 4px; font-size: 12px; font-weight: bold; animation: blink 1s infinite; } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0.3; } } /* Responsive design */ @media (max-width: 768px) { .grid-cols-2, .grid-cols-3 { grid-template-columns: 1fr; } .poll-option { font-size: 14px; padding: 12px; } .company-grid { grid-template-columns: 1fr; } } /* Print styles */ @media print { .slidev-layout { background: white !important; } .performance-card, .tool-category, .company-card { border: 1px solid #ccc !important; background: white !important; } } .orange { font-weight: bold; color: #CE412B !important; } .code-line-num .slidev-code-wrapper { border: 1px solid #FFFFFF; border-radius: 25px; } .code-line-num pre.shiki { counter-reset: codeblock-line; .line { counter-increment: codeblock-line; &::before { content: counter(codeblock-line); } } }