// direction-a.jsx — "Nocturne" — dark, cinematic expedition feel.
// Reads tweaks (accent, type pairing, hero variant, lang) via props.

function DirectionA({ accent, typePair, heroVariant, lang }) {
  const T = COPY[lang];
  const display = typePair.display;
  const body = typePair.body;
  const mono = "'JetBrains Mono', ui-monospace, monospace";

  return (
    <div className="dirA" style={{
      "--accent": accent,
      "--display": display,
      "--body": body,
      "--mono": mono,
      fontFamily: body,
      color: "#efe7d4",
      background: "#0a0d10",
      width: "100%",
    }}>
      <style>{`
        .dirA { --bg:#0a0d10; --bg2:#10141a; --bg3:#161b22; --line:rgba(239,231,212,0.10); --fg:#efe7d4; --fg-mute:rgba(239,231,212,0.55); --fg-dim:rgba(239,231,212,0.32); }
        .dirA * { box-sizing: border-box; }
        .dirA .display { font-family: var(--display); font-weight: 400; letter-spacing: -0.02em; line-height: 0.95; }
        .dirA .mono { font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; }
        .dirA .lede { font-size: 18px; line-height: 1.55; color: var(--fg-mute); max-width: 60ch; }
        .dirA .rule { height: 1px; background: var(--line); width: 100%; }
        .dirA .container { max-width: 1320px; margin: 0 auto; padding: 0 56px; }
        .dirA .kicker { display:inline-flex; align-items:center; gap:10px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--accent); }
        .dirA .kicker::before { content:""; width: 18px; height: 1px; background: var(--accent); }
        .dirA a { color: inherit; text-decoration: none; }
        .dirA button { font: inherit; cursor: pointer; }

        /* nav */
        .dirA .nav { position: sticky; top: 0; z-index: 50; backdrop-filter: blur(20px) saturate(140%); background: rgba(10,13,16,0.7); border-bottom: 1px solid var(--line); }
        .dirA .nav-inner { display:flex; align-items:center; justify-content:space-between; padding: 18px 56px; max-width: 1320px; margin: 0 auto; }
        .dirA .nav-brand { display:flex; align-items:center; gap: 10px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; }
        .dirA .nav-brand-mark { width: 22px; height: 22px; border: 1px solid var(--fg); border-radius: 50%; position:relative; display:inline-block; }
        .dirA .nav-brand-mark::after { content:""; position:absolute; inset:5px; background: var(--accent); border-radius: 50%; }
        .dirA .nav-links { display:flex; gap: 26px; font-size: 13px; color: var(--fg-mute); }
        .dirA .nav-links a:hover { color: var(--fg); }
        .dirA .nav-right { display:flex; align-items: center; gap: 16px; }
        .dirA .lang-pill { display:inline-flex; padding: 2px; border: 1px solid var(--line); border-radius: 999px; font-family: var(--mono); font-size: 10px; letter-spacing: 0.1em; }
        .dirA .lang-pill button { background: transparent; border: 0; color: var(--fg-mute); padding: 4px 10px; border-radius: 999px; text-transform: uppercase; }
        .dirA .lang-pill button.on { background: var(--fg); color: #0a0d10; }
        .dirA .reserve-btn { display:inline-flex; align-items:center; gap: 10px; padding: 10px 18px; background: var(--accent); color: #0a0d10; border: 0; font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; transition: transform .12s; }
        .dirA .reserve-btn:hover { transform: translateY(-1px); }

        /* mobile nav (hidden on desktop) */
        .dirA .nav-burger { display: none; flex-direction: column; gap: 4px; width: 38px; height: 38px; align-items: center; justify-content: center; background: transparent; border: 1px solid var(--line); padding: 0; }
        .dirA .nav-burger span { width: 17px; height: 1.5px; background: var(--fg); display: block; transition: transform .22s ease, opacity .18s ease; }
        .dirA .nav-burger.open span:nth-child(1) { transform: translateY(5.5px) rotate(45deg); }
        .dirA .nav-burger.open span:nth-child(2) { opacity: 0; }
        .dirA .nav-burger.open span:nth-child(3) { transform: translateY(-5.5px) rotate(-45deg); }
        .dirA .nav-mobile { display: none; flex-direction: column; padding: 4px 28px 22px; background: rgba(10,13,16,0.97); border-top: 1px solid var(--line); }
        .dirA .nav-mobile a { padding: 15px 2px; border-bottom: 1px solid var(--line); font-size: 16px; color: var(--fg-mute); }
        .dirA .nav-mobile a:active { color: var(--fg); }
        .dirA .nav-mobile .reserve-btn { margin-top: 18px; justify-content: center; }

        /* HERO - fullbleed */
        .dirA .hero-fb { position: relative; min-height: 760px; padding: 100px 0 80px; overflow: hidden; }
        .dirA .hero-fb-img { position: absolute; inset: 0; }
        .dirA .hero-fb-video { width: 100%; height: 100%; object-fit: cover; display: block; }
        .dirA .hero-fb-img::after { content:""; position:absolute; inset:0; background: linear-gradient(180deg, rgba(10,13,16,0.7) 0%, rgba(10,13,16,0.4) 40%, rgba(10,13,16,0.95) 100%); }
        .dirA .hero-fb-content { position: relative; z-index: 2; }
        .dirA .hero-eyebrow { margin-bottom: 28px; }
        .dirA .hero-title { font-size: clamp(64px, 8vw, 124px); white-space: pre-line; max-width: 14ch; }
        .dirA .hero-sub { margin-top: 30px; max-width: 50ch; font-size: 19px; line-height: 1.55; color: var(--fg-mute); }
        .dirA .hero-cta-row { display:flex; align-items:center; gap: 24px; margin-top: 44px; }
        .dirA .hero-cta-sub { font-family: var(--mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .hero-meta { display:flex; gap: 56px; margin-top: 100px; padding-top: 24px; border-top: 1px solid var(--line); }
        .dirA .hero-meta-item .v { font-family: var(--display); font-size: 36px; }
        .dirA .hero-meta-item .l { font-family: var(--mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--fg-dim); margin-top: 4px; }

        /* HERO - split */
        .dirA .hero-sp { padding: 64px 0; }
        .dirA .hero-sp-grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: 56px; align-items: center; }
        .dirA .hero-sp-img { aspect-ratio: 3/4; }

        /* HERO - stacked */
        .dirA .hero-st { padding: 80px 0 0; }
        .dirA .hero-st-title { font-size: clamp(56px, 11vw, 168px); white-space: pre-line; letter-spacing: -0.03em; }
        .dirA .hero-st-img { height: 480px; margin-top: 56px; }
        .dirA .hero-st-sub-row { display:grid; grid-template-columns: 1fr 1fr; gap: 56px; margin-top: 40px; align-items:start; }

        /* sections */
        .dirA .sec { padding: 120px 0; border-top: 1px solid var(--line); }
        .dirA .sec-hd { display:grid; grid-template-columns: 1fr 1fr; gap: 56px; margin-bottom: 64px; align-items: end; }
        .dirA .sec-title { font-size: clamp(40px, 5vw, 64px); white-space: pre-line; }

        /* rig */
        .dirA .rig-grid { display:grid; grid-template-columns: 1.1fr 1fr; gap: 56px; }
        .dirA .rig-img { aspect-ratio: 4/5; }
        .dirA .rig-specs { display:grid; grid-template-columns: 1fr; gap: 0; }
        .dirA .rig-spec { display:grid; grid-template-columns: 140px 1fr; gap: 24px; padding: 16px 0; border-bottom: 1px solid var(--line); }
        .dirA .rig-spec:first-child { border-top: 1px solid var(--line); }
        .dirA .rig-spec-key { font-family: var(--mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-dim); padding-top: 4px; }
        .dirA .rig-spec-val { font-size: 15px; line-height: 1.5; color: var(--fg); }

        /* regions */
        .dirA .regions-grid { display:grid; grid-template-columns: repeat(12, 1fr); gap: 24px; }
        .dirA .region { display:flex; flex-direction:column; }
        .dirA .region-img { margin-bottom: 18px; }
        .dirA .region-num { font-family: var(--mono); font-size: 10px; letter-spacing: 0.14em; color: var(--accent); }
        .dirA .region-name { font-family: var(--display); font-size: 32px; margin-top: 6px; line-height: 1; }
        .dirA .region-meta { display:flex; justify-content:space-between; gap: 12px; font-family: var(--mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--fg-dim); margin-top: 10px; }
        .dirA .region-lede { font-size: 14px; line-height: 1.55; color: var(--fg-mute); margin-top: 12px; }
        .dirA .region-big { grid-column: span 7; }
        .dirA .region-big .region-img { aspect-ratio: 16/10; }
        .dirA .region-sm { grid-column: span 5; }
        .dirA .region-sm .region-img { aspect-ratio: 4/3; }
        .dirA .region-md { grid-column: span 4; }
        .dirA .region-md .region-img { aspect-ratio: 4/5; }

        /* routes */
        .dirA .routes-grid { display:grid; grid-template-columns: 1fr 1fr 1fr; gap: 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
        .dirA .route { padding: 36px 32px; border-right: 1px solid var(--line); display:flex; flex-direction:column; gap: 20px; min-height: 520px; position: relative; }
        .dirA .route:last-child { border-right: 0; }
        .dirA .route-code { font-family: var(--mono); font-size: 10px; letter-spacing: 0.16em; color: var(--accent); }
        .dirA .route-name { font-family: var(--display); font-size: 38px; line-height: 1; }
        .dirA .route-stats { display:flex; gap: 24px; padding: 12px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
        .dirA .route-stat .v { font-family: var(--display); font-size: 24px; }
        .dirA .route-stat .l { font-family: var(--mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .route-stops { display:flex; flex-direction:column; gap: 6px; }
        .dirA .route-stop { display:flex; align-items:center; gap: 12px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; color: var(--fg-mute); }
        .dirA .route-stop::before { content:""; width: 7px; height: 7px; border: 1px solid var(--fg-mute); border-radius: 50%; flex-shrink: 0; }
        .dirA .route-stop:first-child::before, .dirA .route-stop:last-child::before { background: var(--accent); border-color: var(--accent); }
        .dirA .route-stop-line { width: 1px; height: 14px; background: var(--line); margin-left: 3px; }
        .dirA .route-note { font-size: 14px; line-height: 1.55; color: var(--fg-mute); margin-top: auto; }

        /* pricing */
        .dirA .pricing-grid { display:grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: start; }
        .dirA .pricing-cards { display:grid; grid-template-columns: 1fr; gap: 0; }
        .dirA .pricing-card { display:grid; grid-template-columns: 1fr auto; align-items: center; padding: 24px 0; border-bottom: 1px solid var(--line); }
        .dirA .pricing-card:first-child { border-top: 1px solid var(--line); }
        .dirA .pricing-label { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .pricing-months { font-family: var(--display); font-size: 24px; margin-top: 4px; }
        .dirA .pricing-price { font-family: var(--display); font-size: 56px; line-height: 1; letter-spacing: -0.02em; }
        .dirA .pricing-unit { font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .pricing-note { margin-top: 20px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; color: var(--fg-mute); }
        .dirA .included { display:flex; flex-direction:column; gap: 0; }
        .dirA .included-item { display:flex; gap: 16px; padding: 14px 0; border-bottom: 1px solid var(--line); align-items:flex-start; }
        .dirA .included-item:first-child { border-top: 1px solid var(--line); }
        .dirA .included-check { width: 18px; height: 18px; border: 1px solid var(--accent); flex-shrink: 0; display:flex; align-items:center; justify-content:center; color: var(--accent); font-size: 11px; margin-top: 1px; }
        .dirA .included-text { font-size: 15px; line-height: 1.5; }

        /* faq */
        .dirA .faq-list { border-top: 1px solid var(--line); }
        .dirA .faq-row { border-bottom: 1px solid var(--line); }
        .dirA .faq-q { display:flex; justify-content:space-between; align-items:center; padding: 24px 0; cursor: pointer; gap: 24px; }
        .dirA .faq-q-text { font-family: var(--display); font-size: 26px; line-height: 1.2; }
        .dirA .faq-q-icon { font-family: var(--mono); font-size: 14px; color: var(--accent); flex-shrink: 0; transition: transform .25s; }
        .dirA .faq-row.open .faq-q-icon { transform: rotate(45deg); }
        .dirA .faq-a { max-height: 0; overflow: hidden; transition: max-height .35s ease, padding .35s ease; }
        .dirA .faq-row.open .faq-a { max-height: 400px; padding-bottom: 24px; }
        .dirA .faq-a-text { font-size: 16px; line-height: 1.6; color: var(--fg-mute); max-width: 70ch; }

        /* voices */
        .dirA .voices-grid { display:grid; grid-template-columns: 1fr 1fr 1fr; gap: 32px; }
        .dirA .voice { padding: 32px; border: 1px solid var(--line); background: var(--bg2); display:flex; flex-direction:column; gap: 24px; }
        .dirA .voice-q { font-family: var(--display); font-size: 22px; line-height: 1.35; }
        .dirA .voice-q::before { content:"“"; display:block; font-family: var(--display); font-size: 64px; line-height: 0.5; color: var(--accent); margin-bottom: 16px; }
        .dirA .voice-foot { margin-top: auto; }
        .dirA .voice-who { font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; }
        .dirA .voice-where { font-family: var(--mono); font-size: 10px; letter-spacing: 0.1em; color: var(--fg-dim); margin-top: 4px; }

        /* reservation */
        .dirA .rsv-section { background: var(--bg2); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
        .dirA .rsv-grid-2 { display:grid; grid-template-columns: 1fr 1.4fr; gap: 64px; align-items:start; }
        .dirA .rsv-form { display:flex; flex-direction:column; gap: 28px; }
        .dirA .rsv-block { display:flex; flex-direction:column; gap: 14px; }
        .dirA .rsv-lbl { font-family: var(--mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .rsv-grid { display:grid; grid-template-columns: 1fr 1fr; gap: 20px; }
        .dirA .rsv-field { display:flex; flex-direction:column; gap: 8px; }
        .dirA .rsv-field input, .dirA .rsv-field select, .dirA .rsv-field textarea { background: transparent; border: 0; border-bottom: 1px solid var(--line); padding: 10px 0; color: var(--fg); font: inherit; font-size: 16px; font-family: var(--body); outline: none; resize: vertical; transition: border-color .15s; }
        .dirA .rsv-field input:focus, .dirA .rsv-field select:focus, .dirA .rsv-field textarea:focus { border-bottom-color: var(--accent); }
        .dirA .rsv-field textarea { min-height: 120px; }
        .dirA .rsv-field select { appearance: none; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path fill='rgba(239,231,212,0.5)' d='M0 0h10L5 6z'/></svg>"); background-repeat: no-repeat; background-position: right 0 center; }
        .dirA .rsv-foot { display:flex; justify-content:space-between; align-items:center; gap: 24px; padding-top: 12px; border-top: 1px solid var(--line); }
        .dirA .rsv-check { display:flex; align-items:center; gap: 10px; font-size: 13px; color: var(--fg-mute); cursor:pointer; }
        .dirA .rsv-check input { accent-color: var(--accent); width: 14px; height: 14px; }
        .dirA .rsv-submit { display:inline-flex; align-items:center; gap: 12px; padding: 14px 24px; background: var(--accent); color: #0a0d10; border: 0; font-family: var(--mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; transition: transform .12s, opacity .15s; }
        .dirA .rsv-submit:disabled { opacity: 0.35; cursor: not-allowed; }
        .dirA .rsv-submit:not(:disabled):hover { transform: translateX(2px); }
        .dirA .rsv-success { padding: 80px 32px; text-align: center; border: 1px solid var(--line); background: var(--bg3); }
        .dirA .rsv-success-mark { width: 56px; height: 56px; border: 1px solid var(--accent); color: var(--accent); display:flex; align-items:center; justify-content:center; margin: 0 auto 24px; font-size: 24px; border-radius: 50%; }
        .dirA .rsv-success h3 { font-family: var(--display); font-size: 32px; font-weight: 400; margin: 0 0 12px; }
        .dirA .rsv-success-sum { font-family: var(--mono); font-size: 12px; letter-spacing: 0.12em; color: var(--fg-mute); }
        .dirA .rsv-success-reset { background: transparent; border: 0; color: var(--accent); font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; margin-top: 32px; }

        /* calendar */
        .dirA .cal-wrap { font-family: var(--body); }
        .dirA .cal-toolbar { display:flex; justify-content:space-between; align-items:center; padding: 16px 18px; border: 1px solid var(--line); border-bottom: 0; background: var(--bg3); }
        .dirA .cal-summary { display:flex; align-items:center; gap: 28px; flex-wrap:wrap; }
        .dirA .cal-summary > div { display:flex; flex-direction:column; gap: 2px; }
        .dirA .cal-summary-lbl { font-family: var(--mono); font-size: 9px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .cal-summary strong { font-family: var(--display); font-weight: 400; font-size: 18px; }
        .dirA .cal-summary-arrow { color: var(--fg-dim); }
        .dirA .cal-summary-nights { margin-left: auto; font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--fg-mute); }
        .dirA .cal-summary-nights strong { color: var(--accent); margin-right: 4px; font-family: var(--mono); font-size: 14px; }
        .dirA .cal-nav { display:flex; gap: 4px; align-items:center; }
        .dirA .cal-nav button { width: 30px; height: 30px; background: transparent; border: 1px solid var(--line); color: var(--fg); font-size: 16px; line-height: 1; padding: 0; }
        .dirA .cal-nav button:hover { border-color: var(--accent); color: var(--accent); }
        .dirA .cal-nav .cal-clear { width: auto; padding: 0 12px; font-family: var(--mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; margin-left: 8px; }
        .dirA .cal-months { display:grid; grid-template-columns: 1fr 1fr; gap: 0; border: 1px solid var(--line); }
        .dirA .cal-month { padding: 18px; }
        .dirA .cal-month:first-child { border-right: 1px solid var(--line); }
        .dirA .cal-month-hd { display:flex; justify-content:space-between; align-items:center; padding-bottom: 12px; font-family: var(--display); font-size: 18px; }
        .dirA .cal-closed { font-family: var(--mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-dim); }
        .dirA .cal-dow { display:grid; grid-template-columns: repeat(7, 1fr); gap: 0; padding-bottom: 8px; border-bottom: 1px solid var(--line); margin-bottom: 4px; }
        .dirA .cal-dow span { text-align:center; font-family: var(--mono); font-size: 9px; letter-spacing: 0.1em; color: var(--fg-dim); }
        .dirA .cal-grid { display:grid; grid-template-columns: repeat(7, 1fr); gap: 0; }
        .dirA .cal-cell { height: 36px; display:flex; align-items:center; justify-content:center; font-family: var(--mono); font-size: 12px; background: transparent; border: 0; color: var(--fg); padding: 0; position: relative; }
        .dirA .cal-blank { visibility: hidden; }
        .dirA .cal-day { cursor: pointer; transition: background .12s; }
        .dirA .cal-day:hover:not(:disabled) { background: rgba(239,231,212,0.06); }
        .dirA .cal-disabled { color: var(--fg-dim); opacity: 0.35; cursor: not-allowed; text-decoration: line-through; }
        .dirA .cal-in-range { background: rgba(239,231,212,0.05); color: var(--fg); }
        .dirA .cal-edge { background: var(--accent); color: #0a0d10; font-weight: 500; }
        .dirA .cal-edge:hover { background: var(--accent); }

        /* ============================ RESPONSIVE ============================ */
        /* Desktop layout above is untouched; everything below only applies at
           tablet/mobile widths. */

        @media (max-width: 1024px) {
          .dirA .container { padding: 0 40px; }
          .dirA .nav-inner { padding: 16px 40px; }
          .dirA .sec { padding: 96px 0; }
          .dirA .hero-meta { gap: 40px; }
          .dirA .rig-grid { gap: 40px; }
          .dirA .voices-grid { gap: 24px; }
        }

        @media (max-width: 880px) {
          .dirA .container { padding: 0 30px; }
          .dirA .nav-inner { padding: 14px 30px; }

          /* nav → hamburger */
          .dirA .nav-links { display: none; }
          .dirA .nav-inner .reserve-btn { display: none; }
          .dirA .nav-burger { display: inline-flex; }
          .dirA .nav-mobile.open { display: flex; }

          /* hero */
          .dirA .hero-fb { min-height: 0; padding: 76px 0 64px; }
          .dirA .hero-sp { padding: 48px 0; }
          .dirA .hero-sp-grid { grid-template-columns: 1fr; gap: 40px; }
          .dirA .hero-sp-img { aspect-ratio: 16/11; order: -1; }
          .dirA .hero-st { padding: 64px 0 0; }
          .dirA .hero-st-img { height: 340px; margin-top: 40px; }
          .dirA .hero-st-sub-row { grid-template-columns: 1fr; gap: 28px; margin-top: 32px; }
          .dirA .hero-meta { gap: 36px; margin-top: 56px; flex-wrap: wrap; }

          /* sections */
          .dirA .sec { padding: 72px 0; }
          .dirA .sec-hd { grid-template-columns: 1fr; gap: 22px; margin-bottom: 48px; }

          /* rig */
          .dirA .rig-grid { grid-template-columns: 1fr; gap: 36px; }
          .dirA .rig-img { aspect-ratio: 16/11; max-width: 560px; }
          .dirA .rig-spec { grid-template-columns: 130px 1fr; gap: 20px; }

          /* regions → full stack */
          .dirA .regions-grid { gap: 44px; }
          .dirA .region-big, .dirA .region-sm, .dirA .region-md { grid-column: span 12; }
          .dirA .region-big .region-img,
          .dirA .region-sm .region-img,
          .dirA .region-md .region-img { aspect-ratio: 16/10; }

          /* routes → stack with bottom borders */
          .dirA .routes-grid { grid-template-columns: 1fr; }
          .dirA .route { border-right: 0; border-bottom: 1px solid var(--line); min-height: 0; padding: 32px 0; }
          .dirA .route:last-child { border-bottom: 0; }
          .dirA .route-note { margin-top: 4px; }

          /* pricing */
          .dirA .pricing-grid { grid-template-columns: 1fr; gap: 40px; }

          /* voices */
          .dirA .voices-grid { grid-template-columns: 1fr; gap: 20px; }
          .dirA .voice { padding: 28px; }

          /* reservation */
          .dirA .rsv-grid-2 { grid-template-columns: 1fr; gap: 40px; }

          /* footer */
          .dirA .footer-grid { grid-template-columns: 1fr 1fr !important; gap: 36px 32px !important; }
        }

        @media (max-width: 560px) {
          .dirA .container { padding: 0 20px; }
          .dirA .nav-inner { padding: 12px 20px; }
          .dirA .nav-mobile { padding: 4px 20px 22px; }

          /* hero */
          .dirA .hero-fb { padding: 60px 0 52px; }
          .dirA .hero-sub { font-size: 17px; margin-top: 24px; }
          .dirA .hero-cta-row { flex-wrap: wrap; gap: 16px; margin-top: 36px; }
          .dirA .hero-meta { gap: 24px 32px; margin-top: 48px; }
          .dirA .hero-meta-item .v { font-size: 30px; }
          .dirA .hero-st-img { height: 260px; }

          /* sections */
          .dirA .sec { padding: 56px 0; }
          .dirA .sec-hd { margin-bottom: 36px; }

          /* rig specs read better stacked on phones */
          .dirA .rig-spec { grid-template-columns: 1fr; gap: 6px; padding: 14px 0; }
          .dirA .rig-spec-key { padding-top: 0; }

          /* reservation inner */
          .dirA .rsv-grid { grid-template-columns: 1fr; gap: 16px; }
          .dirA .rsv-foot { flex-direction: column; align-items: stretch; gap: 18px; }
          .dirA .rsv-submit { justify-content: center; }

          /* calendar → single month */
          .dirA .cal-months { grid-template-columns: 1fr; }
          .dirA .cal-month:first-child { border-right: 0; border-bottom: 1px solid var(--line); }
          .dirA .cal-summary { gap: 14px 20px; }
          .dirA .cal-summary-nights { margin-left: 0; }
          .dirA .cal-toolbar { flex-wrap: wrap; gap: 14px; }

          /* footer */
          .dirA .footer-grid { grid-template-columns: 1fr !important; gap: 30px !important; }
        }
      `}</style>

      {/* Nav */}
      <NavA T={T} lang={lang} />

      {/* Hero */}
      {heroVariant === "fullbleed" && <HeroFullbleedA T={T} />}
      {heroVariant === "split" && <HeroSplitA T={T} />}
      {heroVariant === "stacked" && <HeroStackedA T={T} />}

      {/* The Rig */}
      <RigA T={T} />

      {/* Regions */}
      <RegionsA T={T} />

      {/* Routes */}
      <RoutesA T={T} />

      {/* Pricing */}
      <PricingA T={T} />

      {/* FAQ */}
      <FaqA T={T} />

      {/* Voices */}
      <VoicesA T={T} />

      {/* Reservation */}
      <section className="sec rsv-section" id="reserve-a">
        <div className="container">
          <div className="rsv-grid-2">
            <div>
              <div className="kicker">{T.reserve.kicker}</div>
              <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.reserve.title}</h2>
              <p className="lede" style={{ marginTop: 24 }}>{T.reserve.lede}</p>
              <div style={{ marginTop: 40, paddingTop: 24, borderTop: "1px solid var(--line)", display: "flex", flexDirection: "column", gap: 12 }}>
                <div style={{ fontFamily: "var(--mono)", fontSize: 10, letterSpacing: "0.14em", textTransform: "uppercase", color: "var(--fg-dim)" }}>Direct line</div>
                <div style={{ fontFamily: "var(--display)", fontSize: 28 }}>+995 555 12 04 88</div>
                <div style={{ fontFamily: "var(--mono)", fontSize: 11, letterSpacing: "0.06em", color: "var(--fg-mute)" }}>hello@offroadcampinggeorgia.example</div>
              </div>
            </div>
            <ReservationForm lang={lang} accent={accent} />
          </div>
        </div>
      </section>

      {/* Footer */}
      <FooterA T={T} />
    </div>
  );
}

function NavA({ T, lang }) {
  const [open, setOpen] = React.useState(false);
  return (
    <nav className="nav">
      <div className="nav-inner">
        <div className="nav-brand">
          <span className="nav-brand-mark"></span>
          {T.brand}
        </div>
        <div className="nav-links">
          <a href="#">{T.nav.camper}</a>
          <a href="#">{T.nav.regions}</a>
          <a href="#">{T.nav.routes}</a>
          <a href="#">{T.nav.included}</a>
          <a href="#">{T.nav.faq}</a>
        </div>
        <div className="nav-right">
          <LangSwitch lang={lang} />
          <button className="reserve-btn">{T.nav.reserve} →</button>
          <button
            className={`nav-burger ${open ? "open" : ""}`}
            aria-label="Menu"
            aria-expanded={open}
            onClick={() => setOpen(o => !o)}
          >
            <span></span><span></span><span></span>
          </button>
        </div>
      </div>
      <div className={`nav-mobile ${open ? "open" : ""}`}>
        <a href="#" onClick={() => setOpen(false)}>{T.nav.camper}</a>
        <a href="#" onClick={() => setOpen(false)}>{T.nav.regions}</a>
        <a href="#" onClick={() => setOpen(false)}>{T.nav.routes}</a>
        <a href="#" onClick={() => setOpen(false)}>{T.nav.included}</a>
        <a href="#" onClick={() => setOpen(false)}>{T.nav.faq}</a>
        <button className="reserve-btn" onClick={() => setOpen(false)}>{T.nav.reserve} →</button>
      </div>
    </nav>
  );
}

function LangSwitch({ lang }) {
  // Read setLang from global app context
  return (
    <span className="lang-pill">
      <button className={lang === "en" ? "on" : ""} onClick={() => window.__setLang && window.__setLang("en")}>EN</button>
      <button className={lang === "de" ? "on" : ""} onClick={() => window.__setLang && window.__setLang("de")}>DE</button>
    </span>
  );
}

function HeroFullbleedA({ T }) {
  const videoRef = React.useRef(null);
  React.useEffect(() => {
    const v = videoRef.current;
    if (!v) return;
    v.muted = true;
    const tryPlay = () => { const p = v.play(); if (p && p.catch) p.catch(() => {}); };
    tryPlay();
    v.addEventListener("canplay", tryPlay);
    return () => v.removeEventListener("canplay", tryPlay);
  }, []);
  return (
    <section className="hero-fb">
      <div className="hero-fb-img">
        <video
          ref={videoRef}
          className="hero-fb-video"
          src={(typeof window !== "undefined" && window.__resources && window.__resources.heroVideo) || "uploads/Timeline 1.webm"}
          autoPlay
          muted
          loop
          playsInline
          preload="auto"
        />
      </div>
      <div className="container hero-fb-content">
        <div className="kicker hero-eyebrow">{T.hero.eyebrow}</div>
        <h1 className="display hero-title">{T.hero.title}</h1>
        <p className="hero-sub">{T.hero.sub}</p>
        <div className="hero-cta-row">
          <button className="reserve-btn" onClick={() => document.getElementById("reserve-a")?.scrollIntoView ? null : null}>{T.hero.cta} →</button>
          <span className="hero-cta-sub">{T.hero.ctaSub}</span>
        </div>
        <div className="hero-meta">
          {T.hero.meta.map(([v, l], i) => (
            <div className="hero-meta-item" key={i}>
              <div className="v display">{v}</div>
              <div className="l">{l}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

function HeroSplitA({ T }) {
  return (
    <section className="hero-sp">
      <div className="container">
        <div className="hero-sp-grid">
          <div>
            <div className="kicker hero-eyebrow">{T.hero.eyebrow}</div>
            <h1 className="display hero-title">{T.hero.title}</h1>
            <p className="hero-sub">{T.hero.sub}</p>
            <div className="hero-cta-row">
              <button className="reserve-btn">{T.hero.cta} →</button>
              <span className="hero-cta-sub">{T.hero.ctaSub}</span>
            </div>
            <div className="hero-meta" style={{ marginTop: 56 }}>
              {T.hero.meta.slice(0, 3).map(([v, l], i) => (
                <div className="hero-meta-item" key={i}>
                  <div className="v display">{v}</div>
                  <div className="l">{l}</div>
                </div>
              ))}
            </div>
          </div>
          <div className="hero-sp-img">
            <Placeholder label="LAND CRUISER · MOUNTAIN PASS" tone="dark" height="100%" caption="3:4 · portrait" />
          </div>
        </div>
      </div>
    </section>
  );
}

function HeroStackedA({ T }) {
  return (
    <section className="hero-st">
      <div className="container">
        <div className="kicker hero-eyebrow">{T.hero.eyebrow}</div>
        <h1 className="display hero-st-title">{T.hero.title}</h1>
        <div className="hero-st-img">
          <Placeholder label="ABANO PASS · TUSHETI" tone="dark" height="100%" caption="16:6 · panorama" />
        </div>
        <div className="hero-st-sub-row">
          <p className="hero-sub" style={{ marginTop: 0 }}>{T.hero.sub}</p>
          <div style={{ display: "flex", flexDirection: "column", alignItems: "flex-start", gap: 20 }}>
            <div className="hero-cta-row" style={{ marginTop: 0 }}>
              <button className="reserve-btn">{T.hero.cta} →</button>
              <span className="hero-cta-sub">{T.hero.ctaSub}</span>
            </div>
            <div className="hero-meta" style={{ marginTop: 0, paddingTop: 0, borderTop: 0, width: "100%" }}>
              {T.hero.meta.map(([v, l], i) => (
                <div className="hero-meta-item" key={i}>
                  <div className="v display">{v}</div>
                  <div className="l">{l}</div>
                </div>
              ))}
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

function RigA({ T }) {
  return (
    <section className="sec">
      <div className="container">
        <div className="sec-hd">
          <div>
            <div className="kicker">{T.rig.kicker}</div>
            <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.rig.title}</h2>
          </div>
          <p className="lede">{T.rig.lede}</p>
        </div>
        <div className="rig-grid">
          <div className="rig-img">
            <Placeholder label="TOYOTA LAND CRUISER 80 · 3/4 VIEW" tone="dark" height="100%" caption="Adjara coast · dusk" src={(typeof window !== "undefined" && window.__resources && window.__resources.rigImg) || "images/land-cruiser-camp.jpg"} alt="Toyota Land Cruiser 80 with rooftop tent at a coastal camp at dusk" />
          </div>
          <div className="rig-specs">
            {T.rig.specs.map(([k, v], i) => (
              <div className="rig-spec" key={i}>
                <div className="rig-spec-key">{k}</div>
                <div className="rig-spec-val">{v}</div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

function RegionsA({ T }) {
  // Alternate big/small rows: 7+5, 4+4+4
  return (
    <section className="sec">
      <div className="container">
        <div className="sec-hd">
          <div>
            <div className="kicker">{T.regions.kicker}</div>
            <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.regions.title}</h2>
          </div>
          <p className="lede">{T.regions.lede}</p>
        </div>
        <div className="regions-grid">
          <RegionCard r={T.regions.items[0]} size="big" />
          <RegionCard r={T.regions.items[1]} size="sm" />
          <RegionCard r={T.regions.items[2]} size="md" />
          <RegionCard r={T.regions.items[3]} size="md" />
          <RegionCard r={T.regions.items[4]} size="md" />
          <RegionCard r={T.regions.items[5]} size="sm" />
          <div className="region-big" style={{ display: "flex", alignItems: "center", padding: "0 8px" }}>
            <div>
              <div className="kicker" style={{ marginBottom: 12 }}>Notes from the road</div>
              <p style={{ fontFamily: "var(--display)", fontSize: 26, lineHeight: 1.35, color: "var(--fg)" }}>
                "If you ask the village to point at the most beautiful place, they will always point at the next valley. Trust them. Then drive past it."
              </p>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

function RegionCard({ r, size }) {
  const cls = size === "big" ? "region region-big" : size === "md" ? "region region-md" : "region region-sm";
  return (
    <div className={cls}>
      <div className="region-img">
        <Placeholder label={`PHOTO · ${r.name.toUpperCase()}`} tone="dark" height="100%" caption={r.lat} src={regionImg(r.n)} alt={r.name} />
      </div>
      <span className="region-num">{r.n}</span>
      <h3 className="display region-name">{r.name}</h3>
      <div className="region-meta">
        <span>{r.lat}</span>
        <span>BEST · {r.best}</span>
      </div>
      <p className="region-lede">{r.lede}</p>
    </div>
  );
}

function RoutesA({ T }) {
  return (
    <section className="sec">
      <div className="container">
        <div className="sec-hd">
          <div>
            <div className="kicker">{T.routes.kicker}</div>
            <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.routes.title}</h2>
          </div>
          <p className="lede">{T.routes.lede}</p>
        </div>
        <div className="routes-grid">
          {T.routes.items.map((rt, i) => (
            <div className="route" key={i}>
              <div className="route-code">{rt.code}</div>
              <h3 className="display route-name">{rt.name}</h3>
              <div className="route-stats">
                <div className="route-stat"><div className="v">{rt.days}</div><div className="l">days</div></div>
                <div className="route-stat"><div className="v">{rt.km.toLocaleString()}</div><div className="l">km</div></div>
                <div className="route-stat"><div className="v">{rt.diff}</div><div className="l">difficulty</div></div>
              </div>
              <div className="route-stops">
                {rt.stops.map((s, j) => (
                  <React.Fragment key={j}>
                    <div className="route-stop">{s}</div>
                    {j < rt.stops.length - 1 && <div className="route-stop-line"></div>}
                  </React.Fragment>
                ))}
              </div>
              <p className="route-note">{rt.note}</p>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

function PricingA({ T }) {
  return (
    <section className="sec">
      <div className="container">
        <div className="sec-hd">
          <div>
            <div className="kicker">{T.included.kicker}</div>
            <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.included.title}</h2>
          </div>
          <p className="lede">{T.included.lede}</p>
        </div>
        <div className="pricing-grid">
          <div>
            <div className="pricing-cards">
              {T.included.pricing.map((p, i) => (
                <div className="pricing-card" key={i}>
                  <div>
                    <div className="pricing-label">{p.label}</div>
                    <div className="pricing-months">{p.months}</div>
                  </div>
                  <div style={{ display: "flex", alignItems: "baseline", gap: 8 }}>
                    <span className="pricing-price">{p.price}</span>
                    <span className="pricing-unit">{p.unit}</span>
                  </div>
                </div>
              ))}
            </div>
            <p className="pricing-note">{T.included.pricingNote}</p>
          </div>
          <div className="included">
            {T.included.items.map((it, i) => (
              <div className="included-item" key={i}>
                <span className="included-check">✓</span>
                <span className="included-text">{it}</span>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

function FaqA({ T }) {
  const [open, setOpen] = React.useState(0);
  return (
    <section className="sec">
      <div className="container">
        <div className="sec-hd">
          <div>
            <div className="kicker">{T.faq.kicker}</div>
            <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.faq.title}</h2>
          </div>
          <div></div>
        </div>
        <div className="faq-list">
          {T.faq.items.map((it, i) => (
            <div className={`faq-row ${open === i ? "open" : ""}`} key={i}>
              <div className="faq-q" onClick={() => setOpen(open === i ? -1 : i)}>
                <div className="faq-q-text">{it.q}</div>
                <div className="faq-q-icon">+</div>
              </div>
              <div className="faq-a">
                <p className="faq-a-text">{it.a}</p>
              </div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

function VoicesA({ T }) {
  return (
    <section className="sec">
      <div className="container">
        <div className="sec-hd">
          <div>
            <div className="kicker">{T.voices.kicker}</div>
            <h2 className="display sec-title" style={{ marginTop: 18 }}>{T.voices.title}</h2>
          </div>
          <div></div>
        </div>
        <div className="voices-grid">
          {T.voices.items.map((v, i) => (
            <div className="voice" key={i}>
              <p className="voice-q">{v.q}</p>
              <div className="voice-foot">
                <div className="voice-who">{v.who}</div>
                <div className="voice-where">{v.where}</div>
              </div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

function FooterA({ T }) {
  return (
    <footer style={{ borderTop: "1px solid var(--line)", padding: "56px 0 40px" }}>
      <div className="container footer-grid" style={{ display: "grid", gridTemplateColumns: "2fr 1fr 1fr 1fr", gap: 48, alignItems: "start" }}>
        <div>
          <div className="nav-brand" style={{ marginBottom: 20 }}>
            <span className="nav-brand-mark"></span>
            {T.brand}
          </div>
          <p style={{ fontFamily: "var(--display)", fontSize: 22, lineHeight: 1.3, maxWidth: "28ch" }}>{T.footer.tagline}</p>
        </div>
        <div>
          <div className="kicker" style={{ marginBottom: 14 }}>Contact</div>
          <div style={{ fontSize: 13, color: "var(--fg-mute)", lineHeight: 1.7 }}>
            <div>{T.footer.contact}</div>
            <div>{T.footer.ig}</div>
            <div>+995 555 12 04 88</div>
          </div>
        </div>
        <div>
          <div className="kicker" style={{ marginBottom: 14 }}>Explore</div>
          <div style={{ fontSize: 13, color: "var(--fg-mute)", lineHeight: 1.9 }}>
            <div>{T.nav.camper}</div>
            <div>{T.nav.regions}</div>
            <div>{T.nav.routes}</div>
            <div>{T.nav.included}</div>
          </div>
        </div>
        <div>
          <div className="kicker" style={{ marginBottom: 14 }}>Season</div>
          <div style={{ fontSize: 13, color: "var(--fg-mute)", lineHeight: 1.7 }}>
            <div>April – October</div>
            <div>Closed November – March</div>
            <div style={{ marginTop: 10, color: "var(--fg-dim)" }}>The passes don't ask</div>
          </div>
        </div>
      </div>
      <div className="container" style={{ marginTop: 56, paddingTop: 24, borderTop: "1px solid var(--line)", display: "flex", justifyContent: "space-between", fontFamily: "var(--mono)", fontSize: 10, letterSpacing: "0.14em", textTransform: "uppercase", color: "var(--fg-dim)" }}>
        <span>© 2026 · {T.brand}</span>
        <span>{T.footer.rights}</span>
      </div>
    </footer>
  );
}

Object.assign(window, { DirectionA });
