/*
Theme Name: Goldmark PLC
Theme URI: https://goldmarkplc.com
Author: Goldmark PLC
Author URI: https://goldmarkplc.com
Description: Premium enterprise theme for GOLDMARK PLC — trading, industrial supply, procurement and logistics. Built on the Nocturne design system: a quiet, compact dark interface with Inter throughout, a single blurple accent used as line and glow, rules that fade at their ends, and photographs blended into the ground. Includes mega-menu navigation, division/product/project post types, an RFQ workflow, animated statistics, an interactive global trade map, cookie consent and hardened security headers.
Version: 2.0.0
Requires at least: 6.2
Tested up to: 6.6
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: goldmark
Tags: business, corporate, dark-mode-support, custom-logo, custom-menu, featured-images, translation-ready, block-styles, wide-blocks
*/

/* ==========================================================================
   Goldmark — the theme layer over the Nocturne design system.

   Every colour, font, space, radius and shadow below reads a Nocturne token
   from assets/css/nocturne.css, which loads first. No hex values, no font
   names, no raw px where a token exists. Nocturne's own component classes
   (.btn, .card, .tag, .input, .field, .table, .dialog, .hr, .nav, .lighten)
   are used as-is — the rules here add site structure, not restyling.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Theme-scoped derived values
   -------------------------------------------------------------------------- */
:root {
  /* Section grounds. The desaturated ramp carries every surface; the one
     saturated field (--color-section) is reserved for the single full-bleed
     statistics band, exactly as the system reserves it. */
  --gm-ground: var(--color-bg);
  --gm-ground-2: var(--color-neutral-900);
  --gm-surface: var(--color-surface);
  --gm-surface-2: var(--color-neutral-800);

  --gm-muted: color-mix(in srgb, var(--color-text) 62%, transparent);
  --gm-faint: color-mix(in srgb, var(--color-text) 42%, transparent);
  --gm-line: var(--color-divider);
  --gm-line-soft: color-mix(in srgb, var(--color-text) 8%, transparent);

  /* Accent at paragraph size needs a deep ramp step, per the system's
     contrast note; the accent itself is for lines, marks and chrome. */
  --gm-accent-text: var(--color-accent-300);

  /* Map geometry, from the neutral ramp — the accent stays a line, not a fill. */
  --gm-map-land: var(--color-neutral-900);
  --gm-map-sea: color-mix(in srgb, var(--color-text) 2%, transparent);
  --gm-map-border: color-mix(in srgb, var(--color-accent) 22%, transparent);

  /* Page rhythm, from the compact 0.7x space scale. */
  --gm-gutter: clamp(var(--space-6), 5vw, calc(var(--space-8) * 3));
  --gm-max: 1560px;
  --gm-section-y: clamp(calc(var(--space-8) * 2), 7vw, calc(var(--space-8) * 4));
  --gm-section-y-tight: clamp(var(--space-8), 5vw, calc(var(--space-8) * 2.6));
}

/* --------------------------------------------------------------------------
   2. Base
   -------------------------------------------------------------------------- */
html { -webkit-text-size-adjust: 100%; }
body { overflow-x: hidden; text-wrap: pretty; }
svg, video { max-width: 100%; height: auto; display: block; }
a:hover { color: var(--color-accent-400); }

.gm-skip {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  padding: var(--space-4) var(--space-6);
  background: var(--gm-surface); color: var(--color-text);
  border: 1px solid var(--gm-line);
  border-radius: 0 0 var(--radius-md) 0;
  text-decoration: none;
}
.gm-skip:focus { left: 0; }

.screen-reader-text {
  position: absolute !important; width: 1px; height: 1px; overflow: hidden;
  clip: rect(1px, 1px, 1px, 1px); white-space: nowrap;
}

.gm-shell { max-width: var(--gm-max); margin: 0 auto; }

/* Sections. Separation is whitespace and a fading rule — never a hard edge. */
.gm-section { padding: var(--gm-section-y) var(--gm-gutter); position: relative; }
.gm-section--tight { padding-block: var(--gm-section-y-tight); }
.gm-section--alt { background: var(--gm-ground-2); }
.gm-section + .gm-section::before,
.gm-pagehead + .gm-section::before {
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px;
  background: linear-gradient(to right,
    transparent, var(--gm-line) 48px,
    var(--gm-line) calc(100% - 48px), transparent);
}
.gm-section--alt::before,
.gm-section--deep::before { display: none; }

/* The one saturated field in the system: the statistics band. */
.gm-section--deep {
  background:
    radial-gradient(120% 160% at 12% 0%,
      var(--color-section-glow) 0%, transparent 62%),
    var(--color-section);
  color: var(--color-neutral-100);
}

.gm-kicker {
  margin: 0; font-size: 10px; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--color-accent);
}
.gm-h1 {
  font-size: clamp(32px, 4.2vw, 58px); line-height: 1.06; letter-spacing: -0.015em;
  margin: var(--space-4) 0 0; max-width: 22ch;
}
.gm-h2 { font-size: clamp(25px, 2.8vw, 38px); margin: var(--space-3) 0 0; }
.gm-h3 { font-size: clamp(17px, 1.5vw, 22px); margin: 0; }
.gm-lede {
  margin: var(--space-4) 0 0; max-width: 62ch;
  font-size: 15px; color: var(--gm-muted);
}
.gm-body { color: var(--gm-muted); }
.gm-statement {
  margin: 0; max-width: 60ch;
  font-size: clamp(17px, 1.4vw, 21px); line-height: 1.5; color: var(--color-text);
}

/* Freestanding rules fade; short accent marks stay solid. */
.gm-rule {
  height: 1px; border: 0; margin: var(--space-6) 0;
  background: linear-gradient(to right,
    transparent, var(--gm-line) 48px,
    var(--gm-line) calc(100% - 48px), transparent);
}
.gm-mark {
  display: inline-block; width: 28px; height: 1px; flex: none;
  background: var(--color-accent);
}

/* Reveal on scroll — an enhancement, never a gate. */
[data-gm-reveal] { transition: opacity .7s cubic-bezier(.22,.7,.24,1), transform .7s cubic-bezier(.22,.7,.24,1); }
[data-gm-reveal].gm-arm { opacity: 0; transform: translateY(20px); }
[data-gm-reveal].gm-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  [data-gm-reveal], [data-gm-reveal].gm-arm { opacity: 1 !important; transform: none !important; transition: none !important; }
  *, *::before, *::after { animation-duration: .001s !important; animation-iteration-count: 1 !important; }
}
@keyframes gmRise { from { opacity: 0; transform: translateY(22px) } to { opacity: 1; transform: none } }
@keyframes gmFade { from { opacity: 0 } to { opacity: 1 } }
@keyframes gmPulse { 0%,100% { opacity: .35; transform: scale(1) } 50% { opacity: .95; transform: scale(1.3) } }

/* --------------------------------------------------------------------------
   3. Header — Nocturne's .nav pattern, extended with a mega panel
   -------------------------------------------------------------------------- */
.gm-header { position: sticky; top: 0; z-index: 60; background: var(--gm-ground); }
.admin-bar .gm-header { top: 32px; }
.gm-header::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
  background: linear-gradient(to right,
    transparent, var(--gm-line) 48px,
    var(--gm-line) calc(100% - 48px), transparent);
}
.gm-header__bar {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--space-3) var(--space-8);
  padding: var(--space-3) var(--gm-gutter);
  min-height: 64px; max-width: var(--gm-max); margin: 0 auto;
}
.gm-brand {
  display: flex; align-items: center; gap: var(--space-3);
  flex: 0 0 auto; text-decoration: none; color: inherit;
}
.gm-brand img { width: 34px; height: 34px; object-fit: contain; }
.gm-brand__text { display: flex; flex-direction: column; line-height: 1; }
.gm-brand__name {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 18px; letter-spacing: 0.02em;
}
.gm-brand__sub {
  font-size: 9px; letter-spacing: 0.32em; margin-top: 4px;
  color: var(--color-accent);
}

.gm-nav { display: flex; align-items: center; gap: var(--space-1); margin: 0; padding: 0; }
.gm-nav > li { list-style: none; position: relative; }
.gm-nav__top {
  display: flex; align-items: center; gap: 6px;
  padding: var(--space-2) var(--space-4);
  background: transparent; border: 1px solid transparent;
  border-radius: var(--radius-md); cursor: pointer;
  color: var(--color-text); font-family: var(--font-body);
  font-size: 14px; text-decoration: none;
}
.gm-nav__top:hover,
.gm-nav li.is-open > .gm-nav__top { color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 10%, transparent); }
.gm-nav__top:active { background: color-mix(in srgb, var(--color-accent) 18%, transparent); }
.gm-nav__caret { font-size: 11px; opacity: .55; }

.gm-mega {
  position: absolute; left: 0; right: 0; top: 100%; z-index: 61; display: none;
  background: var(--gm-ground-2); box-shadow: var(--shadow-md);
  animation: gmFade .18s ease both;
}
.gm-header.is-mega-open .gm-mega.is-active { display: block; }
.gm-mega__inner {
  max-width: var(--gm-max); margin: 0 auto;
  padding: var(--space-8) var(--gm-gutter) calc(var(--space-8) * 1.3);
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
  gap: calc(var(--space-8) * 2);
}
.gm-mega__blurb { margin: var(--space-4) 0 0; max-width: 26ch; font-size: 13px; color: var(--gm-muted); }
.gm-mega__links {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--space-1) var(--space-8); margin: 0; padding: 0; list-style: none;
}
.gm-mega__link {
  display: block; padding: var(--space-3) var(--space-4);
  border: 1px solid transparent; border-radius: var(--radius-md);
  text-decoration: none; color: inherit;
}
.gm-mega__link:hover { background: var(--gm-surface); box-shadow: var(--shadow-sm); }
.gm-mega__label {
  display: flex; align-items: center; gap: var(--space-3);
  font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 14px;
}
.gm-mega__label i { color: var(--color-accent); font-size: 16px; }
.gm-mega__desc { margin-top: 4px; font-size: 12px; color: var(--gm-faint); }

.gm-utils { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; }
.gm-burger { display: none; }

@media (max-width: 1100px) {
  .gm-burger { display: inline-flex; }
  .gm-nav {
    display: none; order: 5; flex-basis: 100%; flex-direction: column;
    align-items: stretch; gap: 0; padding: var(--space-2) 0 var(--space-4);
  }
  .gm-header.is-nav-open .gm-nav { display: flex; }
  .gm-nav__top { width: 100%; justify-content: space-between; padding: var(--space-4) var(--space-1); font-size: 15px; }
  .gm-mega { position: static; box-shadow: none; background: transparent; }
  .gm-mega__inner { grid-template-columns: 1fr; gap: var(--space-6); padding: 0 0 var(--space-6); }
  .gm-mega__links { grid-template-columns: 1fr; }
}

/* --------------------------------------------------------------------------
   4. Hero
   -------------------------------------------------------------------------- */
.gm-hero {
  display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
  align-items: stretch; min-height: min(84vh, 820px); position: relative;
}
.gm-hero__copy {
  padding: clamp(calc(var(--space-8) * 2), 7vw, calc(var(--space-8) * 5)) var(--gm-gutter);
  display: flex; flex-direction: column; justify-content: center;
}
.gm-hero__eyebrow {
  display: flex; align-items: center; gap: var(--space-4);
  margin: 0; animation: gmRise .7s ease both;
}
.gm-hero__title {
  font-size: clamp(36px, 5vw, 72px); line-height: 1.03; letter-spacing: -0.02em;
  margin: var(--space-6) 0 0; max-width: 17ch;
  text-wrap: balance; animation: gmRise .8s ease .06s both;
}
.gm-hero__lede {
  margin: var(--space-6) 0 0; max-width: 52ch;
  font-size: clamp(15px, 1.2vw, 18px); color: var(--gm-muted);
  animation: gmRise .8s ease .14s both;
}
.gm-hero__actions {
  display: flex; flex-wrap: wrap; gap: var(--space-3);
  margin-top: calc(var(--space-8) * 1.4); animation: gmRise .8s ease .22s both;
}
.gm-hero__actions .btn { min-height: 44px; padding-inline: var(--space-6); }
.gm-hero__proof {
  display: flex; flex-wrap: wrap; gap: var(--space-3) calc(var(--space-8) * 1.5);
  margin: clamp(var(--space-8), 6vw, calc(var(--space-8) * 3)) 0 0;
  padding: 0; list-style: none; animation: gmFade 1s ease .4s both;
}
.gm-hero__proof li {
  display: flex; align-items: center; gap: var(--space-3);
  font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--gm-faint);
}
.gm-hero__proof i { color: var(--color-accent); font-size: 15px; }

/* The photograph blends into the ground: anything darker than the page falls
   away. This is the system's .lighten treatment, not a scrim trick. */
.gm-hero__media { position: relative; overflow: hidden; min-height: 400px; }
.gm-hero__media img,
.gm-hero__media .lighten {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
}
.gm-hero__media .lighten img { width: 100%; height: 100%; object-fit: cover; }
.gm-hero__scrim {
  position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(100deg,
    var(--gm-ground) 0%,
    color-mix(in srgb, var(--gm-ground) 40%, transparent) 38%,
    transparent 72%);
}

@media (max-width: 980px) {
  .gm-hero { grid-template-columns: 1fr; min-height: 0; }
  .gm-hero__media { order: -1; min-height: 300px; height: 46vw; }
  .gm-hero__scrim { background: linear-gradient(0deg, var(--gm-ground), transparent 62%); }
}

/* --------------------------------------------------------------------------
   5. Content blocks
   -------------------------------------------------------------------------- */
.gm-split {
  display: grid; grid-template-columns: minmax(0, .42fr) minmax(0, .58fr);
  gap: clamp(var(--space-8), 6vw, calc(var(--space-8) * 4)); align-items: start;
}
.gm-split--even { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.gm-taglist { display: flex; flex-wrap: wrap; gap: var(--space-2); margin: var(--space-8) 0 0; padding: 0; list-style: none; }
.gm-taglist li { list-style: none; }

/* Capability grid. Hairline separation from the shadow token, so cells read
   as one field rather than as a table. */
.gm-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(268px, 1fr));
  gap: 1px; background: var(--gm-line-soft);
  border-radius: var(--radius-md); overflow: hidden; box-shadow: var(--shadow-sm);
}
.gm-grid--wide { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.gm-cell {
  display: flex; flex-direction: column; gap: var(--space-3);
  padding: var(--space-6) var(--space-6) var(--space-8);
  min-height: 196px; background: var(--gm-ground);
  text-decoration: none; color: inherit; transition: background .18s;
}
.gm-section--alt .gm-cell { background: var(--gm-ground-2); }
.gm-cell:hover { background: var(--gm-surface); }
.gm-cell > i { font-size: 24px; color: var(--color-accent); }
.gm-cell__title {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 17px; line-height: 1.2;
}
.gm-cell__body { margin: 0; font-size: 13px; color: var(--gm-muted); }

/* Row list — the fading rule per row, as in the system's table. */
.gm-rows { margin: 0; padding: 0; list-style: none; }
.gm-row {
  display: grid;
  grid-template-columns: minmax(110px, 170px) minmax(0, 1fr) minmax(110px, 220px);
  gap: clamp(var(--space-4), 3vw, calc(var(--space-8) * 2));
  padding: var(--space-8) var(--space-1); align-items: baseline;
  background: linear-gradient(to right,
    transparent, var(--gm-line-soft) 48px,
    var(--gm-line-soft) calc(100% - 48px), transparent) no-repeat top / 100% 1px;
}
.gm-row__left { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-accent); }
.gm-row__title {
  display: block; margin: 0; text-decoration: none; color: var(--color-text);
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 18px; line-height: 1.25;
}
a.gm-row__title:hover { color: var(--color-accent); }
.gm-row__body { margin: var(--space-2) 0 0; max-width: 70ch; font-size: 14px; color: var(--gm-muted); }
.gm-row__meta { font-size: 12px; color: var(--gm-faint); }
@media (max-width: 860px) { .gm-row { grid-template-columns: 1fr; gap: var(--space-2); } }

/* Statistics */
.gm-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: clamp(var(--space-8), 4vw, calc(var(--space-8) * 2.4)); }
.gm-stat__value { display: flex; align-items: flex-start; gap: 3px; color: var(--color-accent-300); }
.gm-stat__num {
  font-family: var(--font-heading); font-weight: 400;
  font-size: clamp(38px, 4.2vw, 60px); line-height: 1;
  letter-spacing: -0.02em; font-variant-numeric: tabular-nums;
}
.gm-stat__suffix { font-family: var(--font-heading); font-size: clamp(17px, 1.6vw, 24px); line-height: 1.4; opacity: .7; }
.gm-stat__rule { height: 1px; margin: var(--space-6) 0 var(--space-4); background: linear-gradient(to right, var(--color-accent), transparent); }
.gm-stat__label { margin: 0; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-text); }
.gm-stat__note { margin: var(--space-2) 0 0; max-width: 28ch; font-size: 12px; color: var(--gm-muted); }
.gm-section--deep .gm-stat__value { color: var(--color-accent-200); }
.gm-section--deep .gm-stat__rule { background: linear-gradient(to right, var(--color-accent-300), transparent); }
.gm-section--deep .gm-stat__label { color: var(--color-neutral-100); }
.gm-section--deep .gm-stat__note { color: color-mix(in srgb, var(--color-neutral-100) 62%, transparent); }
.gm-section--deep .gm-kicker { color: var(--color-accent-200); }

/* Progress bars */
.gm-bars { display: grid; gap: var(--space-8); max-width: 900px; }
.gm-bar__head { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-6); }
.gm-bar__label { font-size: 14px; color: var(--color-text); }
.gm-bar__value { font-size: 13px; color: var(--gm-accent-text); font-variant-numeric: tabular-nums; }
.gm-bar__track { height: 5px; margin-top: var(--space-3); border-radius: 99px; background: var(--gm-line-soft); overflow: hidden; }
.gm-bar__fill { height: 100%; width: 0; border-radius: 99px; background: var(--color-accent); transition: width 1.1s cubic-bezier(.22,.7,.24,1); }
.gm-bar__note { margin: var(--space-3) 0 0; font-size: 12px; color: var(--gm-faint); }

/* Document list */
.gm-docs { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--space-3); }
.gm-doc {
  display: flex; align-items: center; gap: var(--space-4); width: 100%;
  padding: var(--space-4) var(--space-6); cursor: pointer; text-align: left;
  background: var(--gm-surface); border: 1px solid var(--gm-line);
  border-radius: var(--radius-md); color: var(--color-text);
  font-family: var(--font-body); font-size: 14px; text-decoration: none;
}
.gm-doc:hover { border-color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 10%, var(--gm-surface)); }
.gm-doc:active { background: color-mix(in srgb, var(--color-accent) 18%, var(--gm-surface)); }
.gm-doc > i { flex: none; font-size: 21px; color: var(--color-accent); }
.gm-doc__title { display: block; font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 14px; }
.gm-doc__meta { display: block; margin-top: 4px; font-size: 12px; color: var(--gm-faint); }
.gm-doc__go { margin-left: auto; font-size: 15px; color: var(--gm-faint); }

/* Figures */
.gm-figure { margin: 0; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-sm); }
.gm-figure__frame { position: relative; height: clamp(240px, 30vw, 440px); background: var(--gm-ground-2); }
.gm-figure__frame img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gm-figure__frame .lighten { position: absolute; inset: 0; }
.gm-figure figcaption { padding: var(--space-4) var(--space-6); margin: 0; font-size: 12px; color: var(--gm-faint); }

/* Cards — Nocturne's .card, in a grid, with a media block above it */
.gm-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--space-6); }
.gm-cards .card { padding: 0; overflow: hidden; gap: 0; box-shadow: var(--shadow-sm); }
.gm-cards .card:hover { box-shadow: var(--shadow-md); }
.gm-card__media { position: relative; height: 196px; overflow: hidden; background: var(--gm-ground-2); }
.gm-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s cubic-bezier(.22,.7,.24,1); }
.gm-cards .card:hover .gm-card__media img { transform: scale(1.03); }
.gm-card__body { display: flex; flex-direction: column; flex: 1; gap: var(--space-2); padding: var(--space-6); }
.gm-card__body .card-title a { color: inherit; text-decoration: none; }
.gm-card__body .card-title a:hover { color: var(--color-accent); }
.gm-card__spec {
  margin: var(--space-4) 0 0; padding-top: var(--space-3);
  font-size: 12px; color: var(--gm-faint);
  background: linear-gradient(to right, var(--gm-line-soft), transparent) no-repeat top / 100% 1px;
}
.gm-card__actions { display: flex; gap: var(--space-2); margin-top: auto; padding-top: var(--space-6); }

/* Newsroom list */
.gm-newslist { margin: 0; padding: 0; list-style: none; }
.gm-newslist li { list-style: none; }
.gm-newslist a {
  display: grid; grid-template-columns: 108px minmax(0, 1fr) auto;
  gap: var(--space-6); align-items: baseline;
  padding: var(--space-6) var(--space-1); text-decoration: none; color: inherit;
  background: linear-gradient(to right,
    transparent, var(--gm-line-soft) 48px,
    var(--gm-line-soft) calc(100% - 48px), transparent) no-repeat top / 100% 1px;
}
.gm-newslist a:hover { background:
    linear-gradient(color-mix(in srgb, var(--color-accent) 8%, transparent),
                    color-mix(in srgb, var(--color-accent) 8%, transparent)) no-repeat 0 0 / 100% 100%,
    linear-gradient(to right,
      transparent, var(--gm-line-soft) 48px,
      var(--gm-line-soft) calc(100% - 48px), transparent) no-repeat top / 100% 1px; }
.gm-newslist time { font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--gm-faint); }
.gm-newslist span { font-size: 15px; color: var(--color-text); }
.gm-newslist i { font-size: 14px; color: var(--color-accent); }
@media (max-width: 700px) {
  .gm-newslist a { grid-template-columns: minmax(0,1fr) auto; }
  .gm-newslist time { grid-column: 1 / -1; }
}

/* Panels */
.gm-panel {
  padding: clamp(var(--space-8), 3vw, calc(var(--space-8) * 2));
  background: var(--gm-surface); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
}
.gm-panel__stack { display: flex; flex-direction: column; gap: var(--space-2); margin-top: var(--space-8); }
.gm-panel__stack .btn { min-height: 44px; }

/* Maps */
.gm-map { margin-top: var(--space-8); border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-sm); background: var(--gm-ground); }
.gm-map gm-trade-map { display: block; height: clamp(340px, 44vw, 580px); }
.gm-map--locator { margin-top: var(--space-8); }
.gm-map--locator gm-office-map { display: block; height: 300px; }

/* Page header */
.gm-pagehead { position: relative; padding: clamp(var(--space-8), 6vw, calc(var(--space-8) * 4)) var(--gm-gutter) clamp(var(--space-8), 4vw, calc(var(--space-8) * 2.6)); background: var(--gm-ground-2); }
.gm-pagehead__inner {
  max-width: var(--gm-max); margin: 0 auto; display: grid;
  grid-template-columns: minmax(0, .55fr) minmax(0, .45fr);
  gap: clamp(var(--space-8), 5vw, calc(var(--space-8) * 3)); align-items: end;
}
@media (max-width: 900px) {
  .gm-pagehead__inner, .gm-split { grid-template-columns: 1fr; }
}

/* --------------------------------------------------------------------------
   6. Catalogue toolbar
   -------------------------------------------------------------------------- */
.gm-toolbar {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--space-4); padding-bottom: var(--space-6);
  background: linear-gradient(to right,
    transparent, var(--gm-line) 48px,
    var(--gm-line) calc(100% - 48px), transparent) no-repeat bottom / 100% 1px;
}
.gm-chips { display: flex; flex-wrap: wrap; gap: var(--space-2); margin: 0; padding: 0; list-style: none; }
.gm-chips li { list-style: none; }
.gm-chip {
  padding: var(--space-2) var(--space-4); cursor: pointer;
  background: transparent; border: 1px solid var(--gm-line);
  border-radius: calc(var(--radius-md) * 0.75);
  color: var(--gm-muted); font-family: var(--font-body); font-size: 12px;
}
.gm-chip:hover { color: var(--color-accent); border-color: var(--color-accent); }
.gm-chip.is-active { color: var(--color-accent); border-color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 12%, transparent); }
.gm-search {
  display: flex; align-items: center; gap: var(--space-3);
  min-width: 260px; min-height: 36px; padding: 0 var(--space-4);
  background: var(--color-surface); border: 1px solid var(--gm-line);
  border-radius: var(--radius-md);
}
.gm-search:hover { border-color: color-mix(in srgb, var(--color-text) 45%, transparent); }
.gm-search:focus-within { border-color: var(--color-accent); }
.gm-search i { font-size: 15px; color: var(--gm-faint); }
.gm-search input { flex: 1; min-width: 0; padding: 6px 0; border: 0; background: transparent; outline: none; color: var(--color-text); font: inherit; font-size: 14px; caret-color: var(--color-accent); }
.gm-count { margin: var(--space-6) 0; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--gm-faint); }
.gm-empty {
  padding: calc(var(--space-8) * 2); text-align: center; font-size: 15px; color: var(--gm-muted);
  border: 1px dashed var(--gm-line); border-radius: var(--radius-lg);
}

/* Card headings carry .card-title; drop the heading's own bottom margin so
   the card's flex gap is the only spacing. */
.gm-cards .card-title { margin: 0; }
.gm-cards h2.card-title, .gm-cards h3.card-title { margin-bottom: 0; }

/* --------------------------------------------------------------------------
   7. Forms — Nocturne .field / .input, plus theme-level messaging
   -------------------------------------------------------------------------- */
.gm-form > * + * { margin-top: var(--space-4); }
.gm-form .field { display: block; }
/* The label text is a span inside the <label class="field">, so it needs the
   same treatment Nocturne gives `.field > label`. */
.field > .gm-field-label {
  display: block; margin-bottom: 5px; font-size: 12px;
  color: color-mix(in srgb, var(--color-text) 70%, transparent);
}
.gm-form textarea.input { min-height: 90px; }
.gm-hp { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.gm-note { margin: var(--space-3) 0 0; font-size: 12px; color: var(--gm-faint); }
.gm-alert {
  margin: 0; padding: var(--space-3) var(--space-4);
  font-size: 13px; color: var(--color-accent-100);
  background: var(--color-accent-900); border: 1px solid var(--color-accent-700);
  border-radius: var(--radius-md);
}
.gm-alert--ok { color: var(--color-neutral-100); background: var(--color-neutral-900); border-color: var(--color-neutral-700); }

.gm-contact { display: grid; grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); gap: clamp(var(--space-8), 4vw, calc(var(--space-8) * 2.6)); }
.gm-contact__list { margin: 0; padding: 0; list-style: none; }
.gm-contact__list li {
  display: flex; gap: var(--space-4); align-items: flex-start; list-style: none;
  padding: var(--space-4) 0;
  background: linear-gradient(to right, var(--gm-line-soft), transparent 70%) no-repeat top / 100% 1px;
}
.gm-contact__list i { flex: none; margin-top: 2px; font-size: 18px; color: var(--color-accent); }
.gm-contact__label { margin: 0; font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gm-faint); }
.gm-contact__value { margin: var(--space-2) 0 0; font-size: 15px; color: var(--color-text); }

/* --------------------------------------------------------------------------
   8. Dialog, assistant, consent — Nocturne .dialog at top elevation
   -------------------------------------------------------------------------- */
.gm-modal { display: none; z-index: 90; }
.gm-modal.is-open { display: grid; animation: gmFade .18s ease both; }
.gm-modal .dialog { width: min(680px, 100%); max-height: 88vh; overflow: auto; animation: gmRise .26s ease both; }
.gm-modal__head { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-6); }
.gm-modal__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--space-4); }
.gm-modal__ok { padding: var(--space-8) 0; text-align: center; }
.gm-modal__ok > i { font-size: 40px; color: var(--color-accent); }

.gm-dock {
  position: fixed; right: clamp(var(--space-4), 2vw, var(--space-8));
  bottom: clamp(var(--space-4), 2vw, var(--space-8)); z-index: 80;
  display: flex; flex-direction: column; align-items: flex-end; gap: var(--space-4);
}
.gm-fab { min-height: 44px; padding-inline: var(--space-6); border-radius: 99px; background: var(--gm-surface); box-shadow: var(--shadow-md); }
.gm-chat {
  display: none; flex-direction: column; overflow: hidden;
  width: min(384px, calc(100vw - 32px)); height: min(560px, 72vh);
  background: var(--color-surface); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg); animation: gmRise .24s ease both;
}
.gm-chat.is-open { display: flex; }
.gm-chat__head {
  display: flex; align-items: center; gap: var(--space-3); padding: var(--space-4) var(--space-6);
  background: linear-gradient(to right, var(--gm-line), transparent) no-repeat bottom / 100% 1px;
}
.gm-chat__avatar {
  display: grid; place-items: center; width: 30px; height: 30px; flex: none;
  border: 1px solid var(--color-accent); border-radius: var(--radius-sm);
  color: var(--color-accent);
}
.gm-chat__name { margin: 0; font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 14px; }
.gm-chat__role { margin: 3px 0 0; font-size: 11px; color: var(--gm-faint); }
.gm-chat__log { flex: 1; overflow: auto; padding: var(--space-6); display: flex; flex-direction: column; gap: var(--space-4); }
.gm-msg { max-width: 88%; margin: 0; padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); font-size: 13px; line-height: 1.55; }
.gm-msg--bot { align-self: flex-start; background: var(--gm-surface-2); color: var(--gm-muted); }
.gm-msg--user { align-self: flex-end; background: var(--color-accent-900); color: var(--color-accent-100); }
.gm-typing { display: flex; align-items: center; gap: 6px; }
.gm-typing span { width: 6px; height: 6px; border-radius: 99px; background: var(--color-accent); animation: gmPulse 1s infinite; }
.gm-typing span:nth-child(2) { animation-delay: .18s; }
.gm-typing span:nth-child(3) { animation-delay: .36s; }
.gm-chat__chips {
  display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-3) var(--space-4);
  background: linear-gradient(to right, var(--gm-line), transparent) no-repeat top / 100% 1px;
}
.gm-chat__chip {
  padding: 6px var(--space-3); cursor: pointer; font-size: 11px;
  background: transparent; border: 1px solid var(--gm-line);
  border-radius: 99px; color: var(--gm-muted); font-family: var(--font-body);
}
.gm-chat__chip:hover { color: var(--color-accent); border-color: var(--color-accent); }
.gm-chat__form {
  display: flex; gap: var(--space-2); padding: var(--space-4);
  background: linear-gradient(to right, var(--gm-line), transparent) no-repeat top / 100% 1px;
}
.gm-chat__disclaimer { margin: 0; padding: 0 var(--space-4) var(--space-4); font-size: 11px; color: var(--gm-faint); }

.gm-consent {
  position: fixed; left: clamp(var(--space-4), 2vw, var(--space-8));
  bottom: clamp(var(--space-4), 2vw, var(--space-8)); z-index: 85; display: none;
  width: min(420px, calc(100vw - 32px)); padding: var(--space-6);
  background: var(--color-surface); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg); animation: gmRise .26s ease both;
}
.gm-consent.is-open { display: block; }
.gm-consent__actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-6); }
.gm-consent__actions .btn { flex: 1; min-width: 150px; min-height: 38px; }

/* --------------------------------------------------------------------------
   9. Footer
   -------------------------------------------------------------------------- */
.gm-footer {
  position: relative; padding: clamp(var(--space-8), 6vw, calc(var(--space-8) * 3.6)) var(--gm-gutter) var(--space-8);
  background: var(--gm-ground-2);
}
.gm-footer::before {
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px;
  background: linear-gradient(to right,
    transparent, var(--gm-line) 48px,
    var(--gm-line) calc(100% - 48px), transparent);
}
.gm-footer__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: clamp(var(--space-8), 4vw, calc(var(--space-8) * 2.4)); }
.gm-footer__about { margin: var(--space-6) 0 0; max-width: 32ch; font-size: 13px; color: var(--gm-muted); }
.gm-footer__title { margin: 0; font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--color-accent); }
.gm-footer nav ul, .gm-footer__widget ul { display: flex; flex-direction: column; gap: var(--space-3); margin: var(--space-6) 0 0; padding: 0; list-style: none; }
.gm-footer nav li { list-style: none; }
.gm-footer a { color: var(--gm-muted); font-size: 13px; text-decoration: none; }
.gm-footer a:hover { color: var(--color-accent); }
.gm-social { display: flex; gap: var(--space-2); margin-top: var(--space-8); }
.gm-social a {
  display: grid; place-items: center; width: 34px; height: 34px;
  border: 1px solid var(--gm-line); border-radius: var(--radius-md); color: var(--color-accent);
}
.gm-social a:hover { background: color-mix(in srgb, var(--color-accent) 12%, transparent); }
.gm-footer__contact { margin-top: var(--space-6); font-size: 13px; line-height: 1.9; color: var(--gm-muted); }
.gm-footer__rule {
  height: 1px; border: 0;
  margin: clamp(var(--space-8), 4vw, calc(var(--space-8) * 2.4)) 0 var(--space-6);
  background: linear-gradient(to right,
    transparent, var(--gm-line) 48px,
    var(--gm-line) calc(100% - 48px), transparent);
}
.gm-footer__legal {
  display: flex; flex-wrap: wrap; gap: var(--space-3) calc(var(--space-8) * 1.4);
  justify-content: space-between; font-size: 12px; color: var(--gm-faint);
}
.gm-footer__legal ul { display: flex; flex-wrap: wrap; gap: var(--space-6); margin: 0; padding: 0; list-style: none; }
.gm-footer__legal li { list-style: none; }
.gm-footer__legal a, .gm-footer__legal button { color: var(--gm-faint); font: inherit; }
.gm-footer__legal button { padding: 0; background: transparent; border: 0; cursor: pointer; text-decoration: underline; }
.gm-footer__legal a:hover, .gm-footer__legal button:hover { color: var(--color-accent); }

/* --------------------------------------------------------------------------
   10. Editorial content + WordPress
   -------------------------------------------------------------------------- */
.gm-entry { max-width: 78ch; }
.gm-entry > * + * { margin-top: 1.1em; }
.gm-entry h2 { font-size: clamp(23px, 2.1vw, 31px); margin-top: 2em; }
.gm-entry h3 { font-size: clamp(18px, 1.5vw, 22px); margin-top: 1.8em; }
.gm-entry p, .gm-entry li { color: var(--gm-muted); }
.gm-entry blockquote {
  margin: 2em 0; padding-left: var(--space-6);
  border-left: 1px solid var(--color-accent);
  font-size: clamp(18px, 1.5vw, 23px); line-height: 1.5; color: var(--color-text);
}
.gm-entry img, .wp-block-image img { border-radius: var(--radius-md); }
.gm-entry table, .wp-block-table table { width: 100%; border-collapse: collapse; font-size: 14px; }
.gm-entry th, .gm-entry td { padding: var(--space-2); text-align: left; border-bottom: 1px solid var(--gm-line-soft); }
.gm-entry th { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--gm-muted); }
.gm-entry code, .gm-entry pre { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: .92em; }
.gm-entry pre { padding: var(--space-4); background: var(--gm-surface); border-radius: var(--radius-md); overflow: auto; }
.alignwide { max-width: min(1200px, 100%); }
.alignfull { max-width: none; }
.wp-caption, .gallery-caption, .bypostauthor, .sticky { display: block; }

.gm-pagination { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: calc(var(--space-8) * 1.6); padding: 0; list-style: none; }
.gm-pagination ul { display: flex; flex-wrap: wrap; gap: var(--space-2); margin: 0; padding: 0; list-style: none; }
.gm-pagination li { list-style: none; }
.gm-pagination .page-numbers {
  display: inline-grid; place-items: center; min-width: 36px; height: 36px; padding: 0 var(--space-3);
  border: 1px solid var(--gm-line); border-radius: var(--radius-md);
  color: var(--gm-muted); font-size: 13px; text-decoration: none;
}
.gm-pagination .page-numbers:hover { color: var(--color-accent); border-color: var(--color-accent); }
.gm-pagination .page-numbers.current { color: var(--color-accent); border-color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 12%, transparent); }

.gm-404 { padding: clamp(calc(var(--space-8) * 3), 12vw, calc(var(--space-8) * 8)) var(--gm-gutter); }

@media print {
  .gm-header, .gm-dock, .gm-consent, .gm-modal, .gm-footer__legal button { display: none !important; }
  body { background: #fff; color: #111; }
}
