/* ================= GENERAL RESET ================= */
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html, body {
  margin: 0;
  padding: 0;
  width: 100%;
  max-width: 100%;
  font-family: "Poppins", sans-serif;
  background-color: var(--background-color);
  color: var(--text-color);
  scrollbar-color: var(--primary-accent) var(--background-color);
  scrollbar-width: thin;
}

/* ================= COLOR PALETTE ================= */
:root {
  --background-color: #121212;
  --header-bg: #1E1E1E;
  --card-bg:#1E1E1E;
  --primary-accent: #03DAC6;  
  --secondary-accent: #008CFF;
  --text-color: #FFFFFF;
  --soft-text: #E0E0E0;
  --border-shadow: rgba(255, 255, 255, 0.1);
  --danger-red: #CF6679;
}

/* ================= LINKS ================= */
a {
  text-decoration: none;
  color: var(--primary-accent);
  transition: color 0.3s ease;
}

a:hover {
  color: var(--secondary-accent);
}

.nav-link {
  color: var(--text-color) !important;
  transition: color 0.3s ease;
}

.nav-link:hover {
  color: var(--primary-accent) !important;
}

/* ================= ICON STYLES ================= */
.fa, .fas, .fab, .far, .fal {
  color: var(--primary-accent) !important;
  transition: color 0.3s ease;
}

.fa:hover, .fas:hover, .fab:hover, .far:hover, .fal:hover {
  color: var(--secondary-accent) !important;
}

/* ================= LAYOUT & CONTAINER ================= */
.container-fluid {
  padding-left: 15px;
  padding-right: 15px;
}

.content-wrapper {
  overflow-x: hidden;
}

/* ================= HEADER ================= */
header {
  position: sticky;
  top: 0;
  z-index: 100;
  width: 100%;
  padding: 12px 0;
  background: rgba(30, 30, 30, 0.85); 
  backdrop-filter: blur(10px);
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.3);
  transition: background 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
}

header:hover {
  background: rgba(30, 30, 30, 0.95); 
  box-shadow: 0px 6px 14px rgba(0, 0, 0, 0.5);
}

header * {
  color: var(--text-color) !important;
  transition: color 0.3s ease;
}

/* Navigation links styling */
.nav-link {
  padding: 8px 15px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--text-color) !important;
  transition: color 0.3s ease, transform 0.2s ease;
}

.nav-link:hover {
  color: var(--primary-accent) !important;
  transform: scale(1.05);
}

/* Navbar brand/logo */
.navbar-brand {
  font-size: 1.5rem;
  font-weight: bold;
  color: var(--primary-accent) !important;
  transition: color 0.3s ease, transform 0.2s ease;
}

.navbar-brand:hover {
  color: var(--secondary-accent) !important;
  transform: scale(1.08);
}

/* Mobile Menu Icon */
.navbar-toggler {
  border: none;
  outline: none;
  background: transparent;
}

.navbar-toggler-icon {
  filter: invert(1);
  transition: transform 0.3s ease;
}

.navbar-toggler:hover .navbar-toggler-icon {
  transform: rotate(90deg); 
}
/* ================= Span ================= */
span, .highlight{
  color: var(--primary-accent);
  font-weight: bold;
}

/* ================= MAIN CONTENT ================= */
@keyframes gradientAnimation {
  0% { 
    background-position: 0% 50%; 
    filter: brightness(90%) saturate(100%);
  }
  25% { 
    background-position: 50% 50%; 
    filter: brightness(95%) saturate(120%);
  }
  50% { 
    background-position: 100% 50%; 
    filter: brightness(85%) saturate(130%);
  }
  75% { 
    background-position: 50% 50%; 
    filter: brightness(95%) saturate(150%);
  }
  100% { 
    background-position: 0% 50%; 
    filter: brightness(90%) saturate(100%);
  }
}

#home {
  position: relative;
  background: linear-gradient(135deg, #0a0a0a, #161616, #012A36, #0055AA);
  background-size: 400% 400%;
  animation: gradientAnimation 6s ease-in-out infinite;
  overflow: hidden;
  height: 100vh; 
}
#pfp{
  max-height: 256px;
}




@media (max-width: 768px) {
  main.container-fluid {
      padding-left: 15px;
      padding-right: 15px;
  }
  
  .min-vh-100 {
      min-height: 100vh;
  }
}
.shape {
  position: absolute;
  width: 100px;
  height: 100px;
  background: rgba(0, 255, 255, 0.15); 
  border-radius: 10px; 
  filter: blur(10px);
  opacity: 0.8;
  animation: floatAnimation 18s infinite ease-in-out alternate,
             rotateShape 10s infinite linear;
}

/* Different colors for variety */
.shape:nth-child(2) { background: rgba(255, 165, 0, 0.2); animation-duration: 22s, 12s; }
.shape:nth-child(3) { background: rgba(255, 0, 255, 0.2); animation-duration: 16s, 14s; }
.shape:nth-child(4) { background: rgba(0, 255, 0, 0.2); animation-duration: 20s, 16s; }
.shape:nth-child(5) { background: rgba(255, 0, 0, 0.2); animation-duration: 18s, 10s; }

@keyframes floatAnimation {
  0% { transform: translateY(0) translateX(0) scale(1) rotate(0deg); opacity: 0.8; }
  50% { transform: translateY(-80px) translateX(50px) scale(1.2) rotate(30deg); opacity: 0.6; }
  100% { transform: translateY(80px) translateX(-50px) scale(1) rotate(-30deg); opacity: 0.8; }
}

@keyframes rotateShape {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}


/* ================= ELEMENT STYLES ================= */
img, video, .container, .home, #techstack, #projects, #contact, footer, .techstack_img {
  max-width: 100%;
  height: auto;
}
.techstack_img{
  height: 280px;
  object-fit: contain;
}

.justify {
  text-align: justify;
}

.card {
  transition: transform 0.3s ease;
  background-color: var(--card-bg);
  border-radius: 10px;
  padding: 20px;
  box-shadow: 0px 4px 6px var(--border-shadow);
  color: var(--text-color);
  overflow: hidden;
}

.card .content {
  cursor: pointer;
  transition: transform 0.3s ease; 
}

.card:hover .content {
  transform: scale(1.05); 
}
.card:active .content {
  transform: scale(1.05);
}
.underline{
  text-decoration: underline;
}
link{
  color: var(--primary-accent)
}

/* ================= BUTTONS ================= */
button {
  background-color: transparent;
  color: var(--primary-accent);
  padding: 10px 20px;
  border: 1px solid var(--primary-accent);
  border-radius: 5px;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

button:hover {
  background-color: var(--secondary-accent);
}

/* ================= NAVBAR TOGGLER ================= */
.navbar-toggler-icon {
  filter: invert(1); 
}

/* ================= DEBUGGING ================= */
.debug {
  border: 1px solid var(--danger-red);
}



.line:nth-child(1)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #FF4500 100%); animation-delay: 0.5s; }
.line:nth-child(2)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #32CD32 100%); animation-delay: 1s; }
.line:nth-child(3)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #1E90FF 100%); animation-delay: 1.5s; }
.line:nth-child(4)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #FFD700 100%); animation-delay: 2s; }
.line:nth-child(5)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #8A2BE2 100%); animation-delay: 2.5s; }
.line:nth-child(6)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #20B2AA 100%); animation-delay: 3s; }
.line:nth-child(7)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #DC143C 100%); animation-delay: 3.5s; }
.line:nth-child(8)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #00FA9A 100%); animation-delay: 4s; }
.line:nth-child(9)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #FF1493 100%); animation-delay: 4.5s; }
.line:nth-child(10)::after { background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, var(--secondary-accent) 75%, #00BFFF 100%); animation-delay: 5s; }


@keyframes drop {
  0% { top: -50%; }
  100% { top: 110%; }
}
/* ================= TYPEWRITER ================= */
@keyframes typing {
  0%, 100% { content: ""; }
  5% { content: "J"; }
  10% { content: "Jh"; }
  15% { content: "Jhe"; }
  20% { content: "Jhen"; }
  25% { content: "Jhenn"; }
  30% { content: "Jhenn "; }
  35% { content: "Jhenn R"; }
  40% { content: "Jhenn Ro"; }
  45% { content: "Jhenn Rod"; }
}

@keyframes blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

.typewriter {
  --caret: currentcolor;
}

.typewriter::before {
  content: "";
  animation: typing 4s steps(10) infinite;
}

.typewriter::after {
  content: "";
  border-right: 1px solid var(--caret);
  animation: blink 0.5s linear infinite;
}

.typewriter.thick::after {
  border-right: 1ch solid var(--caret);
}

.typewriter.nocaret::after {
  border-right: 0;
}

@media (prefers-reduced-motion) {
  .typewriter::after {
    animation: none;
  }
  
  .typewriter::before {
    content: "jhenn rod";
  }
}

/* ================= border animation ================= */
@property --border-angle {
  syntax: "<angle>";
  inherits: true;
  initial-value: 0turn;
}


.animated-border {
  display: grid;
  place-content: center;
  color: white;
  text-shadow: 0 1px 0 #000;
  
  --border-angle: 0turn; 
  --main-bg: conic-gradient(
    from var(--border-angle),
    #1E1E1E, 
    #1E1E1E 5%,
    #1E1E1E 60%, 
    #1E1E1E 60% 
  );

  border: solid 5px transparent; 
  border-radius: 2em;
  
  --gradient-border: conic-gradient(from var(--border-angle), transparent 25%, #4a90e2, var(--primary-accent) 99%, transparent);

  background: var(--main-bg) padding-box;
  
  animation: bg-spin 3s linear infinite;
  animation-play-state: paused;
}


.animated-border:hover,
.animated-border:focus,
.animated-border:active {
  border-color: transparent; 
  background: 
    var(--main-bg) padding-box, 
    var(--gradient-border) border-box, 
    var(--main-bg) border-box; 
  animation-play-state: running;
}

@keyframes bg-spin {
  from {
    --border-angle: 0turn;
  }
  to {
    --border-angle: 1turn;
  }
}


/* ================= TEMPLATE CUSTOM CSS ================= */
.template_container{

}
#template_img{
  max-height: 400px;
  object-fit: contain;
}
