01

WE DON'T BUILD WEBSITES.

Создаем мощные и продающие сайты для бизнеса, который хочет доминировать в своей нише.

02
НЕ ПРОСТО САЙТЫ

ЦИФРОВЫЕ РЕШЕНИЯ КОТОРЫЕ ПРИНОСЯТ РЕЗУЛЬТАТ.

Мы сочетаем стратегию, дизайн и технологии, чтобы создавать сайты, которые не просто выглядят сильно, а реально работают на ваш бизнес.

01

СТРАТЕГИЯ

Анализируем нишу, конкурентов и аудиторию. Формируем сильную концепцию и структуру.

02

ДИЗАЙН

Создаем уникальный дизайн, который выделяет вас и усиливает доверие.

03

РАЗРАБОТКА

Пишем чистый код, делаем быструю, надежную и гибкую верстку на передовых технологиях.

04

SEO & АНАЛИТИКА

Настраиваем SEO, собираем аналитику и следим за результатами, чтобы сайт приносил клиентов.

05

ПОДДЕРЖКА

Не бросаем после запуска. Помогаем развивать и масштабировать ваш цифровой продукт.

03
НАШ ПОДХОД

МЫ ПОГРУЖАЕМСЯ
В ВАШ БИЗНЕС.

=========================================
1. index.html
=========================================
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CASTLEWEB — Digital Architecture & Premium Engineering</title>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;600&family=Montserrat:wght@200;300;400;600&family=Oswald:wght@300;400;700&display=swap" rel="stylesheet">
<!-- CSS -->
<link rel="stylesheet" href="style.css">
</head>
<body>

<!-- Custom Cursor -->
<div class="custom-cursor">
<div class="cursor-dot"></div>
<div class="cursor-glow"></div>
</div>

<!-- Noise Overlay -->
<div class="noise-overlay"></div>

<!-- Red Laser Line (Ambient Background Grid) -->
<div class="laser-grid">
<div class="laser-line-v"></div>
<div class="laser-line-v"></div>
<div class="laser-line-h"></div>
</div>

<!-- Header / Navigation -->
<header class="header">
<a href="#" class="logo">
<svg class="logo-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2L2 22H22L12 2Z" stroke="#ff1a1a" stroke-width="1.5" stroke-linejoin="round"/>
<path d="M12 6L5 20H19L12 6Z" fill="#ff1a1a" fill-opacity="0.1" stroke="#ff1a1a" stroke-width="1"/>
</svg>
<span class="logo-text">CASTLEWEB</span>
</a>
<nav class="nav">
<a href="#about" class="nav-link">О СТУДИИ</a>
<a href="#services" class="nav-link">УСЛУГИ</a>
<a href="#projects" class="nav-link">ПРОЕКТЫ</a>
<a href="#approach" class="nav-link">ПОДХОД</a>
<a href="#contacts" class="nav-link">КОНТАКТЫ</a>
</nav>
<button class="btn-discuss magnetic" data-strength="20">
<span>ОБСУДИТЬ ПРОЕКТ</span>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 4V20M4 12H20" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
</button>
</header>

<!-- Page Scroll Progress -->
<div class="scroll-progress-bar"></div>

<!-- Main Container for Smooth Scroll -->
<main id="smooth-wrapper">
<div id="smooth-content">

<!-- SECTION 01: HERO -->
<section class="section hero-section" id="hero">
<div class="grid-layer">
<div class="col-line"></div>
<div class="col-line"></div>
</div>

<div class="hero-content">
<div class="section-badge-wrapper">
<span class="section-num">01</span>
<span class="section-divider"></span>
</div>

<div class="hero-title-area">
<h1 class="hero-title">
<span class="word-reveal">WE DON'T</span>
<span class="word-reveal">BUILD</span>
<span class="word-reveal text-highlight">WEBSITES.</span>
</h1>
<p class="hero-subtitle">
Создаем мощные и продающие сайты для бизнеса, который хочет доминировать в своей нише.
</p>

<div class="hero-cta">
<a href="#projects" class="btn-explore magnetic" data-strength="15">
<span class="btn-explore-text">СМОТРЕТЬ ПРОЕКТЫ</span>
<span class="btn-explore-arrow">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 18L18 6M18 6H10M18 6V14" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</span>
</a>
</div>
</div>

<div class="hero-media-area">
<div class="car-light-glow"></div>
<div class="hero-image-mask">
<div class="hero-fallback-bg">
<div class="architectural-shadow"></div>
<div class="car-silhouette">
<div class="car-taillight"></div>
</div>
</div>
</div>
</div>

<div class="hero-meta-footer">
<div class="meta-item">
<span class="meta-label">DIGITAL STUDIO</span>
<span class="meta-val">MOSCOW, RUSSIA</span>
</div>
<div class="meta-item-divider"></div>
<div class="meta-item">
<span class="meta-label">ESTD</span>
<span class="meta-val">2023</span>
</div>
</div>
</div>
<div class="diagonal-accent-laser"></div>
</section>


<!-- SECTION 02: PHILOSOPHY & CAPABILITIES -->
<section class="section philosophy-section" id="services">
<div class="grid-layer">
<div class="col-line"></div>
</div>

<div class="philosophy-container">
<div class="section-badge-wrapper">
<span class="section-num">02</span>
<span class="section-divider"></span>
</div>

<div class="philosophy-grid">
<div class="philosophy-left">
<div class="sticky-image-block">
<div class="ph-image-mask">
<div class="architectural-monolith">
<div class="human-silhouette"></div>
<div class="overhead-cinematic-beam"></div>
</div>
</div>
</div>
</div>

<div class="philosophy-right">
<div class="ph-text-header">
<span class="micro-accent">НЕ ПРОСТО САЙТЫ</span>
<h2 class="ph-title split-text">
ЦИФРОВЫЕ РЕШЕНИЯ КОТОРЫЕ ПРИНОСЯТ <span class="text-highlight">РЕЗУЛЬТАТ.</span>
</h2>
<p class="ph-descr">
Мы сочетаем стратегию, дизайн и технологии, чтобы создавать сайты, которые не просто выглядят сильно, а реально работают на ваш бизнес.
</p>
</div>

<div class="capabilities-list">
<div class="cap-item">
<span class="cap-num">01</span>
<div class="cap-content">
<h3 class="cap-title">СТРАТЕГИЯ</h3>
<p class="cap-text">Анализируем нишу, конкурентов и аудиторию. Формируем сильную концепцию и структуру.</p>
</div>
</div>
<div class="cap-item">
<span class="cap-num">02</span>
<div class="cap-content">
<h3 class="cap-title">ДИЗАЙН</h3>
<p class="cap-text">Создаем уникальный дизайн, который выделяет вас и усиливает доверие.</p>
</div>
</div>
<div class="cap-item">
<span class="cap-num">03</span>
<div class="cap-content">
<h3 class="cap-title">РАЗРАБОТКА</h3>
<p class="cap-text">Пишем чистый код, делаем быструю, надежную и гибкую верстку на передовых технологиях.</p>
</div>
</div>
<div class="cap-item">
<span class="cap-num">04</span>
<div class="cap-content">
<h3 class="cap-title">SEO & АНАЛИТИКА</h3>
<p class="cap-text">Настраиваем SEO, собираем аналитику и следим за результатами, чтобы сайт приносил клиентов.</p>
</div>
</div>
<div class="cap-item">
<span class="cap-num">05</span>
<div class="cap-content">
<h3 class="cap-title">ПОДДЕРЖКА</h3>
<p class="cap-text">Не бросаем после запуска. Помогаем развивать и масштабировать ваш цифровой продукт.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>


<!-- SECTION 03: THE APPROACH -->
<section class="section approach-section" id="approach">
<div class="approach-container">
<div class="section-badge-wrapper">
<span class="section-num">03</span>
<span class="section-divider"></span>
</div>

<div class="approach-header">
<span class="micro-accent">НАШ ПОДХОД</span>
<h2 class="approach-title">МЫ ПОГРУЖАЕМСЯ <br><span class="text-highlight">В ВАШ БИЗНЕС.</span></h2>
</div>

<div class="immersive-banner">
<div class="banner-overlay"></div>
<div class="banner-bg">
<div class="fabric-waves"></div>
</div>
<div class="banner-content">
<div class="metric-circle">
<svg class="circle-svg" viewBox="0 0 100 100">
<circle class="circle-bg" cx="50" cy="50" r="45"></circle>
<circle class="circle-progress" cx="50" cy="50" r="45"></circle>
</svg>
<span class="metric-val">100%</span>
</div>
<h3 class="banner-subtitle">Каждый миллиметр кода оптимизирован под идеальный UX.</h3>
</div>
</div>
</div>
</section>


<!-- FOOTER / CONTACTS -->
<footer class="section footer-section" id="contacts">
<div class="footer-container">
<div class="footer-top">
<div class="footer-cta-column">
<span class="micro-accent">ДАВАЙТЕ НАЧНЕМ</span>
<h2 class="footer-huge-title">ОБСУДИТЬ <br><span class="text-highlight">ПРОЕКТ?</span></h2>
<p class="footer-desc">Сделайте первый шаг к созданию цифрового шедевра, превосходящего конкурентов.</p>
</div>

<div class="footer-form-column">
<form class="contact-form" onsubmit="event.preventDefault();">
<div class="form-group">
<input type="text" id="name" required placeholder=" ">
<label for="name">ВАШЕ ИМЯ</label>
<span class="bar"></span>
</div>
<div class="form-group">
<input type="email" id="email" required placeholder=" ">
<label for="email">E-MAIL / TELEGRAM</label>
<span class="bar"></span>
</div>
<div class="form-group">
<textarea id="message" required placeholder=" " rows="3"></textarea>
<label for="message">РАССКАЖИТЕ О ПРОЕКТЕ</label>
<span class="bar"></span>
</div>
<button type="submit" class="btn-submit magnetic" data-strength="30">
<span>ОТПРАВИТЬ ЗАПРОС</span>
</button>
</form>
</div>
</div>

<div class="footer-bottom">
<div class="footer-credits">
<p>© 2026 CASTLEWEB. Все права защищены.</p>
<p>Premium Digital Engineering & Art Direction.</p>
</div>
<div class="footer-links">
<a href="#" class="f-link">AWARDS</a>
<a href="#" class="f-link">BEHANCE</a>
<a href="#" class="f-link">DRIBBBLE</a>
<a href="#" class="f-link">INSTAGRAM</a>
</div>
</div>
</div>
</footer>

</div>
</main>

<!-- GSAP & Plugins from CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/studio-freight/lenis@1.0.27/bundled/lenis.min.js"></script>
<!-- Script -->
<script src="script.js"></script>
</body>
</html>

=========================================
2. style.css
=========================================
/* -------------------------------------------------------------
CASTLEWEB — AWWWARDS LEVEL STYLESHEET
------------------------------------------------------------- */

:root {
--bg-color: #060606;
--bg-darker: #020202;
--text-color: #ffffff;
--text-muted: #8e8e93;
--accent-red: #ff1a1a;
--accent-red-glow: rgba(255, 26, 26, 0.45);
--grid-color: rgba(255, 255, 255, 0.03);
--font-heading: 'Oswald', sans-serif;
--font-body: 'Montserrat', sans-serif;
--font-cinzel: 'Cinzel', serif;
}

/* Reset & Base */
*, *::before, *::after {
box-sizing: border-box;
}

html, body {
margin: 0;
padding: 0;
width: 100%;
background-color: var(--bg-color);
color: var(--text-color);
font-family: var(--font-body);
font-size: 16px;
line-height: 1.6;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}

/* Custom Scrollbar */
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: var(--bg-darker);
}
::-webkit-scrollbar-thumb {
background: var(--accent-red);
border-radius: 3px;
}

/* Noise overlay for cinematic texture */
.noise-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.035'/%3E%3C/svg%3E");
pointer-events: none;
z-index: 9999;
}

/* Custom Interactive Cursor */
.custom-cursor {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 10000;
}
.cursor-dot {
position: absolute;
width: 6px;
height: 6px;
background-color: var(--accent-red);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.2s, height 0.2s;
}
.cursor-glow {
position: absolute;
width: 40px;
height: 40px;
border: 1px solid var(--accent-red);
border-radius: 50%;
transform: translate(-50%, -50%);
opacity: 0.3;
pointer-events: none;
transition: transform 0.1s ease-out, width 0.3s, height 0.3s, opacity 0.3s;
}

/* Ambient Laser Grid Background */
.laser-grid {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
overflow: hidden;
}
.laser-line-v {
position: absolute;
top: 0;
width: 1px;
height: 100%;
background: linear-gradient(180deg, transparent, rgba(255,26,26,0.1) 50%, transparent);
}
.laser-line-v:nth-child(1) { left: 25%; }
.laser-line-v:nth-child(2) { left: 75%; }

.laser-line-h {
position: absolute;
left: 0;
width: 100%;
height: 1px;
top: 40%;
background: linear-gradient(90deg, transparent, rgba(255,26,26,0.15) 50%, transparent);
}

/* Diagonal Laser Accent on Hero */
.diagonal-accent-laser {
position: absolute;
top: 0;
right: 15%;
width: 1px;
height: 150%;
background: linear-gradient(180deg, var(--accent-red) 0%, transparent 70%);
transform: rotate(25deg);
transform-origin: top;
opacity: 0.75;
z-index: 2;
}

/* Header styling */
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
padding: 30px 5%;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 100;
mix-blend-mode: difference;
}
.logo {
display: flex;
align-items: center;
gap: 10px;
text-decoration: none;
color: var(--text-color);
}
.logo-icon {
width: 28px;
height: 28px;
}
.logo-text {
font-family: var(--font-heading);
font-weight: 700;
letter-spacing: 3px;
font-size: 1.2rem;
}
.nav {
display: flex;
gap: 40px;
}
.nav-link {
text-decoration: none;
color: var(--text-muted);
font-size: 0.8rem;
font-weight: 400;
letter-spacing: 2px;
transition: color 0.3s;
position: relative;
}
.nav-link::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 0;
height: 1px;
background-color: var(--accent-red);
transition: width 0.3s;
}
.nav-link:hover {
color: var(--text-color);
}
.nav-link:hover::after {
width: 100%;
}

.btn-discuss {
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.15);
color: var(--text-color);
padding: 12px 24px;
font-family: var(--font-body);
font-size: 0.75rem;
letter-spacing: 2px;
cursor: pointer;
display: flex;
align-items: center;
gap: 10px;
transition: background-color 0.3s, border-color 0.3s;
}
.btn-discuss svg {
width: 12px;
height: 12px;
transition: transform 0.3s;
}
.btn-discuss:hover {
border-color: var(--accent-red);
background-color: rgba(255, 26, 26, 0.05);
}
.btn-discuss:hover svg {
transform: rotate(90deg);
}

/* Progress bar */
.scroll-progress-bar {
position: fixed;
top: 0;
left: 0;
height: 2px;
background-color: var(--accent-red);
width: 0;
z-index: 101;
}

/* Layout Grid Overlay for Architecture Look */
.grid-layer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
display: flex;
justify-content: space-between;
padding: 0 10%;
z-index: 1;
}
.col-line {
width: 1px;
height: 100%;
background-color: var(--grid-color);
}

/* Micro-Typography & Badges */
.section-badge-wrapper {
position: absolute;
top: 10%;
left: 5%;
display: flex;
align-items: center;
gap: 15px;
z-index: 5;
}
.section-num {
font-family: var(--font-heading);
color: var(--accent-red);
font-size: 1.2rem;
font-weight: 700;
}
.section-divider {
width: 50px;
height: 1px;
background-color: rgba(255, 255, 255, 0.2);
}

/* --- SECTION 01: HERO --- */
.hero-section {
position: relative;
width: 100%;
height: 100vh;
min-height: 800px;
display: flex;
align-items: center;
overflow: hidden;
background: radial-gradient(circle at 75% 40%, rgba(255, 26, 26, 0.05) 0%, transparent 60%);
}
.hero-content {
width: 100%;
padding: 0 5%;
display: grid;
grid-template-columns: 1.2fr 1fr;
align-items: center;
z-index: 3;
position: relative;
}
.hero-title-area {
padding-top: 100px;
}
.hero-title {
font-family: var(--font-heading);
font-size: clamp(3rem, 7.5vw, 8.5rem);
line-height: 0.9;
font-weight: 700;
text-transform: uppercase;
margin: 0 0 40px 0;
display: flex;
flex-direction: column;
}
.word-reveal {
overflow: hidden;
display: block;
}
.text-highlight {
color: transparent;
-webkit-text-stroke: 1px rgba(255,255,255,0.9);
}
.hero-subtitle {
font-family: var(--font-body);
font-weight: 300;
font-size: 1.1rem;
line-height: 1.7;
color: var(--text-muted);
max-width: 420px;
margin-bottom: 50px;
}
.btn-explore {
display: inline-flex;
align-items: center;
gap: 15px;
text-decoration: none;
color: var(--text-color);
font-family: var(--font-body);
font-size: 0.85rem;
letter-spacing: 2px;
border-bottom: 1px solid var(--text-color);
padding-bottom: 8px;
transition: color 0.3s, border-color 0.3s;
}
.btn-explore-arrow svg {
width: 14px;
height: 14px;
transition: transform 0.3s ease;
}
.btn-explore:hover {
color: var(--accent-red);
border-color: var(--accent-red);
}
.btn-explore:hover .btn-explore-arrow svg {
transform: translate(3px, -3px);
}

/* Immersive Car Render Fallback */
.hero-media-area {
position: relative;
width: 100%;
height: 100%;
min-height: 450px;
display: flex;
justify-content: center;
align-items: center;
}
.hero-image-mask {
width: 100%;
height: 550px;
position: relative;
border-left: 1px solid rgba(255,255,255,0.05);
overflow: hidden;
}
.hero-fallback-bg {
width: 100%;
height: 100%;
background: #0d0d0d;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
/* Structural Architecture shadows */
.architectural-shadow {
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, rgba(0,0,0,0.95) 0%, rgba(10,10,10,0.4) 60%, rgba(0,0,0,0.95) 100%);
z-index: 2;
}
/* Abstract high-end sports car shape */
.car-silhouette {
position: absolute;
bottom: 20%;
width: 85%;
height: 50%;
background: radial-gradient(ellipse at center, #1a1a1a 0%, #050505 80%);
border-radius: 150px 150px 30px 30px;
box-shadow: 0 15px 50px rgba(0,0,0,0.9);
z-index: 3;
overflow: hidden;
transform: rotate(-3deg);
}
/* Bright thin red light line across back of the car (Taillight) */
.car-taillight {
position: absolute;
bottom: 30%;
left: 10%;
width: 80%;
height: 4px;
background-color: var(--accent-red);
box-shadow: 0 0 25px 4px var(--accent-red);
border-radius: 2px;
}
.car-light-glow {
position: absolute;
top: 50%;
left: 50%;
width: 180px;
height: 180px;
background-color: var(--accent-red);
filter: blur(100px);
opacity: 0.18;
z-index: 1;
transform: translate(-50%, -50%);
}

.hero-meta-footer {
position: absolute;
bottom: 40px;
left: 5%;
display: flex;
align-items: center;
gap: 30px;
z-index: 5;
}
.meta-item {
display: flex;
flex-direction: column;
}
.meta-label {
font-size: 0.65rem;
letter-spacing: 2px;
color: var(--text-muted);
}
.meta-val {
font-size: 0.8rem;
font-weight: 600;
letter-spacing: 1px;
}
.meta-item-divider {
width: 1px;
height: 25px;
background-color: rgba(255,255,255,0.1);
}


/* --- SECTION 02: PHILOSOPHY & CAPABILITIES --- */
.philosophy-section {
position: relative;
width: 100%;
padding: 150px 0;
background-color: var(--bg-darker);
border-top: 1px solid rgba(255,255,255,0.02);
}
.philosophy-container {
width: 100%;
padding: 0 5%;
}
.philosophy-grid {
display: grid;
grid-template-columns: 0.9fr 1.1fr;
gap: 80px;
}
.sticky-image-block {
position: sticky;
top: 150px;
}
.ph-image-mask {
width: 100%;
height: 600px;
overflow: hidden;
position: relative;
}
.architectural-monolith {
width: 100%;
height: 100%;
background: linear-gradient(180deg, #121212 0%, #050505 100%);
position: relative;
display: flex;
justify-content: center;
align-items: flex-end;
}
/* Conceptual human silhouette and cinematic beam */
.human-silhouette {
width: 24px;
height: 90px;
background-color: #000;
border-radius: 12px 12px 0 0;
position: absolute;
bottom: 10%;
left: 50%;
transform: translateX(-50%);
z-index: 3;
box-shadow: 0 -10px 20px rgba(0,0,0,0.8);
}
.human-silhouette::after {
content: '';
position: absolute;
top: -22px;
left: 50%;
transform: translateX(-50%);
width: 18px;
height: 18px;
background-color: #000;
border-radius: 50%;
}
.overhead-cinematic-beam {
position: absolute;
top: 0;
left: 50%;
width: 100px;
height: 100%;
background: linear-gradient(180deg, rgba(255,255,255,0.08) 0%, transparent 80%);
transform: translateX(-50%);
clip-path: polygon(40% 0, 60% 0, 100% 100%, 0% 100%);
z-index: 2;
}

.micro-accent {
font-size: 0.7rem;
font-weight: 600;
letter-spacing: 4px;
color: var(--accent-red);
display: block;
margin-bottom: 15px;
}
.ph-title {
font-family: var(--font-heading);
font-size: clamp(2rem, 4vw, 4rem);
line-height: 1.1;
font-weight: 700;
margin: 0 0 30px 0;
}
.ph-descr {
font-size: 1rem;
line-height: 1.8;
color: var(--text-muted);
max-width: 500px;
margin-bottom: 60px;
}

/* Interactive Modern List of Capabilities */
.capabilities-list {
display: flex;
flex-direction: column;
}
.cap-item {
display: flex;
gap: 30px;
padding: 35px 0;
border-top: 1px solid rgba(255,255,255,0.05);
transition: border-color 0.4s;
}
.cap-item:last-child {
border-bottom: 1px solid rgba(255,255,255,0.05);
}
.cap-num {
font-family: var(--font-heading);
font-size: 1.2rem;
font-weight: 700;
color: rgba(255,255,255,0.2);
transition: color 0.4s;
}
.cap-title {
font-family: var(--font-heading);
font-size: 1.5rem;
font-weight: 400;
margin: 0 0 10px 0;
letter-spacing: 1px;
transition: color 0.4s, transform 0.4s;
}
.cap-text {
font-size: 0.9rem;
color: var(--text-muted);
margin: 0;
max-width: 480px;
line-height: 1.6;
}
.cap-item:hover {
border-color: var(--accent-red);
}
.cap-item:hover .cap-num {
color: var(--accent-red);
}
.cap-item:hover .cap-title {
color: var(--accent-red);
transform: translateX(10px);
}


/* --- SECTION 03: THE APPROACH --- */
.approach-section {
position: relative;
width: 100%;
padding: 150px 0;
}
.approach-container {
width: 100%;
padding: 0 5%;
}
.approach-header {
margin-bottom: 80px;
}
.approach-title {
font-family: var(--font-heading);
font-size: clamp(2rem, 5vw, 4.5rem);
line-height: 1.1;
font-weight: 700;
margin: 0;
}

/* Immersive Interactive Banner */
.immersive-banner {
position: relative;
width: 100%;
height: 480px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.banner-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(180deg, rgba(6,6,6,0.8) 0%, rgba(6,6,6,0.3) 50%, rgba(6,6,6,0.9) 100%);
z-index: 2;
}
.banner-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #111;
z-index: 1;
}
/* Abstract geometric luxury waves using multiple layers */
.fabric-waves {
width: 100%;
height: 100%;
background: radial-gradient(ellipse at 80% 20%, #222 0%, #050505 80%);
position: relative;
}
.fabric-waves::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: repeating-linear-gradient(45deg, rgba(255, 26, 26, 0.015) 0px, rgba(255, 26, 26, 0.015) 2px, transparent 2px, transparent 10px);
}

.banner-content {
position: relative;
z-index: 3;
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
gap: 30px;
}
.metric-circle {
position: relative;
width: 120px;
height: 120px;
display: flex;
justify-content: center;
align-items: center;
}
.circle-svg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform: rotate(-90deg);
}
.circle-bg {
fill: none;
stroke: rgba(255,255,255,0.05);
stroke-width: 3;
}
.circle-progress {
fill: none;
stroke: var(--accent-red);
stroke-width: 3;
stroke-dasharray: 283;
stroke-dashoffset: 283;
transition: stroke-dashoffset 2s cubic-bezier(0.1, 0.8, 0.2, 1);
}
.metric-val {
font-family: var(--font-heading);
font-size: 1.8rem;
font-weight: 700;
}
.banner-subtitle {
font-family: var(--font-body);
font-weight: 200;
font-size: 1.3rem;
letter-spacing: 1px;
color: #fff;
max-width: 550px;
}


/* --- FOOTER / CONTACTS --- */
.footer-section {
position: relative;
width: 100%;
padding: 150px 0 50px 0;
background-color: var(--bg-darker);
border-top: 1px solid rgba(255,255,255,0.02);
}
.footer-container {
width: 100%;
padding: 0 5%;
}
.footer-top {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 100px;
margin-bottom: 120px;
}
.footer-huge-title {
font-family: var(--font-heading);
font-size: clamp(2.5rem, 6vw, 6rem);
line-height: 1.0;
font-weight: 700;
margin: 0 0 30px 0;
}
.footer-desc {
font-size: 1rem;
color: var(--text-muted);
max-width: 400px;
line-height: 1.8;
}

/* Premium interactive form inputs */
.footer-form-column {
display: flex;
flex-direction: column;
}
.contact-form {
display: flex;
flex-direction: column;
gap: 45px;
}
.form-group {
position: relative;
width: 100%;
}
.form-group input, .form-group textarea {
width: 100%;
background: transparent;
border: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
color: var(--text-color);
font-family: var(--font-body);
font-size: 0.95rem;
padding: 15px 0;
outline: none;
transition: border-color 0.4s;
}
.form-group label {
position: absolute;
top: 15px;
left: 0;
font-size: 0.75rem;
letter-spacing: 2px;
color: var(--text-muted);
pointer-events: none;
transition: all 0.3s ease;
}
.form-group input:focus ~ label,
.form-group input:not(:placeholder-shown) ~ label,
.form-group textarea:focus ~ label,
.form-group textarea:not(:placeholder-shown) ~ label {
top: -15px;
font-size: 0.65rem;
color: var(--accent-red);
}
.form-group .bar {
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 1px;
background-color: var(--accent-red);
transition: width 0.4s ease;
}
.form-group input:focus ~ .bar, .form-group textarea:focus ~ .bar {
width: 100%;
}

.btn-submit {
align-self: flex-start;
background: var(--text-color);
border: none;
color: var(--bg-color);
padding: 18px 40px;
font-family: var(--font-body);
font-weight: 600;
font-size: 0.8rem;
letter-spacing: 2px;
cursor: pointer;
transition: background-color 0.3s, color 0.3s, transform 0.1s;
}
.btn-submit:hover {
background-color: var(--accent-red);
color: var(--text-color);
}

.footer-bottom {
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid rgba(255,255,255,0.05);
padding-top: 40px;
}
.footer-credits p {
margin: 0 0 5px 0;
font-size: 0.75rem;
color: var(--text-muted);
}
.footer-links {
display: flex;
gap: 30px;
}
.f-link {
text-decoration: none;
color: var(--text-muted);
font-size: 0.75rem;
letter-spacing: 2px;
transition: color 0.3s;
}
.f-link:hover {
color: var(--accent-red);
}


/* --- RESPONSIVE ADAPTABILITY --- */
@media (max-width: 1024px) {
.header {
padding: 20px 5%;
}
.nav {
display: none; /* Mobile menu collapsed for clean art aesthetic */
}
.hero-content {
grid-template-columns: 1fr;
gap: 50px;
}
.hero-title-area {
padding-top: 120px;
}
.hero-media-area {
min-height: 350px;
}
.philosophy-grid {
grid-template-columns: 1fr;
gap: 60px;
}
.sticky-image-block {
position: relative;
top: 0;
}
.footer-top {
grid-template-columns: 1fr;
gap: 60px;
}
}

=========================================
3. script.js
=========================================
/* -------------------------------------------------------------
CASTLEWEB — PREMIUM INTERACTIVE ENGINE (GSAP + LENIS)
------------------------------------------------------------- */

document.addEventListener('DOMContentLoaded', () => {

// 1. LENIS SMOOTH SCROLLING
const lenis = new Lenis({
duration: 1.4,
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
orientation: 'vertical',
gestureOrientation: 'vertical',
smoothWheel: true,
wheelMultiplier: 1.1,
touchMultiplier: 2,
infinite: false,
});

function raf(time) {
lenis.raf(time);
requestAnimationFrame(raf);
}
requestAnimationFrame(raf);

// Update ScrollTrigger on Lenis Scroll
lenis.on('scroll', ScrollTrigger.update);

// Integrate GSAP with Lenis Scroll
gsap.registerPlugin(ScrollTrigger);

gsap.ticker.add((time) => {
lenis.raf(time * 1000);
});
gsap.ticker.lagSmoothing(0);


// 2. CUSTOM DECORATIVE INTERACTIVE CURSOR
const cursorDot = document.querySelector('.cursor-dot');
const cursorGlow = document.querySelector('.cursor-glow');

let mouseX = 0;
let mouseY = 0;
let currentDotX = 0;
let currentDotY = 0;
let currentGlowX = 0;
let currentGlowY = 0;

window.addEventListener('mousemove', (e) => {
mouseX = e.clientX;
mouseY = e.clientY;
});

// Custom animation ticker for perfectly smooth high-end cursor lag
function tickCursor() {
// Smooth interpolation
currentDotX += (mouseX - currentDotX) * 0.25;
currentDotY += (mouseY - currentDotY) * 0.25;

currentGlowX += (mouseX - currentGlowX) * 0.08;
currentGlowY += (mouseY - currentGlowY) * 0.08;

if (cursorDot) {
cursorDot.style.left = `${currentDotX}px`;
cursorDot.style.top = `${currentDotY}px`;
}
if (cursorGlow) {
cursorGlow.style.left = `${currentGlowX}px`;
cursorGlow.style.top = `${currentGlowY}px`;
}

requestAnimationFrame(tickCursor);
}
tickCursor();

// Hover elements interactions
const interactiveElements = document.querySelectorAll('a, button, .cap-item, .form-group input, .form-group textarea');
interactiveElements.forEach(elem => {
elem.addEventListener('mouseenter', () => {
if (cursorGlow) {
cursorGlow.style.width = '65px';
cursorGlow.style.height = '65px';
cursorGlow.style.borderColor = 'var(--accent-red)';
cursorGlow.style.opacity = '0.85';
}
});
elem.addEventListener('mouseleave', () => {
if (cursorGlow) {
cursorGlow.style.width = '40px';
cursorGlow.style.height = '40px';
cursorGlow.style.borderColor = 'var(--accent-red)';
cursorGlow.style.opacity = '0.3';
}
});
});


// 3. MAGNETIC BUTTONS (Awwwards staple feature)
const magneticBtns = document.querySelectorAll('.magnetic');
magneticBtns.forEach((btn) => {
btn.addEventListener('mousemove', function(e) {
const strength = parseFloat(this.getAttribute('data-strength')) || 20;
const bounding = this.getBoundingClientRect();
const x = e.clientX - bounding.left - (bounding.width / 2);
const y = e.clientY - bounding.top - (bounding.height / 2);

gsap.to(this, {
x: (x / (bounding.width / 2)) * strength,
y: (y / (bounding.height / 2)) * strength,
duration: 0.3,
ease: 'power2.out'
});
});

btn.addEventListener('mouseleave', function() {
gsap.to(this, {
x: 0,
y: 0,
duration: 0.5,
ease: 'elastic.out(1, 0.3)'
});
});
});


// 4. CHRONO PROGRESS BAR (SCROLL)
gsap.to('.scroll-progress-bar', {
width: '100%',
ease: 'none',
scrollTrigger: {
trigger: 'body',
start: 'top top',
end: 'bottom bottom',
scrub: true
}
});


// 5. ENTRANCE REVEAL ANIMATIONS
// Hero Title Reveal
const heroWords = document.querySelectorAll('.hero-title .word-reveal');
gsap.from(heroWords, {
y: '100%',
duration: 1.6,
stagger: 0.15,
ease: 'power4.out',
delay: 0.3
});

// Hero Subtitle and CTA Fade in
gsap.from('.hero-subtitle, .hero-cta, .hero-meta-footer', {
opacity: 0,
y: 30,
duration: 1.2,
stagger: 0.1,
ease: 'power3.out',
delay: 0.9
});

// Hero Image Scale & Fade Reveal
gsap.from('.hero-fallback-bg', {
scale: 1.15,
opacity: 0,
duration: 2.2,
ease: 'power3.out',
delay: 0.5
});


// 6. SCROLL TRIGGER ANIMATIONS (PREMIUM REVEALS)
// Section 02 Split Text effect on Philosophy Title
gsap.from('.ph-title', {
opacity: 0,
y: 50,
duration: 1.2,
ease: 'power3.out',
scrollTrigger: {
trigger: '.philosophy-section',
start: 'top 75%',
}
});

// Monolith Image Scroll Parallax Effect
gsap.to('.architectural-monolith', {
yPercent: 12,
ease: 'none',
scrollTrigger: {
trigger: '.philosophy-section',
start: 'top bottom',
end: 'bottom top',
scrub: true
}
});

// Capabilities list items stagger reveal
gsap.from('.cap-item', {
opacity: 0,
y: 40,
duration: 1,
stagger: 0.15,
ease: 'power3.out',
scrollTrigger: {
trigger: '.capabilities-list',
start: 'top 80%',
}
});


// Section 03 - Immersive banner progress indicator trigger
const circleProgress = document.querySelector('.circle-progress');
if (circleProgress) {
ScrollTrigger.create({
trigger: '.immersive-banner',
start: 'top 75%',
onEnter: () => {
circleProgress.style.strokeDashoffset = '0';
}
});
}

// Parallax effect for the immersive banner fabric waves
gsap.to('.fabric-waves', {
yPercent: -15,
ease: 'none',
scrollTrigger: {
trigger: '.immersive-banner',
start: 'top bottom',
end: 'bottom top',
scrub: true
}
});
});