/* ============================================ MOREMINIMORE - KINETIC TYPOGRAPHY DESIGN SYSTEM A unique design where typography IS the hero ============================================ */ @import url('https://fonts.googleapis.com/css2?family=Kanit:wght@400;500;600;700;800;900&family=Noto+Sans+Thai:wght@300;400;500;600;700&display=swap'); /* ============================================ CSS CUSTOM PROPERTIES ============================================ */ :root { /* Brand Colors */ --color-primary: #fed400; --color-primary-dark: #e6c100; --color-primary-light: #fff176; --color-dark: #1a1a2e; --color-dark-light: #252542; --color-black: #000000; --color-white: #ffffff; --color-gray-100: #f5f5f5; --color-gray-200: #e5e5e5; --color-gray-400: #9ca3af; --color-gray-600: #6b7280; /* Typography */ --font-display: 'Kanit', sans-serif; --font-body: 'Noto Sans Thai', sans-serif; /* Spacing */ --space-xs: 8px; --space-sm: 16px; --space-md: 24px; --space-lg: 40px; --space-xl: 64px; --space-2xl: 96px; --space-3xl: 128px; /* Layout */ --container-max: 1400px; --gutter: 32px; --section-padding: 120px; /* Animation */ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1); --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); --ease-spring: cubic-bezier(0.5, 1.5, 0.5, 1); --duration-fast: 0.2s; --duration-normal: 0.4s; --duration-slow: 0.8s; --duration-slower: 1.2s; /* Shadows */ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08); --shadow-md: 0 8px 30px rgba(0, 0, 0, 0.12); --shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.2); --shadow-glow: 0 0 40px rgba(254, 212, 0, 0.4); /* Border Radius */ --radius-sm: 4px; --radius-md: 8px; --radius-lg: 16px; --radius-xl: 24px; --radius-full: 9999px; } /* ============================================ RESET & BASE ============================================ */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; font-size: 16px; } body { font-family: var(--font-body); font-weight: 400; line-height: 1.7; color: var(--color-black); background: var(--color-white); overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } a { text-decoration: none !important; color: inherit; } a:hover { text-decoration: none !important; } /* Cursor Trail Container */ .cursor-container { position: fixed; inset: 0; pointer-events: none; z-index: 9999; overflow: hidden; } .particle { position: absolute; width: 8px; height: 8px; background: var(--color-primary); border-radius: 50%; pointer-events: none; mix-blend-mode: difference; } /* ============================================ TYPOGRAPHY - THE CORE OF THE DESIGN ============================================ */ h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); font-weight: 800; line-height: 1.1; letter-spacing: -0.02em; } /* Giant Typography - Primary Visual Element */ .text-display-xl { font-family: var(--font-display); font-size: clamp(60px, 12vw, 160px); font-weight: 900; line-height: 0.9; letter-spacing: -0.03em; text-transform: uppercase; } .text-display-lg { font-family: var(--font-display); font-size: clamp(40px, 8vw, 100px); font-weight: 900; line-height: 1; letter-spacing: -0.02em; } .text-display-md { font-family: var(--font-display); font-size: clamp(28px, 5vw, 56px); font-weight: 800; line-height: 1.1; } /* Kinetic Word Animation */ .kinetic-word { display: inline-block; overflow: hidden; } .kinetic-word-inner { display: inline-block; transform: translateY(100%); opacity: 0; } .kinetic-word.revealed .kinetic-word-inner { animation: wordReveal 0.8s var(--ease-out-expo) forwards; } @keyframes wordReveal { 0% { transform: translateY(100%) skewY(10deg); opacity: 0; } 60% { transform: translateY(-5%) skewY(-2deg); opacity: 1; } 100% { transform: translateY(0) skewY(0); opacity: 1; } } /* ============================================ LAYOUT ============================================ */ .container { max-width: var(--container-max); margin: 0 auto; padding: 0 var(--gutter); } /* ============================================ SECTION STYLES ============================================ */ .section { padding: var(--section-padding) 0; position: relative; } .section-dark { background: var(--color-dark); color: var(--color-white); } .section-light { background: var(--color-gray-100); } .section-primary { background: var(--color-primary); } /* Seamless Section Transitions */ .section-gradient-top { position: relative; } .section-gradient-top::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 100px; background: linear-gradient(to bottom, var(--color-dark) 0%, transparent 100%); z-index: 2; pointer-events: none; } .section-gradient-bottom { position: relative; } .section-gradient-bottom::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 100px; background: linear-gradient(to top, var(--color-dark) 0%, transparent 100%); z-index: 2; pointer-events: none; } /* ============================================ MAGAZINE STYLE - OVERLAP UTILITIES ============================================ */ .overlap-top { margin-top: -60px; position: relative; z-index: 10; } .overlap-top-sm { margin-top: -30px; } .overlap-top-lg { margin-top: -100px; } .overlap-bottom { margin-bottom: -60px; } .floating-card { position: relative; z-index: 10; margin-top: -40px; background: var(--color-white); border-radius: 24px; box-shadow: 0 20px 60px rgba(0,0,0,0.08); } .container-bleed { width: 100%; padding: 0 32px; } .break-container { width: 100vw; margin-left: calc(50% - 50vw); } /* ============================================ ANIMATED ACCENT LINE ============================================ */ .accent-line { position: relative; height: 6px; background: var(--color-primary); border-radius: 3px; overflow: hidden; } .accent-line::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent); animation: shimmer 2s ease-in-out infinite; } @keyframes shimmer { 0%, 100% { transform: translateX(-100%); } 50% { transform: translateX(100%); } } /* Draw Line Animation */ .draw-line { position: relative; height: 4px; background: var(--color-gray-200); overflow: hidden; } .draw-line::before { content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 0; background: var(--color-primary); animation: drawLine 1s var(--ease-out-expo) forwards; } @keyframes drawLine { to { width: 100%; } } /* ============================================ BUTTONS - MAGNETIC EFFECT ============================================ */ .btn { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 12px; padding: 20px 40px; font-family: var(--font-display); font-size: 16px; font-weight: 700; text-transform: uppercase; letter-spacing: 2px; border: none; border-radius: var(--radius-md); cursor: pointer; overflow: hidden; transition: transform var(--duration-normal) var(--ease-out-expo), box-shadow var(--duration-normal) var(--ease-out-expo); } .btn-primary { background: var(--color-primary); color: var(--color-black); box-shadow: var(--shadow-glow); } .btn-primary:hover { box-shadow: 0 0 60px rgba(254, 212, 0, 0.6); } .btn-dark { background: var(--color-dark); color: var(--color-white); } .btn-dark:hover { background: var(--color-dark-light); } .btn-outline { background: transparent; border: 3px solid currentColor; } /* Shine Effect on Buttons */ .btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.5), transparent ); transition: left 0.6s ease; } .btn:hover::before { left: 100%; } /* ============================================ CARDS - TILT EFFECT ============================================ */ .tilt-card { position: relative; transform-style: preserve-3d; perspective: 1000px; } .tilt-card-inner { position: relative; padding: 40px; background: var(--color-white); border-radius: var(--radius-xl); box-shadow: var(--shadow-md); transition: transform 0.3s ease, box-shadow 0.3s ease; transform-style: preserve-3d; } .tilt-card:hover .tilt-card-inner { box-shadow: 0 30px 80px rgba(0, 0, 0, 0.2); } /* Card Entrance Animations */ .card-enter { opacity: 0; } .card-enter-left { animation: slideInLeft 0.8s var(--ease-out-expo) forwards; } .card-enter-right { animation: slideInRight 0.8s var(--ease-out-expo) forwards; } .card-enter-up { animation: slideInUp 0.8s var(--ease-out-expo) forwards; } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-80px) skewX(5deg); } to { opacity: 1; transform: translateX(0) skewX(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(80px) skewX(-5deg); } to { opacity: 1; transform: translateX(0) skewX(0); } } @keyframes slideInUp { from { opacity: 0; transform: translateY(60px); } to { opacity: 1; transform: translateY(0); } } /* ============================================ SCROLL REVEAL ANIMATIONS ============================================ */ .reveal { opacity: 0; transform: translateY(60px); transition: opacity 0.8s var(--ease-out-expo), transform 0.8s var(--ease-out-expo); } .reveal.visible { opacity: 1; transform: translateY(0); } .reveal-left { opacity: 0; transform: translateX(-60px); transition: opacity 0.8s var(--ease-out-expo), transform 0.8s var(--ease-out-expo); } .reveal-left.visible { opacity: 1; transform: translateX(0); } .reveal-right { opacity: 0; transform: translateX(60px); transition: opacity 0.8s var(--ease-out-expo), transform 0.8s var(--ease-out-expo); } .reveal-right.visible { opacity: 1; transform: translateX(0); } .reveal-scale { opacity: 0; transform: scale(0.9); transition: opacity 0.8s var(--ease-out-expo), transform 0.8s var(--ease-out-expo); } .reveal-scale.visible { opacity: 1; transform: scale(1); } /* ============================================ COUNTER ANIMATION ============================================ */ .counter { font-family: var(--font-display); font-size: clamp(60px, 10vw, 120px); font-weight: 900; line-height: 1; color: var(--color-primary); } .counter-value { display: inline-block; } /* ============================================ FLOATING ELEMENTS ============================================ */ .float { animation: floatAnimation 4s ease-in-out infinite; } .float-slow { animation: floatAnimation 8s ease-in-out infinite; } .float-fast { animation: floatAnimation 2s ease-in-out infinite; } @keyframes floatAnimation { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } .float-rotate { animation: floatRotate 6s ease-in-out infinite; } @keyframes floatRotate { 0%, 100% { transform: translateY(0) rotate(0deg); } 33% { transform: translateY(-30px) rotate(5deg); } 66% { transform: translateY(-15px) rotate(-5deg); } } /* ============================================ BADGES & LABELS ============================================ */ .badge { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; font-family: var(--font-display); font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 3px; border-radius: var(--radius-full); background: var(--color-primary); color: var(--color-black); } .badge-dark { background: var(--color-dark); color: var(--color-white); } /* Pulsing Badge */ .badge-pulse { animation: badgePulse 2s ease-in-out infinite; } @keyframes badgePulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(254, 212, 0, 0.4); } 50% { box-shadow: 0 0 0 15px rgba(254, 212, 0, 0); } } /* ============================================ PARALLAX BACKGROUND TEXT ============================================ */ .parallax-text { position: absolute; font-family: var(--font-display); font-size: clamp(150px, 25vw, 350px); font-weight: 900; text-transform: uppercase; white-space: nowrap; pointer-events: none; user-select: none; opacity: 0.03; color: var(--color-black); will-change: transform; } /* ============================================ NAVIGATION ============================================ */ .nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: 24px 0; transition: all 0.4s var(--ease-out-expo); } .nav.scrolled { padding: 16px 0; background: rgba(26, 26, 46, 0.9); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); } .nav-link { position: relative; font-family: var(--font-display); font-size: 14px; font-weight: 600; text-transform: uppercase; letter-spacing: 2px; color: var(--color-white); transition: color 0.3s ease; } .nav-link::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0; height: 3px; background: var(--color-primary); transition: width 0.3s var(--ease-out-expo); } .nav-link:hover::after, .nav-link.active::after { width: 100%; } .nav-cta { background: var(--color-primary); color: var(--color-black); padding: 12px 24px; border-radius: var(--radius-md); } /* ============================================ FORM ELEMENTS ============================================ */ .form-group { position: relative; margin-bottom: 24px; } .form-label { position: absolute; left: 20px; top: 50%; transform: translateY(-50%); font-size: 16px; color: var(--color-gray-600); pointer-events: none; transition: all 0.3s var(--ease-out-expo); } .form-input { width: 100%; padding: 20px; font-family: var(--font-body); font-size: 16px; background: var(--color-gray-100); border: 2px solid transparent; border-radius: var(--radius-md); transition: all 0.3s ease; } .form-input:focus { outline: none; border-color: var(--color-primary); background: var(--color-white); } .form-input:focus + .form-label, .form-input:not(:placeholder-shown) + .form-label { top: -12px; left: 16px; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; background: var(--color-white); padding: 4px 8px; color: var(--color-primary); } /* ============================================ FOOTER ============================================ */ .footer { background: var(--color-dark); color: var(--color-white); padding: 80px 0 40px; } .footer-title { font-family: var(--font-display); font-size: 14px; font-weight: 700; text-transform: uppercase; letter-spacing: 3px; color: var(--color-primary); margin-bottom: 24px; } .social-link { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: 50%; background: rgba(255, 255, 255, 0.1); transition: all 0.3s var(--ease-out-expo); } .social-link:hover { background: var(--color-primary); transform: translateY(-4px); } .social-link svg { width: 20px; height: 20px; fill: var(--color-white); transition: fill 0.3s ease; } .social-link:hover svg { fill: var(--color-black); } /* ============================================ UTILITIES ============================================ */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .text-primary { color: var(--color-primary); } .text-dark { color: var(--color-dark); } .text-muted { color: var(--color-gray-600); } .bg-primary { background: var(--color-primary); } .bg-dark { background: var(--color-dark); } .text-center { text-align: center; } .text-uppercase { text-transform: uppercase; letter-spacing: 2px; } /* ============================================ RESPONSIVE ============================================ */ @media (max-width: 1024px) { :root { --section-padding: 80px; --gutter: 24px; } } @media (max-width: 640px) { :root { --section-padding: 60px; --gutter: 16px; } .btn { width: 100%; padding: 18px 32px; } } /* ============================================ LOADING ANIMATION ============================================ */ .loader { position: fixed; inset: 0; background: var(--color-dark); display: flex; align-items: center; justify-content: center; z-index: 10000; transition: opacity 0.5s ease, visibility 0.5s ease; } .loader.hidden { opacity: 0; visibility: hidden; } .loader-text { font-family: var(--font-display); font-size: clamp(40px, 8vw, 80px); font-weight: 900; color: var(--color-primary); animation: loaderPulse 1s ease-in-out infinite; } @keyframes loaderPulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(0.95); } }