/* --- Global Styles & Theme --- */ :root { --font-heading: "Poppins", sans-serif; --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --font-khmer: "Kantumruy Pro", sans-serif; /* Header Colors */ --header-bg-fallback: #0a0f1f; --header-text: #ffffff; --header-accent: #00e5ff; /* Cyan accent for title animation glow */ --header-overlay-color: rgba(0, 0, 0, 0.6); --facebook-color: #ffffff; --facebook-hover-color: #e3f2fd; --github-color: #ffffff; --github-hover-color: #e0e0e0; /* Body Colors (Light Theme) */ --body-bg-color: #f8f9fa; --body-text-color: #495057; --body-heading-color: #212529; --body-link-color: #007bff; --body-link-hover-color: #0056b3; --body-border-color: #dee2e6; --body-card-bg: #ffffff; --body-card-border: #dee2e6; --body-card-shadow: rgba(0, 0, 0, 0.08); --body-card-hover-shadow: rgba(0, 0, 0, 0.12); --body-card-hover-border: #adb5bd; --footer-bg: #0d1b2a; --footer-text-color: #f8f9fa; /* Carousel Colors */ --swiper-theme-color: var(--body-link-color); --carousel-title-color: #6c757d; --carousel-title-hover-color: var(--body-link-color); } * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; } body { font-family: var(--font-body); background-color: var(--body-bg-color); color: var(--body-text-color); min-height: 100vh; line-height: 1.6; font-weight: 400; display: flex; flex-direction: column; transition: background-color 0.3s ease, color 0.3s ease; } div#scroll-progress-bar { position: fixed; top: 0; left: 0; width: 0; height: 5px; background: linear-gradient( 90deg, rgba(42, 123, 155, 1) 0%, rgba(87, 199, 133, 1) 50%, rgba(237, 221, 83, 1) 100% ); border-top-right-radius: 5px; border-bottom-right-radius: 5px; z-index: 500; } #warningPopover { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: rgba(255, 50, 50, 0.9); /* Red with some transparency */ color: white; padding: 20px 30px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3); z-index: 1000; opacity: 0; /* Start hidden */ visibility: hidden; /* Start not interactive */ transition: opacity 0.5s ease-in-out, visibility 0.5s ease-in-out; font-family: sans-serif; text-align: center; min-width: 250px; } #warningPopover.show { opacity: 1; /* Fade in */ visibility: visible; /* Become interactive */ } #warningPopover p { margin: 0; font-size: 1.2em; font-weight: bold; } .container { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 25px; } /* --- Main Heading Area (Full Width, Image Background) --- */ .main-heading-area { padding: 20vh 0 18vh 0; /* Adjusted padding for more height */ min-height: 500px; /* Minimum height */ position: relative; /* overflow: hidden; */ /* color: var(--header-text); */ /* background-color: var(--header-bg-fallback); */ /* ACTION REQUIRED: Ensure 'image_ce8183.png' is in the correct path or update this URL */ /* background-image: url("images/main_header.jpg"); */ /* background-size: cover; */ /* background-position: center center; Default for larger screens */ /* background-repeat: no-repeat; */ /* z-index: 1; */ display: flex; align-items: center; justify-content: center; } .main-heading-area::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--header-overlay-color); /* z-index: 1; Behind content, above background image */ } /* Inner container to constrain and center content */ .header-content-container { position: relative; z-index: 2; /* Above overlay */ text-align: center; /* Center the title block */ } /* Title block */ .header-title-block { display: inline-block; /* Allows centering */ text-align: left; /* Align text inside this block left */ } .main-heading-area h1 { font-family: var(--font-heading); font-size: 4.5rem; /* Increased size for impact */ color: var(--header-text); font-weight: 700; margin-bottom: 20px; line-height: 1.1; text-shadow: 0 3px 8px rgba(0, 0, 0, 0.7); /* Stronger shadow */ text-align: left; /* Keep text left-aligned within its block */ display: inline-block; /* For letter animation */ } /* Letter animation for main title */ .main-heading-area h1 .char { display: inline-block; opacity: 0; transform: translateY(-25px) scale(0.7); /* Adjusted initial transform */ animation: revealChar 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) forwards; /* Smoother easing */ margin: 0 -0.02em; /* Adjust letter spacing if needed */ text-shadow: 0px 0px 0 rgb(-32, 88, 157), 1px 1px 0 rgb(-64, 56, 125), 2px 2px 0 rgb(-96, 24, 93), 3px 3px 0 rgb(-127, -7, 62), 4px 4px 0 rgb(-159, -39, 30), 5px 5px 0 rgb(-191, -71, 0), 6px 6px 0 rgb(-223, -103, 0), 7px 7px 0 rgb(-255, -135, 0), 8px 8px 0 rgb(-287, -167, 0), 9px 9px 8px rgba(28, 227, 48, 0.6), 9px 9px 1px rgba(28, 227, 48, 0.5), 0px 0px 8px rgba(28, 227, 48, 0.2); } @keyframes revealChar { to { opacity: 1; transform: translateY(0) scale(1); } } /* --- Social Icons --- */ .social-icons { margin-top: 15px; margin-bottom: 0; text-align: left; /* Aligned with title */ } .social-icons a.social-link { margin: 0 18px 0 0; text-decoration: none; transition: transform 0.2s ease, opacity 0.2s ease; display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; opacity: 0.9; } .social-icons a.social-link svg { width: 30px; height: 30px; display: block; transition: fill 0.2s ease; } .social-link.facebook svg { fill: var(--facebook-color); } .social-link.github svg { fill: var(--github-color); } .social-icons a.social-link:hover { transform: scale(1.15); opacity: 1; } .social-link.facebook:hover svg { fill: var(--facebook-hover-color); } .social-link.github:hover svg { fill: var(--github-hover-color); } /* --- About Section --- */ .about-section { margin-top: 40px; margin-bottom: 40px; } .about-section h2 { font-family: var(--font-heading); color: var(--body-heading-color); font-size: 2.1rem; margin-bottom: 30px; text-align: left; padding-bottom: 15px; font-weight: 600; } .about-section p { font-family: var(--font-khmer); color: var(--body-text-color); font-size: 1rem; line-height: 1.8; margin-bottom: 15px; text-align: left; } .about-section p:last-child { margin-bottom: 0; } /* --- Jump Navigation Section --- */ .jump-nav-section { margin-bottom: 50px; display: flex; justify-content: space-between; align-items: flex-start; flex-wrap: wrap; gap: 10px; } .jump-nav-left { flex-grow: 1; } .jump-nav-section .nav-title { font-size: 0.95rem; color: #6c757d; margin-bottom: 15px; } .jump-nav-links a { color: var(--body-link-color); text-decoration: none; margin-right: 25px; font-weight: 500; font-size: 1rem; transition: color 0.2s ease, text-decoration 0.2s ease; display: inline-block; position: relative; margin-bottom: 5px; } .jump-nav-links a::after { content: ""; position: absolute; width: 100%; transform: scaleX(0); height: 2px; bottom: 0; left: 0; background-color: #0087ca; transition: transform 0.25s ease-out; } .jump-nav-links a:hover::after { transform: scaleX(1); } .jump-nav-links a:hover { color: var(--body-link-hover-color); } .last-updated { font-size: 0.85rem; color: #6c757d; text-align: right; white-space: nowrap; padding-top: 3px; } /* --- Main Content Area --- */ main { padding-bottom: 60px; flex-grow: 1; } /* --- Project Section --- */ .project-section { margin-bottom: 60px; } .project-section h2 { font-family: var(--font-heading); font-size: 2.1rem; color: var(--body-heading-color); margin-bottom: 30px; padding-bottom: 15px; border-bottom: 1px solid var(--body-border-color); font-weight: 600; text-align: left; } /* --- Projects Container --- */ .projects-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 30px; padding: 10px 0; } /* --- Project Card (Original Light theme card from user's code) --- */ main .project-card { background: var(--body-card-bg); border-radius: 5px; overflow: hidden; box-shadow: 0 4px 8px var(--body-card-shadow); transition: transform 0.25s ease, box-shadow 0.25s ease; display: flex; flex-direction: column; text-decoration: none; color: var(--body-text-color); border: 1px solid var(--body-card-border); position: relative; width: 100%; } main .project-card img { width: 100%; height: 180px; object-fit: cover; display: block; border-bottom: 1px solid var(--body-card-border); } main .project-card .card-content { padding: 20px 15px; flex-grow: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; } main .project-card .card-content h3 { font-family: var(--font-body); font-size: 1.2rem; margin-bottom: 0; color: orange; font-weight: 700; line-height: 1.3; } main .project-card:hover { transform: translateY(-5px); box-shadow: 0 8px 15px var(--body-card-hover-shadow); border-color: var(--body-card-hover-border); } /* --- Logo Carousel Section --- */ .logo-carousel-section { margin-top: 40px; } .logo-carousel-section h3 { font-family: var(--font-heading); font-size: 1.6rem; color: #343a40; margin-bottom: 35px; text-align: center; } .company-logo-swiper { width: 100%; padding: 10px 0 40px 0; overflow: hidden; } .company-logo-swiper .swiper-slide { text-align: center; background: transparent; } .company-logo-swiper .swiper-slide a { display: block; text-decoration: none; transition: transform 0.2s ease; } .company-logo-swiper .swiper-slide a:hover { transform: scale(1.03); } .company-logo-swiper .swiper-slide img { display: block; width: 100%; height: 120px; object-fit: cover; margin-bottom: 8px; border-radius: 4px; border: 1px solid #eee; transition: border-color 0.2s ease, box-shadow 0.2s ease; } .company-logo-swiper .swiper-slide a:hover img { border-color: #ccc; box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1); } .logo-title { display: block; text-align: center; font-size: 0.85rem; color: var(--carousel-title-color); padding: 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: color 0.2s ease; } .company-logo-swiper .swiper-slide a:hover .logo-title { color: var(--carousel-title-hover-color); } .swiper-pagination-bullet-active { background-color: var(--swiper-theme-color); } /* --- Footer --- */ footer { text-align: center; padding-bottom: 25px; margin-top: 40px; font-size: 0.9rem; color: var(--footer-text-color); /* border-top: 1px solid var(--body-border-color); */ background-color: var(--footer-bg); } .shape-fill { fill: #f8f9fa; } .shape-fill:nth-child(2) { fill: #f8f9fa; } .shape-fill:nth-child(1) { fill: white; } .scroll-to-top { display: none; position: fixed; bottom: 20px; right: 20px; z-index: 100; border: none; outline: none; background: linear-gradient( 90deg, rgba(42, 123, 155, 1) 0%, rgba(87, 199, 133, 1) 50%, rgba(237, 221, 83, 1) 100% ); color: white; cursor: pointer; border-radius: 5px; padding: 10px 20px; font-size: 16px; opacity: 0.8; } .scroll-to-top::after { content: "\25B2"; margin-left: 5px; } .scroll-to-top:hover { opacity: 1; background-color: #333; } #site-view-count { display: block; margin-top: 5px; font-size: 0.85em; color: var(--footer-text-color); } /* --- Responsiveness Adjustments --- */ @media (max-width: 992px) { .container { max-width: 960px; padding: 0 20px; } .header-content-container { flex-direction: column; align-items: center; } /* Stack title block */ .header-title-block { text-align: center; } /* Center title block on mobile */ .main-heading-area h1 { text-align: center; font-size: 3rem; } .social-icons { text-align: center; } .projects-container { grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); gap: 30px; } } @media (min-width: 768px) and (max-width: 1199.98px) { .projects-container { grid-template-columns: repeat(3, 1fr); } main .project-card img { height: 170px; } main .card-content h3 { font-size: 1.15rem; } } @media (min-width: 1200px) { .projects-container { grid-template-columns: repeat(4, 1fr); gap: 25px; } main .project-card img { height: 160px; } main .card-content h3 { font-size: 1.1rem; } } @media (max-width: 767.98px) { .main-heading-area { background-position: 75% 50%; /* Focus on middle-right */ padding: 15vh 0 12vh 0; } .main-heading-area h1 { font-size: 2.8rem; } .project-section h2, .about-section h2 { font-size: 1.9rem; } .about-section p { font-size: 0.95rem; } .jump-nav-links a { margin-right: 15px; font-size: 0.9rem; } .projects-container { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 25px; } main .project-card img { height: 170px; } main .card-content h3 { font-size: 1.1rem; } .logo-carousel-section h3 { font-size: 1.4rem; } .company-logo-swiper .swiper-slide img { height: 100px; } .logo-title { font-size: 0.8rem; } } @media (max-width: 576px) { .main-heading-area { background-position: right center; /* Focus on right */ padding: 12vh 0 10vh 0; } .main-heading-area h1 { font-size: 2.2rem; } .social-icons a svg { width: 28px; height: 28px; } .project-section h2, .about-section h2 { font-size: 1.6rem; } .about-section { padding: 0; } .about-section p { font-size: 0.9rem; line-height: 1.7; } .jump-nav-section { flex-direction: column; align-items: flex-start; } .last-updated { text-align: left; margin-top: 10px; } .jump-nav-links { /* display: block; position: relative; */ margin-bottom: 10px; margin-right: 0; } .projects-container { grid-template-columns: 1fr; gap: 25px; } main .project-card img { height: 180px; } main .card-content h3 { font-size: 1.2rem; } footer { font-size: 0.85rem; } .company-logo-swiper .swiper-slide img { height: 90px; } } .lines { position: absolute; top: 0; left: 0; right: 0; height: 100%; margin: auto; width: 90vw; display: flex; justify-content: space-between; /* Distribute lines evenly */ } .line { position: relative; width: 2px; height: 100%; /*background: #ffffff; /* Line color */ overflow: hidden; } .line::after { content: ""; display: block; position: absolute; height: 15vh; width: 100%; top: -50%; left: 0; background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #ffffff 75%, #ffffff 100% ); animation: drop 7s 0s infinite; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.4, 0.26, 0, 0.97); } /* Different colors for each line's pseudo-element */ .line:nth-child(1)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #ff4500 75%, #ff4500 100% ); animation-delay: 0.5s; } .line:nth-child(2)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #32cd32 75%, #32cd32 100% ); animation-delay: 1s; } .line:nth-child(3)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #1e90ff 75%, #1e90ff 100% ); animation-delay: 1.5s; } .line:nth-child(4)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #ffd700 75%, #ffd700 100% ); animation-delay: 2s; } .line:nth-child(5)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #8a2be2 75%, #8a2be2 100% ); animation-delay: 2.5s; } .line:nth-child(6)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #20b2aa 75%, #20b2aa 100% ); animation-delay: 3s; } .line:nth-child(7)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #dc143c 75%, #dc143c 100% ); animation-delay: 3.5s; } .line:nth-child(8)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #00fa9a 75%, #00fa9a 100% ); animation-delay: 4s; } .line:nth-child(9)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #ff1493 75%, #ff1493 100% ); animation-delay: 4.5s; } .line:nth-child(10)::after { background: linear-gradient( to bottom, rgba(255, 255, 255, 0) 0%, #00bfff 75%, #00bfff 100% ); animation-delay: 5s; } @keyframes drop { 0% { top: -50%; } 100% { top: 110%; } }