/* TOÀN BỘ CSS GIỮ NGUYÊN NHƯ PHIÊN BẢN TRƯỚC NGOẠI TRỪ CÁC PHẦN MỚI */ html { overflow-x: hidden; } :root { --hue-accent: 210; --hue-secondary: 260; --bg-light: hsl(220, 30%, 96%); --glass-bg-light: hsla(0, 0%, 100%, 0.25); --glass-border-light: hsla(0, 0%, 100%, 0.5); --glass-inset-shadow-light: inset 1px 1px 0px hsla(0, 0%, 100%, 0.7); --text-primary-light: hsl(220, 25%, 15%); --text-secondary-light: hsl(220, 15%, 45%); --text-tertiary-light: hsl(220, 12%, 65%); --accent-primary-light: hsl(var(--hue-accent), 100%, 55%); --shadow-color-light: hsla(var(--hue-accent), 50%, 20%, 0.1); --light-effect-light: hsla(var(--hue-accent), 100%, 75%, 0.3); --bg-dark: hsl(225, 20%, 12%); --glass-bg-dark: hsla(0, 0%, 100%, 0.07); --glass-border-dark: hsla(0, 0%, 100%, 0.2); --glass-inset-shadow-dark: inset 1px 1px 0px hsla(0, 0%, 100%, 0.2); --text-primary-dark: hsl(220, 25%, 95%); --text-secondary-dark: hsl(220, 15%, 75%); --text-tertiary-dark: hsl(220, 10%, 60%); --accent-primary-dark: hsl(var(--hue-accent), 100%, 65%); --shadow-color-dark: hsla(var(--hue-accent), 100%, 55%, 0.15); --light-effect-dark: hsla(0, 0%, 100%, 0.06); --header-height: 68px; --border-radius: 24px; --border-radius-m: 16px; --border-radius-s: 12px; --transition-fast: 0.2s ease; --transition-medium: 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); --transition-slow: 0.6s cubic-bezier(0.2, 0.8, 0.2, 1); --font-primary: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; --bg: var(--bg-light); --glass-bg: var(--glass-bg-light); --glass-border: var(--glass-border-light); --glass-inset-shadow: var(--glass-inset-shadow-light); --text-primary: var(--text-primary-light); --text-secondary: var(--text-secondary-light); --text-tertiary: var(--text-tertiary-light); --accent-primary: var(--accent-primary-light); --shadow-color: var(--shadow-color-light); --light-effect: var(--light-effect-light); --glass-light-effect: hsla(0, 0%, 100%, 0.6); } body.dark-mode { --bg: var(--bg-dark); --glass-bg: var(--glass-bg-dark); --glass-border: var(--glass-border-dark); --glass-inset-shadow: var(--glass-inset-shadow-dark); --text-primary: var(--text-primary-dark); --text-secondary: var(--text-secondary-dark); --text-tertiary: var(--text-tertiary-dark); --accent-primary: hsl(var(--hue-accent), 100%, 65%); --shadow-color: var(--shadow-color-dark); --light-effect: hsla(0, 0%, 100%, 0.06); --glass-light-effect: hsla(0, 0%, 100%, 0.1); } * { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; } html { scroll-behavior: smooth; font-size: 16px; overflow-x: hidden; } /* START: CSS for View Transitions (Language Switch) */ ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 0.5s; animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } ::view-transition-old(root) { animation-name: slide-and-fade-out; } ::view-transition-new(root) { animation-name: slide-and-fade-in; } @keyframes slide-and-fade-out { from { opacity: 1; transform: translateY(0); filter: blur(0); } to { opacity: 0; transform: translateY(20px) scale(0.98); filter: blur(4px); } } @keyframes slide-and-fade-in { from { opacity: 0; transform: translateY(-20px) scale(0.98); filter: blur(4px); } to { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); } } /* END: CSS for View Transitions */ html::before { content: ""; position: fixed; inset: 0; z-index: -10; background: url("./src/Images/Wallpaper.webp") center/cover no-repeat; } body { font-family: var(--font-primary); line-height: 1.6; background-color: var(--bg); color: var(--text-primary); -webkit-font-smoothing: antialiased; max-width: 100vw; overflow-x: hidden; } body.no-scroll { overflow: hidden; } body.loaded-content { overflow-y: auto; } #page-content.translating-page { opacity: 0; transform: translateY(15px); filter: blur(4px); transition: opacity 0.25s ease-out, transform 0.25s ease-out, filter 0.25s ease-out; } body.is-offline #page-wrapper { filter: blur(5px); pointer-events: none; user-select: none; } /* START: CSS CHO OVERLAYS (LOADING, WELCOME, EXIT) */ @keyframes pulse { 0% { transform: scale(0.95); box-shadow: 0 0 0 0 hsla(var(--hue-accent), 100%, 65%, 0.7); } 70% { transform: scale(1); box-shadow: 0 0 0 15px hsla(var(--hue-accent), 100%, 65%, 0); } 100% { transform: scale(0.95); box-shadow: 0 0 0 0 hsla(var(--hue-accent), 100%, 65%, 0); } } #preloader { position: fixed; inset: 0; z-index: 100000; display: flex; align-items: center; justify-content: center; background-color: var(--bg); transition: opacity 0.5s ease, visibility 0.5s ease; } .preloader-content { text-align: center; } .preloader-content .logo-icon { font-size: 4rem; background: linear-gradient(135deg, #00c6fb 0%, #005bea 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: inline-block; padding: 20px; border-radius: 50%; animation: pulse 2s infinite; } .preloader-content p { margin-top: 20px; color: var(--text-secondary); font-weight: 500; letter-spacing: 2px; text-transform: uppercase; font-size: 0.9rem; } #preloader.hidden { opacity: 0; visibility: hidden; pointer-events: none; } #welcome-overlay { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center; justify-content: center; padding: 20px; background-color: var(--bg); opacity: 0; visibility: hidden; pointer-events: none; transition: opacity 0.5s ease, visibility 0.5s ease; } #welcome-overlay.visible { opacity: 1; visibility: visible; pointer-events: auto; } .welcome-panel { background: transparent; border: none; border-radius: var(--border-radius); padding: 40px; box-shadow: none; text-align: center; max-width: 90%; width: 500px; transform: scale(0.95); opacity: 0; transition: transform 0.5s var(--transition-medium), opacity 0.5s ease; } #welcome-overlay.visible .welcome-panel { transform: scale(1); opacity: 1; } @keyframes float { 0% { transform: translateY(0px); } 50% { transform: translateY(-10px); } 100% { transform: translateY(0px); } } .welcome-panel .logo-icon { font-size: 3.5rem; background: linear-gradient(135deg, #00c6fb 0%, #005bea 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin-bottom: 15px; display: inline-block; animation: float 3s ease-in-out infinite; } .welcome-panel h2 { font-size: clamp(1.5rem, 6vw, 2rem); font-weight: 800; color: var(--text-primary); margin-bottom: 10px; } .welcome-panel p { font-size: clamp(1rem, 4vw, 1.1rem); color: var(--text-secondary); margin-bottom: 25px; } #enter-button { padding: 14px 40px; font-size: 1.1rem; color: white; background: var(--accent-primary); border: none; border-radius: var(--border-radius-m); font-weight: 600; cursor: pointer; transition: all var(--transition-medium); box-shadow: 0 8px 25px -5px hsla(var(--hue-accent), 100%, 55%, 0.4); } body.dark-mode #enter-button { color: var(--bg-dark); } #enter-button:hover { transform: translateY(-4px) scale(1.05); box-shadow: 0 12px 30px -5px hsla(var(--hue-accent), 100%, 55%, 0.6); } @keyframes heartbeat { 0% { transform: scale(1); } 15% { transform: scale(1.3); } 30% { transform: scale(1); } 45% { transform: scale(1.3); } 60% { transform: scale(1); } 100% { transform: scale(1); } } #thank-you-overlay { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center; justify-content: center; background-color: transparent; backdrop-filter: blur(10px) saturate(150%); -webkit-backdrop-filter: blur(10px) saturate(150%); opacity: 0; visibility: hidden; transition: opacity 1s ease, visibility 1s ease, backdrop-filter 1s ease; text-align: center; pointer-events: none; } #thank-you-overlay.visible { opacity: 1; visibility: visible; pointer-events: auto; } .thank-you-panel { background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: var(--border-radius); box-shadow: var(--glass-inset-shadow), 0 16px 48px 0 var(--shadow-color); transition: transform 0.6s var(--transition-medium), opacity 0.6s ease; max-width: 500px; padding: 40px; transform: translateY(20px) scale(0.95); opacity: 0; text-align: center; width: 90%; } #thank-you-overlay.visible .thank-you-panel { transform: translateY(0) scale(1); opacity: 1; } .thank-you-panel .thank-you-icon { font-size: 4rem; color: var(--accent-primary); margin-bottom: 20px; display: inline-block; animation: heartbeat 2s ease-in-out; } .thank-you-panel h3 { font-size: 2rem; color: var(--text-primary); font-weight: 700; margin-bottom: 15px; } .thank-you-panel p { color: var(--text-secondary); font-size: 1.1rem; line-height: 1.6; margin-bottom: 10px; } .thank-you-panel .closing-message { font-size: 0.9rem; color: var(--text-tertiary); margin-top: 25px; transition: color 0.3s ease; } #page-wrapper.fade-out, .audio-controls.fade-out { opacity: 0; pointer-events: none; transform: scale(0.95); filter: blur(5px); transition: opacity 1s ease, transform 1s ease, filter 1s ease; } /* END: CSS CHO OVERLAYS */ #page-content { opacity: 0; filter: blur(8px); transform: scale(1.02); transition: opacity 0.8s var(--transition-medium), filter 0.8s var(--transition-medium), transform 0.8s var(--transition-medium); padding-top: calc(var(--header-height) + 20px); } body.content-visible #page-content { opacity: 1; filter: blur(0); transform: scale(1); } body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -2; pointer-events: none; background: rgba(255, 255, 255, 0.92); opacity: 0; transition: opacity var(--transition-slow); } body.dark-mode::before { background: rgba(0, 0, 0, 1); } body.content-visible::before { opacity: 1; } #starfield-canvas { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; pointer-events: none; } .container { width: 90%; max-width: 1080px; margin: 0 auto; padding: 0 20px; } a { color: var(--accent-primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { filter: brightness(1.2); text-decoration: none; } .header-container { position: fixed; top: 10px; left: 0; right: 0; z-index: 1000; padding: 0 10px; width: 100%; } header { background: var(--glass-bg); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); height: var(--header-height); display: flex; align-items: center; margin: 0 auto; position: relative; width: 100%; max-width: 1100px; border: 1px solid var(--glass-border); border-radius: var(--border-radius-m); box-shadow: var(--glass-inset-shadow), 0 4px 12px -2px hsla(var(--hue-accent), 50%, 20%, 0.05), 0 16px 48px 0 var(--shadow-color); transition: all var(--transition-medium); } header .container { display: flex; align-items: center; width: 100%; gap: 20px; padding: 0 20px; } .header-logo { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; transition: transform var(--transition-fast); } .header-logo:hover { transform: scale(1.05); } .header-logo .logo-icon { font-size: 1.8rem; background: linear-gradient(135deg, #00c6fb 0%, #005bea 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; transition: transform var(--transition-fast); } .header-logo:hover .logo-icon { transform: rotate(-15deg); } .header-logo .logo-text { font-family: var(--font-primary); font-weight: 800; font-size: 1.4rem; letter-spacing: -0.5px; color: var(--text-primary); } header nav#main-nav { margin-right: 30px; flex: 1; display: flex; justify-content: center; } header nav#main-nav ul { list-style: none; display: flex; align-items: center; justify-content: center; margin: 0; padding: 0; gap: 12px; } header nav#main-nav ul li { margin: -6px; } header nav#main-nav ul li a { color: var(--text-secondary); text-decoration: none; font-weight: 600; font-size: 0.95rem; padding: 8px 16px; position: relative; z-index: 1; transition: color var(--transition-fast); } header nav#main-nav ul li a::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--accent-primary); border-radius: 99px; transform: scale(0.8); opacity: 0; z-index: -1; transition: transform var(--transition-fast), opacity var(--transition-fast); box-shadow: inset 0 1px 1px hsla(0, 0%, 100%, 0.3); } header nav#main-nav ul li a:hover, header nav#main-nav ul li a.active { color: white; } header nav#main-nav ul li a:hover::before, header nav#main-nav ul li a.active::before { transform: scale(1); opacity: 1; } body.dark-mode header nav#main-nav ul li a:hover, body.dark-mode header nav#main-nav ul li a.active { color: var(--bg-dark); } /* START: Mobile Nav Catalog Styles */ #mobile-nav-catalog { position: fixed; inset: 0; z-index: 1500; visibility: hidden; pointer-events: none; } #mobile-nav-catalog .overlay { position: absolute; inset: 0; background: hsla(0, 0%, 0%, 0.4); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); opacity: 0; transition: opacity var(--transition-medium); } #mobile-nav-catalog .panel { position: absolute; top: 0; left: 0; width: 280px; height: 100%; background: var(--glass-bg); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); border-right: 1px solid var(--glass-border); box-shadow: 10px 0 40px hsla(0, 0%, 0%, 0.2); transform: translateX(-100%); transition: transform var(--transition-medium); padding: 80px 30px; display: flex; flex-direction: column; } #mobile-nav-catalog.is-open { visibility: visible; pointer-events: auto; } #mobile-nav-catalog.is-open .overlay { opacity: 1; } #mobile-nav-catalog.is-open .panel { transform: translateX(0); } #mobile-nav-catalog ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 15px; } #mobile-nav-catalog ul li a { font-size: 1.2rem; font-weight: 700; color: var(--text-primary); padding: 10px 15px; display: block; border-radius: var(--border-radius-s); transition: background-color var(--transition-fast), color var(--transition-fast); } #mobile-nav-catalog ul li a:hover, #mobile-nav-catalog ul li a.active { background-color: var(--accent-primary); color: white; } body.dark-mode #mobile-nav-catalog ul li a.active, body.dark-mode #mobile-nav-catalog ul li a:hover { color: var(--bg-dark); } /* END: Mobile Nav Catalog Styles */ @media (max-width: 992px) { header nav#main-nav { display: none; } /* Make logo clickable as a button on mobile */ .header-logo { cursor: url("./src/Theme/mac-cursors/handpointing.png"), pointer !important; } } @media (max-width: 768px) { header .container { padding: 0 15px; } .header-actions { margin-left: auto; } .header-logo .logo-text { font-size: 1.2rem; } .quick-actions-grid { grid-template-columns: repeat(2, 1fr); } #theme-toggle { right: 108px; } #language-toggle { right: 54px; } #theme-toggle.move-to-center { right: 0; } } /* Các style còn lại giữ nguyên */ #language-toggle { background: var(--glass-bg); border: 1px solid var(--glass-border); color: var(--text-primary); font-size: 1rem; cursor: pointer; width: 44px; height: 44px; border-radius: 50%; display: flex; justify-content: center; align-items: center; gap: 4px; transition: all 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); box-shadow: var(--glass-inset-shadow), 0 8px 32px 0 var(--shadow-color); position: relative; overflow: hidden; padding: 0; } #language-toggle:hover { transform: scale(1.1); background: hsla(0, 0%, 100%, 0.25); } #language-toggle .lang-code { font-size: 0.7rem; font-weight: 700; line-height: 1; } #theme-toggle, #language-toggle, .control-center-toggle { background: var(--glass-bg); border: 1px solid var(--glass-border); color: var(--text-primary); font-size: 1.1rem; cursor: pointer; width: 44px; height: 44px; border-radius: 50%; display: flex; justify-content: center; align-items: center; transition: all 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); box-shadow: var(--glass-inset-shadow), 0 8px 32px 0 var(--shadow-color); position: relative; overflow: hidden; } #theme-toggle:hover, #language-toggle:hover, .control-center-toggle:hover { transform: scale(1.1); background: hsla(0, 0%, 100%, 0.25); } #theme-toggle > *, #language-toggle > *, .control-center-toggle > * { position: relative; z-index: 1; } #theme-toggle .fa-moon { display: none; } body.dark-mode #theme-toggle .fa-sun { display: none; } body.dark-mode #theme-toggle .fa-moon { display: inline-block; } .hero { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding-top: 25px; padding-bottom: 125px; } .apple-card { background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: var(--border-radius); padding: 30px; box-shadow: var(--glass-inset-shadow), 0 2px 8px -2px hsla(var(--hue-accent), 50%, 20%, 0.05), 0 16px 48px 0 var(--shadow-color); backdrop-filter: blur(24px) saturate(150%); -webkit-backdrop-filter: blur(24px) saturate(150%); transition: transform var(--transition-medium), box-shadow var(--transition-medium); position: relative; overflow: hidden; will-change: transform, box-shadow; } .apple-card:hover { transform: translateY(-8px) scale(1.02) perspective(1200px) rotateX(2deg) rotateY(-1deg); box-shadow: var(--glass-inset-shadow), 0 4px 12px -2px hsla(var(--hue-accent), 50%, 20%, 0.08), 0 24px 64px 0 var(--shadow-color); } .apple-card::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient( 450px circle at var(--mouse-x) var(--mouse-y), var(--light-effect), transparent 70% ); opacity: 0; transition: opacity var(--transition-medium); z-index: 0; } .apple-card:hover::before { opacity: 1; } .apple-card > * { position: relative; z-index: 1; } .skills-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; } @media (min-width: 993px) { .skills-grid .skill-category:nth-child(2) .apple-card { transform: translateY(-15px); box-shadow: var(--glass-inset-shadow), 0 4px 12px -2px hsla(var(--hue-accent), 50%, 20%, 0.1), 0 32px 80px 0 hsla(var(--hue-accent), 50%, 20%, 0.25); } } .skill-category { display: flex; } .skill-category .apple-card { display: flex; flex-direction: column; flex-grow: 1; padding: 30px; gap: 20px; } .skill-category h3 { font-size: 1.3rem; font-weight: 700; display: flex; align-items: center; gap: 16px; } .skill-category h3 i { background-color: hsla(var(--hue-accent), 100%, 55%, 0.1); color: var(--accent-primary); width: 48px; height: 48px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 1.3rem; flex-shrink: 0; transition: all var(--transition-fast); } .skill-category .apple-card:hover h3 i { transform: scale(1.1) rotate(-8deg); background-color: hsla(var(--hue-accent), 100%, 55%, 0.2); } .glass-action-button { display: inline-flex; align-items: center; justify-content: center; gap: 10px; padding: 14px 32px; border-radius: var(--border-radius-m); font-weight: 600; font-size: 1.05rem; text-decoration: none; color: var(--text-primary); background: var(--glass-bg); border: 1px solid var(--glass-border); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); box-shadow: var(--glass-inset-shadow), 0 8px 32px 0 var(--shadow-color); transition: all var(--transition-medium); position: relative; overflow: hidden; cursor: pointer; } .glass-action-button .icon-download { transition: transform 0.3s ease; } .glass-action-button:hover { transform: translateY(-4px) scale(1.05); box-shadow: var(--glass-inset-shadow), 0 12px 40px 0 var(--shadow-color); color: var(--text-primary); will-change: transform, box-shadow; } .glass-action-button:hover .icon-download { transform: translateY(3px); } .design-credit-footer { padding: 20px; text-align: center; color: var(--text-tertiary); font-size: 0.85rem; } .design-credit-footer p { display: inline-flex; align-items: center; gap: 8px; } #control-center-nav { position: fixed; inset: 0; width: 100vw; height: 100vh; background: hsla(0, 0%, 0%, 0.2); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 20px; visibility: hidden; opacity: 0; transition: visibility 0s 0.4s, opacity 0.4s ease; } #control-center-nav.nav-open { visibility: visible; opacity: 1; transition-delay: 0s; } #control-center-nav .panel { background: hsla(230, 15%, 18%, 0.6); border: 1px solid hsla(0, 0%, 100%, 0.2); border-radius: var(--border-radius); width: 100%; max-width: 420px; max-height: 90vh; box-shadow: inset 1px 1px 0px hsla(0, 0%, 100%, 0.15), 0 24px 64px 0 hsla(0, 0%, 0%, 0.3); backdrop-filter: blur(32px) saturate(180%); -webkit-backdrop-filter: blur(32px) saturate(180%); overflow: hidden; position: relative; display: flex; flex-direction: column; transform: scale(0.9) translateY(20px); opacity: 0; transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.3s ease; will-change: transform, opacity; } #control-center-nav.nav-open .panel { transform: scale(1) translateY(0); opacity: 1; } .cc-grabber { width: 40px; height: 5px; border-radius: 2.5px; background: hsla(0, 0%, 100%, 0.3); margin: 12px auto 0 auto; flex-shrink: 0; } .control-center-grid { display: grid; gap: 16px; padding: 20px; overflow-y: auto; -ms-overflow-style: none; scrollbar-width: none; } .control-center-grid::-webkit-scrollbar { display: none; } .cc-widget { border-radius: var(--border-radius-m); padding: 16px; box-shadow: inset 1px 1px 0 hsla(0, 0%, 100%, 0.1); border: 1px solid hsla(0, 0%, 100%, 0.1); color: var(--text-primary-dark); } .widget-header { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 0.9rem; color: rgba(255, 255, 255, 0.8); margin-bottom: 12px; } #cc-clock { font-size: clamp(2rem, 8vw, 2.5rem); text-align: center; font-weight: 700; letter-spacing: -1px; color: #fff; } .quick-actions-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; } .quick-action-btn { background: hsla(0, 0%, 100%, 0.12); border: 1px solid hsla(0, 0%, 100%, 0.15); border-radius: var(--border-radius-m); padding: 12px 0; display: flex; flex-direction: column; align-items: center; gap: 8px; color: var(--text-primary-dark); font-weight: 500; transition: background 0.2s, transform 0.2s; cursor: pointer; box-shadow: inset 1px 1px 0 hsla(0, 0%, 100%, 0.1); text-align: center; } .quick-action-btn:hover { background: hsla(0, 0%, 100%, 0.2); transform: scale(1.05); } .quick-action-btn i { font-size: 1.5rem; color: var(--accent-primary-dark); } .quick-action-btn span { font-size: 0.75rem; line-height: 1.2; font-weight: 600; } .cc-widget input[type="range"] { -webkit-appearance: none; appearance: none; width: 100%; height: 100%; background: transparent; outline: none; cursor: pointer; margin: 0; padding: 0; position: absolute; top: 0; left: 0; } .cc-widget input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 0; height: 100%; } .cc-widget input[type="range"]::-moz-range-thumb { width: 0; height: 100%; border: 0; } .ios-slider { display: flex; align-items: center; gap: 15px; margin-bottom: 16px; } .ios-slider:last-child { margin-bottom: 0; } .ios-slider > i { color: #fff; font-size: 1.1rem; flex-shrink: 0; width: 20px; text-align: center; } .ios-slider .slider-container { flex-grow: 1; position: relative; height: 36px; } .ios-slider .bar { position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: hsla(0, 0%, 0%, 0.3); border-radius: 18px; overflow: hidden; } .ios-slider .progress { height: 100%; width: 0%; background-color: #fff; border-radius: 18px; transition: width 0.05s linear; } .toggle-switch-container { display: flex; align-items: center; justify-content: space-between; color: #fff; font-size: 0.9rem; font-weight: 500; } .toggle-switch { position: relative; display: inline-block; width: 51px; height: 31px; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-switch .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: hsla(0, 0%, 100%, 0.2); transition: 0.4s; border-radius: 34px; } .toggle-switch .slider:before { position: absolute; content: ""; height: 27px; width: 27px; left: 2px; bottom: 2px; background-color: white; transition: 0.4s cubic-bezier(0.17, 0.67, 0.5, 1.28); border-radius: 50%; } .toggle-switch input:checked + .slider { background-color: #2196f3; } .toggle-switch input:checked + .slider:before { transform: translateX(20px); } body { user-select: none !important; -webkit-user-select: none !important; -ms-user-select: none !important; -moz-user-select: none !important; } section { padding: 90px 0; position: relative; } .section-title { text-align: center; font-size: 3rem; font-weight: 800; letter-spacing: -0.04em; margin-bottom: 20px; color: var(--text-primary); text-shadow: 0 3px 15px hsla(var(--hue-accent), 30%, 20%, 0.1); } .section-subtitle { text-align: center; max-width: 700px; margin: 0 auto 60px auto; color: var(--text-secondary); font-size: 1.125rem; line-height: 1.7; } .animate-on-scroll { opacity: 0; filter: blur(8px); transform: translateY(50px) scale(0.95); will-change: opacity, transform, filter; transition: opacity 0.8s var(--transition-slow), transform 0.8s var(--transition-slow), filter 0.8s var(--transition-slow); transition-delay: 0ms; } .animate-on-scroll.from-left { transform: translateX(-50px) scale(0.95); } .animate-on-scroll.from-right { transform: translateX(50px) scale(0.95); } .animate-on-scroll.is-visible { opacity: 1; transform: translate(0, 0) scale(1); filter: blur(0); } .hero img.profile-pic { width: 160px; height: 160px; border-radius: 50%; object-fit: cover; margin-bottom: -20px; border: 4px solid var(--glass-border); box-shadow: 0 10px 40px var(--shadow-color); transition: transform 0.4s var(--transition-medium), box-shadow 0.4s var(--transition-medium); will-change: transform, box-shadow; } .hero img.profile-pic:hover { transform: scale(1.08) rotate(-3deg); box-shadow: 0 0 15px 5px hsla(var(--hue-accent), 100%, 60%, 0.4), 0 15px 50px var(--shadow-color-dark); } .hero h1 { font-size: clamp(2.5rem, 7vw, 4.5rem); font-weight: 800; letter-spacing: -0.05em; margin-top: 20px; margin-bottom: 8px; color: var(--text-primary); transition: color var(--transition-medium); } .hero .intro-paragraph { font-size: 1rem; color: var(--text-secondary); max-width: 650px; margin: 0 auto 20px auto; line-height: 1.7; font-weight: 500; } .social-links-hero { margin-top: 20px; } .social-links-hero a { color: var(--text-tertiary); margin: 0 15px; font-size: 1.6rem; transition: all var(--transition-fast); } .social-links-hero a:hover { color: var(--accent-primary); transform: scale(1.2) rotate(-8deg); } .apple-card h3 { color: var(--text-primary); margin-bottom: 12px; font-size: 1.35rem; font-weight: 700; } .apple-card ul { list-style: none; padding-left: 0; } .apple-card ul li { margin-bottom: 10px; position: relative; padding-left: 25px; color: var(--text-secondary); font-size: 1rem; line-height: 1.7; } .apple-card ul li::before { content: "✦"; color: var(--accent-primary); position: absolute; left: 0; top: 2px; font-size: 1.1em; } #about .about-content { display: grid; grid-template-columns: 2fr 1fr; gap: 60px; align-items: center; } .about-text p { margin-bottom: 1.5em; color: var(--text-secondary); line-height: 1.8; } .about-text p:first-of-type { font-size: 1.2rem; color: var(--text-primary); font-weight: 500; } .about-text blockquote { margin: 1.5em 0; padding-left: 1.5em; border-left: 4px solid var(--accent-primary); font-style: italic; font-size: 1.05rem; color: var(--text-primary); } .about-text strong { color: var(--accent-primary); font-weight: 600; } #about .about-image-container video { width: 326px; max-width: 330px; height: 350px; border-radius: var(--border-radius); transition: all var(--transition-medium); object-fit: cover; } #about .about-image-container:hover video { transform: scale(1.08) rotate(3deg); } .portfolio-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 30px; } .portfolio-item .apple-card { padding: 0; display: flex; flex-direction: column; height: 100%; } .portfolio-item .portfolio-video { width: 100%; height: 250px; object-fit: cover; display: block; border-radius: var(--border-radius) var(--border-radius) 0 0; border-bottom: 1px solid var(--glass-border); background-color: hsla(0, 0%, 0%, 0.1); } .portfolio-item img { width: 100%; height: 250px; object-fit: cover; display: block; border-radius: var(--border-radius) var(--border-radius) 0 0; border-bottom: 1px solid var(--glass-border); } .portfolio-content { padding: 30px; flex-grow: 1; display: flex; flex-direction: column; } .portfolio-content h3 { font-size: 1.6rem; } .portfolio-content p { flex-grow: 1; margin-bottom: 20px; color: var(--text-secondary); font-size: 0.95rem; } .portfolio-tags { margin-bottom: 20px; flex-wrap: wrap; } .portfolio-tags .tag { display: inline-block; background: hsla(var(--hue-accent), 100%, 55%, 0.1); backdrop-filter: blur(4px); color: var(--accent-primary); padding: 6px 14px; border-radius: var(--border-radius-s); border: 1px solid hsla(var(--hue-accent), 100%, 55%, 0.2); box-shadow: inset 0 1px 1px hsla(0, 0%, 100%, 0.1); font-size: 0.8rem; font-weight: 600; margin: 0 8px 8px 0; transition: all var(--transition-fast); } .portfolio-tags .tag:hover { transform: translateY(-2px) scale(1.05); background-color: hsla(var(--hue-accent), 100%, 55%, 0.2); box-shadow: inset 0 1px 1px hsla(0, 0%, 100%, 0.1), 0 2px 8px hsla(var(--hue-accent), 100%, 55%, 0.2); } .portfolio-links a { font-weight: 600; display: inline-flex; align-items: center; margin-right: 20px; padding: 8px 16px; border-radius: var(--border-radius-s); background: hsla(0, 0%, 50%, 0.05); border: 1px solid var(--glass-border); color: var(--accent-primary); transition: all var(--transition-fast); } body.dark-mode .portfolio-links a { background: hsla(0, 0%, 100%, 0.05); } .portfolio-links a:hover { background: hsla(var(--hue-accent), 100%, 55%, 0.15); transform: translateY(-2px); box-shadow: 0 4px 12px hsla(var(--hue-accent), 100%, 55%, 0.15); filter: brightness(1.1); color: var(--accent-primary); } .portfolio-links a i { margin-right: 8px; } .experience-grid { display: grid; gap: 30px; } .experience-item .date { color: var(--text-tertiary); font-weight: 600; font-size: 0.9rem; margin-bottom: 10px; display: block; text-transform: uppercase; letter-spacing: 0.08em; } #education .experience-item .apple-card { position: relative; overflow: hidden; } .education-icon { position: absolute; top: 15px; right: 20px; font-size: 4rem; color: hsla(var(--hue-accent), 100%, 65%, 0.08); z-index: 0; transition: transform 0.4s var(--transition-medium), color 0.4s ease; } #education .experience-item .apple-card:hover .education-icon { color: hsla(var(--hue-accent), 100%, 65%, 0.15); transform: rotate(-10deg) scale(1.1); } button[type="submit"].contact-button { display: inline-flex; align-items: center; justify-content: center; background: var(--glass-bg); color: var(--text-primary); padding: 14px 32px; margin-top: 12px; text-decoration: none; border: 1px solid var(--glass-border); border-radius: var(--border-radius-m); font-weight: 600; font-size: 1.05rem; backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); box-shadow: var(--glass-inset-shadow), 0 8px 32px 0 var(--shadow-color); transition: all var(--transition-medium); cursor: pointer; position: relative; overflow: hidden; } button[type="submit"].contact-button:hover { transform: translateY(-4px) scale(1.05); box-shadow: var(--glass-inset-shadow), 0 12px 40px 0 var(--shadow-color); color: var(--text-primary); will-change: transform, box-shadow; } #contact .contact-container { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: flex-start; } .form-group label { display: block; margin-bottom: 8px; color: var(--text-secondary); font-weight: 600; font-size: 0.9rem; } .form-group input, .form-group textarea { width: 100%; padding: 14px; background-color: hsla(0, 0%, 50%, 0.1); border: 1px solid var(--glass-border); border-radius: var(--border-radius-m); color: var(--text-primary); font-family: var(--font-primary); font-size: 1rem; transition: all var(--transition-fast); box-shadow: var(--glass-inset-shadow); } body.dark-mode .form-group input, body.dark-mode .form-group textarea { background-color: hsla(0, 0%, 100%, 0.05); } .form-group input:focus, .form-group textarea:focus { outline: none; border-color: var(--accent-primary); box-shadow: 0 0 0 3px hsla(var(--hue-accent), 100%, 60%, 0.3), var(--glass-inset-shadow); } .contact-info-item { display: flex; align-items: center; margin-bottom: 20px; color: var(--text-secondary); } .contact-info-item i { font-size: 1.3rem; color: var(--accent-primary); margin-right: 16px; width: 24px; text-align: center; transition: transform var(--transition-fast); } .contact-info-item i:hover { transform: scale(1.2); } footer { padding: 50px 0 0 0; background: transparent; color: var(--text-tertiary); font-size: 0.95rem; text-align: center; } .footer-content { display: flex; flex-direction: column; align-items: center; gap: 20px; } @media (max-width: 992px) { html { font-size: 15px; } #about .about-content { grid-template-columns: 1fr; } #about .about-image-container { order: -1; margin: 0 auto 40px; max-width: 350px; } #contact .contact-container { grid-template-columns: 1fr; } } .control-center-toggle, #language-toggle { transition: opacity 0.4s, transform 0.4s; opacity: 1; pointer-events: auto; } .control-center-toggle.hide-on-scroll, #language-toggle.hide-on-scroll { opacity: 0; transform: translateY(-20px); pointer-events: none; } @media (max-width: 600px) { body, html { width: 100vw; overflow-x: hidden; } .container { width: 100%; } } .glass-action-button, button[type="submit"].contact-button, #theme-toggle, #language-toggle, .control-center-toggle, .quick-action-btn, .audio-control-btn { background: var(--glass-bg); backdrop-filter: blur(12px) saturate(180%); -webkit-backdrop-filter: blur(12px) saturate(180%); border: 1px solid var(--glass-border); box-shadow: var(--glass-inset-shadow), 0 8px 32px 0 var(--shadow-color); position: relative; overflow: hidden; transition: transform 0.3s var(--transition-medium), background-color 0.3s var(--transition-medium), box-shadow 0.3s var(--transition-medium), color 0.3s var(--transition-medium); } .glass-action-button::before, button[type="submit"].contact-button::before, #theme-toggle::before, #language-toggle::before, .control-center-toggle::before, .quick-action-btn::before, .audio-control-btn::before { content: ""; position: absolute; inset: 0; background: radial-gradient( 500px circle at var(--mouse-x, 50%) var(--mouse-y, 50%), var(--glass-light-effect), transparent 60% ); opacity: 0; transition: opacity 0.6s var(--transition-medium); z-index: 0; pointer-events: none; } .glass-action-button:hover::before, button[type="submit"].contact-button:hover::before, #theme-toggle:hover::before, #language-toggle:hover::before, .control-center-toggle:hover::before, .quick-action-btn:hover::before, .audio-control-btn:hover::before { opacity: 1; } .glass-action-button:hover, button[type="submit"].contact-button:hover, #theme-toggle:hover, #language-toggle:hover, .control-center-toggle:hover, .quick-action-btn:hover, .audio-control-btn:hover { transform: scale(1.05); box-shadow: var(--glass-inset-shadow), 0 12px 36px 0 var(--shadow-color); } .audio-control-btn:hover { background: var(--accent-primary); color: white; } .header-actions { display: flex; align-items: center; gap: 12px; margin-left: auto; position: relative; height: 44px; } #theme-toggle { position: absolute; right: 114px; transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), right 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); z-index: 3; } #language-toggle { position: absolute; right: 60px; z-index: 2; transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), right 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); } #theme-toggle.move-to-center { right: 0; transform: scale(0.95) translateY(0); opacity: 1; } .control-center-toggle { position: absolute; right: 0; transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), background-color 0.3s var(--transition-medium); z-index: 1; } html, body { cursor: url("./src/Theme/mac-cursors/default.png"), auto; } a, button, [role="button"], .pointer, .btn { cursor: url("./src/Theme/mac-cursors/handpointing.png"), pointer !important; } .audio-controls { position: fixed; bottom: 20px; right: 20px; display: flex; flex-direction: column; gap: 10px; z-index: 1001; } #scrollToTopBtn { position: fixed; bottom: 128px; right: 20px; z-index: 1001; opacity: 0; visibility: hidden; transform: translateY(20px) scale(0.9); transition: opacity 0.4s ease, transform 0.4s ease, visibility 0.4s ease; pointer-events: none; } #scrollToTopBtn.show { opacity: 1; visibility: visible; transform: translateY(0) scale(1); pointer-events: auto; } .audio-control-btn { width: 44px; height: 44px; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1rem; transition: all var(--transition-fast); position: relative; overflow: hidden; color: var(--text-primary); } .audio-control-btn.off .fa-slash, .audio-control-btn.off .fa-volume-mute { display: inline-block !important; } .audio-control-btn.off .fa-music, .audio-control-btn.off .fa-volume-up { display: none; } .audio-control-btn .fa-slash { position: absolute; color: var(--text-primary); opacity: 0.7; font-size: 1.5em; transition: color 0.3s ease; } .audio-control-btn:hover .fa-slash { color: white; } body.dark-mode .audio-control-btn:hover .fa-slash { color: var(--bg-dark); } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .audio-control-btn.spinning .fa-music { animation: spin 2s linear infinite; } .no-animations * { transition: none !important; animation: none !important; } .no-animations #starfield-canvas { display: none !important; } #internet-status-modal { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; background-color: hsla(0, 0%, 0%, 0.5); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); opacity: 0; visibility: hidden; transition: opacity 0.4s ease, visibility 0.4s ease; } #internet-status-modal.visible { opacity: 1; visibility: visible; } .internet-status-panel { background: var(--glass-bg); border: 1px solid var(--glass-border); color: var(--text-primary); padding: 30px 40px; border-radius: var(--border-radius); text-align: center; box-shadow: 0 16px 64px hsla(0, 0%, 0%, 0.2); transform: scale(0.9); transition: transform 0.4s var(--transition-medium); } #internet-status-modal.visible .internet-status-panel { transform: scale(1); } .internet-status-panel i { font-size: 3rem; color: var(--accent-primary); margin-bottom: 15px; display: block; } .internet-status-panel h3 { font-size: 1.5rem; font-weight: 700; margin-bottom: 5px; } .internet-status-panel p { color: var(--text-secondary); font-size: 1rem; } #watermark-overlay { position: fixed; inset: 0; z-index: 10000; display: flex; align-items: center; justify-content: center; pointer-events: none; color: hsla(0, 0%, 50%, 0.15); font-size: clamp(4vw, 8vw, 100px); font-weight: 800; text-align: center; transform: rotate(-30deg); text-shadow: 0 0 5px hsla(0, 0%, 0%, 0.2); opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; } body.watermarked #watermark-overlay { opacity: 1; visibility: visible; } #music-visualizer { position: fixed; bottom: 0; left: 0; width: 100%; height: 120px; z-index: 1000; pointer-events: none; opacity: 0; transition: opacity 0.5s ease; -webkit-mask-image: linear-gradient( to top, black 60%, transparent 100% ); mask-image: linear-gradient(to top, black 60%, transparent 100%); } #music-visualizer.visible { opacity: 1; } @media print { body { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; } #watermark-overlay { display: flex !important; opacity: 1 !important; visibility: visible !important; } }