/* 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;
}
}