:root {
  --navy: #14263d;
  --navy-2: #1d3554;
  --navy-deep: #0c1826;
  --brick: #b4332a;
  --brick-dark: #8f2720;
  --brick-light: #d14a3f;
  --gold: #c9a45c;
  --gold-light: #e0c184;
  --cream: #faf7f2;
  --tint: #f2ede4;
  --ink: #232a33;
  --muted: #5d6673;
  --line: #e2dbcf;
  --white: #fff;
  --radius: 10px;
  --radius-sm: 6px;
  --radius-lg: 18px;
  --radius-xl: 26px;
  --serif: "Cormorant Garamond", Georgia, serif;
  --sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;

  /* Elevation / shadow scale */
  --shadow-sm: 0 2px 8px rgba(20,38,61,.06);
  --shadow-md: 0 10px 28px rgba(20,38,61,.10);
  --shadow-lg: 0 20px 48px rgba(20,38,61,.16);
  --shadow-xl: 0 30px 70px rgba(20,38,61,.22);
  --shadow-gold: 0 10px 26px rgba(201,164,92,.28);

  /* Motion */
  --ease: cubic-bezier(.22,.9,.32,1);
  --ease-out: cubic-bezier(.16,1,.3,1);
  --dur-fast: .22s;
  --dur-base: .4s;
  --dur-slow: .8s;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 72px; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; scroll-behavior: auto !important; }
}
/* Note: only opacity is animated here (never transform) — a lingering
   transform on <body>, even an identity one left by animation-fill-mode,
   would create a new containing block and break every position:fixed
   descendant (header, modal, sticky bar, back-to-top). */
body { margin: 0; font-family: var(--sans); color: var(--ink); background: var(--cream); line-height: 1.65; -webkit-font-smoothing: antialiased; animation: pageFadeIn .5s var(--ease-out); }
@keyframes pageFadeIn { from { opacity: 0; } to { opacity: 1; } }
img { max-width: 100%; display: block; }
h1, h2, h3 { font-family: var(--serif); color: var(--navy); line-height: 1.15; margin: 0 0 .5em; }
h2 { font-size: clamp(2rem, 4vw, 2.9rem); font-weight: 600; }
p { margin: 0 0 1em; }
a { color: var(--brick); }
.container { width: min(1140px, 100% - 32px); margin-inline: auto; }
.center { text-align: center; }

/* Buttons */
.btn { position: relative; font: 600 .95rem var(--sans); border: 1.5px solid transparent; border-radius: 999px; padding: .85em 1.7em; cursor: pointer; text-decoration: none; display: inline-block; transition: transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease); will-change: transform; }
.btn-primary { background: linear-gradient(135deg, var(--brick-light), var(--brick) 55%, var(--brick-dark)); color: #fff; box-shadow: var(--shadow-sm); }
.btn-primary:hover { background: linear-gradient(135deg, var(--brick), var(--brick-dark) 60%, var(--brick-dark)); transform: translateY(-2px); box-shadow: 0 14px 30px rgba(180,51,42,.32); }
.btn-primary:active { transform: translateY(0) scale(.98); box-shadow: var(--shadow-sm); }
.btn-ghost { background: transparent; color: #fff; border-color: rgba(255,255,255,.7); }
.btn-ghost:hover { background: rgba(255,255,255,.14); transform: translateY(-2px); border-color: #fff; }
.btn-ghost:active { transform: translateY(0) scale(.98); }
.btn-small { padding: .55em 1.2em; font-size: .85rem; background: linear-gradient(135deg, var(--brick-light), var(--brick)); color: #fff; }
.btn-small:hover { transform: translateY(-1px); box-shadow: 0 8px 18px rgba(180,51,42,.3); }
.btn-block { width: 100%; margin-top: .6em; }
.btn:disabled { opacity: .5; cursor: not-allowed; transform: none !important; box-shadow: none !important; }
.btn:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }

/* Header */
.site-header { position: fixed; inset: 0 0 auto 0; z-index: 50; background: rgba(20,38,61,.88); backdrop-filter: blur(10px) saturate(140%); -webkit-backdrop-filter: blur(10px) saturate(140%); box-shadow: 0 1px 0 rgba(255,255,255,.05), 0 8px 24px rgba(0,0,0,.12); transition: background var(--dur-base) var(--ease); }
.header-inner { display: flex; align-items: center; justify-content: space-between; height: 64px; }
.brand { text-decoration: none; color: #fff; font-family: var(--serif); font-size: 1.6rem; font-weight: 700; letter-spacing: .02em; transition: opacity var(--dur-fast); display: inline-flex; align-items: center; }
.brand:hover { opacity: .88; }
.brand-sub { font-weight: 500; color: var(--gold); margin-left: .3em; }
.brand-logo { height: 38px; width: auto; display: block; }
.main-nav { display: flex; align-items: center; gap: 1.6rem; }
.main-nav a { position: relative; color: #e9edf3; text-decoration: none; font-size: .9rem; padding: .3em 0; transition: color var(--dur-fast); }
.main-nav a::after { content: ""; position: absolute; left: 0; right: 100%; bottom: -2px; height: 2px; background: var(--gold); border-radius: 2px; transition: right var(--dur-base) var(--ease-out); }
.main-nav a:hover { color: var(--gold); }
.main-nav a:hover::after { right: 0; }
.nav-toggle { display: none; background: none; border: 0; padding: 8px; cursor: pointer; }
.nav-toggle span { display: block; width: 24px; height: 2px; background: #fff; margin: 5px 0; transition: transform var(--dur-fast) var(--ease), opacity var(--dur-fast) var(--ease); }
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* Hero */
.hero { position: relative; min-height: 100svh; display: flex; align-items: center; color: #fff; padding: 110px 0 80px; overflow: hidden; background: var(--navy-deep); }
.hero-bg { position: absolute; inset: 0; overflow: hidden; }
.hero-bg img { width: 100%; height: 100%; object-fit: cover; }
.hero-bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(20,38,61,.55), rgba(20,38,61,.85)); }

/* Hero carousel */
.hero-slides { position: absolute; inset: 0; }
.hero-slide { position: absolute; inset: 0; opacity: 0; transition: opacity 1.1s var(--ease); }
.hero-slide picture, .hero-slide img { width: 100%; height: 100%; }
.hero-slide img { object-fit: cover; transform: scale(1.06); transition: transform 6.5s linear; }
.hero-slide.is-active { opacity: 1; z-index: 1; }
.hero-slide.is-active img { transform: scale(1); }
.hero-overlay { position: absolute; inset: 0; z-index: 2; background: linear-gradient(180deg, rgba(12,24,38,.62) 0%, rgba(12,24,38,.42) 38%, rgba(12,24,38,.88) 100%); }
.hero-inner { position: relative; z-index: 3; }
/* bottom offset is well above the sticky action bar (fixed, near the
   viewport bottom on every screen size) so the two never overlap */
.hero-controls { position: absolute; left: 0; right: 0; bottom: clamp(86px, 10vw, 112px); z-index: 4; display: flex; align-items: center; justify-content: center; gap: 18px; }
.hero-arrow { width: 42px; height: 42px; border-radius: 50%; border: 1.5px solid rgba(255,255,255,.45); background: rgba(255,255,255,.08); backdrop-filter: blur(4px); color: #fff; font-size: 1.3rem; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background var(--dur-fast), transform var(--dur-fast), border-color var(--dur-fast); }
.hero-arrow:hover { background: rgba(255,255,255,.22); border-color: #fff; transform: scale(1.06); }
.hero-arrow:active { transform: scale(.94); }
.hero-dots { display: flex; align-items: center; gap: 9px; }
.hero-dot { width: 9px; height: 9px; padding: 0; border-radius: 50%; border: 1.5px solid rgba(255,255,255,.6); background: rgba(255,255,255,.25); cursor: pointer; transition: transform var(--dur-fast), background var(--dur-fast), width var(--dur-base) var(--ease); }
.hero-dot:hover { background: rgba(255,255,255,.6); transform: scale(1.15); }
.hero-dot.is-active { background: var(--gold); border-color: var(--gold); width: 26px; border-radius: 6px; }
@media (max-width: 640px) { .hero-arrow { width: 36px; height: 36px; font-size: 1.1rem; } .hero-controls { gap: 12px; } }

.eyebrow { display: inline-flex; align-items: center; gap: .6em; background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.3); border-radius: 999px; padding: .4em 1em; font-size: .8rem; letter-spacing: .08em; text-transform: uppercase; backdrop-filter: blur(6px); }
.pulse { width: 8px; height: 8px; border-radius: 50%; background: #ff6b5c; animation: pulse 1.6s infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(255,107,92,.5); } 50% { opacity: .55; box-shadow: 0 0 0 6px rgba(255,107,92,0); } }
.hero h1 { color: #fff; font-size: clamp(3.2rem, 9vw, 6.2rem); font-weight: 700; margin: .3em 0 .15em; text-shadow: 0 4px 24px rgba(0,0,0,.25); }
.hero-tag { font-size: clamp(1.05rem, 2.2vw, 1.35rem); max-width: 36em; color: #e7ecf3; }
.hero-facts { list-style: none; display: flex; flex-wrap: wrap; gap: 1rem 2.5rem; padding: 0; margin: 1.8rem 0; }
.hero-facts li { border-left: 2px solid var(--gold); padding-left: .9rem; }
.hero-facts strong { display: block; font: 600 1.7rem var(--serif); }
.hero-facts span { font-size: .85rem; color: #cdd6e2; }
.hero-cta { display: flex; flex-wrap: wrap; gap: .8rem; }

/* Sections */
.section { padding: clamp(56px, 9vw, 104px) 0; }
.section-tint { background: var(--tint); }
.section-label { text-transform: uppercase; letter-spacing: .16em; font-size: .78rem; font-weight: 600; color: var(--brick); margin-bottom: .8em; position: relative; padding-left: 1.7em; }
.section-label::before { content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 1.2em; height: 2px; background: var(--brick); }
.section-label.center { padding-left: 0; }
.section-label.center::before { display: none; }
.section-label.light { color: var(--gold); }
.section-label.light::before { background: var(--gold); }
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(28px, 5vw, 64px); align-items: center; }
.figure img, .figure iframe { width: 100%; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); }
.figure img { aspect-ratio: 4/3; object-fit: cover; transition: transform var(--dur-slow) var(--ease); }
.figure picture { display: block; overflow: hidden; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); }
.figure picture img { box-shadow: none; border-radius: 0; }
.figure picture:hover img { transform: scale(1.05); }
.map iframe { border: 0; aspect-ratio: 4/3; height: auto; }
.credit { color: var(--muted); font-size: .9rem; font-style: italic; }
.link { font-weight: 600; text-decoration: none; position: relative; }
.link::after { content: ""; position: absolute; left: 0; right: 100%; bottom: -2px; height: 1.5px; background: currentColor; transition: right var(--dur-base) var(--ease-out); }
.link:hover::after { right: 0; }
.note { color: var(--muted); font-size: .85rem; margin-top: 1.4rem; }

/* Cards */
.cards { display: grid; grid-template-columns: repeat(2, minmax(0, 340px)); justify-content: center; gap: 24px; margin-top: 2.2rem; }
.card { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 2rem; text-align: center; transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease); }
.card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); border-color: var(--gold); }
.card-featured { border-color: var(--gold); box-shadow: var(--shadow-md); position: relative; }
.card-featured::before { content: "Most Popular"; position: absolute; top: -13px; left: 50%; transform: translateX(-50%); background: linear-gradient(135deg, var(--gold-light), var(--gold)); color: var(--navy-deep); font: 700 .7rem var(--sans); letter-spacing: .06em; text-transform: uppercase; padding: .35em 1em; border-radius: 999px; box-shadow: var(--shadow-gold); }
.card-featured:hover { box-shadow: var(--shadow-xl); }
.card-type { font: 700 2rem var(--serif); color: var(--brick); margin: 0; }
.card-size { font: 600 1.5rem var(--serif); color: var(--navy); margin-bottom: 1rem; }
.card-size small { font: 400 .8rem var(--sans); color: var(--muted); }
.card ul { list-style: none; padding: 0; margin: 0 0 1.2rem; color: var(--muted); font-size: .92rem; }
.card li { padding: .35em 0; border-top: 1px solid var(--line); }
.card-price { font-weight: 600; color: var(--navy); }

/* Features */
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-top: 2.2rem; }
.feature { padding: 1.6rem; background: #fff; border-radius: var(--radius-lg); border-top: 3px solid var(--brick); box-shadow: var(--shadow-sm); transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease); }
.feature:hover { transform: translateY(-5px); box-shadow: var(--shadow-md); }
.feature h3 { font-size: 1.35rem; }
.feature p { color: var(--muted); font-size: .92rem; margin: 0; }

/* Gallery */
.gallery { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 2.2rem; }
.gallery picture { display: block; overflow: hidden; border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); transition: box-shadow var(--dur-base) var(--ease); }
.gallery picture:hover { box-shadow: var(--shadow-lg); }
.gallery img { width: 100%; height: 100%; aspect-ratio: 16/10; object-fit: cover; border-radius: var(--radius-lg); transition: transform var(--dur-slow) var(--ease); }
.gallery picture:hover img { transform: scale(1.08); }
.gallery .g-wide { grid-column: span 2; }

/* Blog */
.post-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-top: 2.2rem; }
.post-grid.two { grid-template-columns: repeat(2, 1fr); }
.post-card { display: flex; flex-direction: column; gap: .5rem; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 0 0 1.3rem; text-decoration: none; color: var(--ink); overflow: hidden; transition: box-shadow var(--dur-base) var(--ease), transform var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease); }
.post-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-6px); border-color: var(--line); }
.post-card picture { display: block; overflow: hidden; }
.post-card img { width: 100%; aspect-ratio: 16/10; object-fit: cover; transition: transform var(--dur-slow) var(--ease); }
.post-card:hover img { transform: scale(1.08); }
.post-card h3, .post-card p, .post-card .post-meta, .post-card .read-more { margin: 0; padding: 0 1.2rem; }
.post-card h3 { font-size: 1.45rem; margin-top: .3rem; }
.post-card p { color: var(--muted); font-size: .92rem; }
.read-more { color: var(--brick); font-weight: 600; font-size: .9rem; margin-top: auto !important; padding-top: .4rem !important; display: inline-flex; align-items: center; gap: .3em; padding-bottom: .1rem; }
.post-card:hover .read-more { gap: .55em; }
.read-more, .read-more * { transition: gap var(--dur-fast) var(--ease); }
.post-meta { display: flex; gap: .8rem; align-items: center; font-size: .78rem; color: var(--muted); margin-top: .9rem; }
.tag { text-transform: uppercase; letter-spacing: .12em; font-weight: 600; color: var(--brick); }
.more { margin-top: 2rem; }
.btn-ghost-dark { color: var(--navy); border-color: var(--navy); background: transparent; transition: background var(--dur-fast), color var(--dur-fast), transform var(--dur-fast), box-shadow var(--dur-fast); }
.btn-ghost-dark:hover { background: var(--navy); color: #fff; transform: translateY(-2px); box-shadow: var(--shadow-md); }
.blog-main { padding-top: 64px; }
.blog-hero { background: var(--navy); color: #cdd6e2; padding: clamp(48px, 8vw, 88px) 0; }
.blog-hero h1 { color: #fff; font-size: clamp(2.4rem, 6vw, 4rem); }
.blog-hero .section-label { color: var(--gold); }
.narrow { max-width: 760px; }
.article { padding: clamp(32px, 6vw, 64px) 0 clamp(48px, 8vw, 88px); }
.article h1 { font-size: clamp(2.2rem, 5vw, 3.4rem); margin-top: .5rem; }
.crumbs a { text-decoration: none; font-weight: 600; font-size: .9rem; }
.article-img { width: 100%; aspect-ratio: 16/9; object-fit: cover; border-radius: var(--radius); margin: 1.4rem 0 1.8rem; }
.article-body { font-size: 1.05rem; }
.article-body h2 { font-size: 1.9rem; margin-top: 1.6em; }
.article-body ul { padding-left: 1.2em; }
.article-body li { margin-bottom: .5em; }
.cta-box { margin-top: 2.5rem; padding: 1.8rem; background: var(--tint); border-radius: var(--radius); border: 1px solid var(--line); }
.cta-box h3 { font-size: 1.7rem; }
.related { margin-top: 3.5rem; }
.related h2 { text-align: center; font-size: 2rem; }

/* FAQ */
.faq-wrap { max-width: 820px; }
.faq-list { margin-top: 2rem; display: grid; gap: 10px; }
.faq { background: #fff; border: 1px solid var(--line); border-radius: var(--radius); transition: box-shadow var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease); }
.faq:hover { box-shadow: var(--shadow-sm); border-color: #d8cfc0; }
.faq[open] { box-shadow: var(--shadow-md); border-color: var(--gold); }
.faq summary { list-style: none; cursor: pointer; padding: 1.1rem 3rem 1.1rem 1.3rem; font-weight: 600; color: var(--navy); position: relative; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; position: absolute; right: 1.3rem; top: 50%; transform: translateY(-50%); font-size: 1.5rem; color: var(--brick); transition: transform var(--dur-base) var(--ease); }
.faq[open] summary::after { content: "\2212"; }
.faq summary:focus-visible { outline: 2px solid var(--brick); outline-offset: 2px; border-radius: var(--radius); }
.faq p { margin: 0; padding: 0 1.3rem 1.2rem; color: var(--muted); }
form input[readonly] { background: var(--tint); color: var(--muted); cursor: default; }

/* Contact */
.contact { background: var(--navy-deep); background-image: radial-gradient(circle at 15% 20%, rgba(201,164,92,.10), transparent 45%), linear-gradient(160deg, var(--navy) 0%, var(--navy-deep) 100%); color: #dbe3ee; }
.contact h2 { color: #fff; }
.contact-line a { color: var(--gold); font-weight: 600; }
.form-wrap, .modal { background: #fff; color: var(--ink); border-radius: var(--radius-lg); padding: clamp(20px, 4vw, 34px); box-shadow: var(--shadow-xl); }
form label { display: block; font-size: .82rem; font-weight: 600; margin: .9em 0 .3em; color: var(--navy); }
.opt { font-weight: 400; color: var(--muted); }
.req { color: var(--brick); font-weight: 700; }
form input, form select { width: 100%; font: inherit; padding: .75em .9em; border: 1.5px solid var(--line); border-radius: 8px; background: #fff; transition: border-color var(--dur-fast), box-shadow var(--dur-fast); }
form input:focus, form select:focus { outline: 0; border-color: var(--brick); box-shadow: 0 0 0 3px rgba(180,51,42,.15); }
.fine { font-size: .75rem; color: var(--muted); margin: .8em 0 0; text-align: center; }

/* Custom-styled dropdown: native <select> kept for full accessibility/
   functionality, restyled to drop the default browser look and add a
   themed chevron; wrapper positions the arrow and blocks the native one. */
.select-wrap { position: relative; }
.select-wrap select {
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  padding-right: 2.4em; cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%2314263d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 7l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right .85em center;
  background-size: 14px;
}
.select-wrap select:focus { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23b4332a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 7l5 5 5-5'/%3E%3C/svg%3E"); }
.select-wrap select:invalid { color: var(--muted); }

/* Inline validation */
form input:not([readonly]).is-invalid, .select-wrap select.is-invalid { border-color: var(--brick); box-shadow: 0 0 0 3px rgba(180,51,42,.15); }
.field-error { display: none; font-size: .78rem; line-height: 1.4; color: var(--brick); margin: .35em 0 0; }
.field-error.active { display: block; animation: fieldErrorIn .2s var(--ease-out) both; }
@keyframes fieldErrorIn { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: translateY(0); } }
.success-message { display: none; text-align: center; padding: 1.5rem 0; }
.success-message.active { display: block; animation: popIn .45s var(--ease-out) both; }
@keyframes popIn { from { opacity: 0; transform: scale(.92) translateY(8px); } to { opacity: 1; transform: scale(1) translateY(0); } }
.success-message h3 { color: var(--brick); }

/* Footer */
.site-footer { background: #0e1c2d; color: #9fadbf; padding: 40px 0 90px; font-size: .85rem; }
.footer-brand { font: 600 1.3rem var(--serif); color: #fff; }
.footer-logo { height: 56px; width: auto; display: block; margin-bottom: 14px; }
.disclaimer { max-width: 60em; }

/* Modal */
.modal-overlay { position: fixed; inset: 0; z-index: 100; background: rgba(10,20,34,.7); backdrop-filter: blur(3px); display: none; align-items: center; justify-content: center; padding: 12px; overflow: hidden; }
.modal-overlay.open { display: flex; animation: overlayIn .25s var(--ease-out) both; }
@keyframes overlayIn { from { opacity: 0; } to { opacity: 1; } }
.modal { position: relative; width: min(400px, 100%); max-height: calc(100vh - 24px); max-height: calc(100dvh - 24px); overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; padding: 22px 22px 20px; scrollbar-width: thin; animation: modalIn .32s var(--ease-out) both; }
@keyframes modalIn { from { opacity: 0; transform: translateY(16px) scale(.97); } to { opacity: 1; transform: translateY(0) scale(1); } }
.modal h3 { font-size: 1.5rem; padding-right: 1.8rem; margin-bottom: .3em; }
.modal-sub { color: var(--muted); font-size: .85rem; margin-bottom: .4em; }
.modal-close { position: sticky; float: right; top: 0; margin: -10px -8px 0 0; z-index: 2; background: #fff; width: 32px; height: 32px; border-radius: 50%; background: none; border: 0; font-size: 2rem; line-height: 1; cursor: pointer; color: var(--muted); transition: color var(--dur-fast), transform var(--dur-fast); }
.modal-close:hover { color: var(--brick); transform: rotate(90deg); }

/* Sticky + back to top */
/* Sticky action bar (Call / WhatsApp / Enquire): shown on every
   viewport size. Full-width edge-to-edge strip on mobile (its
   original look, unchanged below); a floating rounded pill on
   tablet/desktop so it reads as a deliberate CTA rather than a
   mobile pattern stretched too wide. */
.sticky-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 45; display: grid; grid-template-columns: 1fr 1fr 1.3fr; background: #fff; box-shadow: 0 -4px 16px rgba(0,0,0,.15); }
.sticky-bar button { border: 0; background: #fff; padding: 14px 0; font: 600 .9rem var(--sans); color: var(--navy); cursor: pointer; transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease); }
.sticky-bar button:not(:last-child) { border-right: 1px solid var(--line); }
.sticky-bar button:hover { background: var(--tint); }
.sticky-bar .primary { background: var(--brick); color: #fff; }
.sticky-bar .primary:hover { background: var(--brick-dark); }
.back-to-top { position: fixed; right: 16px; bottom: 78px; width: 44px; height: 44px; border-radius: 50%; border: 0; background: var(--navy); color: #fff; font-size: 1.2rem; cursor: pointer; opacity: 0; pointer-events: none; transform: translateY(8px); transition: opacity var(--dur-base) var(--ease), transform var(--dur-base) var(--ease), background var(--dur-fast); box-shadow: var(--shadow-md); z-index: 40; }
.back-to-top:hover { background: var(--brick); }
.back-to-top.visible { opacity: 1; pointer-events: auto; transform: translateY(0); }

@media (min-width: 761px) {
  .sticky-bar { left: 50%; right: auto; bottom: 22px; transform: translateX(-50%); width: min(460px, calc(100% - 48px)); border-radius: 999px; overflow: hidden; box-shadow: var(--shadow-xl); border: 1px solid rgba(20,38,61,.07); }
  .sticky-bar button { padding: 15px 0; font-size: .88rem; }
}

/* Thank-you */
.thanks-page { background: var(--navy); }
.thanks { min-height: 100vh; display: grid; place-content: center; text-align: center; gap: .4rem; padding: 24px; color: #dbe3ee; }
.thanks h1 { color: #fff; font-size: clamp(2.2rem, 6vw, 3.6rem); }
.thanks .brand-mark { font: 700 1.8rem var(--serif); color: #fff; }
.thanks .brand-logo { height: 52px; width: auto; display: block; margin: 0 auto; }
.thanks .btn { justify-self: center; margin-top: 1rem; }

/* Responsive */
@media (max-width: 900px) {
  .post-grid { grid-template-columns: repeat(2, 1fr); }
  .two-col { grid-template-columns: 1fr; }
  .grid-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 760px) {
  .nav-toggle { display: block; }
  .main-nav { position: absolute; top: 64px; left: 0; right: 0; flex-direction: column; align-items: stretch; gap: 0; background: var(--navy); padding: 8px 16px 18px; display: none; }
  .main-nav.open { display: flex; }
  .main-nav a { padding: .8em 0; border-bottom: 1px solid rgba(255,255,255,.1); }
  .main-nav .btn { margin-top: 12px; }
  .cards { grid-template-columns: 1fr; }
  .gallery { grid-template-columns: 1fr; }
  .gallery .g-wide { grid-column: auto; }
  .hero-cta .btn { flex: 1 1 100%; text-align: center; }

  /* The heading + facts + 3 stacked CTA buttons can add up to more than
     one screen's height on narrow phones, which pushes .hero taller than
     the viewport and drags .hero-controls (dots/arrows) down into the
     same screen area as the fixed sticky bar. Tightening the rhythm here
     keeps the hero close to one viewport tall so the two stay clear of
     each other; hero-controls also gets a larger, guaranteed-safe offset
     below as a second line of defence regardless of content height. */
  .hero { padding: 84px 0 56px; }
  .eyebrow { padding: .3em .85em; font-size: .72rem; }
  .hero h1 { font-size: 2.5rem; margin: .25em 0 .1em; }
  .hero-tag { font-size: .95rem; }
  .hero-facts { margin: .8rem 0; gap: .5rem 1.4rem; }
  .hero-facts strong { font-size: 1.35rem; }
  .hero-cta { gap: .5rem; }
  .hero-cta .btn { padding: .6em 1.2em; font-size: .88rem; }
  .hero-controls { bottom: 78px; }
}
@media (max-width: 640px) {
  .post-grid, .post-grid.two { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
  .grid-4 { grid-template-columns: 1fr; }
}

/* Blog: horizontal scroller (end of page) */
.blog-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; }
.blog-head h2 { margin: 0; }
.scroll-btns { display: flex; gap: 10px; }
.scroll-btn { width: 44px; height: 44px; border-radius: 50%; border: 1.5px solid var(--navy); background: transparent; color: var(--navy); font-size: 1.2rem; cursor: pointer; transition: .2s; }
.scroll-btn:hover { background: var(--navy); color: #fff; }
.post-scroll { display: flex; gap: 20px; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; padding: 2rem max(16px, calc((100% - 1140px) / 2)) 1.2rem; scroll-padding-inline: max(16px, calc((100% - 1140px) / 2)); scrollbar-width: thin; scrollbar-color: var(--brick) var(--line); }
.post-scroll .post-card { flex: 0 0 min(320px, 82vw); scroll-snap-align: start; }
.post-scroll::-webkit-scrollbar { height: 8px; }
.post-scroll::-webkit-scrollbar-thumb { background: var(--brick); border-radius: 8px; }
.post-scroll::-webkit-scrollbar-track { background: var(--line); border-radius: 8px; }
.post-scroll:focus-visible { outline: 2px solid var(--brick); outline-offset: -2px; }
@media (max-width: 760px) { .scroll-btns { display: none; } }

/* Keep intrinsic width/height attributes (for SEO/CLS) from overriding aspect-ratio boxes */
.post-card img, .article-img, .figure img { height: auto; }

/* Blog categories */
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 1.6rem; }
.chip { padding: .45em 1em; border: 1.5px solid var(--line); border-radius: 999px; background: #fff; color: var(--navy); text-decoration: none; font-size: .85rem; font-weight: 500; transition: border-color var(--dur-fast), color var(--dur-fast), transform var(--dur-fast), background var(--dur-fast); }
.chip:hover { border-color: var(--brick); color: var(--brick); transform: translateY(-1px); }
.chip.active { background: var(--navy); border-color: var(--navy); color: #fff; }
.cat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-top: 1.4rem; }
.cat-card { display: flex; flex-direction: column; gap: .3rem; padding: 1.3rem; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-lg); text-decoration: none; color: var(--ink); transition: box-shadow var(--dur-base) var(--ease), transform var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease); }
.cat-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-5px); border-color: var(--gold); }
.cat-card h3 { font-size: 1.3rem; margin: 0; }
.cat-card p { color: var(--muted); font-size: .88rem; margin: 0; }
.cat-card .count { margin-top: auto; padding-top: .5rem; color: var(--brick); font-size: .78rem; font-weight: 600; text-transform: uppercase; letter-spacing: .1em; }
.h-sm { font-size: 1.9rem; }
.lead { max-width: 46em; font-size: 1.08rem; }
.crumbs { font-size: .88rem; color: var(--muted); margin-bottom: .8rem; }
.crumbs a { text-decoration: none; font-weight: 600; }
.crumbs.light { color: #9fadbf; } .crumbs.light a { color: var(--gold); }
a.tag { text-decoration: none; }
.cta-box.wide { margin-top: 2.5rem; }
.source-note { background: var(--tint); border-left: 4px solid var(--gold); padding: 1rem 1.2rem; border-radius: 6px; font-size: .9rem; color: var(--muted); margin: 1.4rem 0; }
.src { font-size: .88rem; } .src a { word-break: break-word; }
@media (max-width: 900px) { .cat-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .cat-grid { grid-template-columns: 1fr; } }

/* Category pages, byline, hub links, picture */
picture { display: contents; }
.cat-intro { max-width: 46em; margin-bottom: 2rem; }
.cat-intro p { color: var(--muted); }
.faq-h { margin-top: 3rem; }
.cat-faq { max-width: 820px; margin-top: 1rem; }
.byline { color: var(--muted); font-size: .88rem; margin: .2rem 0 0; }
.byline a { font-weight: 600; text-decoration: none; }
.hub-links { margin-top: 1.4rem; padding: 1.2rem 1.4rem; background: var(--tint); border-radius: var(--radius); }
.hub-title { font-weight: 600; color: var(--navy); margin-bottom: .5rem; }
.hub-links ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 18px; }
.hub-links a { font-size: .9rem; font-weight: 500; }

/* Compact enquiry popup: tighter fields, scrolls inside when the screen is short */
.modal form label { margin: .65em 0 .2em; font-size: .78rem; }
.modal form input, .modal form select { padding: .6em .8em; font-size: .92rem; }
.modal .select-wrap select { padding-right: 2.3em; }
.modal .btn-block { margin-top: .9em; padding: .75em 1em; }
.modal::-webkit-scrollbar { width: 6px; }
.modal::-webkit-scrollbar-thumb { background: var(--line); border-radius: 6px; }
@media (max-height: 640px), (max-width: 380px) {
  .modal { padding: 16px 16px 14px; }
  .modal h3 { font-size: 1.3rem; }
  .modal-sub { display: none; }
  .modal form label { margin: .5em 0 .15em; }
}

/* =====================================================
   PAGE-LOAD PROGRESS BAR
   Created at runtime by index.js (no HTML edits needed).
   Purely decorative, never blocks content or interaction.
===================================================== */
.page-loader-bar { position: fixed; top: 0; left: 0; height: 3px; width: 0%; z-index: 999; background: linear-gradient(90deg, var(--gold), var(--brick-light), var(--gold)); box-shadow: 0 0 10px rgba(201,164,92,.6); transition: width .35s var(--ease-out), opacity .3s ease .15s; pointer-events: none; }
.page-loader-bar.is-done { width: 100%; opacity: 0; }

/* =====================================================
   IMAGE LOAD SHIMMER
   Toggled by index.js: images get .img-loading until their
   'load' event fires, then .img-loaded. Content (alt text,
   src) is always present in the DOM for SEO/crawlers — this
   only affects the visual fade-in, never access to the image.
===================================================== */
/* Note: images default to fully visible (opacity: 1) so that if this
   script never runs — JS disabled/blocked, or an error before this
   point — every image still renders normally. Only once JS adds
   .img-loading do we dip to a shimmer placeholder, and only for the
   brief moment before .img-loaded restores full opacity on load. */
img.img-loading { opacity: 0; background: linear-gradient(100deg, #ece6da 8%, #f6f2ea 18%, #ece6da 33%); background-size: 200% 100%; animation: shimmer 1.5s linear infinite; transition: opacity .5s var(--ease-out); }
img.img-loaded { opacity: 1; animation: none; background: none; transition: opacity .5s var(--ease-out); }
@keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) {
  img.img-loading { animation: none; background: #ece6da; opacity: 1; }
}

/* =====================================================
   SCROLL-REVEAL UTILITIES
   Classes are added by index.js only after JS confirms it
   can run an IntersectionObserver. Without JS, or if a
   reveal target is never reached by the observer for any
   reason, content keeps its normal default visibility —
   nothing is hidden by CSS alone, so SEO/no-JS is unaffected.
===================================================== */
.reveal-up, .reveal-in, .reveal-scale, .reveal-left, .reveal-right {
  opacity: 0;
  transition: opacity .7s var(--ease-out), transform .7s var(--ease-out);
  will-change: opacity, transform;
}
.reveal-up { transform: translateY(28px); }
.reveal-in { transform: translateY(0); }
.reveal-scale { transform: scale(.94); }
.reveal-left { transform: translateX(-28px); }
.reveal-right { transform: translateX(28px); }
.reveal-up.is-visible, .reveal-in.is-visible, .reveal-scale.is-visible, .reveal-left.is-visible, .reveal-right.is-visible {
  opacity: 1;
  transform: translate(0, 0) scale(1);
}
@media (prefers-reduced-motion: reduce) {
  .reveal-up, .reveal-in, .reveal-scale, .reveal-left, .reveal-right { opacity: 1; transform: none; transition: none; }
}
