/* SVG Data URI Management System * Optimized SVGs as CSS custom properties for reusability and performance */ :root { /* ===== ICON SVGs AS DATA URI ===== */ /* Simple geometric icons */ --icon-arrow-right: url('data:image/svg+xml;utf8,'); --icon-github: url('data:image/svg+xml;utf8,'); --icon-email: url('data:image/svg+xml;utf8,'); --icon-web: url('data:image/svg+xml;utf8,'); --icon-calendar: url('data:image/svg+xml;utf8,'); --icon-clock: url('data:image/svg+xml;utf8,'); --icon-location: url('data:image/svg+xml;utf8,'); /* ===== DECORATIVE PATTERNS ===== */ /* Hexagon pattern */ --pattern-hex: url('data:image/svg+xml;utf8,'); /* Circuit lines */ --pattern-circuit: url('data:image/svg+xml;utf8,'); /* Data dots */ --pattern-dots: url('data:image/svg+xml;utf8,'); } /* ===== UTILITY CLASSES FOR SVG ICONS ===== */ .icon { display: inline-block; width: 1em; height: 1em; background-size: contain; background-repeat: no-repeat; background-position: center; } .icon-sm { width: 0.875em; height: 0.875em; } .icon-lg { width: 1.25em; height: 1.25em; } .icon-xl { width: 1.5em; height: 1.5em; } .icon-2xl { width: 2em; height: 2em; } /* Specific icon classes */ .icon-arrow-right { background-image: var(--icon-arrow-right); } .icon-github { background-image: var(--icon-github); } .icon-email { background-image: var(--icon-email); } .icon-web { background-image: var(--icon-web); } .icon-calendar { background-image: var(--icon-calendar); } .icon-clock { background-image: var(--icon-clock); } .icon-location { background-image: var(--icon-location); } /* ===== PATTERN BACKGROUNDS ===== */ .bg-pattern-hex { background-image: var(--pattern-hex); background-size: 60px 60px; } .bg-pattern-circuit { background-image: var(--pattern-circuit); background-size: 100px 20px; } .bg-pattern-dots { background-image: var(--pattern-dots); background-size: 20px 20px; } /* ===== COLOR VARIATIONS ===== */ .icon-primary { filter: hue-rotate(0deg) brightness(1); } .icon-secondary { filter: hue-rotate(45deg) brightness(0.8); } .icon-accent { filter: hue-rotate(120deg) brightness(1.2); } /* ===== ANIMATION HELPERS ===== */ .icon-rotate { animation: icon-spin 2s linear infinite; } .icon-pulse { animation: icon-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes icon-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes icon-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* ===== RESPONSIVE ICON SIZES ===== */ @media (max-width: 768px) { .icon-responsive { width: 1.25em; height: 1.25em; } } @media (max-width: 480px) { .icon-responsive { width: 1em; height: 1em; } }