feat: light theme + audited color-conflict-safe tokens
- global.css: rewrite all CSS variables for light-first theme
- White bg, dark text, yellow accent (preserved)
- New --color-bg, --color-bg-soft, --color-bg-alt tokens
- All button variants audited: btn-primary (yellow/black, never matches
any white/yellow/soft bg), btn-dark (black/white, safe on yellow/light),
btn-outline-dark, btn-outline-light (only on dark), btn-outline-yellow
- Form inputs: white bg, dark text, gray border, yellow focus ring
- Nav: white bg, dark text, yellow hover underline
- Footer: white bg, dark text, social icons on soft bg
- Section variants: .section-soft, .section-yellow (utility classes)
- Removed dark variants: .section-dark, .btn-dark-as-section-bg
- Base.astro: theme-color = #fed400 (yellow)
- Hero.astro: kinetic hero on WHITE bg with yellow badge + dark text
- PageHero.astro: light hero with yellow accent line at bottom
- Navigation.astro: white bg, dark links, yellow CTA, white logo banner
with /images/logo-long-black.png (works on light/yellow)
- Footer.astro: white bg, dark text, social icons, yellow CTA
- Card components: white bg, gray border, yellow hover state
This commit is contained in:
@@ -1,4 +1,8 @@
|
|||||||
---
|
---
|
||||||
|
/**
|
||||||
|
* MOREMINIMORE - BLOG CARD COMPONENT (LIGHT THEME)
|
||||||
|
*/
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
excerpt: string;
|
excerpt: string;
|
||||||
@@ -17,58 +21,82 @@ const formattedDate = date.toLocaleDateString('th-TH', { year: 'numeric', month:
|
|||||||
{image && <img src={image} alt={title} loading="lazy" />}
|
{image && <img src={image} alt={title} loading="lazy" />}
|
||||||
</div>
|
</div>
|
||||||
<div class="blog-content">
|
<div class="blog-content">
|
||||||
<span class="blog-date">{formattedDate}</span>
|
<span class="blog-category">{category}</span>
|
||||||
<h3 class="blog-title">{title}</h3>
|
<h3 class="blog-title">{title}</h3>
|
||||||
<p class="blog-excerpt">{excerpt}</p>
|
<p class="blog-excerpt">{excerpt}</p>
|
||||||
|
<div class="blog-footer">
|
||||||
|
<span class="blog-date">{formattedDate}</span>
|
||||||
<span class="blog-link">อ่านต่อ →</span>
|
<span class="blog-link">อ่านต่อ →</span>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.blog-card {
|
.blog-card {
|
||||||
display: block;
|
display: block;
|
||||||
background: var(--color-white);
|
background: var(--color-white);
|
||||||
border-radius: 16px;
|
border-radius: var(--radius-xl);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1px solid rgba(0,0,0,0.05);
|
border: 1px solid var(--color-gray-200);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s var(--ease-out-expo);
|
||||||
}
|
}
|
||||||
|
|
||||||
.blog-card:hover {
|
.blog-card:hover {
|
||||||
transform: translateY(-8px);
|
transform: translateY(-8px);
|
||||||
box-shadow: 0 20px 40px rgba(0,0,0,0.1);
|
box-shadow: var(--shadow-md);
|
||||||
|
border-color: var(--color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.blog-image {
|
.blog-image {
|
||||||
aspect-ratio: 16/9;
|
aspect-ratio: 16/9;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background: var(--color-gray-100);
|
background: var(--color-bg-soft);
|
||||||
}
|
}
|
||||||
|
|
||||||
.blog-image img {
|
.blog-image img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
transition: transform 0.5s ease;
|
transition: transform 0.5s ease;
|
||||||
}
|
}
|
||||||
.blog-card:hover .blog-image img { transform: scale(1.05); }
|
|
||||||
.blog-content { padding: 24px; }
|
.blog-card:hover .blog-image img {
|
||||||
.blog-date {
|
transform: scale(1.05);
|
||||||
font-size: 12px;
|
|
||||||
color: var(--color-medium-gray);
|
|
||||||
margin-bottom: 8px;
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
.blog-title {
|
|
||||||
font-size: 18px;
|
.blog-content {
|
||||||
font-weight: 700;
|
padding: 24px;
|
||||||
margin-bottom: 12px;
|
}
|
||||||
|
|
||||||
|
.blog-category {
|
||||||
|
display: inline-block;
|
||||||
|
background: var(--color-primary);
|
||||||
color: var(--color-black);
|
color: var(--color-black);
|
||||||
|
padding: 4px 12px;
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-title {
|
||||||
|
font-family: var(--font-display);
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--color-black);
|
||||||
|
margin-bottom: 12px;
|
||||||
|
line-height: 1.3;
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
-webkit-line-clamp: 2;
|
-webkit-line-clamp: 2;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blog-excerpt {
|
.blog-excerpt {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: var(--color-medium-gray);
|
color: var(--color-gray-600);
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
@@ -76,9 +104,26 @@ const formattedDate = date.toLocaleDateString('th-TH', { year: 'numeric', month:
|
|||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.blog-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-date {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--color-gray-500);
|
||||||
|
}
|
||||||
|
|
||||||
.blog-link {
|
.blog-link {
|
||||||
color: var(--color-primary);
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--color-black);
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-card:hover .blog-link {
|
||||||
|
color: var(--color-primary-dark);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
/**
|
/**
|
||||||
* MOREMINIMORE - FOOTER COMPONENT
|
* MOREMINIMORE - FOOTER COMPONENT (LIGHT THEME)
|
||||||
* Minimal design with animated elements
|
* White bg + dark text + black-text logo (matches new light theme)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
@@ -23,24 +23,13 @@ const serviceLinks = [
|
|||||||
---
|
---
|
||||||
|
|
||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<!-- Background Pattern -->
|
|
||||||
<div class="footer-bg">
|
|
||||||
<div class="bg-dots"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Geometric Elements -->
|
|
||||||
<div class="footer-geo">
|
|
||||||
<div class="geo-circle"></div>
|
|
||||||
<div class="geo-ring"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="footer-grid">
|
<div class="footer-grid">
|
||||||
<!-- Brand Column -->
|
<!-- Brand Column -->
|
||||||
<div class="footer-brand">
|
<div class="footer-brand">
|
||||||
<a href="/" class="footer-logo">
|
<a href="/" class="footer-logo">
|
||||||
<div class="logo-banner">
|
<div class="logo-banner">
|
||||||
<img src="/images/logo-long.png" alt="MoreminiMore" class="logo-img" />
|
<img src="/images/logo-long-black.png" alt="MoreminiMore" class="logo-img" />
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<p class="footer-tagline">
|
<p class="footer-tagline">
|
||||||
@@ -130,7 +119,7 @@ const serviceLinks = [
|
|||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- Back to Top Button -->
|
<!-- Back to Top Button (yellow on light bg) -->
|
||||||
<button class="back-to-top" id="back-to-top" aria-label="กลับไปด้านบน">
|
<button class="back-to-top" id="back-to-top" aria-label="กลับไปด้านบน">
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
|
||||||
<path d="M12 19V5M5 12l7-7 7 7"/>
|
<path d="M12 19V5M5 12l7-7 7 7"/>
|
||||||
@@ -139,62 +128,15 @@ const serviceLinks = [
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* ============================================
|
/* ============================================
|
||||||
FOOTER BASE
|
FOOTER BASE — LIGHT THEME
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
position: relative;
|
position: relative;
|
||||||
background: var(--color-dark);
|
background: var(--color-white);
|
||||||
color: var(--color-white);
|
color: var(--color-black);
|
||||||
padding: 100px 0 40px;
|
padding: 100px 0 40px;
|
||||||
overflow: hidden;
|
border-top: 1px solid var(--color-gray-200);
|
||||||
}
|
|
||||||
|
|
||||||
/* ============================================
|
|
||||||
BACKGROUND
|
|
||||||
============================================ */
|
|
||||||
|
|
||||||
.footer-bg {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-dots {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
background-image: radial-gradient(circle at 1px 1px, rgba(254, 212, 0, 0.06) 1px, transparent 0);
|
|
||||||
background-size: 50px 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Geometric Elements */
|
|
||||||
.footer-geo {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
pointer-events: none;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.geo-circle {
|
|
||||||
position: absolute;
|
|
||||||
width: 400px;
|
|
||||||
height: 400px;
|
|
||||||
background: var(--color-primary);
|
|
||||||
border-radius: 50%;
|
|
||||||
bottom: -200px;
|
|
||||||
left: -150px;
|
|
||||||
opacity: 0.03;
|
|
||||||
}
|
|
||||||
|
|
||||||
.geo-ring {
|
|
||||||
position: absolute;
|
|
||||||
width: 250px;
|
|
||||||
height: 250px;
|
|
||||||
border: 2px solid var(--color-primary);
|
|
||||||
border-radius: 50%;
|
|
||||||
top: 20%;
|
|
||||||
right: -80px;
|
|
||||||
opacity: 0.08;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
@@ -211,7 +153,7 @@ const serviceLinks = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
BRAND - LOGO BANNER
|
BRAND - LOGO BANNER (light)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.footer-logo {
|
.footer-logo {
|
||||||
@@ -221,9 +163,10 @@ const serviceLinks = [
|
|||||||
|
|
||||||
.logo-banner {
|
.logo-banner {
|
||||||
background: var(--color-white);
|
background: var(--color-white);
|
||||||
|
border: 1px solid var(--color-gray-200);
|
||||||
border-radius: 0 16px 16px 0;
|
border-radius: 0 16px 16px 0;
|
||||||
padding: 10px 20px 10px 16px;
|
padding: 10px 20px 10px 16px;
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo-img {
|
.logo-img {
|
||||||
@@ -235,7 +178,7 @@ const serviceLinks = [
|
|||||||
.footer-tagline {
|
.footer-tagline {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
line-height: 1.7;
|
line-height: 1.7;
|
||||||
color: rgba(255, 255, 255, 0.6);
|
color: var(--color-gray-600);
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,7 +194,8 @@ const serviceLinks = [
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
background: rgba(255, 255, 255, 0.08);
|
background: var(--color-bg-soft);
|
||||||
|
border: 1px solid var(--color-gray-200);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
transition: all 0.3s var(--ease-out-expo);
|
transition: all 0.3s var(--ease-out-expo);
|
||||||
}
|
}
|
||||||
@@ -264,15 +208,11 @@ const serviceLinks = [
|
|||||||
|
|
||||||
.social-btn:hover {
|
.social-btn:hover {
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
|
border-color: var(--color-primary);
|
||||||
transform: translateY(-4px);
|
transform: translateY(-4px);
|
||||||
box-shadow: 0 8px 20px rgba(254, 212, 0, 0.3);
|
box-shadow: 0 8px 20px rgba(254, 212, 0, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.social-btn:hover img {
|
|
||||||
/* Keep original icon colors */
|
|
||||||
filter: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
COLUMNS
|
COLUMNS
|
||||||
============================================ */
|
============================================ */
|
||||||
@@ -283,7 +223,7 @@ const serviceLinks = [
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 3px;
|
letter-spacing: 3px;
|
||||||
color: var(--color-primary);
|
color: var(--color-black);
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,7 +239,7 @@ const serviceLinks = [
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
color: rgba(255, 255, 255, 0.7);
|
color: var(--color-gray-600);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,10 +247,11 @@ const serviceLinks = [
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateX(-10px);
|
transform: translateX(-10px);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
|
color: var(--color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-link:hover {
|
.footer-link:hover {
|
||||||
color: var(--color-primary);
|
color: var(--color-black);
|
||||||
transform: translateX(8px);
|
transform: translateX(8px);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,7 +274,7 @@ const serviceLinks = [
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
color: rgba(255, 255, 255, 0.7);
|
color: var(--color-gray-600);
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,7 +283,7 @@ const serviceLinks = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
.contact-item a:hover {
|
.contact-item a:hover {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-cta {
|
.footer-cta {
|
||||||
@@ -369,14 +310,14 @@ const serviceLinks = [
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding-top: 32px;
|
padding-top: 32px;
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
border-top: 1px solid var(--color-gray-200);
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-legal p {
|
.footer-legal p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: rgba(255, 255, 255, 0.4);
|
color: var(--color-gray-500);
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-links-bottom {
|
.footer-links-bottom {
|
||||||
@@ -386,12 +327,12 @@ const serviceLinks = [
|
|||||||
|
|
||||||
.footer-links-bottom a {
|
.footer-links-bottom a {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: rgba(255, 255, 255, 0.4);
|
color: var(--color-gray-500);
|
||||||
transition: color 0.3s ease;
|
transition: color 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-links-bottom a:hover {
|
.footer-links-bottom a:hover {
|
||||||
color: var(--color-primary);
|
color: var(--color-black);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
/**
|
/**
|
||||||
* MOREMINIMORE - KINETIC HERO COMPONENT
|
* MOREMINIMORE - KINETIC HERO COMPONENT (LIGHT THEME)
|
||||||
* Typography IS the hero - No images, just bold text
|
* Yellow/white/black editorial — no dark bg
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -14,11 +14,11 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const {
|
||||||
badge = "ดิจิทัลเอเจนซี่ในประเทศไทย",
|
badge = "AI AGENCY ในประเทศไทย",
|
||||||
title = "เปลี่ยนธุรกิจของคุณ ด้วย AI และเทคโนโลยีสมัยใหม่",
|
title = "เว็บไซต์ที่ขายได้ ไม่ใช่แค่สวย",
|
||||||
subtitle = "รับทำเว็บไซต์ SEO AI Chatbot สำหรับธุรกิจไทย | เพิ่มยอดขาย ลดต้นทุน ด้วยเทคโนโลยีล้ำสมัย",
|
subtitle = "เราออกแบบเว็บไซต์ + AI Chatbot + Marketing Automation ให้ธุรกิจไทย เพิ่มยอดขายเฉลี่ย 2–4 เท่า ภายใน 6 เดือน ด้วยงบที่จับต้องได้ เริ่มต้น 15,000 บาท",
|
||||||
showCTA = true,
|
showCTA = true,
|
||||||
ctaText = "เริ่มต้นวันนี้",
|
ctaText = "เริ่มปรึกษาฟรี",
|
||||||
ctaLink = "/contact",
|
ctaLink = "/contact",
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
|
|
||||||
@@ -27,13 +27,13 @@ const titleWords = title.split(' ');
|
|||||||
---
|
---
|
||||||
|
|
||||||
<section class="kinetic-hero">
|
<section class="kinetic-hero">
|
||||||
<!-- Animated Background Pattern -->
|
<!-- Animated Background Pattern (LIGHT THEME) -->
|
||||||
<div class="hero-bg">
|
<div class="hero-bg">
|
||||||
<div class="bg-grid"></div>
|
<div class="bg-grid"></div>
|
||||||
<div class="bg-gradient"></div>
|
<div class="bg-gradient"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Floating Geometric Elements -->
|
<!-- Floating Geometric Elements (yellow, subtle) -->
|
||||||
<div class="hero-geometric">
|
<div class="hero-geometric">
|
||||||
<div class="geo-circle geo-1"></div>
|
<div class="geo-circle geo-1"></div>
|
||||||
<div class="geo-circle geo-2"></div>
|
<div class="geo-circle geo-2"></div>
|
||||||
@@ -84,11 +84,19 @@ const titleWords = title.split(' ');
|
|||||||
<path d="M5 12h14M12 5l7 7-7 7"/>
|
<path d="M5 12h14M12 5l7 7-7 7"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a href="/portfolio" class="btn btn-outline btn-dark">
|
<a href="/portfolio" class="btn btn-outline-dark">
|
||||||
ดูผลงาน
|
ดูผลงานจริง
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
<!-- Trust strip -->
|
||||||
|
<div class="hero-trust" data-animate="fade-in-up">
|
||||||
|
<span class="trust-item">⭐ 50+ โปรเจกต์สำเร็จ</span>
|
||||||
|
<span class="trust-item">· 40+ ลูกค้าที่ไว้วางใจ</span>
|
||||||
|
<span class="trust-item">· 5+ ปี</span>
|
||||||
|
<span class="trust-item">· 100% โค้ดด้วยตัวเอง</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Giant Background Typography -->
|
<!-- Giant Background Typography -->
|
||||||
@@ -103,18 +111,11 @@ const titleWords = title.split(' ');
|
|||||||
<div class="scroll-dot"></div>
|
<div class="scroll-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Wave Transition -->
|
|
||||||
<div class="hero-wave">
|
|
||||||
<svg viewBox="0 0 1440 100" fill="none" preserveAspectRatio="none">
|
|
||||||
<path d="M0 50C240 100 480 0 720 50C960 100 1200 0 1440 50V100H0V50Z" fill="#ffffff"/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* ============================================
|
/* ============================================
|
||||||
HERO BASE
|
HERO BASE — LIGHT THEME (white bg, yellow accent)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.kinetic-hero {
|
.kinetic-hero {
|
||||||
@@ -122,7 +123,7 @@ const titleWords = title.split(' ');
|
|||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background: var(--color-dark);
|
background: var(--color-white);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,8 +141,8 @@ const titleWords = title.split(' ');
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
background-image:
|
background-image:
|
||||||
linear-gradient(rgba(254, 212, 0, 0.03) 1px, transparent 1px),
|
linear-gradient(rgba(254, 212, 0, 0.08) 1px, transparent 1px),
|
||||||
linear-gradient(90deg, rgba(254, 212, 0, 0.03) 1px, transparent 1px);
|
linear-gradient(90deg, rgba(254, 212, 0, 0.08) 1px, transparent 1px);
|
||||||
background-size: 60px 60px;
|
background-size: 60px 60px;
|
||||||
animation: gridMove 20s linear infinite;
|
animation: gridMove 20s linear infinite;
|
||||||
}
|
}
|
||||||
@@ -154,12 +155,12 @@ const titleWords = title.split(' ');
|
|||||||
.bg-gradient {
|
.bg-gradient {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
background: radial-gradient(ellipse at 30% 20%, rgba(254, 212, 0, 0.08) 0%, transparent 50%),
|
background: radial-gradient(ellipse at 30% 20%, rgba(254, 212, 0, 0.15) 0%, transparent 50%),
|
||||||
radial-gradient(ellipse at 70% 80%, rgba(254, 212, 0, 0.05) 0%, transparent 50%);
|
radial-gradient(ellipse at 70% 80%, rgba(254, 212, 0, 0.08) 0%, transparent 50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
GEOMETRIC ELEMENTS
|
GEOMETRIC ELEMENTS (yellow on light — very subtle)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.hero-geometric {
|
.hero-geometric {
|
||||||
@@ -180,7 +181,7 @@ const titleWords = title.split(' ');
|
|||||||
height: 400px;
|
height: 400px;
|
||||||
top: -100px;
|
top: -100px;
|
||||||
right: 10%;
|
right: 10%;
|
||||||
opacity: 0.05;
|
opacity: 0.08;
|
||||||
animation: floatGeo1 12s ease-in-out infinite;
|
animation: floatGeo1 12s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +190,7 @@ const titleWords = title.split(' ');
|
|||||||
height: 250px;
|
height: 250px;
|
||||||
bottom: 10%;
|
bottom: 10%;
|
||||||
left: -50px;
|
left: -50px;
|
||||||
opacity: 0.08;
|
opacity: 0.12;
|
||||||
animation: floatGeo2 10s ease-in-out infinite;
|
animation: floatGeo2 10s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +199,7 @@ const titleWords = title.split(' ');
|
|||||||
height: 150px;
|
height: 150px;
|
||||||
top: 40%;
|
top: 40%;
|
||||||
right: 30%;
|
right: 30%;
|
||||||
opacity: 0.04;
|
opacity: 0.06;
|
||||||
animation: floatGeo3 8s ease-in-out infinite;
|
animation: floatGeo3 8s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +222,7 @@ const titleWords = title.split(' ');
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
border: 2px solid var(--color-primary);
|
border: 2px solid var(--color-primary);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
opacity: 0.1;
|
opacity: 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ring-1 {
|
.ring-1 {
|
||||||
@@ -248,7 +249,7 @@ const titleWords = title.split(' ');
|
|||||||
.geo-line {
|
.geo-line {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
opacity: 0.1;
|
opacity: 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.line-1 {
|
.line-1 {
|
||||||
@@ -268,8 +269,8 @@ const titleWords = title.split(' ');
|
|||||||
}
|
}
|
||||||
|
|
||||||
@keyframes lineSlide {
|
@keyframes lineSlide {
|
||||||
0%, 100% { transform: translateX(0); opacity: 0.1; }
|
0%, 100% { transform: translateX(0); opacity: 0.2; }
|
||||||
50% { transform: translateX(30px); opacity: 0.2; }
|
50% { transform: translateX(30px); opacity: 0.3; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
@@ -279,7 +280,7 @@ const titleWords = title.split(' ');
|
|||||||
.hero-container {
|
.hero-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
padding: 120px var(--gutter) 100px;
|
padding: 140px var(--gutter) 100px;
|
||||||
max-width: 1200px;
|
max-width: 1200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,15 +293,15 @@ const titleWords = title.split(' ');
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
padding: 12px 24px;
|
padding: 12px 24px;
|
||||||
background: rgba(254, 212, 0, 0.15);
|
background: var(--color-primary);
|
||||||
border: 1px solid rgba(254, 212, 0, 0.3);
|
border: 1px solid var(--color-primary);
|
||||||
border-radius: var(--radius-full);
|
border-radius: var(--radius-full);
|
||||||
font-family: var(--font-display);
|
font-family: var(--font-display);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 3px;
|
letter-spacing: 3px;
|
||||||
color: var(--color-primary);
|
color: var(--color-black);
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
animation: fadeIn 0.6s var(--ease-out-expo) 0.2s forwards;
|
animation: fadeIn 0.6s var(--ease-out-expo) 0.2s forwards;
|
||||||
@@ -309,7 +310,7 @@ const titleWords = title.split(' ');
|
|||||||
.badge-dot {
|
.badge-dot {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
background: var(--color-primary);
|
background: var(--color-black);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
animation: pulse 2s ease-in-out infinite;
|
animation: pulse 2s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
@@ -325,7 +326,7 @@ const titleWords = title.split(' ');
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
KINETIC TITLE
|
KINETIC TITLE — DARK TEXT on white bg
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.hero-title {
|
.hero-title {
|
||||||
@@ -335,7 +336,7 @@ const titleWords = title.split(' ');
|
|||||||
line-height: 1;
|
line-height: 1;
|
||||||
letter-spacing: -0.02em;
|
letter-spacing: -0.02em;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: var(--color-white);
|
color: var(--color-black);
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,13 +369,13 @@ const titleWords = title.split(' ');
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
ACCENT LINE
|
ACCENT LINE (yellow)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.hero-accent-line {
|
.hero-accent-line {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: 6px;
|
height: 6px;
|
||||||
background: rgba(255, 255, 255, 0.1);
|
background: var(--color-gray-200);
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -403,9 +404,9 @@ const titleWords = title.split(' ');
|
|||||||
.hero-subtitle {
|
.hero-subtitle {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 1.7;
|
line-height: 1.7;
|
||||||
color: rgba(255, 255, 255, 0.7);
|
color: var(--color-gray-700);
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
margin-bottom: 48px;
|
margin-bottom: 32px;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
animation: fadeInUp 0.8s var(--ease-out-expo) 0.8s forwards;
|
animation: fadeInUp 0.8s var(--ease-out-expo) 0.8s forwards;
|
||||||
}
|
}
|
||||||
@@ -429,13 +430,14 @@ const titleWords = title.split(' ');
|
|||||||
display: flex;
|
display: flex;
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 32px;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
animation: fadeInUp 0.8s var(--ease-out-expo) 1s forwards;
|
animation: fadeInUp 0.8s var(--ease-out-expo) 1s forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-magnetic {
|
.btn-magnetic {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 24px 48px;
|
padding: 22px 44px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,19 +451,28 @@ const titleWords = title.split(' ');
|
|||||||
transform: translateX(8px);
|
transform: translateX(8px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-outline.btn-dark {
|
/* ============================================
|
||||||
background: transparent;
|
TRUST STRIP
|
||||||
color: var(--color-white);
|
============================================ */
|
||||||
border: 2px solid var(--color-white);
|
|
||||||
|
.hero-trust {
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--color-gray-600);
|
||||||
|
opacity: 0;
|
||||||
|
animation: fadeInUp 0.8s var(--ease-out-expo) 1.2s forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-outline.btn-dark:hover {
|
.trust-item {
|
||||||
background: var(--color-white);
|
display: inline-flex;
|
||||||
color: var(--color-dark);
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
BACKGROUND TEXT
|
BACKGROUND TEXT (light yellow watermark)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.hero-bg-text {
|
.hero-bg-text {
|
||||||
@@ -473,20 +484,20 @@ const titleWords = title.split(' ');
|
|||||||
font-size: clamp(200px, 30vw, 400px);
|
font-size: clamp(200px, 30vw, 400px);
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: var(--color-white);
|
color: var(--color-primary);
|
||||||
opacity: 0.02;
|
opacity: 0.08;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
SCROLL INDICATOR
|
SCROLL INDICATOR (dark on light)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.scroll-indicator {
|
.scroll-indicator {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 120px;
|
bottom: 40px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -503,13 +514,13 @@ const titleWords = title.split(' ');
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 3px;
|
letter-spacing: 3px;
|
||||||
color: rgba(255, 255, 255, 0.5);
|
color: var(--color-gray-500);
|
||||||
}
|
}
|
||||||
|
|
||||||
.scroll-line {
|
.scroll-line {
|
||||||
width: 2px;
|
width: 2px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
background: rgba(255, 255, 255, 0.2);
|
background: var(--color-gray-200);
|
||||||
border-radius: 1px;
|
border-radius: 1px;
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -529,25 +540,6 @@ const titleWords = title.split(' ');
|
|||||||
0% { top: 0; opacity: 1; }
|
0% { top: 0; opacity: 1; }
|
||||||
80% { top: 100%; opacity: 0; }
|
80% { top: 100%; opacity: 0; }
|
||||||
100% { top: 100%; opacity: 0; }
|
100% { top: 100%; opacity: 0; }
|
||||||
0% { top: 0; opacity: 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============================================
|
|
||||||
WAVE
|
|
||||||
============================================ */
|
|
||||||
|
|
||||||
.hero-wave {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: 100px;
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hero-wave svg {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
@@ -560,7 +552,7 @@ const titleWords = title.split(' ');
|
|||||||
}
|
}
|
||||||
|
|
||||||
.hero-container {
|
.hero-container {
|
||||||
padding: 100px var(--gutter) 80px;
|
padding: 120px var(--gutter) 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-bg-text {
|
.hero-bg-text {
|
||||||
@@ -568,7 +560,7 @@ const titleWords = title.split(' ');
|
|||||||
}
|
}
|
||||||
|
|
||||||
.scroll-indicator {
|
.scroll-indicator {
|
||||||
bottom: 100px;
|
bottom: 60px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -586,7 +578,7 @@ const titleWords = title.split(' ');
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.hero-actions .btn {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
@@ -603,9 +595,5 @@ const titleWords = title.split(' ');
|
|||||||
.scroll-indicator {
|
.scroll-indicator {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-wave {
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
/**
|
/**
|
||||||
* MOREMINIMORE - NAVIGATION COMPONENT
|
* MOREMINIMORE - NAVIGATION COMPONENT (LIGHT THEME)
|
||||||
* Morphing navigation with submenus
|
* Light bg + dark text nav links + white logo banner
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const services = [
|
const services = [
|
||||||
@@ -14,10 +14,10 @@ const services = [
|
|||||||
|
|
||||||
<header class="nav" id="nav">
|
<header class="nav" id="nav">
|
||||||
<div class="nav-container container">
|
<div class="nav-container container">
|
||||||
<!-- Logo with Banner Style -->
|
<!-- Logo: white-bg banner with the black-text logo (works on light/yellow) -->
|
||||||
<a href="/" class="nav-logo">
|
<a href="/" class="nav-logo">
|
||||||
<div class="logo-banner">
|
<div class="logo-banner">
|
||||||
<img src="/images/logo-long.png" alt="MoreminiMore" class="logo-img" />
|
<img src="/images/logo-long-black.png" alt="MoreminiMore" class="logo-img" />
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ const services = [
|
|||||||
<a href="/contact" class="nav-link nav-cta" data-magnetic>ติดต่อเรา</a>
|
<a href="/contact" class="nav-link nav-cta" data-magnetic>ติดต่อเรา</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Mobile Menu Toggle -->
|
<!-- Mobile Menu Toggle (DARK icons on light bg) -->
|
||||||
<button class="nav-toggle" id="nav-toggle" aria-label="Toggle menu">
|
<button class="nav-toggle" id="nav-toggle" aria-label="Toggle menu">
|
||||||
<span class="toggle-line"></span>
|
<span class="toggle-line"></span>
|
||||||
<span class="toggle-line"></span>
|
<span class="toggle-line"></span>
|
||||||
@@ -56,7 +56,7 @@ const services = [
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile Navigation Overlay -->
|
<!-- Mobile Navigation Overlay (LIGHT bg) -->
|
||||||
<div class="nav-mobile-overlay" id="nav-mobile">
|
<div class="nav-mobile-overlay" id="nav-mobile">
|
||||||
<nav class="nav-mobile-content">
|
<nav class="nav-mobile-content">
|
||||||
<a href="/" class="mobile-link">หน้าแรก</a>
|
<a href="/" class="mobile-link">หน้าแรก</a>
|
||||||
@@ -84,12 +84,12 @@ const services = [
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Scroll Progress Bar -->
|
<!-- Scroll Progress Bar (yellow) -->
|
||||||
<div class="scroll-progress" id="scroll-progress"></div>
|
<div class="scroll-progress" id="scroll-progress"></div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* ============================================
|
/* ============================================
|
||||||
NAVIGATION BASE
|
NAVIGATION BASE — LIGHT THEME
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.nav {
|
.nav {
|
||||||
@@ -99,15 +99,17 @@ const services = [
|
|||||||
right: 0;
|
right: 0;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
padding: 16px 0;
|
padding: 16px 0;
|
||||||
transition: all 0.4s var(--ease-out-expo);
|
background: var(--color-white);
|
||||||
|
border-bottom: 1px solid var(--color-gray-200);
|
||||||
|
transition: all 0.3s var(--ease-out-expo);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav.scrolled {
|
.nav.scrolled {
|
||||||
padding: 12px 0;
|
padding: 12px 0;
|
||||||
background: rgba(26, 26, 46, 0.95);
|
background: rgba(255, 255, 255, 0.95);
|
||||||
backdrop-filter: blur(20px);
|
backdrop-filter: blur(20px);
|
||||||
-webkit-backdrop-filter: blur(20px);
|
-webkit-backdrop-filter: blur(20px);
|
||||||
border-bottom: 1px solid rgba(254, 212, 0, 0.1);
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
@@ -132,15 +134,16 @@ const services = [
|
|||||||
|
|
||||||
.logo-banner {
|
.logo-banner {
|
||||||
background: var(--color-white);
|
background: var(--color-white);
|
||||||
|
border: 1px solid var(--color-gray-200);
|
||||||
border-radius: 0 0 12px 12px;
|
border-radius: 0 0 12px 12px;
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo-banner:hover {
|
.logo-banner:hover {
|
||||||
transform: scale(1.02);
|
transform: scale(1.02);
|
||||||
box-shadow: 0 6px 25px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 6px 25px rgba(0, 0, 0, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav.scrolled .logo-banner {
|
.nav.scrolled .logo-banner {
|
||||||
@@ -176,33 +179,39 @@ const services = [
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
color: var(--color-white);
|
color: var(--color-black);
|
||||||
transition: color 0.3s ease;
|
transition: color 0.3s ease;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-link:hover {
|
.nav-link:hover,
|
||||||
color: var(--color-primary);
|
.nav-link.active {
|
||||||
|
color: var(--color-primary-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-cta {
|
.nav-cta {
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
color: var(--color-black) !important;
|
color: var(--color-black) !important;
|
||||||
|
border: 2px solid var(--color-primary);
|
||||||
border-radius: var(--radius-md);
|
border-radius: var(--radius-md);
|
||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
|
padding: 12px 24px;
|
||||||
transition: all 0.3s var(--ease-out-expo);
|
transition: all 0.3s var(--ease-out-expo);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-cta:hover {
|
.nav-cta:hover {
|
||||||
background: var(--color-primary-dark);
|
background: var(--color-primary-dark);
|
||||||
|
border-color: var(--color-primary-dark);
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
box-shadow: 0 8px 30px rgba(254, 212, 0, 0.4);
|
box-shadow: 0 8px 20px rgba(254, 212, 0, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-cta::after { display: none; }
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
DROPDOWN
|
DROPDOWN — LIGHT CARD ON WHITE BG
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.nav-dropdown {
|
.nav-dropdown {
|
||||||
@@ -229,14 +238,14 @@ const services = [
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%) translateY(10px);
|
transform: translateX(-50%) translateY(10px);
|
||||||
min-width: 220px;
|
min-width: 220px;
|
||||||
background: var(--color-dark);
|
background: var(--color-white);
|
||||||
|
border: 1px solid var(--color-gray-200);
|
||||||
border-radius: var(--radius-lg);
|
border-radius: var(--radius-lg);
|
||||||
padding: 12px 0;
|
padding: 12px 0;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
transition: all 0.3s var(--ease-out-expo);
|
transition: all 0.3s var(--ease-out-expo);
|
||||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.1);
|
||||||
border: 1px solid rgba(254, 212, 0, 0.1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-dropdown:hover .nav-dropdown-menu {
|
.nav-dropdown:hover .nav-dropdown-menu {
|
||||||
@@ -251,17 +260,17 @@ const services = [
|
|||||||
font-family: var(--font-display);
|
font-family: var(--font-display);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: rgba(255, 255, 255, 0.8);
|
color: var(--color-gray-700);
|
||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item:hover {
|
.dropdown-item:hover {
|
||||||
background: rgba(254, 212, 0, 0.1);
|
background: var(--color-bg-alt);
|
||||||
color: var(--color-primary);
|
color: var(--color-primary-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
MOBILE TOGGLE
|
MOBILE TOGGLE — DARK lines (since nav is light)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.nav-toggle {
|
.nav-toggle {
|
||||||
@@ -281,7 +290,7 @@ const services = [
|
|||||||
.toggle-line {
|
.toggle-line {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
background: var(--color-white);
|
background: var(--color-black);
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
transition: all 0.3s var(--ease-out-expo);
|
transition: all 0.3s var(--ease-out-expo);
|
||||||
}
|
}
|
||||||
@@ -300,7 +309,7 @@ const services = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
MOBILE OVERLAY
|
MOBILE OVERLAY — LIGHT THEME
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.nav-mobile-overlay {
|
.nav-mobile-overlay {
|
||||||
@@ -309,7 +318,7 @@ const services = [
|
|||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: var(--color-dark);
|
background: var(--color-white);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -337,7 +346,7 @@ const services = [
|
|||||||
font-family: var(--font-display);
|
font-family: var(--font-display);
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: var(--color-white);
|
color: var(--color-black);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
padding: 14px 32px;
|
padding: 14px 32px;
|
||||||
@@ -361,13 +370,14 @@ const services = [
|
|||||||
.nav-mobile-overlay.active .mobile-link:nth-child(6) { transition-delay: 0.35s; }
|
.nav-mobile-overlay.active .mobile-link:nth-child(6) { transition-delay: 0.35s; }
|
||||||
|
|
||||||
.mobile-link:hover {
|
.mobile-link:hover {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary-dark);
|
||||||
transform: translateX(10px);
|
transform: translateX(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mobile-cta {
|
.mobile-cta {
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
color: var(--color-black) !important;
|
color: var(--color-black) !important;
|
||||||
|
border: 2px solid var(--color-primary);
|
||||||
border-radius: var(--radius-lg);
|
border-radius: var(--radius-lg);
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
@@ -393,7 +403,7 @@ const services = [
|
|||||||
font-family: var(--font-display);
|
font-family: var(--font-display);
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: var(--color-white);
|
color: var(--color-black);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -409,7 +419,7 @@ const services = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mobile-dropdown.open .mobile-dropdown-trigger {
|
.mobile-dropdown.open .mobile-dropdown-trigger {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mobile-dropdown.open .mobile-dropdown-trigger svg {
|
.mobile-dropdown.open .mobile-dropdown-trigger svg {
|
||||||
@@ -505,33 +515,18 @@ const services = [
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Mobile dropdown toggle
|
// Mobile dropdown toggle
|
||||||
document.querySelectorAll('.mobile-dropdown-trigger').forEach(trigger => {
|
document.querySelectorAll('.mobile-dropdown-trigger').forEach(btn => {
|
||||||
trigger.addEventListener('click', () => {
|
btn.addEventListener('click', () => {
|
||||||
trigger.parentElement?.classList.toggle('open');
|
btn.parentElement?.classList.toggle('open');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Close mobile menu on link click
|
// Close mobile nav on link click
|
||||||
mobileNav?.querySelectorAll('.mobile-link').forEach(link => {
|
document.querySelectorAll('.nav-mobile-overlay .mobile-link').forEach(link => {
|
||||||
link.addEventListener('click', () => {
|
link.addEventListener('click', () => {
|
||||||
toggle?.classList.remove('active');
|
toggle?.classList.remove('active');
|
||||||
mobileNav?.classList.remove('active');
|
mobileNav?.classList.remove('active');
|
||||||
document.body.style.overflow = '';
|
document.body.style.overflow = '';
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Magnetic effect for nav links
|
|
||||||
document.querySelectorAll('[data-magnetic]').forEach(el => {
|
|
||||||
el.addEventListener('mousemove', (e) => {
|
|
||||||
const rect = el.getBoundingClientRect();
|
|
||||||
const x = e.clientX - rect.left - rect.width / 2;
|
|
||||||
const y = e.clientY - rect.top - rect.height / 2;
|
|
||||||
|
|
||||||
(el as HTMLElement).style.transform = `translate(${x * 0.15}px, ${y * 0.15}px)`;
|
|
||||||
});
|
|
||||||
|
|
||||||
el.addEventListener('mouseleave', () => {
|
|
||||||
(el as HTMLElement).style.transform = 'translate(0, 0)';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
/**
|
/**
|
||||||
* MOREMINIMORE - PAGE HERO COMPONENT
|
* MOREMINIMORE - PAGE HERO COMPONENT (LIGHT THEME)
|
||||||
* Magazine-style hero with overlapping floating card
|
* White bg + dark text + yellow accent line
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -32,16 +32,15 @@ const {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Floating card that overlaps next section (magazine style) -->
|
<!-- Yellow accent line at bottom (no dark wave) -->
|
||||||
<div class="hero-float-card">
|
<div class="hero-accent">
|
||||||
<p>Transform your business with digital solutions</p>
|
<div class="accent-bar"></div>
|
||||||
<a href="/contact" class="btn-float">Get Started →</a>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* ============================================
|
/* ============================================
|
||||||
PAGE HERO BASE
|
PAGE HERO BASE — LIGHT THEME
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.page-hero {
|
.page-hero {
|
||||||
@@ -50,13 +49,13 @@ const {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
background: var(--color-dark);
|
background: var(--color-white);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding-bottom: 80px;
|
padding: 140px 0 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
BACKGROUND
|
BACKGROUND (subtle yellow dots on white)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.hero-bg {
|
.hero-bg {
|
||||||
@@ -68,7 +67,7 @@ const {
|
|||||||
.bg-dots {
|
.bg-dots {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
background-image: radial-gradient(circle at 1px 1px, rgba(254, 212, 0, 0.06) 1px, transparent 0);
|
background-image: radial-gradient(circle at 1px 1px, rgba(254, 212, 0, 0.15) 1px, transparent 0);
|
||||||
background-size: 40px 40px;
|
background-size: 40px 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,21 +79,20 @@ const {
|
|||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 80px var(--gutter) 120px;
|
padding: 40px var(--gutter) 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-badge {
|
.hero-badge {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 8px 20px;
|
padding: 8px 20px;
|
||||||
background: rgba(254, 212, 0, 0.15);
|
background: var(--color-primary);
|
||||||
border: 1px solid rgba(254, 212, 0, 0.3);
|
color: var(--color-black);
|
||||||
border-radius: var(--radius-full);
|
border-radius: var(--radius-full);
|
||||||
font-family: var(--font-display);
|
font-family: var(--font-display);
|
||||||
font-size: 11px;
|
font-size: 12px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 3px;
|
letter-spacing: 3px;
|
||||||
color: var(--color-primary);
|
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,60 +102,42 @@ const {
|
|||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
line-height: 1.1;
|
line-height: 1.1;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: var(--color-white);
|
color: var(--color-black);
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-subtitle {
|
.hero-subtitle {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: rgba(255, 255, 255, 0.7);
|
color: var(--color-gray-600);
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
FLOATING CARD - Magazine Overlap
|
BOTTOM ACCENT LINE
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.hero-float-card {
|
.hero-accent {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: -30px;
|
bottom: 0;
|
||||||
left: 50%;
|
left: 0;
|
||||||
transform: translateX(-50%);
|
right: 0;
|
||||||
width: 90%;
|
height: 6px;
|
||||||
max-width: 700px;
|
background: var(--color-gray-200);
|
||||||
background: var(--color-white);
|
|
||||||
border-radius: 24px;
|
|
||||||
padding: 32px 48px;
|
|
||||||
box-shadow: 0 30px 100px rgba(0,0,0,0.15);
|
|
||||||
z-index: 5;
|
|
||||||
text-align: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-float-card p {
|
.accent-bar {
|
||||||
font-size: 18px;
|
width: 100%;
|
||||||
color: var(--color-gray-600);
|
height: 100%;
|
||||||
margin-bottom: 16px;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-float {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8px;
|
|
||||||
padding: 14px 32px;
|
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
color: var(--color-black);
|
transform-origin: left;
|
||||||
border-radius: 30px;
|
animation: accentDraw 1.2s var(--ease-out-expo) 0.3s forwards;
|
||||||
font-weight: 700;
|
transform: scaleX(0);
|
||||||
font-size: 15px;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-float:hover {
|
@keyframes accentDraw {
|
||||||
transform: translateY(-3px);
|
to { transform: scaleX(1); }
|
||||||
box-shadow: 0 15px 40px rgba(254, 212, 0, 0.35);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
@@ -167,11 +147,11 @@ const {
|
|||||||
@media (max-width: 640px) {
|
@media (max-width: 640px) {
|
||||||
.page-hero {
|
.page-hero {
|
||||||
min-height: 45vh;
|
min-height: 45vh;
|
||||||
padding-bottom: 100px;
|
padding: 120px 0 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-content {
|
.hero-content {
|
||||||
padding: 60px var(--gutter) 100px;
|
padding: 20px var(--gutter) 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-title {
|
.hero-title {
|
||||||
@@ -181,21 +161,5 @@ const {
|
|||||||
.hero-subtitle {
|
.hero-subtitle {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-float-card {
|
|
||||||
width: 92%;
|
|
||||||
padding: 24px 28px;
|
|
||||||
bottom: -25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hero-float-card p {
|
|
||||||
font-size: 15px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-float {
|
|
||||||
padding: 12px 24px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,76 +1,168 @@
|
|||||||
---
|
---
|
||||||
|
/**
|
||||||
|
* MOREMINIMORE - PORTFOLIO CARD COMPONENT (LIGHT THEME)
|
||||||
|
*/
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
name: string;
|
name: string;
|
||||||
url: string;
|
url: string;
|
||||||
category: string;
|
category: string;
|
||||||
category_label: string;
|
category_label: string;
|
||||||
|
industry?: string;
|
||||||
thumbnail: string;
|
thumbnail: string;
|
||||||
description: string;
|
description: string;
|
||||||
|
what_we_did?: string;
|
||||||
|
result?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { name, url, category, category_label, thumbnail, description } = Astro.props;
|
const { name, url, category, category_label, industry, thumbnail, description, what_we_did, result } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<a href={url} target="_blank" rel="noopener" class="portfolio-card" data-category={category}>
|
<a href={url || '#'} target="_blank" rel="noopener noreferrer" class="portfolio-card" data-category={category}>
|
||||||
<div class="portfolio-image">
|
<div class="portfolio-image">
|
||||||
<img src={thumbnail} alt={name} loading="lazy" />
|
<img src={thumbnail} alt={name} loading="lazy" />
|
||||||
|
<div class="portfolio-overlay">
|
||||||
|
<span class="visit-btn">
|
||||||
|
เยี่ยมชมเว็บไซต์
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<path d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"/>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="portfolio-info">
|
<div class="portfolio-info">
|
||||||
|
{industry && <span class="portfolio-industry">{industry}</span>}
|
||||||
<span class="portfolio-category">{category_label}</span>
|
<span class="portfolio-category">{category_label}</span>
|
||||||
<h3 class="portfolio-name">{name}</h3>
|
<h3 class="portfolio-name">{name}</h3>
|
||||||
<p class="portfolio-desc">{description}</p>
|
{what_we_did && <p class="portfolio-did">{what_we_did}</p>}
|
||||||
|
{result && <p class="portfolio-result">→ {result}</p>}
|
||||||
|
{!what_we_did && description && <p class="portfolio-desc">{description}</p>}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
/* ============================================
|
||||||
|
PORTFOLIO CARD (LIGHT THEME)
|
||||||
|
============================================ */
|
||||||
|
|
||||||
.portfolio-card {
|
.portfolio-card {
|
||||||
display: block;
|
display: block;
|
||||||
background: rgba(255,255,255,0.03);
|
background: var(--color-white);
|
||||||
border-radius: 16px;
|
border: 1px solid var(--color-gray-200);
|
||||||
|
border-radius: var(--radius-xl);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1px solid rgba(255,255,255,0.05);
|
transition: all 0.4s var(--ease-out-expo);
|
||||||
transition: all 0.4s ease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.portfolio-card:hover {
|
.portfolio-card:hover {
|
||||||
transform: translateY(-8px);
|
transform: translateY(-8px);
|
||||||
background: rgba(255,255,255,0.08);
|
box-shadow: var(--shadow-md);
|
||||||
border-color: var(--color-primary);
|
border-color: var(--color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.portfolio-image {
|
.portfolio-image {
|
||||||
|
position: relative;
|
||||||
aspect-ratio: 16/10;
|
aspect-ratio: 16/10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background: var(--color-bg-soft);
|
||||||
}
|
}
|
||||||
|
|
||||||
.portfolio-image img {
|
.portfolio-image img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
transition: transform 0.5s ease;
|
transition: transform 0.5s ease;
|
||||||
}
|
}
|
||||||
.portfolio-card:hover .portfolio-image img { transform: scale(1.05); }
|
|
||||||
.portfolio-info { padding: 24px; }
|
.portfolio-card:hover .portfolio-image img {
|
||||||
.portfolio-category {
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Yellow overlay on hover */
|
||||||
|
.portfolio-overlay {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background: rgba(254, 212, 0, 0.95);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-card:hover .portfolio-overlay {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visit-btn {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
background: var(--color-black);
|
||||||
|
color: var(--color-white);
|
||||||
|
padding: 14px 28px;
|
||||||
|
border-radius: var(--radius-full);
|
||||||
|
font-family: var(--font-display);
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 14px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visit-btn svg {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Info section */
|
||||||
|
.portfolio-info {
|
||||||
|
padding: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-industry {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
color: var(--color-black);
|
color: var(--color-black);
|
||||||
padding: 4px 12px;
|
padding: 4px 12px;
|
||||||
border-radius: 12px;
|
border-radius: var(--radius-sm);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 600;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
.portfolio-name {
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
color: var(--color-white);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.portfolio-category {
|
||||||
|
display: inline-block;
|
||||||
|
background: var(--color-bg-soft);
|
||||||
|
color: var(--color-gray-600);
|
||||||
|
padding: 4px 10px;
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-left: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-name {
|
||||||
|
font-family: var(--font-display);
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--color-black);
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-did,
|
||||||
.portfolio-desc {
|
.portfolio-desc {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: rgba(255,255,255,0.6);
|
color: var(--color-gray-600);
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
display: -webkit-box;
|
margin-bottom: 4px;
|
||||||
-webkit-line-clamp: 2;
|
}
|
||||||
-webkit-box-orient: vertical;
|
|
||||||
overflow: hidden;
|
.portfolio-result {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--color-black);
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.5;
|
||||||
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
/**
|
/**
|
||||||
* MOREMINIMORE - SERVICE CARD COMPONENT
|
* MOREMINIMORE - SERVICE CARD COMPONENT (LIGHT THEME)
|
||||||
* Clean cards with images
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -19,7 +18,6 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
<!-- Image -->
|
<!-- Image -->
|
||||||
<div class="card-image">
|
<div class="card-image">
|
||||||
<img src={image || "/images/services/default.jpg"} alt={title} loading="lazy" />
|
<img src={image || "/images/services/default.jpg"} alt={title} loading="lazy" />
|
||||||
<div class="card-overlay"></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
@@ -39,7 +37,7 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* ============================================
|
/* ============================================
|
||||||
SERVICE CARD
|
SERVICE CARD (LIGHT THEME)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.service-card {
|
.service-card {
|
||||||
@@ -53,7 +51,7 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
box-shadow: var(--shadow-sm);
|
box-shadow: var(--shadow-sm);
|
||||||
transition: all 0.4s var(--ease-out-expo);
|
transition: all 0.4s var(--ease-out-expo);
|
||||||
border: 1px solid rgba(0, 0, 0, 0.04);
|
border: 1px solid var(--color-gray-200);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-inner::before {
|
.card-inner::before {
|
||||||
@@ -75,8 +73,9 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.service-card:hover .card-inner {
|
.service-card:hover .card-inner {
|
||||||
box-shadow: var(--shadow-lg);
|
box-shadow: var(--shadow-md);
|
||||||
transform: translateY(-8px);
|
transform: translateY(-8px);
|
||||||
|
border-color: var(--color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-card:hover .card-arrow {
|
.service-card:hover .card-arrow {
|
||||||
@@ -105,18 +104,6 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
transform: scale(1.08);
|
transform: scale(1.08);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-overlay {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
background: linear-gradient(to bottom, transparent 50%, rgba(26, 26, 46, 0.6) 100%);
|
|
||||||
opacity: 0.7;
|
|
||||||
transition: opacity 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-card:hover .card-overlay {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
CONTENT
|
CONTENT
|
||||||
============================================ */
|
============================================ */
|
||||||
@@ -134,10 +121,6 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
transition: color 0.3s ease;
|
transition: color 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-card:hover .card-title {
|
|
||||||
color: var(--color-dark);
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-subtitle {
|
.card-subtitle {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
@@ -145,7 +128,7 @@ const { title, subtitle, image, link } = Astro.props;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
ARROW
|
ARROW (yellow, visible on hover)
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
.card-arrow {
|
.card-arrow {
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ const {
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="description" content={description} />
|
<meta name="description" content={description} />
|
||||||
<meta name="theme-color" content="#1a1a2e" />
|
<meta name="theme-color" content="#fed400" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
<title>{title}</title>
|
<title>{title}</title>
|
||||||
</head>
|
</head>
|
||||||
<body style="margin: 0; background: #ffffff;">
|
<body>
|
||||||
<slot />
|
<slot />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user