/*
Theme Name: Karunia Land
Theme URI: https://karunialand.com
Author: PT. Karunia Land
Description: Tema FSE (block theme) editorial-mewah untuk PT. Karunia Land — pengembang perumahan Sidoarjo bergaya Eropa Modern. Tipografi geometris (URW Gothic) berpadu serif, palet hangat, ringan & sepenuhnya dapat diedit lewat Site Editor.
Version: 1.18.0
Requires at least: 6.6
Tested up to: 7.0
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: karunia-land
Tags: full-site-editing, block-patterns, custom-colors, real-estate, editor-style
*/

/* =========================================================================
   Fonts. The reference (Easto) uses URW Gothic L — a geometric sans. It's a
   GPL font (URW Base 35); drop urw-gothic.woff2 into assets/fonts/ to self-host.
   Otherwise the stack falls back to Century Gothic (Win/macOS) → Questrial →
   system. Serif body falls back to Georgia everywhere. No Google Fonts request.
   ========================================================================= */
@font-face { font-family:'URW Gothic L'; font-style:normal; font-weight:400 700; font-display:swap; src:url('assets/fonts/urw-gothic.woff2') format('woff2'); }
@font-face { font-family:'Newsreader'; font-style:normal; font-weight:400 600; font-display:swap; src:url('assets/fonts/newsreader.woff2') format('woff2'); }
@font-face { font-family:'Newsreader'; font-style:italic; font-weight:400 500; font-display:swap; src:url('assets/fonts/newsreader-italic.woff2') format('woff2'); }

/* =========================================================================
   Tokens
   ========================================================================= */
:root{
	--paper:#F7F4EF; --paper-2:#FFFFFF; --sand:#EDE7DB;
	--heading:#8C7A64; --ink:#2A2620; --body:#4E473D; --muted:#948A7C;
	--gold:#C29A45; --gold-deep:#9C7A2C; --navy:#141C26;
	--line:rgba(42,38,32,.14); --line-strong:rgba(42,38,32,.24);
	--wrap:1240px; --wide:1400px;
	--radius:6px; --radius-lg:10px;
	--font-display:'URW Gothic L','URW Gothic','Century Gothic','Questrial','Jost',system-ui,sans-serif;
	--font-serif:'Newsreader','PT Serif','Iowan Old Style',Georgia,'Times New Roman',serif;
	--ease:cubic-bezier(.22,.61,.36,1);
}

/* =========================================================================
   Base
   ========================================================================= */
html{scroll-behavior:smooth;}
body{
	background:var(--paper); color:var(--body);
	font-family:var(--font-serif); font-size:1.0625rem; line-height:1.75;
	-webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
	overflow-x:hidden;
}
h1,h2,h3,h4,h5,h6{
	font-family:var(--font-display); color:var(--heading);
	font-weight:500; line-height:1.06; letter-spacing:-.005em; margin:0;
}
h1{font-size:clamp(3rem,7vw,5.5rem); font-weight:700;}
h2{font-size:clamp(2.5rem,5.6vw,4.4rem); font-weight:700;}
h3{font-size:clamp(1.7rem,2.9vw,2.5rem);}
a{color:var(--gold-deep); text-decoration:none; transition:color .2s;}
a:hover{color:var(--ink);}
img{max-width:100%; height:auto; display:block;}
/* kl_img() wraps every theme image in <picture> to offer AVIF then WebP. This
   keeps the wrapper out of the box tree entirely, so the existing descendant
   rules (.hero__bg img, .split__media img, …) — including the absolutely
   positioned covers — apply exactly as they did to a bare <img>. */
picture{display:contents;}
::selection{background:var(--gold); color:#fff;}

/* Layout primitives */
.wrap{width:100%; max-width:var(--wrap); margin-inline:auto; padding-inline:1.5rem;}
.wrap.wrap--wide{max-width:var(--wide);}
.section{padding-block:clamp(3.5rem,8vw,7.5rem); position:relative;}

/* Full-bleed sections span the viewport; inner .wrap centres content. */
.site-main .wp-block-post-content > .alignfull,
.site-main .wp-block-post-content > .section{margin-block:0;}
.site-main .wp-block-post-content > :not(.alignfull):not(.section){margin-block:1rem;}

/* Section colour variants */
.on-paper{background:var(--paper);}
.on-white{background:var(--paper-2);}
.on-sand{background:var(--sand);}

/* Eyebrow / kicker — uppercase micro-label with a short rule beneath (Easto). */
.eyebrow{
	display:block; font-family:var(--font-display); font-size:.78rem; font-weight:600;
	letter-spacing:.2em; text-transform:uppercase; color:var(--ink);
	margin:0 0 1.4rem; padding-bottom:.7rem; position:relative; width:fit-content;
}
.eyebrow::after{content:""; position:absolute; left:0; bottom:0; width:64px; height:2px; background:var(--gold);}
.eyebrow--center{margin-inline:auto;}
.eyebrow--center::after{left:50%; transform:translateX(-50%);}

/* Lead / intro serif copy */
.lead{font-family:var(--font-serif); font-size:clamp(1.12rem,1.7vw,1.32rem); line-height:1.7; color:var(--body); max-width:56ch;}
.muted{color:var(--muted);}
.text-center{text-align:center;}
.section__head{max-width:75ch; margin-bottom:clamp(2.5rem,5vw,4rem);}
.section__head--center{margin-inline:auto; text-align:center;}
.section__head h2{color:var(--heading);}
/* Bottom breathing room under section titles */
.section__head h2{margin-bottom:1.4rem;}
.split__col h2{margin-bottom:1.5rem;}

/* Thin editorial divider */
.hairline{height:1px; border:0; margin:0; background:var(--line);}

/* Micro-link: uppercase, letter-spaced, underline + arrow (Easto). */
.link-arrow{
	display:inline-flex; align-items:center; gap:.6rem;
	font-family:var(--font-display); font-weight:600; font-size:.8rem;
	letter-spacing:.16em; text-transform:uppercase; color:var(--ink);
	padding-bottom:.35rem; border-bottom:1.5px solid var(--ink); transition:.25s var(--ease);
}
.link-arrow:hover{color:var(--gold-deep); border-color:var(--gold-deep);}
.link-arrow svg{width:18px; height:18px; transition:transform .25s var(--ease);}
.link-arrow:hover svg{transform:translateX(5px);}

/* =========================================================================
   Buttons — pill, uppercase letter-spaced (theme.json sets base colours)
   ========================================================================= */
.wp-block-buttons{gap:.9rem; flex-wrap:wrap; align-items:stretch;}
.wp-block-button{display:flex;}                       /* stretch so paired buttons match height */
.wp-block-button__link{
	font-family:var(--font-display); font-weight:600; font-size:.8rem;
	text-transform:uppercase; letter-spacing:.12em;
	padding:1.05em 1.9em; border-radius:999px; line-height:1;
	display:inline-flex; align-items:center; justify-content:center; gap:.55rem;
	transition:transform .25s var(--ease), background-color .25s, color .25s, box-shadow .25s;
}
.wp-block-button__link svg{width:1.35em; height:1.35em; flex:0 0 auto;}   /* icon scales with text */
.btn-primary .wp-block-button__link{background:var(--ink); color:var(--paper);}
.btn-primary .wp-block-button__link:hover{background:var(--gold-deep); color:#fff; transform:translateY(-2px);}
.btn-ghost .wp-block-button__link{background:transparent; color:var(--ink); box-shadow:inset 0 0 0 1.5px var(--line-strong);}
.btn-ghost .wp-block-button__link:hover{box-shadow:inset 0 0 0 1.5px var(--ink); color:var(--ink); transform:translateY(-2px);}
.btn-gold .wp-block-button__link{background:var(--gold); color:#fff;}
.btn-gold .wp-block-button__link:hover{background:var(--gold-deep); transform:translateY(-2px);}
.btn-wa .wp-block-button__link{background:#1FAF54; color:#fff;}
.btn-wa .wp-block-button__link:hover{background:#178f44; transform:translateY(-2px);}
.btn-ghost-light .wp-block-button__link{background:rgba(255,255,255,.06); color:#fff; box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.5);}
.btn-ghost-light .wp-block-button__link:hover{background:rgba(255,255,255,.14); box-shadow:inset 0 0 0 1.5px #fff; color:#fff; transform:translateY(-2px);}

/* =========================================================================
   Header — light, editorial. Solid bg (no filter/transform → overlay works).
   ========================================================================= */
/* Fixed (NOT sticky) on every page: body's overflow-x:hidden computes overflow-y
   to auto, which breaks position:sticky. Fixed sidesteps that entirely. */
.site-header{position:fixed; top:0; left:0; right:0; z-index:100; background:var(--navy); border-bottom:1px solid rgba(255,255,255,.1); transition:background-color .35s var(--ease), border-color .35s var(--ease);}
/* Interior pages: the first section absorbs the fixed-header height into its OWN
   top padding, so its background fills up behind the header — no reserved cream
   strip that could peek out as a white gap. (home hero slides under it separately.) */
body:not(.home) .site-main .wp-block-post-content > .section:first-child{
	padding-top:calc(var(--header-h, 64px) + clamp(2.5rem,5vw,4rem)) !important;
}
.site-header .bar{padding-block:.55rem; align-items:center;}
.brand{display:inline-flex; align-items:center;}
.brand__logo{height:46px; width:auto; display:block; object-fit:contain;}
.header-nav-wrap{gap:clamp(2rem,4vw,3.5rem); align-items:center;}
.header-cta{margin-left:.5rem;}

/* Navigation block — force light text over the dark header (beats WP global-styles). */
.main-nav{font-family:var(--font-display); font-weight:500;}
.site-header .main-nav .wp-block-navigation-item__content,
.site-header .main-nav .wp-block-navigation-item__content a,
.site-header .main-nav a.wp-block-navigation-item__content{
	color:rgba(255,255,255,.88) !important; font-size:.82rem; letter-spacing:.12em; text-transform:uppercase; padding:.4rem 0; transition:color .2s;
}
.site-header .main-nav .wp-block-navigation-item__content:hover,
.site-header .main-nav .wp-block-navigation-item:hover .wp-block-navigation-item__content{color:var(--gold-soft,#E4C778) !important;}
.main-nav .wp-block-navigation__container{gap:2rem;}
.site-header .main-nav .wp-block-navigation__responsive-container-open,
.site-header .main-nav .wp-block-navigation__responsive-container-close{color:#fff !important;}

/* Homepage only: the header floats TRANSPARENTLY over the dark hero, then turns
   solid navy once the hero scrolls past it (JS toggles .is-solid). Other pages
   keep the default solid sticky bar sitting above the content. */
.home .site-header{background:transparent; border-bottom-color:transparent;}
.home .site-header.is-solid{background:var(--navy); border-bottom-color:rgba(255,255,255,.1);}
/* Push the hero copy just clear of the overlaid header. Zero the section's own top
   padding so it doesn't stack on top of this (was ~120px extra → big empty gap). */
.home .hero{padding-block-start:0;}
.home .hero .wrap{padding-top:calc(var(--header-h, 64px) + clamp(2.5rem,5vw,4rem));}

/* =========================================================================
   Hero — centred, warm, geometric headline + serif italic subcopy (Easto)
   ========================================================================= */
.hero{position:relative; text-align:center; overflow:hidden; isolation:isolate; border-bottom:3px solid var(--gold);}
.hero__bg{position:absolute; inset:0; z-index:-2;}
.hero__bg img{width:100%; height:100%; object-fit:cover;}
.hero::after{content:""; position:absolute; inset:0; z-index:-1;
	background:linear-gradient(180deg, rgba(9,14,21,.68) 0%, rgba(9,14,21,.5) 42%, rgba(9,14,21,.82) 100%);}
.hero .wrap{padding-block:clamp(5.5rem,0,11rem); max-width:1120px;}
.hero .eyebrow{margin-inline:auto; color:#fff; text-align:center;}
.hero .eyebrow::after{background:var(--gold); left:50%; transform:translateX(-50%);}
.hero h1{color:#fff; margin:0 0 1.7rem; font-size:clamp(3.2rem,8.4vw,7rem); font-weight:700; line-height:.98; letter-spacing:-.02em;}
.hero__sub{font-family:var(--font-serif); font-style:italic; font-size:clamp(1.2rem,2.2vw,1.6rem); color:rgba(255,255,255,.92); max-width:46ch; margin:0 auto 2.6rem;}
.hero__cta{justify-content:center; margin-bottom:3.2rem;}
.hero__stats{display:grid; grid-template-columns:repeat(3,auto); gap:clamp(1.5rem,5vw,4rem); justify-content:center; border-top:1px solid rgba(255,255,255,.28); padding-top:2.2rem; max-width:720px; margin-inline:auto;}
.stat__num{font-family:var(--font-display); font-weight:500; font-size:clamp(2rem,3.8vw,3rem); color:#fff; line-height:1;}
.stat__label{font-family:var(--font-display); font-size:.72rem; color:rgba(255,255,255,.72); margin-top:.55rem; text-transform:uppercase; letter-spacing:.14em;}

/* =========================================================================
   Fade band — background photo fading into a solid navy panel that holds copy
   ========================================================================= */
.fade-band{position:relative; overflow:hidden; isolation:isolate; background:var(--navy);}
.fade-band__bg{position:absolute; inset:0; z-index:-2;}
.fade-band__bg img{width:100%; height:100%; object-fit:cover;}
/* Solid navy on the left → transparent over the photo on the right. */
.fade-band::after{content:""; position:absolute; inset:0; z-index:-1;
	background:linear-gradient(90deg, var(--navy) 0%, var(--navy) 30%, rgba(20,28,38,.72) 52%, rgba(20,28,38,.18) 78%, rgba(20,28,38,0) 100%);}
.fade-band .wrap{padding-block:0;}
.fade-band__inner{max-width:540px; color:#fff; padding-block:clamp(3.25rem,0,5rem);}
.fade-band__inner .eyebrow{color:#fff;}
.fade-band__inner .eyebrow::after{background:var(--gold);}
.fade-band__inner h2{color:#fff; margin:0 0 1.4rem;}
.fade-band__sub{font-family:var(--font-serif); font-size:clamp(1.05rem,1.7vw,1.28rem); color:rgba(255,255,255,.9); line-height:1.7; margin:0 0 2rem; max-width:44ch;}
@media (max-width:820px){
	/* Photo on top fading down into the solid navy that holds the copy. */
	.fade-band::after{background:linear-gradient(180deg, rgba(20,28,38,.12) 0%, rgba(20,28,38,.55) 34%, var(--navy) 72%, var(--navy) 100%);}
	.fade-band__inner{max-width:none; padding-block:clamp(9rem,38vw,12rem) clamp(2.5rem,7vw,3.5rem);}
}

/* =========================================================================
   About page (Tentang Kami) — page hero, breadcrumb, visi statement, stat band
   ========================================================================= */
/* About hero — LIGHT editorial split (deliberately unlike the dark home hero). */
.about-hero{background:var(--sand); overflow:hidden; padding-block:clamp(2.75rem,5vw,4.25rem);}
.about-hero__grid{display:grid; grid-template-columns:1.05fr .95fr; gap:clamp(2.5rem,6vw,5rem); align-items:stretch;}
.about-hero__text{align-self:center; padding-block:clamp(1rem,2vw,2rem);}
.about-hero h1{color:var(--ink); font-size:clamp(2.5rem,5.4vw,4.4rem); line-height:1.03; margin:0 0 1.5rem;}
.about-hero__sub{font-family:var(--font-serif); font-size:clamp(1.08rem,1.6vw,1.3rem); line-height:1.7; color:var(--body); max-width:46ch; margin:0;}
.about-hero__media{position:relative; border-radius:var(--radius-lg); overflow:hidden; border:1px solid var(--line); min-height:420px;}
.about-hero__media img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;}
.about-hero__badge{position:absolute; left:1.1rem; bottom:1.1rem; background:var(--navy); padding:.85rem 1.15rem; border-radius:8px;}
.about-hero__badge b{display:block; font-family:var(--font-display); font-weight:700; font-size:1.55rem; line-height:1; color:var(--gold-soft,#E4C778);}
.about-hero__badge span{display:block; margin-top:.2rem; font-family:var(--font-display); font-size:.66rem; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.82);}

/* Breadcrumb — dark-on-light variant for the about hero. */
.crumb{display:flex; gap:.7rem; align-items:center; margin:0 0 1.5rem;
	font-family:var(--font-display); font-size:.74rem; letter-spacing:.16em; text-transform:uppercase; color:var(--muted);}
.crumb a{color:var(--muted); transition:color .2s;}
.crumb a:hover{color:var(--gold-deep);}
.crumb span[aria-hidden]{color:var(--gold);}

@media (max-width:820px){
	.about-hero__grid{grid-template-columns:1fr; gap:2rem;}
	.about-hero__text{padding-block:0;}
	.about-hero__media{min-height:0; aspect-ratio:5/4; order:-1;}
}

/* Story — bespoke editorial layout: title + (photo | big stat) left, prose right. */
.story-grid{display:grid; grid-template-columns:1fr 1fr; gap:clamp(2.5rem,6vw,5.5rem);}
.story__head h2{margin:1rem 0 0;}
.story__feature{display:flex; align-items:center; gap:clamp(1.4rem,3vw,2.4rem); margin-top:clamp(2.2rem,4.5vw,3.4rem);}
.story__img{flex:0 0 auto; width:clamp(130px,17vw,210px); aspect-ratio:3/4; border-radius:var(--radius-lg); overflow:hidden; border:1px solid var(--line);}
.story__img img{width:100%; height:100%; object-fit:cover;}
.story__stat{display:flex; align-items:flex-start; gap:.7rem;}
.story__statnum{font-family:var(--font-display); font-weight:700; line-height:.82; letter-spacing:-.02em; color:var(--heading); font-size:clamp(3.4rem,6.5vw,5.5rem);}
.story__statnum sup{font-size:.42em; font-weight:700; top:-.15em;}
.story__statlabel{font-family:var(--font-display); font-weight:600; font-size:.8rem; line-height:1.35; letter-spacing:.14em; text-transform:uppercase; color:var(--body); padding-top:.35em;}
.story__col--right{display:flex; flex-direction:column;}
.story__col--right p{margin:0 0 1.4rem; max-width:52ch;}
.story__link{margin-top:auto; align-self:flex-end;}
@media (max-width:820px){
	.story-grid{grid-template-columns:1fr; gap:2.2rem;}
	.story__link{align-self:flex-start; margin-top:.5rem;}
}
/* Very narrow: the photo + big "16+" stat row can exceed the column — shrink it
   and let it wrap rather than push the page into horizontal overflow. */
@media (max-width:440px){
	.story__feature{flex-wrap:wrap; gap:1.1rem 1.4rem;}
	.story__img{width:clamp(88px,26vw,120px);}
	.story__statnum{font-size:clamp(2.6rem,11vw,3.6rem);}
}

/* Visi — oversized editorial statement above the Misi grid. */
.visi-statement{max-width:960px; margin:0 auto clamp(2.8rem,6vw,4.5rem); text-align:center;}
.visi-statement .eyebrow{margin-inline:auto; color:var(--heading);}
.visi-statement .eyebrow::after{left:50%; transform:translateX(-50%);}
.visi-statement h2{font-family:var(--font-serif); font-weight:500; font-style:italic; text-transform:none;
	font-size:clamp(1.5rem,3vw,2.35rem); line-height:1.42; letter-spacing:0; color:var(--ink); margin:0;}

/* Milestones — big OUTLINED numeral with the label STACKED beneath it (centred),
   and dividers centred in the gaps between items. Stacked rather than overlaid so
   longer Indonesian labels never collide with or clip over the numeral. */
.stat-band{--sb-gap:clamp(1.25rem,3vw,2.5rem); display:grid; grid-template-columns:repeat(4,1fr); gap:var(--sb-gap);}
.stat-band__item{position:relative; display:flex; flex-direction:column; align-items:center; justify-content:flex-start; gap:.55rem; text-align:center; padding-inline:.4rem; min-height:clamp(4rem,8vw,6rem);}
/* Divider sits at the mid-point of the gap (half-gap past the cell edge). */
.stat-band__item:not(:last-child)::after{content:""; position:absolute; right:calc(var(--sb-gap) / -2); top:12%; bottom:12%; width:1px; background:var(--line-strong);}
.stat-band__num{font-family:var(--font-display); font-weight:700; line-height:.85; letter-spacing:-.03em;
	font-size:clamp(2.6rem,5.6vw,5rem); color:transparent; -webkit-text-stroke:1.3px var(--heading);}
.stat-band__label{max-width:14ch; font-family:var(--font-display); font-weight:600; font-size:.78rem; line-height:1.35; letter-spacing:.06em; color:var(--body);}

/* Award seal (shield) inside the Penghargaan fade band. */
.award-seal{display:inline-flex; align-items:center; justify-content:center; width:4rem; height:4rem;
	border-radius:50%; border:1px solid rgba(194,154,69,.5); color:var(--gold-soft,#E4C778); margin-bottom:1.6rem;}

@media (max-width:820px){
	.stat-band{grid-template-columns:1fr 1fr; gap:2.4rem 1.5rem;}
	.stat-band__item:nth-child(2)::after{display:none;}
}
@media (max-width:460px){
	.stat-band{grid-template-columns:1fr;}
	.stat-band__item::after{display:none;}
}

/* =========================================================================
   Split (editorial: text + media), thin rule
   ========================================================================= */
.split{display:grid; grid-template-columns:1fr 1fr; gap:clamp(2.5rem,6vw,5.5rem); align-items:center;}
.split__col > :first-child{margin-top:0;}
.split__col p{margin:0 0 1.1rem;}
.split__media{
	border-radius:var(--radius-lg); overflow:hidden; aspect-ratio:4/3;
	background:linear-gradient(135deg,var(--sand),#dcd3c4);
	position:relative; border:1px solid var(--line);
}
.split__media img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;}
.split__media::after{content:""; position:absolute; inset:0; z-index:1;
	background:linear-gradient(180deg, transparent 48%, rgba(9,14,21,.62));}
.media-note{position:absolute; left:1.6rem; bottom:1.4rem; z-index:2; font-family:var(--font-display); color:#fff;}
.media-note b{display:block; color:var(--gold-soft,#E4C778); font-size:1.35rem; font-weight:600;}
.media-note span{font-size:.85rem; color:rgba(255,255,255,.85);}

/* =========================================================================
   Card grids
   ========================================================================= */
.grid-2{display:grid; grid-template-columns:repeat(2,1fr); gap:clamp(1.5rem,3vw,2.4rem);}
.grid-3{display:grid; grid-template-columns:repeat(3,1fr); gap:0;}
.grid-4{display:grid; grid-template-columns:repeat(4,1fr); gap:0;}

/* Feature cells — bordered editorial grid (thin rules, Easto). */
.grid-3 > .card, .grid-4 > .card{
	background:transparent; border:1px solid var(--line); margin:-0.5px;
	padding:2.4rem 2rem; transition:background-color .3s, transform .3s;
}
.grid-3 > .card:hover, .grid-4 > .card:hover{background:var(--paper-2);}
.card h3,.card h4{color:var(--ink); margin:.2rem 0 .6rem; font-size:1.35rem;}
.card p{margin:0; color:var(--body);}
.card__icon{width:54px; height:54px; border-radius:50%; display:grid; place-items:center; margin-bottom:1.4rem;
	color:var(--gold-deep); border:1px solid var(--gold);}
.card__icon svg{width:24px; height:24px;}

/* Project cards — image + body + micro-link (with soft border/shadow) */
.project-card{padding:0 !important; background:var(--paper-2) !important; border:1px solid var(--line) !important; border-radius:var(--radius-lg); overflow:hidden; margin:0 !important; transition:transform .3s var(--ease), box-shadow .3s;}
.project-card:hover{transform:translateY(-5px); box-shadow:0 26px 50px -30px rgba(42,38,32,.4);}
.project-card__media{aspect-ratio:16/10; position:relative; overflow:hidden;
	background:linear-gradient(135deg,var(--sand),#d6ccbb); border-bottom:1px solid var(--line);}
.project-card__media img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover; transition:transform .6s var(--ease);}
.project-card:hover .project-card__media img{transform:scale(1.05);}
.project-card__badge{position:absolute; top:1.1rem; left:1.1rem; z-index:1;
	font-family:var(--font-display); font-size:.68rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase;
	color:var(--ink); background:rgba(247,244,239,.9); border:1px solid var(--line); padding:.45rem .9rem; border-radius:999px;}
.project-card__body{padding:2rem;}
.project-card__body h3{margin:0 0 .6rem; color:var(--ink);}
.project-card__body > p{color:var(--body);}
.project-card__meta{display:flex; gap:2rem; margin:1.4rem 0; padding:1.2rem 0; border-block:1px solid var(--line); flex-wrap:wrap;}
.project-card__meta span{font-family:var(--font-display); font-size:.78rem; color:var(--muted); text-transform:uppercase; letter-spacing:.1em;}
.project-card__meta b{display:block; color:var(--ink); font-family:var(--font-display); font-size:1.15rem; font-weight:500; letter-spacing:0; text-transform:none; margin-top:.3rem;}

/* House-type cells — 5 verified types, bordered editorial grid */
.type-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:0;}
.type-grid > .card{background:transparent; border:1px solid var(--line); margin:-0.5px; padding:2rem 1.6rem; transition:background-color .3s;}
.type-grid > .card:hover{background:var(--paper-2);}
.type-card{text-align:left;}
.type-card .type__project{font-family:var(--font-display); font-size:.66rem; color:var(--muted); text-transform:uppercase; letter-spacing:.14em; margin-bottom:.7rem;}
.type-card .type__name{font-family:var(--font-display); color:var(--ink); font-size:1.6rem; font-weight:700;}
.type-card .type__size{margin-top:1.4rem; display:flex; flex-direction:column; gap:.35rem;}
.type-card .type__size span{font-family:var(--font-display); font-size:1.05rem; color:var(--ink);}
.type-card .type__size b{color:var(--gold-deep); font-weight:600; font-size:.72rem; letter-spacing:.1em; margin-right:.35rem;}

/* Mini trust stats (konsep) */
.mini-stats{display:flex; gap:2rem; flex-wrap:wrap; margin:1.8rem 0;}
.mini-stats > div{border-left:2px solid var(--gold); padding-left:1rem;}
.mini-stats b{display:block; font-family:var(--font-display); font-weight:700; font-size:1.6rem; color:var(--ink); line-height:1;}
.mini-stats span{font-family:var(--font-display); font-size:.72rem; color:var(--muted); text-transform:uppercase; letter-spacing:.1em;}

/* Location list */
.loc-list{list-style:none; margin:1.8rem 0 0; padding:0; display:grid; gap:0;}
.loc-list li{display:flex; align-items:center; gap:1rem; padding:1.15rem 0; border-bottom:1px solid var(--line); color:var(--body); font-family:var(--font-serif);}
.loc-list li:first-child{border-top:1px solid var(--line);}
.loc-list li svg{width:22px; height:22px; color:var(--gold-deep); flex:0 0 auto;}
.loc-list b{color:var(--ink); font-family:var(--font-display); font-weight:500;}
.map-embed{border-radius:var(--radius-lg); overflow:hidden; border:1px solid var(--line);}
.map-embed iframe{display:block; width:100%; height:100%; min-height:400px; border:0;}

/* Map facade — the click-to-load stand-in for the Google Maps embed (see
   kl_map_facade() in inc/build.php). Keeps ~2.4MB of third-party script off the
   page until a visitor asks for the map. It fills the same box the iframe would,
   so swapping the two in causes no layout shift. */
.map-facade{position:relative; background:var(--sand); min-height:400px;}
.map-facade__load{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.9rem;
	position:absolute; inset:0; width:100%; padding:2rem; text-align:center; cursor:pointer;
	background:none; border:0; color:var(--body); font:inherit;}
.map-facade__load svg{color:var(--gold-deep);}
.map-facade__addr{max-width:34ch; font-size:.95rem; line-height:1.55;}
.map-facade__cta{font-family:var(--font-display); font-weight:500; letter-spacing:.04em; text-transform:uppercase;
	font-size:.82rem; color:var(--ink); border-bottom:1px solid var(--gold); padding-bottom:.2rem;}
.map-facade__load:hover .map-facade__cta,
.map-facade__load:focus-visible .map-facade__cta{color:var(--gold-deep);}
.map-facade__fallback{position:absolute; inset:0; display:flex; align-items:center; justify-content:center;}
.map-facade.is-loaded{background:none;}
.cmap.map-facade{min-height:0;} /* .cmap already sets an explicit height. */

/* Finance / partner strip — muted grayscale row (Manoir) */
.marquee{overflow:hidden; -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent); mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);}
.marquee__track{display:flex; gap:4rem; width:max-content; align-items:center; animation:kl-marquee 34s linear infinite;}
.marquee__track span{font-family:var(--font-display); font-weight:500; font-size:1.5rem; color:var(--muted); opacity:.7; white-space:nowrap; letter-spacing:.02em;}
/* Real partner logos in the KPR marquee — white chips, ~5 visible per view */
.marquee__track--logos{gap:clamp(1rem,1.6vw,1.75rem); align-items:stretch;}
.marquee__logo{
	box-sizing:border-box;
	flex:0 0 auto; width:calc(10vw - 1.4rem); min-width:150px; max-width:250px;
	display:flex; align-items:center; justify-content:center;
	background:#fff; border:1px solid var(--line); border-radius:10px;
	padding:.7rem 1rem; box-shadow:0 12px 30px -26px rgba(42,38,32,.55);
	transition:transform .3s var(--ease), box-shadow .3s;
}
.marquee__logo:hover{transform:translateY(-4px); box-shadow:0 18px 36px -24px rgba(42,38,32,.5);}
.marquee__logo img{height:auto; max-height:38px; width:auto; max-width:100%; opacity:.85; transition:opacity .3s;}
.marquee__logo:hover img{opacity:1;}
@keyframes kl-marquee{to{transform:translateX(-50%);}}
.marquee:hover .marquee__track{animation-play-state:paused;}

/* Testimonials — 2-row infinite marquee, opposite directions */
.t-marquee{display:flex; flex-direction:column; gap:1.6rem; overflow:hidden; padding:clamp(2.5rem,5vw,4rem) 0 .5rem;
	-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
	mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);}
.t-row{display:flex; gap:1.6rem; width:max-content; will-change:transform;
	animation:t-marquee var(--t-dur,52s) linear infinite;}
.t-row--ltr{animation-direction:reverse;}          /* items drift left → right */
.t-row--rtl{animation-direction:normal;}           /* items drift right → left */
@keyframes t-marquee{from{transform:translateX(0);} to{transform:translateX(-50%);}}
.t-marquee:hover .t-row{animation-play-state:paused;}
.tcard{flex:0 0 auto; width:min(88vw,420px); margin:0; background:var(--paper-2);
	border:1px solid var(--line); border-radius:var(--radius-lg); padding:1.9rem 1.8rem;}
.tcard__stars{display:flex; gap:.15rem; color:var(--gold); margin-bottom:1rem;}
.tcard blockquote{margin:0; font-family:var(--font-serif); font-size:1.05rem; font-style:italic; color:var(--ink); line-height:1.65;}
.tcard figcaption{display:flex; align-items:center; gap:.9rem; margin-top:1.4rem;}
.tcard__avatar{width:44px; height:44px; flex:0 0 auto; border-radius:50%; display:grid; place-items:center;
	background:var(--sand); color:var(--gold-deep); font-family:var(--font-display); font-weight:700; font-size:1.1rem; border:1px solid var(--gold);}
.tcard__who b{display:block; font-family:var(--font-display); color:var(--ink); font-weight:600; font-size:.95rem;}
.tcard__who small{color:var(--muted); font-family:var(--font-serif); font-style:italic; font-size:.85rem;}

/* Character-reveal for large titles — masked counter/odometer slide (clipped
   top & bottom). JS-enhanced; SEO-safe — real text stays as the heading aria-label. */
.kl-title .kl-word{display:inline-block; white-space:nowrap; vertical-align:top;}
.kl-title .kl-char{display:inline-block; overflow:hidden; vertical-align:top; line-height:inherit;}
.kl-title .kl-char__inner{display:inline-block; transform:translateY(115%); transition:transform .6s var(--ease); will-change:transform;}
.kl-title.is-in .kl-char__inner{transform:translateY(0);}

/* CTA band — warm sand */
.cta-band{background:linear-gradient(180deg,var(--sand),#e4dccb); text-align:center; border-block:1px solid var(--line);}
.cta-band h2{color:var(--heading); margin:0 0 1.2rem;}
.cta-band .lead{margin:0 auto 2.4rem;}
.cta-band .wp-block-buttons{justify-content:center;}

/* =========================================================================
   Contact page — team-first (dark hero → agent grid → offices → map)
   ========================================================================= */
/* Hero — dark navy band, distinct from the light interior pages. */
.contact-hero{background:var(--navy); color:#fff; position:relative; overflow:hidden;}
.contact-hero::before{content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
	background:radial-gradient(ellipse 70% 60% at 50% 0%, rgba(194,154,69,.18), transparent 70%);}
.contact-hero__inner{position:relative; z-index:1; max-width:62ch; margin-inline:auto; text-align:center;}
.contact-hero .eyebrow{color:#fff; margin-inline:auto;}
.contact-hero .eyebrow::after{background:var(--gold);}
.contact-hero h1{color:#fff; font-size:clamp(2rem,4.6vw,3.4rem); line-height:1.08; margin:.6rem 0 1rem; max-width:20ch; margin-inline:auto;}
.contact-hero .lead{color:rgba(255,255,255,.82); margin:0 auto 2.2rem; max-width:58ch;}
.contact-hero .wp-block-buttons{justify-content:center; margin-bottom:clamp(2rem,4vw,3rem);}
.contact-hero__stats{list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; justify-content:center; gap:clamp(1.2rem,4vw,3.2rem);}
.contact-hero__stats li{position:relative; padding-right:clamp(1.2rem,4vw,3.2rem);}
.contact-hero__stats li:not(:last-child)::after{content:""; position:absolute; right:0; top:50%; transform:translateY(-50%); width:1px; height:2.4em; background:rgba(255,255,255,.18);}
.contact-hero__stats b{display:block; font-family:var(--font-display); font-weight:700; font-size:clamp(1.6rem,3vw,2.2rem); line-height:1; color:var(--gold-soft,#E4C778);}
.contact-hero__stats span{display:block; margin-top:.35rem; font-size:.7rem; text-transform:uppercase; letter-spacing:.12em; color:rgba(255,255,255,.6);}
/* Desktop: force all three stats onto one row — break out of the 62ch inner
   width and re-centre, so "Cepat" never drops below the other two. */
@media (min-width:821px){
	.contact-hero__stats{flex-wrap:nowrap; width:max-content; max-width:none; margin-left:50%; transform:translateX(-50%);}
	.contact-hero__stats li{white-space:nowrap;}
}
/* Mobile: stats wrap 2 + 1, so the 2nd item ends its row — drop its divider. */
@media (max-width:820px){
	.contact-hero__stats li:nth-child(2)::after{display:none;}
	.contact-hero__stats li:nth-child(2){padding-right:0;}
}

/* Tim Marketing — photo cards; grayscale → colour + shimmer + lift on hover. */
.cteam__grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:clamp(1rem,2vw,1.5rem);}
.cagent{display:flex; flex-direction:column; background:var(--paper-2); border:1px solid var(--line); border-radius:14px; overflow:hidden; text-decoration:none; box-shadow:0 16px 36px -28px rgba(20,28,38,.5); transition:transform .4s var(--ease), box-shadow .4s var(--ease);}
.cagent:hover{transform:translateY(-6px); box-shadow:0 34px 66px -34px rgba(20,28,38,.55);}
.cagent__photo{position:relative; aspect-ratio:1/1; overflow:hidden; background:var(--navy);}
.cagent__mono{position:absolute; inset:0; display:grid; place-items:center; font-family:var(--font-display); font-weight:700; font-size:2.6rem; letter-spacing:.05em; color:rgba(255,255,255,.22);}
.cagent__photo img{position:relative; z-index:1; width:100%; height:100%; object-fit:cover; object-position:top center; transition:filter .5s var(--ease), transform .6s var(--ease);}
.cagent__shine{position:absolute; inset:0; z-index:2; pointer-events:none; transform:translateX(-130%);
	background:linear-gradient(120deg, transparent 34%, rgba(255,255,255,.45) 50%, transparent 66%);}
.cagent__body{padding:1rem 1.1rem 1.2rem; display:flex; flex-direction:column; text-align:left;}
.cagent__name{font-family:var(--font-display); font-weight:700; font-size:1.18rem; color:var(--ink); line-height:1.15;}
.cagent__role{margin-top:.2rem; font-size:.7rem; text-transform:uppercase; letter-spacing:.12em; color:var(--gold-deep); font-weight:600;}
.cagent__wa{margin-top:.35rem; font-family:var(--font-serif); font-size:.9rem; color:var(--muted);}
.cagent__cta{margin-top:1rem; display:inline-flex; align-items:center; justify-content:center; gap:.4rem; background:#1FAF54; color:#fff; border-radius:999px; padding:.6rem 1rem; font-weight:600; font-size:.85rem; transition:background .3s;}
.cagent__cta svg{flex:none;}
.cagent:hover .cagent__cta{background:#178f44;}
@media (hover:hover){
	.cagent__photo img{filter:grayscale(1) contrast(1.02);}
	.cagent:hover .cagent__photo img{filter:grayscale(0); transform:scale(1.05);}
	.cagent:hover .cagent__shine{animation:cShine .9s var(--ease);}
}
@keyframes cShine{from{transform:translateX(-130%);} to{transform:translateX(130%);}}

/* Marketing Gallery & Kantor — office cards + contact/social row. */
.coffice__grid{display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(1.2rem,2.5vw,1.8rem);}
.coffice{display:flex; flex-direction:column; background:var(--paper-2); border:1px solid var(--line); border-radius:14px; padding:clamp(1.5rem,3vw,2rem);}
.coffice__icon{width:46px; height:46px; display:grid; place-items:center; border-radius:12px; background:rgba(194,154,69,.14); color:var(--gold-deep); margin-bottom:1.1rem;}
.coffice__tag{font-size:.7rem; text-transform:uppercase; letter-spacing:.12em; color:var(--gold-deep); font-weight:600; margin-bottom:.5rem;}
.coffice__name{font-family:var(--font-display); font-weight:700; font-size:1.12rem; color:var(--ink); line-height:1.25; margin-bottom:.6rem;}
.coffice__addr{margin:0 0 1.3rem; font-family:var(--font-serif); font-size:.92rem; line-height:1.6; color:var(--body);}
.coffice__map{margin-top:auto;}
.contact-row{margin-top:clamp(1.8rem,3.5vw,2.6rem); padding-top:clamp(1.5rem,3vw,2.1rem); border-top:1px solid var(--line); display:flex; flex-wrap:wrap; align-items:center; gap:1.1rem 2.4rem;}
.contact-row__item{display:flex; align-items:center; gap:.7rem; color:var(--body); font-family:var(--font-serif);}
.contact-row__item svg{color:var(--gold-deep); flex:none;}
.contact-row__item b{display:block; font-family:var(--font-display); font-size:.68rem; text-transform:uppercase; letter-spacing:.1em; color:var(--ink); font-weight:600;}
.contact-row a.contact-row__item:hover{color:var(--gold-deep);}
.contact-row__social{margin-left:auto; display:flex; gap:.6rem;}
.contact-row__social a{width:42px; height:42px; display:grid; place-items:center; border-radius:50%; border:1px solid var(--line-strong); color:var(--ink); transition:background-color .3s, color .3s, border-color .3s, transform .3s;}
.contact-row__social a:hover{background:var(--navy); color:#fff; border-color:var(--navy); transform:translateY(-2px);}
@media (max-width:820px){ .coffice__grid{grid-template-columns:1fr;} }
@media (max-width:600px){ .contact-row__social{margin-left:0;} }

/* Full-bleed map. */
.contact-map{padding:0 !important;}
.cmap{position:relative; width:100%; height:clamp(360px,50vh,520px);}
.cmap iframe{position:absolute; inset:0; width:100%; height:100%; border:0;}

@media (prefers-reduced-motion:reduce){
	.cagent, .cagent__photo img{transition:none;}
	.cagent:hover{transform:none;}
	.cagent:hover .cagent__photo img{transform:none;}
	.cagent:hover .cagent__shine{animation:none;}
}

/* =========================================================================
   Footer — dark, grounding
   ========================================================================= */
.site-footer{background:var(--navy); color:#c9c3b8; border-top:3px solid var(--gold);}
.site-footer .wrap{padding-block:clamp(3.5rem,7vw,5.5rem);}
.footer-grid{display:grid; grid-template-columns:1.5fr 1fr 1fr; gap:3rem;}
.site-footer p{color:#9a9384;}
.site-footer .brand,.site-footer .brand small{color:#fff;}
.site-footer .brand__logo{height:60px;}
.site-footer .brand small{color:var(--gold);}
.site-footer h4{font-family:var(--font-display); font-size:.75rem; letter-spacing:.18em; text-transform:uppercase; color:var(--gold); margin:0 0 1.2rem; font-weight:600;}
.footer-links{list-style:none; margin:0; padding:0; display:grid; gap:.75rem;}
.footer-links a{color:#c9c3b8; font-family:var(--font-serif); font-size:.98rem;}
.footer-links a:hover{color:var(--gold);}
.footer-social{display:flex; gap:.8rem; margin-top:1.4rem;}
.footer-social a{width:42px; height:42px; border-radius:50%; display:grid; place-items:center; color:#c9c3b8; border:1px solid rgba(255,255,255,.16); transition:.2s;}
.footer-social a:hover{color:var(--navy); background:var(--gold); border-color:var(--gold); transform:translateY(-2px);}
.footer-social svg{width:20px; height:20px;}
.footer-bottom{border-top:1px solid rgba(255,255,255,.12); margin-top:3rem; padding-top:1.6rem; display:flex; justify-content:space-between; gap:1rem; flex-wrap:wrap; color:#8a8474; font-family:var(--font-display); font-size:.75rem; letter-spacing:.06em; text-transform:uppercase;}

/* =========================================================================
   Reveal-on-scroll
   ========================================================================= */
.js .reveal{opacity:0; transform:translateY(24px); transition:opacity .8s var(--ease), transform .8s var(--ease);}
.js .reveal.is-in{opacity:1; transform:none;}

/* =========================================================================
   Responsive
   ========================================================================= */
@media (max-width:992px){
	.grid-4{grid-template-columns:repeat(2,1fr);}
	.footer-grid{grid-template-columns:1fr 1fr;}
	.site-header .header-cta{display:none !important;}
}
@media (max-width:820px){
	.split{grid-template-columns:1fr;}
	.split--rev .split__col:first-child{order:2;}
	.grid-3{grid-template-columns:1fr 1fr;}
	.contact-grid{grid-template-columns:1fr;}
	.footer-bottom{flex-direction:column;}
}
@media (max-width:640px){
	.grid-2,.grid-3,.grid-4{grid-template-columns:1fr;}
	.footer-grid{grid-template-columns:1fr;}
	.hero__stats{grid-template-columns:1fr 1fr; gap:1.7rem 1.2rem;}
	.hero__stats > .stat:first-child{grid-column:1 / -1; padding-bottom:1.5rem; border-bottom:1px solid rgba(255,255,255,.18);}
}

/* =========================================================================
   Navigation block: raise collapse breakpoint + style the mobile overlay.
   ========================================================================= */
/* Raise the collapse breakpoint to ~992px and let WordPress own the open/close
   toggle (its Interactivity runtime is finicky — driving it from JS hangs the
   menu). The overlay just gets styled; WP handles show/hide via display. */
@media (max-width:991.98px){
	.main-nav .wp-block-navigation__responsive-container-open{display:flex !important;}
	.main-nav .wp-block-navigation__responsive-container-close{display:flex !important;}
	.main-nav .wp-block-navigation__responsive-container:not(.is-menu-open){display:none !important;}
}
/* The close (X) belongs to the overlay only, never the desktop bar. */
@media (min-width:992px){
	.main-nav .wp-block-navigation__responsive-container-close{display:none !important;}
}
/* Full-screen overlay when open: solid navy so the light-on-dark menu stays legible. */
.site-header .main-nav .wp-block-navigation__responsive-container.is-menu-open{
	background-color:var(--navy) !important;
	background-image:radial-gradient(120% 75% at 100% 0%, rgba(194,154,69,.16), transparent 58%) !important;
	padding:0;
}
/* The mobile-only CTA link is hidden in the desktop bar (the gold button covers it). */
.main-nav .wp-block-navigation-item.nav-cta-mobile{display:none;}

.site-header .main-nav .is-menu-open .wp-block-navigation__responsive-container-content{
	width:100%; padding:5.75rem 1.9rem 2.5rem !important;
}
/* "Menu" eyebrow above the list (left-aligned so it clears the close button). */
.main-nav .is-menu-open .wp-block-navigation__responsive-container-content::before{
	content:"Menu"; display:block; text-align:left; font-family:var(--font-display);
	font-size:.72rem; letter-spacing:.3em; text-transform:uppercase; color:var(--gold);
	padding-bottom:1.4rem; margin-bottom:.4rem; border-bottom:1px solid rgba(255,255,255,.12);
}
.main-nav .is-menu-open .wp-block-navigation__container{
	counter-reset:navitem; flex-direction:column; width:100%; gap:0 !important;
	align-items:stretch !important; justify-content:flex-start !important;
}
/* ⚠ Every rule from here to the CTA is scoped with `>` to DIRECT children of the
   overlay's list. It used to be a descendant selector, which also matched the
   two items inside the Proyek submenu — so they incremented the `navitem`
   counter (top-level numbering skipped 03 and 04), fired the nth-child entrance
   animation, and rendered at the 1.7rem top-level size that made
   "Prima Garden Estate" wrap onto a second line. */
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item{
	width:100%; margin:0; opacity:0; transform:translateY(14px);
	animation:kl-nav-in .55s var(--ease) forwards;
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:nth-child(1){animation-delay:.06s;}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:nth-child(2){animation-delay:.12s;}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:nth-child(3){animation-delay:.18s;}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:nth-child(4){animation-delay:.24s;}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:nth-child(5){animation-delay:.30s;}
@keyframes kl-nav-in{to{opacity:1; transform:none;}}

/* Standard menu links: index number + big display type + arrow.

   The label is capped by the viewport, not by a fixed 1.7rem: at 360px the long
   entries ("Prima Garden Estate", "Tentang Kami") overflowed the 2.4rem arrow
   gutter and wrapped. nowrap + ellipsis is the backstop — one line, always. */
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile){
	border-bottom:1px solid rgba(255,255,255,.1);
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content{
	position:relative; display:flex; align-items:center; gap:1rem; min-width:0;
	font-family:var(--font-display); font-weight:500; line-height:1.1;
	font-size:clamp(1.15rem,5.2vw,1.7rem);
	letter-spacing:.005em; text-transform:none; color:#fff; white-space:nowrap;
	padding:1.15rem 2.4rem 1.15rem 0; transition:color .25s var(--ease), padding .25s var(--ease);
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content .wp-block-navigation-item__label{
	min-width:0; overflow:hidden; text-overflow:ellipsis;
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content::before{
	counter-increment:navitem; content:counter(navitem,decimal-leading-zero);
	font-family:var(--font-display); font-weight:500; font-size:.72rem; letter-spacing:.1em;
	color:var(--gold); min-width:1.5rem; flex:0 0 auto;
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content::after{
	content:"→"; position:absolute; right:.35rem; top:50%; transform:translateY(-50%);
	font-size:1.15rem; color:rgba(255,255,255,.32); transition:color .25s var(--ease), right .25s var(--ease);
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content:hover,
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content:focus{
	outline:none; color:var(--gold-soft,#E4C778); padding-left:.5rem;
}
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content:hover::after,
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:not(.nav-cta-mobile) > .wp-block-navigation-item__content:focus::after{
	color:var(--gold); right:.1rem;
}

/* ---- Proyek accordion inside the overlay ----

   No theme JS: core already renders a real <button class="…submenu__toggle">
   next to the label, drives its aria-expanded from the Interactivity runtime,
   and ships the sibling selector
   `.submenu__toggle[aria-expanded=true] ~ .…__submenu-container`. Hooking the
   transition onto that button is what keeps this out of core's way — the note
   at the top of this section is explicit that scripting the overlay hangs it.

   The <li> becomes a 2-column grid — link | chevron — with the submenu spanning
   both, so the chevron tracks the row's real height as the clamp()ed font size
   changes. Tapping the label still navigates to /#proyek; only the chevron
   expands. */
/* !important: core sets display:flex on every .wp-block-navigation-item inside
   the open overlay, which otherwise wins and drops the chevron onto its own
   wrapped line. */
.main-nav .is-menu-open .nav-mega{
	display:grid !important; grid-template-columns:minmax(0,1fr) auto; align-items:center;
}
.main-nav .is-menu-open .nav-mega > .wp-block-navigation__submenu-container{grid-column:1 / -1;}
/* Every other row is a flex <li> whose single <a> gets pushed right by the
   nav's "justified right" layout. In the grid the <a> fills its column instead,
   so it has to do that justification itself or this one row reads left-aligned. */
/* justify-content: every other row is a flex <li> whose single <a> gets pushed
   right by the nav's "justified right" layout; in the grid the <a> fills its
   column instead, so it has to do that justification itself.
   padding-right:0: that 2.4rem is the gutter reserved for the → arrow, and this
   row has no arrow — keeping it left a wide dead gap before the chevron. */
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item.nav-mega > .wp-block-navigation-item__content{
	justify-content:flex-end; padding-right:0 !important;
}
/* The → arrow belongs to rows that navigate on tap; this one has a chevron. */
.main-nav .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item.nav-mega > .wp-block-navigation-item__content::after{
	content:none;
}
.main-nav .is-menu-open .nav-mega > .wp-block-navigation-submenu__toggle{
	/* Explicit height, not align-self:stretch — core gives the icon button an
	   intrinsic 10px box, so stretch never applies and the chevron floats up
	   against the row divider instead of centring on the label. */
	/* Right-aligned in a narrow box so the chevron lands on the same optical
	   right edge as the other rows' → arrows, with the label close beside it. */
	display:flex; align-items:center; justify-content:flex-end;
	width:2.4rem; height:100%; margin-right:0; padding:0 .2rem 0 0;
	background:none; border:0; color:rgba(255,255,255,.55); cursor:pointer;
	transition:color .25s var(--ease);
}
.main-nav .is-menu-open .nav-mega > .wp-block-navigation-submenu__toggle:hover{color:var(--gold);}
/* Colour only — core already flips the SVG 180° at [aria-expanded=true]
   (wp-includes/blocks/navigation/style.css). Rotating the button as well would
   compose to a full 360° and the chevron would never appear to move. */
.main-nav .is-menu-open .nav-mega > .wp-block-navigation-submenu__toggle[aria-expanded="true"]{color:var(--gold);}
.main-nav .is-menu-open .nav-mega > .wp-block-navigation-submenu__toggle svg{
	/* Core's chevron is drawn with stroke-width but no stroke colour. */
	display:block; width:1.15rem; height:1.15rem; stroke:currentColor;
	transition:transform .3s var(--ease);
}

/* Collapsed by default. Core's closed state is height:0/visibility:hidden, which
   cannot be transitioned — so those are forced back on and max-height carries
   the animation instead. A fixed two-item list, so a max-height cap is safe. */
.main-nav .is-menu-open .nav-mega > .wp-block-navigation__submenu-container{
	/* display:block, not core's flex — the nav's "justified right" layout feeds
	   flex-direction into the submenu too, which laid the two projects out side
	   by side on one line. */
	position:static !important; visibility:visible !important; opacity:0;
	display:block !important; width:auto !important; height:auto !important;
	min-width:0 !important; max-height:0; overflow:hidden !important;
	transition:max-height .38s var(--ease), opacity .25s var(--ease);
}
.main-nav .is-menu-open .nav-mega > .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container{
	max-height:16rem; opacity:1;
}
/* Submenu children: quieter than the top level, no counter, no arrow, no rule.
   Right-aligned like every other row, indented from the arrow column. */
.main-nav .is-menu-open .nav-mega .wp-block-navigation__submenu-container .wp-block-navigation-item{
	display:block; width:100%;
}
.main-nav .is-menu-open .nav-mega .wp-block-navigation__submenu-container .wp-block-navigation-item__content{
	display:block; font-family:var(--font-display); font-size:1.05rem; font-weight:500;
	letter-spacing:.005em; text-transform:none; white-space:nowrap; text-align:right;
	overflow:hidden; text-overflow:ellipsis;
	color:rgba(255,255,255,.72) !important; padding:.65rem 2.4rem .65rem 0 !important;
}
.main-nav .is-menu-open .nav-mega .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover{
	color:var(--gold-soft,#E4C778) !important;
}

/* The CTA becomes a real gold pill button inside the overlay. */
.main-nav .is-menu-open .wp-block-navigation-item.nav-cta-mobile{display:block; margin-top:2.1rem;}
.main-nav .is-menu-open .nav-cta-mobile .wp-block-navigation-item__content{
	display:block; width:100%; text-align:center; box-sizing:border-box;
	background:var(--gold); color:var(--navy) !important;
	font-family:var(--font-display); font-weight:600; font-size:.92rem;
	letter-spacing:.14em; text-transform:uppercase;
	padding:1.05rem 1.5rem; border-radius:100px; border:0;
	transition:background-color .25s var(--ease), transform .25s var(--ease);
}
.main-nav .is-menu-open .nav-cta-mobile .wp-block-navigation-item__content:hover,
.main-nav .is-menu-open .nav-cta-mobile .wp-block-navigation-item__content:focus{
	outline:none; background:var(--gold-soft,#E4C778); transform:translateY(-2px);
}

/* Close button → circular, gold on hover. */
.main-nav .wp-block-navigation__responsive-container-close{
	top:1.5rem; right:1.5rem; width:2.75rem; height:2.75rem; padding:0 !important;
	align-items:center; justify-content:center;
	border-radius:50%; border:1px solid rgba(255,255,255,.24); color:#fff !important;
	transition:color .25s var(--ease), border-color .25s var(--ease), transform .35s var(--ease);
}
.main-nav .wp-block-navigation__responsive-container-close svg{display:block; margin:0; width:1.35rem; height:1.35rem;}
.main-nav .wp-block-navigation__responsive-container-close:hover{
	border-color:var(--gold); color:var(--gold) !important; transform:rotate(90deg);
}

@media (max-width:991.98px){
	.site-header .bar{flex-wrap:nowrap;}
	.brand{margin-right:auto;}
}

/* =========================================================================
   PRIMA GARDEN ESTATE PAGE
   ========================================================================= */

/* Header floats transparent over the video hero (like home), navy on scroll. */
.prima-page .site-header{background:transparent; border-bottom-color:transparent;}
.prima-page .site-header.is-solid{background:var(--navy); border-bottom-color:rgba(255,255,255,.1);}
/* The hero fills edge-to-edge behind the fixed header — cancel the interior
   first-section top offset that other pages use. */
body.prima-page .site-main .wp-block-post-content > .section.prima-hero:first-child{padding-top:0 !important;}

/* ---- Hero: cinematic scroll-scrub + fixed-parallax handoff ----
   BASE (no JS / reduced-motion / mobile) = a normal STACKED band: an ~80svh media
   block with the centred intro over it, then the lede panel below. The .is-scrub
   class (added by prima.js on desktop, fine-pointer, motion-OK) upgrades it to the
   fixed-stage scrolly model. */
.prima-hero{padding:0 !important; position:relative; background:var(--navy); color:#fff;}
/* Media and intro share ONE grid cell (stacked); the cell — and therefore the
   media — grows to fit the intro's content, so copy never clips on short or
   narrow screens. The panel is a normal block in row 2. */
.prima-hero__stage{position:relative; display:grid; grid-template-columns:minmax(0,1fr);}
.prima-hero__media{position:relative; grid-area:1 / 1; min-height:80svh; overflow:hidden;}
.prima-hero__poster,
.prima-hero__canvas{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;}
.prima-hero__poster{z-index:0;}
.prima-hero__canvas{z-index:1; display:none;}
.prima-hero.is-canvas .prima-hero__canvas{display:block;}
.prima-hero__scrim{position:absolute; inset:0; z-index:2; background:
	linear-gradient(180deg, rgba(8,11,16,.7) 0%, rgba(8,11,16,.34) 30%, rgba(8,11,16,.5) 70%, rgba(8,11,16,.9) 100%);}

/* Centred intro copy (fades out as the video scrubs). Its own radial darkening
   sits above the video for readability and fades away with the copy. */
.prima-hero__intro{position:relative; grid-area:1 / 1; z-index:3;
	display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center;
	padding:calc(var(--header-h,64px) + 1rem) 1.5rem 2.75rem;
	background:radial-gradient(ellipse 92% 78% at 50% 46%, rgba(8,11,16,.55) 0%, rgba(8,11,16,.22) 58%, transparent 100%);}
.prima-hero__intro-inner{width:100%; max-width:min(74rem,100%); margin-inline:auto;}
.prima-hero .eyebrow{color:#fff;}
.prima-hero .eyebrow::after{background:var(--gold);}
.prima-hero__intro .eyebrow{margin-bottom:1rem;}
/* Title: wider measure + bigger type. Sized in vw AND svh so the taller block
   still fits the fixed 100svh scrub stage while the intro fades out (the fade
   animates .prima-hero__intro, so nothing here interferes with it). */
.prima-hero__intro h1{color:#fff; font-size:clamp(2rem,min(4.4vw,7.4svh),4.1rem); line-height:1.05;
	letter-spacing:-.015em; max-width:30ch; margin:.4rem auto 0; text-wrap:balance;}
.prima-hero__sub{font-family:var(--font-serif); font-size:clamp(1rem,1.6vw,1.25rem); color:rgba(255,255,255,.92); line-height:1.55; max-width:50ch; margin:.9rem auto 1.6rem;}
.prima-hero__cta{justify-content:center; margin-bottom:1.7rem;}
.prima-hero__chips{list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; justify-content:center; gap:clamp(.6rem,1.8vw,1.4rem);}
.prima-hero__chips li{position:relative; padding-right:clamp(.7rem,2vw,1.6rem);}
.prima-hero__chips li:not(:last-child)::after{content:""; position:absolute; right:0; top:50%; transform:translateY(-50%); width:1px; height:2.2em; background:rgba(255,255,255,.22);}
.prima-hero__chips b{display:block; font-family:var(--font-display); font-weight:700; font-size:clamp(1.1rem,2.4vw,1.7rem); line-height:1; color:#fff;}
.prima-hero__chips span{display:block; margin-top:.3rem; font-size:.68rem; text-transform:uppercase; letter-spacing:.12em; color:rgba(255,255,255,.6);}

/* Lede panel — BASE: a normal navy block below the media. */
.prima-hero__panel{position:relative; grid-area:2 / 1; z-index:1; background:var(--navy); padding:clamp(2.75rem,7vw,4.5rem) 0;}
.prima-hero__panel-inner{width:100%; max-width:var(--wrap); margin-inline:auto; padding-inline:1.5rem;}
.prima-hero__panel .eyebrow{color:#fff;}
.prima-hero__panel h2{color:#fff; font-size:clamp(1.7rem,3.4vw,2.7rem); line-height:1.12; margin:.3rem 0 1.2rem; max-width:20ch;}
.prima-hero__panel p{margin:0 0 1.1rem; font-size:clamp(1rem,1.2vw,1.1rem); line-height:1.7; color:rgba(255,255,255,.82); max-width:54ch;}
.prima-hero__panel p strong{color:#fff; font-weight:600;}
.prima-hero__panel .prima-lede__pull{margin-top:1.6rem; padding-left:1.2rem; border-left:3px solid var(--gold);}
.prima-hero__panel .prima-lede__pull b{display:block; font-family:var(--font-display); font-weight:700; font-size:clamp(2.2rem,5vw,3.1rem); line-height:1; color:var(--gold-soft,#E4C778);}
.prima-hero__panel .prima-lede__pull span{display:block; margin-top:.5rem; font-size:.92rem; line-height:1.5; color:rgba(255,255,255,.6); max-width:26ch;}
.prima-hero__panel .prima-lede__tags{list-style:none; display:flex; flex-wrap:wrap; gap:.7rem; margin:1.8rem 0 0; padding:0;}
.prima-hero__panel .prima-lede__tags li{display:flex; align-items:center; gap:.5rem; font-weight:600; font-size:.88rem; color:#fff; background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.14); border-radius:999px; padding:.5rem 1rem;}
.prima-hero__panel .prima-lede__tags svg{color:var(--gold-soft,#E4C778); flex:none;}

/* Scroll cue — only meaningful in the desktop scrub. */
.prima-hero__cue{display:none; position:absolute; z-index:3; left:50%; transform:translateX(-50%); bottom:1.1rem; align-items:center; gap:.6rem; font-size:.68rem; text-transform:uppercase; letter-spacing:.14em; color:rgba(255,255,255,.72);}
.prima-hero__cue-line{width:26px; height:1px; background:rgba(255,255,255,.45); position:relative; overflow:hidden;}
.prima-hero__cue-line::after{content:""; position:absolute; inset:0 auto 0 0; width:45%; background:var(--gold); animation:primaCue 1.8s var(--ease) infinite;}
@keyframes primaCue{0%{transform:translateX(-120%)}100%{transform:translateX(280%)}}

/* ---- ENHANCED: desktop scroll-scrub (.is-scrub) ---- */
.prima-hero.is-scrub{height:300vh;}
/* The stage is ALWAYS fixed and layered BEHIND the page; sections below scroll
   over it (see the z-index parallax rules). No pin-spacer → always full-bleed. */
.prima-hero.is-scrub .prima-hero__stage{position:fixed; inset:0; height:100svh; display:block; overflow:hidden;}
.prima-hero.is-scrub .prima-hero__media{position:absolute; inset:0; height:100%; min-height:0;}
.prima-hero.is-scrub .prima-hero__intro{position:absolute; inset:0; height:auto; padding-bottom:3rem;}
/* Once the tall hero spacer has fully scrolled past, stop the fixed stage from
   painting — otherwise it (a positioned element) covers the non-positioned
   footer at the bottom of the page. prima.js toggles .is-past. */
.prima-hero.is-scrub.is-past .prima-hero__stage{visibility:hidden;}
.prima-hero.is-scrub .prima-hero__cue{display:flex;}
/* Right-side lede panel: a right→left navy fade with the copy on the opaque
   right; hidden until prima.js reveals it near the end of the scrub. */
.prima-hero.is-scrub .prima-hero__panel{position:absolute; inset:0; z-index:4; height:100%; padding:0; background:none;
	display:flex; align-items:center; justify-content:flex-end; opacity:0; will-change:opacity,transform;}
.prima-hero.is-scrub .prima-hero__panel::before{content:""; position:absolute; inset:0; z-index:0;
	background:linear-gradient(to left, rgba(8,11,16,.97) 0%, rgba(8,11,16,.94) 34%, rgba(8,11,16,.62) 56%, rgba(8,11,16,0) 78%);}
.prima-hero.is-scrub .prima-hero__panel-inner{position:relative; z-index:1; width:46%; min-width:400px; max-width:560px;
	margin-right:clamp(2rem,6vw,6rem); padding-inline:0; padding-block:calc(var(--header-h,64px) + 1rem) 1rem;}

/* ---- Parallax: the fixed hero sits behind; every following section covers it ---- */
.prima-page .wp-block-post-content > .section{position:relative; z-index:1;}
.prima-page .wp-block-post-content > .section.prima-hero{z-index:0;}
/* The footer is a template-part sibling of <main>, so it isn't caught by the
   rule above. Give it a stacking context of its own so it sits above the fixed
   hero stage (belt-and-suspenders alongside .is-past). */
.prima-page .site-footer{position:relative; z-index:1;}

/* ---- Hero responsive tuning ---- */
/* Mid-size desktops (scrub is on): widen the copy column so the lede isn't
   cramped, and push the fade a little further left to match. */
@media (min-width:1024px) and (max-width:1200px){
	.prima-hero.is-scrub .prima-hero__panel-inner{width:56%; min-width:0; margin-right:clamp(1.5rem,4vw,3rem);}
	.prima-hero.is-scrub .prima-hero__panel::before{
		background:linear-gradient(to left, rgba(8,11,16,.97) 0%, rgba(8,11,16,.9) 46%, rgba(8,11,16,.55) 70%, rgba(8,11,16,0) 90%);}
}
/* Short viewports: let the lede scroll inside the panel instead of clipping. */
@media (min-width:1024px) and (max-height:760px){
	.prima-hero.is-scrub .prima-hero__panel{align-items:flex-start;}
	.prima-hero.is-scrub .prima-hero__panel-inner{max-height:100%; overflow-y:auto; padding-block:calc(var(--header-h,64px) + .5rem) .75rem;}
}
/* Phones (base stacked layout): tighten the intro so it fits comfortably. */
@media (max-width:600px){
	.prima-hero__intro{padding:calc(var(--header-h,64px) + 1rem) 1.15rem 2.25rem;}
	.prima-hero__intro h1{font-size:clamp(1.75rem,7.4vw,2.6rem); line-height:1.08; max-width:22ch;}
	.prima-hero__sub{font-size:1rem; margin:.8rem auto 1.35rem;}
	.prima-hero__chips{gap:.55rem 1.1rem;}
	.prima-hero__chips li{padding-right:1.1rem;}
	.prima-hero__chips b{font-size:1.2rem;}
	.prima-hero__panel-inner{padding-inline:1.15rem;}
}

/* ---- Tipe rumah: large spec cards ---- */
.prima-type__grid{display:grid; grid-template-columns:1fr 1fr; gap:clamp(1.5rem,3vw,2.5rem);}
.prima-type{background:var(--paper-2); border:1px solid var(--line); border-radius:14px; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 20px 50px -34px rgba(20,28,38,.5); transition:transform .4s var(--ease), box-shadow .4s var(--ease);}
.prima-type:hover{transform:translateY(-6px); box-shadow:0 34px 70px -38px rgba(20,28,38,.6);}
.prima-type__media{position:relative; aspect-ratio:16/10; overflow:hidden;}
.prima-type__media img{width:100%; height:100%; object-fit:cover; transition:transform .6s var(--ease);}
.prima-type:hover .prima-type__media img{transform:scale(1.05);}
.prima-type__pill{position:absolute; top:1rem; left:1rem; background:rgba(20,28,38,.72); color:#fff; font-size:.66rem; text-transform:uppercase; letter-spacing:.12em; padding:.35rem .7rem; border-radius:999px;}
.prima-type__body{padding:clamp(1.4rem,3vw,2rem); display:flex; flex-direction:column; flex:1;}
.prima-type__name{font-family:var(--font-display); font-weight:700; font-size:clamp(1.4rem,2.6vw,1.9rem); color:var(--ink); margin:0 0 .5rem;}
.prima-type__lead{margin:0 0 1.3rem; font-size:.95rem; line-height:1.6; color:var(--muted);}
.prima-type__specs{display:grid; grid-template-columns:1fr 1fr; gap:.7rem; margin-bottom:1.3rem;}
.prima-type__spec{display:flex; flex-direction:column; gap:.15rem; padding:.75rem .9rem; background:var(--paper); border:1px solid var(--line); border-radius:10px;}
.prima-type__spec span{font-size:.72rem; text-transform:uppercase; letter-spacing:.09em; color:var(--muted);}
.prima-type__spec b{font-family:var(--font-display); font-weight:700; font-size:1.15rem; color:var(--ink);}
.prima-type__rooms{list-style:none; margin:0 0 1.5rem; padding:0; display:flex; flex-wrap:wrap; gap:.5rem .9rem;}
.prima-type__rooms li{display:flex; align-items:center; gap:.35rem; font-size:.86rem; color:var(--ink);}
.prima-type__rooms svg{color:#1FAF54; flex:none;}
.prima-type__plan{margin:0 0 1.6rem; padding:1.1rem; background:var(--paper); border:1px solid var(--line); border-radius:12px; text-align:center;}
.prima-type__plan img{width:auto; max-width:100%; max-height:340px; height:auto; border-radius:6px;}
.prima-type__plan figcaption{margin-top:.7rem; font-size:.78rem; color:var(--muted);}
.prima-type__cta{margin-top:auto; align-self:flex-start; display:inline-flex; align-items:center; gap:.5rem; background:#1FAF54; color:#fff; padding:.7rem 1.3rem; border-radius:999px; font-weight:600; font-size:.9rem; transition:background .3s, transform .3s;}
.prima-type__cta:hover{background:#178f44; transform:translateY(-2px); color:#fff;}
.prima-type__cta svg{flex:none;}
@media (max-width:820px){ .prima-type__grid{grid-template-columns:1fr;} }

/* ---- Kualitas bangunan: dark navy spec band ---- */
.prima-spec{background:var(--navy); color:#fff;}
.prima-spec .eyebrow{color:#fff;}
.prima-spec .eyebrow::after{background:var(--gold);}
.prima-spec .section__head h2{color:#fff;}
.prima-spec .section__head .lead{color:rgba(255,255,255,.8);}
.prima-spec__grid{display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(1.1rem,2.6vw,1.8rem);}
.prima-spec__item{margin:0; display:flex; flex-direction:column; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.09); border-radius:12px; overflow:hidden;}
.prima-spec__media{position:relative; aspect-ratio:7/5; overflow:hidden;}
.prima-spec__media img{width:100%; height:100%; object-fit:cover; transition:transform .6s var(--ease);}
.prima-spec__item:hover .prima-spec__media img{transform:scale(1.05);}
.prima-spec__item figcaption{position:relative; padding:1.4rem;}
.prima-spec__icon{position:absolute; top:-23px; left:1.4rem; width:46px; height:46px; display:grid; place-items:center; border-radius:10px; background:var(--gold,#C29A45); color:#fff; box-shadow:0 8px 20px -8px rgba(0,0,0,.6);}
.prima-spec__item b{display:block; font-family:var(--font-display); font-weight:700; font-size:1.06rem; color:#fff; margin:.6rem 0 .35rem;}
.prima-spec__item p{margin:0; font-size:.9rem; line-height:1.6; color:rgba(255,255,255,.68);}
@media (max-width:900px){ .prima-spec__grid{grid-template-columns:1fr 1fr;} }
@media (max-width:560px){ .prima-spec__grid{grid-template-columns:1fr;} }

/* ---- Galeri: offset render grid ---- */
.prima-gallery__grid{display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(.7rem,1.6vw,1.1rem);}
.prima-gallery__item{position:relative; margin:0; border-radius:12px; overflow:hidden; aspect-ratio:4/3;}
/* First shot is featured — spans two columns and two rows. */
.prima-gallery__item--1{grid-column:span 2; grid-row:span 2; aspect-ratio:auto;}
.prima-gallery__item img{width:100%; height:100%; object-fit:cover; transition:transform .7s var(--ease);}
.prima-gallery__item:hover img{transform:scale(1.05);}
.prima-gallery__item figcaption{position:absolute; left:0; right:0; bottom:0; padding:1.6rem 1.1rem .8rem; font-size:.82rem; font-weight:600; color:#fff; background:linear-gradient(transparent, rgba(10,14,20,.82));}
@media (max-width:820px){ .prima-gallery__grid{grid-template-columns:1fr 1fr;} .prima-gallery__item--1{grid-column:span 2; grid-row:auto; aspect-ratio:16/10;} }
@media (max-width:520px){ .prima-gallery__grid{grid-template-columns:1fr;} .prima-gallery__item--1{grid-column:span 1;} }

/* ---- Lokasi: illustrated map + landmarks/highlights ---- */
.prima-loc__grid{display:grid; grid-template-columns:1fr 1fr; gap:clamp(2rem,4vw,3.5rem); align-items:center;}
.prima-loc__map{margin:0;}
.prima-loc__map img{width:100%; height:auto; border-radius:14px; border:1px solid var(--line); background:#fff;}
.prima-loc__map figcaption{margin-top:.8rem; text-align:center; font-size:.82rem; color:var(--muted);}
.prima-loc__body h2{font-size:clamp(1.7rem,3.2vw,2.5rem); line-height:1.14; margin:.3rem 0 1rem; color:var(--ink);}
.prima-loc__body > p{margin:0 0 1.5rem; font-size:1rem; line-height:1.7; color:var(--muted); max-width:52ch;}
.prima-loc__near{list-style:none; margin:0 0 1.8rem; padding:0; display:grid; grid-template-columns:1fr 1fr; gap:.6rem 1rem;}
.prima-loc__near li{display:flex; align-items:center; gap:.5rem; font-size:.9rem; color:var(--ink);}
.prima-loc__near svg{color:var(--gold,#C29A45); flex:none;}
.prima-loc__highlights{list-style:none; margin:0 0 1.9rem; padding:0; display:grid; gap:.9rem;}
.prima-loc__highlights li{display:flex; gap:.7rem; align-items:flex-start;}
.prima-loc__highlights svg{color:#1FAF54; flex:none; margin-top:.1rem;}
.prima-loc__highlights b{display:block; font-weight:700; font-size:.98rem; color:var(--ink);}
.prima-loc__highlights span{display:block; margin-top:.1rem; font-size:.86rem; line-height:1.5; color:var(--muted);}
.prima-loc__cta{margin:0;}
@media (max-width:860px){ .prima-loc__grid{grid-template-columns:1fr; gap:2rem;} .prima-loc__map{max-width:520px; margin-inline:auto;} }
@media (max-width:440px){ .prima-loc__near{grid-template-columns:1fr;} }

/* =========================================================================
   D'GARDENIA CITY PAGE
   =========================================================================
   Only the pieces Prima has no equivalent for live here. The type cards,
   quality band, gallery grid and location grid all reuse the .prima-* classes
   above — those carry no body.prima-page scope, so they apply as-is and the
   two project pages stay visually consistent in structure while differing in
   colour (assets/css/dg-accent.css) and section mix.
   ========================================================================= */

/* Header floats transparent over the hero, navy on scroll — same as Prima. */
.dgardenia-page .site-header{background:transparent; border-bottom-color:transparent;}
.dgardenia-page .site-header.is-solid{background:var(--navy); border-bottom-color:rgba(255,255,255,.1);}
body.dgardenia-page .site-main .wp-block-post-content > .section.dg-hero:first-child{padding-top:0 !important;}

/* ---- Hero ----
   A single still, deliberately: this project has no frame sequence, so there
   is nothing to scrub and no fixed-parallax stage. Media and intro share one
   grid cell so the cell grows to fit the copy and nothing clips on short or
   narrow screens — the same technique as .prima-hero__stage. */
.dg-hero{padding:0 !important; position:relative; background:var(--navy); color:#fff;}
.dg-hero__stage{position:relative; display:grid; grid-template-columns:minmax(0,1fr);}
.dg-hero__media{position:relative; grid-area:1 / 1; min-height:82svh; overflow:hidden;}
.dg-hero__img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;}
/* Emerald-tinted scrim rather than Prima's neutral black — the accent reads
   through the photograph instead of sitting only on the copy. */
.dg-hero__scrim{position:absolute; inset:0; z-index:2; background:
	linear-gradient(180deg, rgba(6,26,31,.72) 0%, rgba(6,26,31,.3) 32%, rgba(6,26,31,.46) 68%, rgba(4,20,24,.92) 100%);}
.dg-hero__intro{position:relative; grid-area:1 / 1; z-index:3;
	display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center;
	padding:calc(var(--header-h,64px) + 1rem) 1.5rem 2.75rem;
	background:radial-gradient(ellipse 92% 78% at 50% 46%, rgba(6,26,31,.55) 0%, rgba(6,26,31,.2) 58%, transparent 100%);}
.dg-hero__intro-inner{width:100%; max-width:min(74rem,100%); margin-inline:auto;}
.dg-hero .eyebrow{color:#fff; margin-bottom:1rem;}
.dg-hero .eyebrow::after{background:var(--gold);}
.dg-hero__intro h1{color:#fff; font-size:clamp(2rem,min(4.4vw,7.4svh),4.1rem); line-height:1.05;
	letter-spacing:-.015em; max-width:24ch; margin:.4rem auto 0; text-wrap:balance;}
.dg-hero__sub{font-family:var(--font-serif); font-size:clamp(1rem,1.6vw,1.25rem); color:rgba(255,255,255,.92); line-height:1.55; max-width:56ch; margin:.9rem auto 1.6rem;}
.dg-hero__cta{justify-content:center; margin-bottom:1.7rem;}
.dg-hero__chips{list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; justify-content:center; gap:clamp(.6rem,1.8vw,1.4rem);}
.dg-hero__chips li{position:relative; padding-right:clamp(.7rem,2vw,1.6rem);}
.dg-hero__chips li:not(:last-child)::after{content:""; position:absolute; right:0; top:50%; transform:translateY(-50%); width:1px; height:2.2em; background:rgba(255,255,255,.22);}
.dg-hero__chips b{display:block; font-family:var(--font-display); font-weight:700; font-size:clamp(1.05rem,2.2vw,1.6rem); line-height:1; color:#fff;}
.dg-hero__chips span{display:block; margin-top:.3rem; font-size:.66rem; text-transform:uppercase; letter-spacing:.11em; color:rgba(255,255,255,.62);}

/* Visually hidden but available to screen readers — used for the comparison
   table's caption and its non-visual row headers. */
.dg-sr{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden;
	clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; border:0;}

/* ---- Mengapa: five pillars, as a bento ----
   Five is an awkward number for a uniform grid — at four columns it left three
   empty cells. Instead the strongest reason takes a 2x2 hero tile and the other
   four fill single cells: 4 + 4 = 8, so the block always tiles exactly. */
.dg-why__grid{list-style:none; margin:0; padding:0; display:grid; gap:clamp(.9rem,1.8vw,1.4rem);
	grid-template-columns:repeat(4,1fr);}
.dg-why__item{display:flex; flex-direction:column; background:#fff; border:1px solid rgba(28,76,87,.1);
	border-radius:14px; padding:clamp(1.2rem,2.2vw,1.7rem); box-shadow:0 1px 2px rgba(28,76,87,.05);}
.dg-why__icon{display:inline-flex; align-items:center; justify-content:center; width:46px; height:46px;
	border-radius:12px; background:var(--sand); color:var(--gold-deep); margin-bottom:1rem; flex:none;}
.dg-why__item b{display:block; font-family:var(--font-display); font-size:1.02rem; color:var(--ink); margin-bottom:.45rem;}
.dg-why__item p{margin:0; font-size:.92rem; line-height:1.6; color:var(--body);}

/* The hero tile: a photo of the estate entrance under an emerald gradient wash,
   larger type, so the section has one clear entry point instead of five equal
   ones. isolation + z-index keep the content above both layers. */
.dg-why__item--hero{grid-column:span 2; grid-row:span 2; justify-content:flex-end;
	position:relative; isolation:isolate; overflow:hidden;
	border-color:transparent; color:#fff; min-height:clamp(280px,26vw,420px);}
.dg-why__media{position:absolute; inset:0; z-index:-2; display:block;}
.dg-why__media img{width:100%; height:100%; object-fit:cover;}
/* Two layers, and the split matters. ::before is the emerald hue wash, kept
   light so the photograph still reads. ::after is a bottom scrim that only
   covers the copy block — measured, not guessed: with the wash alone the
   lightest pixel behind the text gave white just 2.59:1. Equal z-index means
   ::after paints over ::before, which is why the scrim is the later one. */
.dg-why__item--hero::before{content:""; position:absolute; inset:0; z-index:-1;
	background:linear-gradient(160deg, rgba(79,166,184,.22) 0%, rgba(38,112,127,.28) 45%, rgba(18,63,73,.36) 100%);}
.dg-why__item--hero::after{content:""; position:absolute; inset:0; z-index:-1;
	background:linear-gradient(to top, rgba(9,32,38,.94) 0%, rgba(9,32,38,.80) 24%, rgba(9,32,38,.30) 46%, transparent 62%);}
.dg-why__item--hero .dg-why__icon{background:rgba(255,255,255,.18); color:#fff; width:54px; height:54px;}
.dg-why__item--hero b{color:#fff; font-size:clamp(1.3rem,2.2vw,1.9rem); margin-bottom:.6rem;}
.dg-why__item--hero p{color:rgba(255,255,255,.92); font-size:1rem; max-width:34ch;}

@media (max-width:1024px){
	.dg-why__grid{grid-template-columns:repeat(2,1fr);}
	.dg-why__item--hero{grid-column:span 2; grid-row:auto; min-height:240px;}
}
@media (max-width:600px){
	.dg-why__grid{grid-template-columns:1fr;}
	.dg-why__item--hero{grid-column:auto; min-height:220px;}
}

/* ---- Tipe Rumah: side-by-side comparison ----
   Three types with three DIFFERENT footprints is the thing Prima cannot show
   (its two share one denah), so this is a real table rather than a card deck —
   which also means the header cells get announced with each value. */
.dg-cmp__scroll{overflow-x:auto; -webkit-overflow-scrolling:touch; margin-top:clamp(1.5rem,3vw,2.5rem);}
.dg-cmp{width:100%; min-width:680px; border-collapse:separate; border-spacing:0; text-align:left;}
.dg-cmp th, .dg-cmp td{padding:clamp(.7rem,1.4vw,1.1rem); vertical-align:middle;}
/* Label column — sticky so the row meaning survives horizontal scrolling.
   It MUST be fully opaque and match the row tint exactly, or the house photos
   scroll visibly underneath it. The band is the section's white, and the odd-row
   value is rgba(28,76,87,.035) already composited over white. */
.dg-cmp tbody th[scope="row"]{position:sticky; left:0; z-index:3; width:150px; min-width:130px;
	background:#fff; font-family:var(--font-display); font-weight:500; font-size:.78rem;
	text-transform:uppercase; letter-spacing:.1em; color:var(--muted); white-space:nowrap;}
.dg-cmp__corner{position:sticky; left:0; z-index:3; background:#fff; width:150px;}
/* A hairline + shadow so the frozen column reads as an edge once it overlaps. */
.dg-cmp tbody th[scope="row"]::after,
.dg-cmp__corner::after{content:""; position:absolute; top:0; right:0; bottom:0; width:1px;
	background:rgba(28,76,87,.12); box-shadow:6px 0 10px -6px rgba(14,44,52,.18);}
.dg-cmp thead th{width:calc((100% - 150px) / 3); border-bottom:2px solid var(--gold); vertical-align:bottom;}
.dg-cmp__name{display:block; font-family:var(--font-display); font-size:clamp(1.15rem,2vw,1.55rem); color:var(--ink); line-height:1.15;}
.dg-cmp__badge{display:inline-block; margin-top:.5rem; padding:.25rem .7rem; border-radius:999px;
	background:var(--sand); color:var(--gold-deep); font-size:.72rem; font-weight:600; letter-spacing:.04em;}
.dg-cmp tbody tr:nth-child(odd) td{background:rgba(28,76,87,.035);}
/* Same colour as the line above, pre-composited over white so the sticky cell
   is opaque yet indistinguishable from the row it belongs to. */
.dg-cmp tbody tr:nth-child(odd) th[scope="row"]{background:#F7F9F9;}
.dg-cmp__r-media img{border-radius:10px; aspect-ratio:3/2; object-fit:cover; width:100%;}
.dg-cmp__r-lead td{font-size:.9rem; line-height:1.55; color:var(--body);}
.dg-cmp td b{font-family:var(--font-display); font-weight:600; font-size:clamp(1rem,1.6vw,1.25rem); color:var(--ink);}
.dg-cmp__r-plan td{text-align:center;}
.dg-cmp__r-plan .dg-plan{margin:0;}
.dg-cmp__r-cta .wp-block-buttons{justify-content:flex-start;}
.dg-cmp__r-cta .wp-block-button__link{display:inline-flex; align-items:center; gap:.5rem; white-space:nowrap;}
/* Fade hint that there is more table to the right. */
@media (max-width:900px){
	.dg-cmp__scroll{position:relative;
		-webkit-mask-image:linear-gradient(90deg,#000 92%,transparent 100%);
		mask-image:linear-gradient(90deg,#000 92%,transparent 100%);}
}

.dg-cmp__shared{margin-top:clamp(1.4rem,2.6vw,2.2rem); padding:clamp(1.1rem,2vw,1.5rem);
	background:var(--sand); border-radius:14px;}
.dg-cmp__shared b{display:block; font-family:var(--font-display); font-size:.78rem; text-transform:uppercase;
	letter-spacing:.12em; color:var(--gold-deep); margin-bottom:.9rem;}
.dg-cmp__shared ul{list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:.5rem .9rem;}
.dg-cmp__shared li{display:flex; align-items:center; gap:.4rem; font-size:.9rem; color:var(--body);}
.dg-cmp__shared svg{color:var(--gold); flex:none;}

/* ---- Fasilitas: full-width alternating bands ----
   The source crops are 4:1, so a card grid shrank them to ~94px tall and wasted
   the ratio. One band per row shows each at its natural scale, alternates side
   to side for rhythm, and makes the odd count of seven a non-issue. */
.dg-fac__list{display:flex; flex-direction:column; gap:clamp(1.6rem,3.4vw,3rem);}
.dg-fac__band{margin:0; display:grid; grid-template-columns:1.55fr 1fr;
	gap:clamp(1.2rem,2.6vw,2.4rem); align-items:center;}
.dg-fac__media{border-radius:14px; overflow:hidden; aspect-ratio:4 / 1;}
.dg-fac__media img{width:100%; height:100%; object-fit:cover; transition:transform .5s var(--ease);}
.dg-fac__band:hover .dg-fac__media img{transform:scale(1.04);}
/* Flip every second band. Both children are placed explicitly on row 1 so the
   swap never reflows them onto separate rows. */
.dg-fac__band:nth-child(even) .dg-fac__media{grid-column:2; grid-row:1;}
.dg-fac__band:nth-child(even) .dg-fac__text{grid-column:1; grid-row:1;}
.dg-fac__text{display:grid; grid-template-columns:auto 1fr; column-gap:.9rem; row-gap:.35rem; align-items:center;}
.dg-fac__num{grid-column:1 / -1; font-family:var(--font-display); font-size:.72rem; font-weight:600;
	letter-spacing:.16em; color:var(--gold); margin-bottom:.2rem;}
.dg-fac__icon{grid-row:span 2; display:inline-flex; align-items:center; justify-content:center;
	width:46px; height:46px; border-radius:12px; background:var(--sand); color:var(--gold-deep); flex:none;}
.dg-fac__text b{font-family:var(--font-display); font-size:clamp(1.05rem,1.8vw,1.35rem); color:var(--ink); align-self:end;}
.dg-fac__text p{margin:0; font-size:.92rem; line-height:1.6; color:var(--body); align-self:start;}
@media (max-width:820px){
	.dg-fac__band{grid-template-columns:1fr; gap:1rem;}
	/* Cancel the flip so the image always leads on narrow screens. */
	.dg-fac__band:nth-child(even) .dg-fac__media,
	.dg-fac__band:nth-child(even) .dg-fac__text{grid-column:1; grid-row:auto;}
}
@media (prefers-reduced-motion: reduce){
	.dg-fac__media img{transition:none;}
	.dg-fac__band:hover .dg-fac__media img{transform:none;}
}

/* ---- Scroll-scrubbed entrances (assets/js/dg.js) ----
   The script displaces items with transform, which does not affect layout but
   DOES extend the scrollable overflow area — without clipping, the scattered
   gallery photos would give the whole page a horizontal scrollbar. `clip` rather
   than `hidden` because clip does not create a scroll container.
   Scoped to .dg-anim, a class the script adds, so a no-JS page clips nothing. */
/* Crop at the section box: a photo thrown outside its section is meant to be
   cut off there, which is what makes the entrance read as coming from beyond
   the edge rather than floating over the neighbouring sections.
   overflow-clip-margin is deliberately 0 — raising it to let the ink paint
   outside also let Chrome count it as scrollable overflow, which pushed
   scrollWidth to 1725 on a 1440 viewport and gave the whole page a horizontal
   scrollbar. */
.dg-anim{overflow:clip; overflow-clip-margin:0;}
@supports not (overflow: clip){ .dg-anim{overflow:hidden;} }
/* The gallery's own hover zoom must not fight a transform the script is
   driving on the same element — the script owns .prima-gallery__item, hover
   stays on the inner img. */
.dg-anim .prima-gallery__item{transform-origin:50% 50%;}
.dg-anim .prima-spec__item{transform-origin:100% 100%;}

/* ---- Galeri: mosaic ----
   Eight photos in a uniform 3-col grid left a hole. At four columns with the
   living room at 2x2 and the seating shot two wide, the count comes to exactly
   12 cells — and the varied sizes read as edited rather than a contact sheet.
   Scoped to .dg-gallery so Prima's own gallery is untouched. */
.dg-gallery .prima-gallery__grid{grid-template-columns:repeat(4,1fr);}
.dg-gallery .prima-gallery__item--6{grid-column:span 2; aspect-ratio:8/3;}
@media (max-width:900px){
	.dg-gallery .prima-gallery__grid{grid-template-columns:repeat(2,1fr);}
	.dg-gallery .prima-gallery__item--1{grid-column:span 2; grid-row:auto; aspect-ratio:16/10;}
	.dg-gallery .prima-gallery__item--6{grid-column:span 2; aspect-ratio:16/10;}
}
@media (max-width:520px){
	.dg-gallery .prima-gallery__grid{grid-template-columns:1fr;}
	.dg-gallery .prima-gallery__item--1,
	.dg-gallery .prima-gallery__item--6{grid-column:span 1; aspect-ratio:4/3;}
}

/* ---- Floor plans ----
   These sources are 521–595px wide with fine dimension annotations. Prima's
   340px cap would render them ~180px wide and make the text unreadable, so
   this page gives them more room. */
.dg-plan img{max-height:520px;}

/* Small label above the landmark list. */
.dg-loc__label{margin:1.6rem 0 .6rem; font-family:var(--font-display); font-size:.72rem;
	text-transform:uppercase; letter-spacing:.14em; color:var(--muted);}

/* =========================================================================
   Header nav submenu — "Proyek" mega menu

   The card content (badge, tagline, facts, house render) is injected into core's
   own submenu markup by inc/mega-menu.php; nothing here depends on a custom
   wrapper. Below 992px every injected span is hidden and the submenu falls back
   to the plain indented text list, so the phone pays for none of this.
   ========================================================================= */
.site-header .main-nav .wp-block-navigation-submenu__toggle,
.site-header .main-nav .wp-block-navigation-item__label{color:#fff !important;}
.site-header .main-nav .wp-block-navigation__submenu-icon{fill:currentColor;}

/* Desktop: one wide panel spanning the header .wrap, two cluster cards inside. */
@media (min-width:992px){
	/* ⚠ position:FIXED, not absolute. Core marks four ancestors position:relative
	   for the mobile overlay (nav → responsive-container → dialog → container),
	   so an absolute panel resolves against the ~818px menu list, not the header
	   — left/right:0 would size it to the menu. Fixed skips the whole chain and
	   centres on the viewport, which for a full-width header is the same thing as
	   centring on .wrap. --header-h is published by assets/js/site.js; the 64px
	   fallback is what the bar actually measures (46px logo + 2×.55rem). */
	/* ⚠ Core closes the submenu on the <li>'s pointerleave, and the panel starts
	   9px below the item (the bar's bottom padding + border) — crossing that dead
	   strip on the way down shut the menu before you could reach it. This bridges
	   the gap so the pointer never leaves the <li>. Inert until the panel is open,
	   so it can't swallow clicks aimed at the header. */
	.site-header .main-nav .nav-mega::after{
		content:""; position:absolute; left:0; right:0; top:100%; height:1rem;
		pointer-events:none;
	}
	.site-header .main-nav .nav-mega:hover::after,
	.site-header .main-nav .nav-mega:focus-within::after{pointer-events:auto;}

	.site-header .main-nav .nav-mega > .wp-block-navigation__submenu-container{
		position:fixed !important;
		/* Sized to its content, then hung off the right edge of the header .wrap —
		   that is where the menu itself lives, so the panel reads as belonging to
		   "Proyek" rather than floating across the whole bar. */
		top:var(--header-h,64px) !important; left:auto !important;
		right:max(1.5rem, calc(50vw - (var(--wrap) / 2))) !important;
		/* Core ships a fixed 200px. */
		width:min(900px, calc(100vw - 3rem)) !important;
		min-width:0 !important; max-width:none !important; margin:0 !important;
		display:grid; grid-template-columns:1fr 1fr; gap:.5rem;
		background:var(--navy) !important; border:1px solid rgba(255,255,255,.12) !important;
		border-radius:var(--radius-lg); padding:.6rem;
		box-shadow:0 24px 50px -28px rgba(0,0,0,.7);

		/* ⚠ The closed state has to be OWNED here, geometry included. Core closes
		   with `width:0; height:0; overflow:hidden` alongside the fade, so the box
		   collapses on frame one and the opacity transition is never seen — the
		   panel just vanishes. Keeping it full-size and animating only opacity +
		   transform gives a real fade-out; `visibility` is switched with a delay
		   equal to the fade so the panel stays hit-testable until it has gone, then
		   drops out of the a11y tree and stops intercepting the hero underneath. */
		height:auto !important; overflow:visible !important;
		opacity:0 !important; visibility:hidden !important; transform:translateY(-6px);
		/* pointer-events has no transition, so it flips to none the instant the
		   close starts — a panel that is fading out must not eat a click meant for
		   the hero behind it. */
		pointer-events:none;
		transition:opacity .24s var(--ease), transform .24s var(--ease), visibility 0s linear .24s;
	}
	/* Both ways the panel can open: pointer hover, and core's toggle button
	   (which is what keyboard users reach — core excludes .open-on-hover-click
	   from its :focus-within rule, so Enter on the chevron is the a11y path). */
	.site-header .main-nav .nav-mega:hover > .wp-block-navigation__submenu-container,
	.site-header .main-nav .nav-mega > .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container{
		opacity:1 !important; visibility:visible !important; transform:translateY(0);
		pointer-events:auto;
		transition:opacity .24s var(--ease), transform .24s var(--ease), visibility 0s;
	}
	.site-header .main-nav .nav-mega > .wp-block-navigation__submenu-container > .wp-block-navigation-item{width:100%;}

	/* The card. overflow:hidden is load-bearing — it is what crops the house
	   render at the bottom-right corner. The right pad reserves the art column so
	   the copy never runs underneath it. */
	.site-header .main-nav .mega__card{
		position:relative; overflow:hidden;
		display:block !important; min-height:195px; box-sizing:border-box;
		/* The right pad IS the art column — a fixed px reserve, because the render
		   is sized off the card's height, not its width. Sized so the copy ends
		   right where the house begins, with no dead gap between them. */
		padding:1.25rem 190px 1.25rem 1.3rem !important;
		border-radius:8px; text-transform:none !important; letter-spacing:0 !important;
		white-space:normal; color:rgba(255,255,255,.86) !important;
		/* A faint tint, not decoration: without a visible card edge the left
		   render looks accidentally sliced in half mid-panel rather than cropped
		   by its own container. */
		background:rgba(255,255,255,.035);
		transition:background-color .25s var(--ease);
	}
	.site-header .main-nav .mega__card:hover,
	.site-header .main-nav .mega__card:focus-visible{
		background:rgba(255,255,255,.07); outline:none;
	}

	.site-header .main-nav .mega__badge{
		display:block; font-family:var(--font-display); font-size:.66rem; font-weight:600;
		letter-spacing:.2em; text-transform:uppercase; margin-bottom:.5rem;
		/* !important throughout the card: the generic
		   `.main-nav .wp-block-navigation-item:hover .…__content{color:… !important}`
		   rule further up would otherwise repaint every one of these gold on hover. */
		color:var(--gold) !important;
	}
	.site-header .main-nav .mega__card .wp-block-navigation-item__label{
		display:block; font-family:var(--font-display); font-size:1.15rem; font-weight:500;
		line-height:1.2; color:#fff !important;
	}
	.site-header .main-nav .mega__card:hover .wp-block-navigation-item__label{
		color:var(--gold-soft,#E4C778) !important;
	}
	.site-header .main-nav .mega__tag{
		display:block; margin-top:.45rem; max-width:22ch;
		font-family:var(--font-serif); font-size:.84rem; line-height:1.5;
		letter-spacing:0; text-transform:none; color:rgba(255,255,255,.6) !important;
	}
	.site-header .main-nav .mega__facts{display:flex; flex-direction:column; gap:.25rem; margin-top:.9rem;}
	.site-header .main-nav .mega__fact{
		font-family:var(--font-display); font-size:.7rem; letter-spacing:.11em;
		text-transform:uppercase; color:rgba(255,255,255,.72) !important;
	}
	.site-header .main-nav .mega__fact::before{content:"▪"; color:var(--gold); margin-right:.5rem;}

	/* Art: height-driven, not width-driven, so the two renders (504x477 and
	   561x584) come out the same visual size despite different aspect ratios.
	   top/bottom give the box a definite height; width:auto lets it shrink-wrap
	   the image. The negative right/bottom are what push it past the card edge
	   into the overflow:hidden crop. Note style.css sets picture{display:contents},
	   so this span — not the <picture> — has to carry the positioning. */
	.site-header .main-nav .mega__art{
		position:absolute; top:.6rem; right:-2rem; bottom:-1.8rem; width:auto;
		pointer-events:none;
		transition:transform .35s var(--ease);
	}
	/* Prima's render is shot from further back with more sky above the roof, so at
	   the shared offset it floated high in the card. Pushing it down deepens the
	   bottom crop and lines its roofline up with D'Gardenia's. */
	.site-header .main-nav .mega__art--prima-garden-estate{top:2rem; bottom:-3rem;}
	.site-header .main-nav .mega__img{height:100%; width:auto; display:block;}
	.site-header .main-nav .mega__card:hover .mega__art{transform:translate(-4px,-4px) scale(1.03);}

}

/* Mobile overlay: plain indented text list, collapsed until the chevron is hit.
   Every mega extra is dropped, so no house render is ever requested on a phone. */
@media (max-width:991.98px){
	.site-header .main-nav .mega__badge,
	.site-header .main-nav .mega__tag,
	.site-header .main-nav .mega__facts,
	.site-header .main-nav .mega__art{display:none !important;}
	.site-header .main-nav .is-menu-open .wp-block-navigation__submenu-container{
		background:transparent !important; border:0 !important; padding:0 !important;}
}

/* =========================================================================
   404 + hasil pencarian

   These pages have NO post, so their sections come from block patterns inside
   the template and land as DIRECT children of .site-main — there's no
   .wp-block-post-content wrapper. The layout rules further up are scoped to
   that wrapper, so mirror them here or the first section slides under the
   fixed header.
   ========================================================================= */
.site-main > .alignfull,
.site-main > .section{margin-block:0;}
body:not(.home) .site-main > .section:first-child{
	padding-top:calc(var(--header-h, 64px) + clamp(2.5rem,5vw,4rem)) !important;
}

/* Navy error band — same construction as .contact-hero, but it IS the whole
   page: one screen tall, with the fixed header's height absorbed into its own
   top padding so the content centres in the space actually left below the bar.
   (No global border-box reset in this file, so set it explicitly or the
   padding would stack on top of the 100svh and force a scrollbar.) */
.e404-hero{background:var(--navy); color:#fff; position:relative; overflow:hidden;
	box-sizing:border-box; min-height:100vh; min-height:100svh;
	display:flex; align-items:center;}
/* Beats the generic first-child offset above; keeps the band exactly one screen. */
body .site-main > .section.e404-hero:first-child{
	padding-top:calc(var(--header-h, 64px) + clamp(1.5rem,4vw,3rem)) !important;
	padding-bottom:clamp(1.5rem,4vw,3rem);
}
.e404-hero > .wrap{width:100%;}
.e404-hero::before{content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
	background:radial-gradient(ellipse 70% 60% at 50% 0%, rgba(194,154,69,.18), transparent 70%);}
.e404-hero__inner{position:relative; z-index:1; max-width:64ch; margin-inline:auto; text-align:center;}
.e404-hero .eyebrow{color:#fff; margin-inline:auto;}
.e404-hero .eyebrow::after{background:var(--gold);}
.e404-hero h1{color:#fff; font-size:clamp(2rem,4.6vw,3.4rem); line-height:1.08; margin:.4rem 0 1rem;}
.e404-hero .lead{color:rgba(255,255,255,.82); margin:0 auto 2.2rem; max-width:58ch;}
.e404-hero .wp-block-buttons{justify-content:center;}
.crumb--center{justify-content:center;}
.e404-hero .crumb{color:rgba(255,255,255,.5); margin-bottom:2rem;}
.e404-hero .crumb a{color:rgba(255,255,255,.62);}
.e404-hero .crumb a:hover{color:var(--gold-soft,#E4C778);}

/* Outlined numeral — same technique as .stat-band__num, stroked in gold. */
/* The svh term is load-bearing: the band is exactly one screen tall, so a
   vw-only size overflows short/landscape viewports. */
.e404__code{
	font-family:var(--font-display); font-weight:700; line-height:.82; letter-spacing:.02em;
	font-size:clamp(4rem,min(18vw,22svh),13rem); color:transparent;
	-webkit-text-stroke:1.5px rgba(194,154,69,.75); margin-bottom:1.2rem; user-select:none;
}
/* Short viewports (landscape phones, small laptops): tighten the stack. */
@media (max-height:820px){
	.e404-hero .crumb{margin-bottom:1rem;}
	.e404-hero .eyebrow{margin-bottom:.9rem;}
	.e404__code{margin-bottom:.5rem;}
	.e404-hero .lead{margin-bottom:1.4rem;}
	.site-main .kl-search{margin-bottom:1.4rem;}
}

/* Core search block. WP's block-library CSS loads AFTER style.css, so equal
   specificity loses — every override here is prefixed and forced. */
.site-main .kl-search{max-width:34rem; margin:0 auto 2rem;}
.site-main .kl-search .wp-block-search__inside-wrapper{gap:.6rem;}
.site-main .kl-search .wp-block-search__input{
	border:1px solid var(--line-strong) !important; border-radius:999px !important;
	background:var(--paper-2); color:var(--ink);
	padding:.85rem 1.4rem !important; font-family:var(--font-serif); font-size:1rem;
	transition:border-color .25s, box-shadow .25s;
}
.site-main .kl-search .wp-block-search__input:focus{
	outline:none; border-color:var(--gold) !important; box-shadow:0 0 0 3px rgba(194,154,69,.25);
}
.site-main .kl-search .wp-block-search__input::placeholder{color:var(--muted); opacity:1;}
.site-main .kl-search .wp-block-search__button{
	margin-left:0 !important; border:0 !important; border-radius:999px !important;
	background:var(--gold); color:#fff;
	font-family:var(--font-display); font-weight:600; font-size:.8rem;
	text-transform:uppercase; letter-spacing:.12em; padding:.85rem 1.6rem !important;
	cursor:pointer; transition:background-color .25s, transform .25s var(--ease);
}
.site-main .kl-search .wp-block-search__button:hover{background:var(--gold-deep); transform:translateY(-2px);}
/* Light-on-dark variant inside the navy band. */
.e404-hero .kl-search .wp-block-search__input{
	background:rgba(255,255,255,.07); color:#fff;
	border-color:rgba(255,255,255,.28) !important;
}
.e404-hero .kl-search .wp-block-search__input::placeholder{color:rgba(255,255,255,.5);}
.e404-hero .kl-search .wp-block-search__input:focus{
	background:rgba(255,255,255,.12); border-color:var(--gold) !important;
}
@media (max-width:520px){
	.site-main .kl-search .wp-block-search__inside-wrapper{flex-wrap:wrap;}
	.site-main .kl-search .wp-block-search__input,
	.site-main .kl-search .wp-block-search__button{width:100%;}
}

/* Halaman populer — link list on the search results template. */
.e404-links{
	list-style:none; margin:0; padding:0;
	display:grid; grid-template-columns:repeat(3,1fr); gap:0;
}
.e404-links li{border:1px solid var(--line); margin:-0.5px;}
/* box-sizing is explicit — there's no global border-box reset in this file, so
   width:100% + padding would otherwise push each link past its cell. */
.e404-links .link-arrow{
	display:flex; align-items:center; justify-content:space-between; gap:1rem;
	box-sizing:border-box; width:100%; padding:1.15rem 1.4rem; border:0;
	transition:background-color .3s, color .25s;
}
.e404-links .link-arrow:hover{background:var(--paper-2); color:var(--gold-deep);}
@media (max-width:900px){ .e404-links{grid-template-columns:repeat(2,1fr);} }
@media (max-width:560px){ .e404-links{grid-template-columns:1fr;} }

/* Search results header. */
.search-results .section__head{max-width:60ch; margin-inline:auto; text-align:center;}
.search-results .section__head .eyebrow{margin-inline:auto;}
.search-results .section__head .eyebrow::after{left:50%; transform:translateX(-50%);}
/* Smaller than the global h1 clamp — a search term is data, not a page title,
   and a long query would otherwise run to four display-sized lines. */
.search-results .wp-block-query-title{
	color:var(--heading); margin-bottom:1.2rem;
	font-size:clamp(1.9rem,3.6vw,2.9rem); overflow-wrap:anywhere;
}
.search-results .lead{margin-inline:auto;}
.search-results .wp-block-query-pagination{margin-top:clamp(2.5rem,5vw,4rem); gap:1rem;}

/* =========================================================================
   BLOG — index, archive, single article

   Like the 404/search templates these pages have no post_content wrapper: the
   sections are DIRECT children of .site-main, so they rely on the
   `.site-main > .section` rules above for their margins and header offset.

   ⚠ WP's block-library stylesheet loads AFTER style.css, so anything that
   fights a core block rule at equal specificity loses. Overrides for core
   blocks (post-featured-image, post-terms, query-pagination, read-more) are
   prefixed with .site-main and forced where core sets the property inline.
   ========================================================================= */

/* --- Index/archive hero ------------------------------------------------- */
.blog-hero__inner{max-width:62rem;}
.blog-hero .lead{margin-bottom:2rem;}
.blog-hero .wp-block-query-title{
	color:var(--heading); font-family:var(--font-display); font-weight:700;
	line-height:1.06; margin:0 0 1.4rem;
	font-size:clamp(2.2rem,5vw,3.6rem); overflow-wrap:anywhere;
}
/* The band is left-aligned, unlike the centred 404/search variant. */
.blog-hero .site-main .kl-search,
.site-main .blog-hero .kl-search{margin-inline:0;}
.blog-hero__search{max-width:34rem;}

/* --- Card grid ---------------------------------------------------------- */
.blog-grid{
	display:grid; grid-template-columns:repeat(3,1fr);
	gap:clamp(1.8rem,3vw,2.8rem);
}
/* ⚠ wp:post-template renders <ul class="… blog-grid"><li>…</li></ul>, so the
   grid items are the <li>, not .post-card. Stretch both so every card's
   read-more can sit on a shared baseline. Core's flow-layout rule sets
   display:flex on .wp-block-post-template and loads later — hence !important. */
.site-main .blog-grid{display:grid !important;}
.blog-grid > li{display:flex;}
.post-card{display:flex; flex-direction:column; flex:1;}
.post-card__media{margin:0 0 1.2rem;}
.post-card__media img,
.post-feature__media img{
	width:100%; aspect-ratio:3/2; object-fit:cover;
	border-radius:var(--radius); background:var(--sand);
	transition:transform .6s var(--ease);
}
.post-card__media a,
.post-feature__media a{display:block; overflow:hidden; border-radius:var(--radius);}
@media (hover:hover){
	.post-card:hover .post-card__media img,
	.post-feature:hover .post-feature__media img{transform:scale(1.045);}
}
.post-card__body{display:flex; flex-direction:column; flex:1;}

/* Meta row: category + date, display font, micro-caps. */
.post-card__meta{
	display:flex; align-items:center; gap:.75rem; margin-bottom:.85rem;
	font-family:var(--font-display); font-size:.74rem; font-weight:600;
	letter-spacing:.16em; text-transform:uppercase;
}
.post-card__meta > *{margin:0;}
.post-card__cat a{color:var(--gold-deep);}
.post-card__cat a:hover{color:var(--ink);}
.post-card__cat .wp-block-post-terms__separator{color:var(--line-strong);}
.post-card__date{color:var(--muted);}
/* Separator only between items — a card whose post has no category must not
   start with a stray dash. */
.post-card__meta > * + .post-card__date::before{content:"—"; margin-right:.75rem; color:var(--line-strong);}

.post-card .wp-block-post-title{margin:0 0 .7rem; font-size:clamp(1.25rem,1.8vw,1.5rem); line-height:1.18;}
.post-card .wp-block-post-title a{color:var(--ink);}
.post-card .wp-block-post-title a:hover{color:var(--gold-deep);}
.post-card .wp-block-post-excerpt{margin:0 0 1.3rem;}
.post-card .wp-block-post-excerpt__excerpt{margin:0; color:var(--body); font-size:1rem; line-height:1.7;}
/* Push the read-more to the card's baseline so a ragged grid still lines up. */
.post-card .wp-block-read-more{margin-top:auto; align-self:flex-start;}

/* --- Featured lead (newest post) ----------------------------------------
   Same <li> caveat as .blog-grid: the split has to happen INSIDE the single
   list item, so .post-feature itself stays a plain block. */
.site-main .post-feature{
	display:block !important; margin:0; padding:0; list-style:none;
	padding-bottom:clamp(2.5rem,5vw,4rem); margin-bottom:clamp(2.5rem,5vw,4rem);
	border-bottom:1px solid var(--line);
}
.post-feature > li{
	display:grid; grid-template-columns:1.15fr 1fr;
	gap:clamp(1.8rem,4vw,3.4rem); align-items:center;
}
.post-feature__media{margin:0;}
.post-feature__media img{aspect-ratio:4/3;}
.post-feature .wp-block-post-title{margin:0 0 1rem; font-size:clamp(1.8rem,3.2vw,2.7rem); line-height:1.1;}
.post-feature .wp-block-post-title a{color:var(--heading);}
.post-feature .wp-block-post-title a:hover{color:var(--gold-deep);}
.post-feature .wp-block-post-excerpt__excerpt{
	margin:0 0 1.6rem; color:var(--body);
	font-size:clamp(1.05rem,1.4vw,1.18rem); line-height:1.72;
}
.blog-index__head{margin-bottom:clamp(1.8rem,3vw,2.6rem);}
.blog-index__head .eyebrow{margin-bottom:0;}

/* --- Read-more link: reuse the .link-arrow look on a core block --------- */
.site-main .wp-block-read-more{
	display:inline-flex; align-items:center; gap:.5rem; width:fit-content;
	font-family:var(--font-display); font-weight:600; font-size:.78rem;
	letter-spacing:.16em; text-transform:uppercase; color:var(--ink);
	text-decoration:none; padding-bottom:.3rem;
	border-bottom:1.5px solid var(--ink); transition:.25s var(--ease);
}
.site-main .wp-block-read-more::after{content:"→"; transition:transform .25s var(--ease);}
.site-main .wp-block-read-more:hover{color:var(--gold-deep); border-color:var(--gold-deep);}
.site-main .wp-block-read-more:hover::after{transform:translateX(4px);}

/* --- Pagination --------------------------------------------------------- */
.kl-pagination{
	margin-top:clamp(2.8rem,5vw,4.5rem); gap:.5rem; align-items:center;
	font-family:var(--font-display); font-size:.8rem; font-weight:600;
	letter-spacing:.1em; text-transform:uppercase;
}
.kl-pagination .wp-block-query-pagination-numbers{display:flex; gap:.4rem; align-items:center;}
.kl-pagination a,
.kl-pagination .page-numbers{
	display:inline-grid; place-items:center; min-width:2.6rem; height:2.6rem;
	padding:0 .8rem; border-radius:999px; color:var(--ink);
	border:1px solid var(--line); transition:.25s var(--ease);
}
.kl-pagination a:hover{border-color:var(--ink); color:var(--ink); transform:translateY(-2px);}
.kl-pagination .page-numbers.current{background:var(--gold); border-color:var(--gold); color:#fff;}
.kl-pagination .page-numbers.dots{border-color:transparent;}

/* --- Single post: hero + body ------------------------------------------- */
.post-hero__inner{max-width:64rem;}
.post-hero .post-hero__cat{margin-bottom:1.4rem;}
.post-hero .post-hero__cat a{color:var(--ink);}
.post-hero .post-hero__cat a:hover{color:var(--gold-deep);}
/* .eyebrow's gold rule sits under the category, matching the other page heroes. */
.post-hero .wp-block-post-title{
	color:var(--heading); margin:0 0 1.6rem;
	font-size:clamp(2.1rem,4.4vw,3.7rem); line-height:1.08; font-weight:700;
	text-wrap:balance;
}
.post-meta{
	display:flex; align-items:center; gap:.85rem; margin:0;
	font-family:var(--font-display); font-size:.78rem; font-weight:600;
	letter-spacing:.14em; text-transform:uppercase; color:var(--muted);
}
.post-meta > *{margin:0;}
.post-meta > * + *::before{content:"—"; margin-right:.85rem; color:var(--line-strong);}

/* Capped below the wrap width: featured photos are commonly ~1000–1600px, and
   stretching one to the full 1240px band makes it visibly soft. */
.post-body__media{margin:0 auto clamp(2.5rem,5vw,4rem); max-width:1040px;}
.post-body__media img{
	width:100%; aspect-ratio:16/9; object-fit:cover;
	border-radius:var(--radius-lg); background:var(--sand);
}

/* --- Long-form article typography --------------------------------------- */
.prose{max-width:72ch; margin-inline:auto;}
.prose > *{margin-block:0 1.35rem;}
.prose > *:last-child{margin-bottom:0;}
.prose p{font-size:clamp(1.05rem,1.35vw,1.15rem); line-height:1.8; color:var(--body);}
.prose h2{
	font-size:clamp(1.6rem,2.6vw,2.2rem); line-height:1.16;
	color:var(--heading); margin-block:clamp(2.4rem,4vw,3.2rem) 1rem;
}
.prose h3{
	font-size:clamp(1.28rem,1.9vw,1.6rem); line-height:1.2;
	color:var(--ink); margin-block:clamp(1.8rem,3vw,2.4rem) .8rem;
}
.prose h4{
	font-size:1.1rem; letter-spacing:.06em; text-transform:uppercase;
	color:var(--ink); margin-block:1.8rem .7rem;
}
.prose a{color:var(--gold-deep); text-decoration:underline; text-underline-offset:.22em;
	text-decoration-thickness:1px; text-decoration-color:rgba(156,122,44,.45);}
.prose a:hover{color:var(--ink); text-decoration-color:var(--ink);}
.prose ul,.prose ol{padding-left:1.3rem; color:var(--body);}
.prose li{margin-bottom:.6rem; line-height:1.75;}
.prose ul li::marker{color:var(--gold);}
.prose ol li::marker{color:var(--gold-deep); font-family:var(--font-display); font-weight:600;}
.prose blockquote{
	margin:clamp(2rem,3.5vw,2.8rem) 0; padding:.2rem 0 .2rem 1.6rem;
	border-left:3px solid var(--gold); font-family:var(--font-serif);
	font-style:italic; font-size:clamp(1.15rem,1.7vw,1.35rem);
	line-height:1.6; color:var(--ink);
}
.prose blockquote p{font-size:inherit; line-height:inherit; color:inherit;}
.prose blockquote cite{display:block; margin-top:.9rem; font-family:var(--font-display);
	font-style:normal; font-size:.78rem; letter-spacing:.14em; text-transform:uppercase; color:var(--muted);}
.prose figure{margin-block:clamp(2rem,3.5vw,2.8rem);}
.prose img{border-radius:var(--radius); width:100%;}
.prose figcaption{
	margin-top:.8rem; font-family:var(--font-display); font-size:.78rem;
	letter-spacing:.08em; color:var(--muted); text-align:center;
}
.prose hr,.prose .wp-block-separator{
	border:0; height:1px; background:var(--line);
	margin-block:clamp(2.4rem,4vw,3.4rem); max-width:none;
}
.prose table{width:100%; border-collapse:collapse; font-size:.98rem;}
.prose th,.prose td{padding:.8rem 1rem; border-bottom:1px solid var(--line); text-align:left;}
.prose th{font-family:var(--font-display); font-size:.78rem; letter-spacing:.12em;
	text-transform:uppercase; color:var(--ink);}
.prose code{
	font-size:.92em; background:var(--sand); border-radius:4px;
	padding:.12em .4em; color:var(--ink);
}

/* --- Single post: footer, prev/next, related ---------------------------- */
.post-footer{
	max-width:72ch; margin:clamp(2.5rem,5vw,4rem) auto 0;
	padding-top:1.6rem; border-top:1px solid var(--line);
	font-family:var(--font-display); font-size:.78rem; font-weight:600;
	letter-spacing:.14em; text-transform:uppercase; color:var(--muted);
}
.post-footer:empty,
.post-footer .wp-block-post-terms:empty{display:none;}
.post-footer a{color:var(--ink);}
.post-footer a:hover{color:var(--gold-deep);}

.post-nav{
	max-width:72ch; margin:clamp(2rem,4vw,3rem) auto 0; gap:1.5rem;
	font-family:var(--font-display);
}
.post-nav .wp-block-post-navigation-link{
	max-width:22rem; font-size:.95rem; line-height:1.35; color:var(--ink);
}
/* Core prints the label as a bare text node before the link — style the block
   itself as the caption and let the link carry the article title. */
.post-nav .wp-block-post-navigation-link{
	font-family:var(--font-display); font-size:.72rem; font-weight:600;
	letter-spacing:.16em; text-transform:uppercase; color:var(--muted);
}
.post-nav .post-nav__next{text-align:right; margin-left:auto;}
.post-nav a{
	display:block; margin-top:.5rem; color:var(--ink);
	font-family:var(--font-serif); font-size:1.05rem; font-weight:400;
	letter-spacing:0; text-transform:none; line-height:1.35;
}
.post-nav a:hover{color:var(--gold-deep);}

.post-related .section__head{margin-bottom:clamp(2rem,4vw,3rem);}
.post-related .section__head h2{font-size:clamp(1.8rem,3.2vw,2.6rem);}

/* --- Responsive --------------------------------------------------------- */
@media (max-width:1024px){
	.blog-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:820px){
	.post-feature > li{grid-template-columns:1fr; gap:1.6rem;}
	.post-feature__media img{aspect-ratio:3/2;}
	.post-body__media img{aspect-ratio:4/3;}
}
@media (max-width:640px){
	.blog-grid{grid-template-columns:1fr; gap:2.4rem;}
	.post-card{padding-bottom:2.4rem; border-bottom:1px solid var(--line);}
	.blog-grid > .post-card:last-child{border-bottom:0; padding-bottom:0;}
	.post-meta,.post-card__meta{font-size:.7rem; gap:.6rem;}
	.post-nav{flex-direction:column;}
	.post-nav .post-nav__next{text-align:left; margin-left:0;}
	.prose{max-width:none;}
}

/* =========================================================================
   Reduced motion
   ========================================================================= */
@media (prefers-reduced-motion:reduce){
	html{scroll-behavior:auto;}
	.marquee__track{animation:none;}
	.main-nav .is-menu-open .wp-block-navigation-item{animation:none; opacity:1; transform:none;}
	.js .reveal{opacity:1; transform:none; transition:none;}
	.prima-hero__cue-line::after{animation:none;}
	.post-card__media img,.post-feature__media img{transition:none;}
	.post-card:hover .post-card__media img,
	.post-feature:hover .post-feature__media img{transform:none;}
	*{transition-duration:.01ms !important;}
}
