/* ===== DEMIRCAN CONSULTANCY — shared.css ===== */
.animate-on-scroll{opacity:0;transform:translateY(30px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}
.animate-visible{opacity:1;transform:translateY(0)}
.animate-on-scroll:nth-child(2){transition-delay:.1s}.animate-on-scroll:nth-child(3){transition-delay:.2s}
.animate-on-scroll:nth-child(4){transition-delay:.25s}.animate-on-scroll:nth-child(5){transition-delay:.3s}.animate-on-scroll:nth-child(6){transition-delay:.35s}
#main-header{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);transition:box-shadow .3s ease}

/* Desktop nav: a gold rule that grows from the left on hover and on keyboard
   focus. Animates transform on a pseudo-element (compositor-only) rather than
   width, so it never triggers layout on these scroll-heavy pages. The mobile
   panel (#mobile-menu) is a different element and is deliberately untouched -
   it is a tap list, where an underline animation reads as lag.
   The prefers-reduced-motion block near the end of this file already collapses
   the duration, so this respects that preference for free. */
header nav a{position:relative}
header nav a::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:1px;
  background:#c9a227;transform:scaleX(0);transform-origin:left center;
  transition:transform .28s cubic-bezier(.22,1,.36,1)}
header nav a:hover::after,header nav a:focus-visible::after{transform:scaleX(1)}

/* Playfair is a Didone: at display sizes its default tracking reads loose next
   to DM Sans. A small optical correction only - letter-spacing is independent
   of line-height, which rides on the fontSize tokens (§11) and must not move.

   The :not() guard is load-bearing. shared.css loads AFTER tailwind.css, so a
   bare `.font-display` rule outranks any `tracking-*` utility on the same
   element - it silently loosened the homepage h1 from its intentional
   tracking-tight (-0.025em) to -0.01em. Anything that sets tracking explicitly
   keeps it; this only supplies a default where none was chosen. */
.font-display:not([class*="tracking-"]){letter-spacing:-0.01em}
/* Card elevation, tuned for a DARK surface.
   The previous hover painted a navy shadow (rgba(15,22,45,.15)) onto the navy
   page - invisible by construction, so 33 cards across 10 pages had a hover
   state that did nothing but shift 6px. On a dark UI elevation reads through
   BORDER LUMINANCE and a tinted glow, not a drop shadow: the hairline warms
   toward gold, a black-based shadow gives real depth, and the lift shortens
   because the border is now doing the work.
   Only border-color and box-shadow are touched - the rest state still belongs
   to the Tailwind `border-cream/[0.06]` class on the element. */
.service-card{transition:transform .35s cubic-bezier(.22,1,.36,1),border-color .35s ease,box-shadow .35s ease}
.service-card:hover{transform:translateY(-4px);border-color:rgba(201,162,39,.65);
  box-shadow:0 14px 34px rgba(0,0,0,.34),0 0 0 1px rgba(201,162,39,.10)}
.hero-grid{background-image:linear-gradient(rgba(245,240,230,.02) 1px,transparent 1px),linear-gradient(90deg,rgba(245,240,230,.02) 1px,transparent 1px);background-size:60px 60px}

/* ---------------------------------------------------------------------------
   Hero stat row (81 Il / 6 Yatirim Bolgesi / 2030 Son Basvuru Yili)
   ---------------------------------------------------------------------------
   The layout lives HERE, in hand-written CSS, rather than in Tailwind
   utilities. That is deliberate and load-bearing.

   This row is the one place on the site where losing spacing changes the
   MEANING rather than just the looks: with the gaps gone, "81" and "6" sit
   flush and read as "816", and the labels run together as "IlYatirim
   Bolgesi". It has now shipped broken twice, both times because the deployed
   assets/tailwind.css was stale and the gap and padding utilities the row
   depended on were simply absent. shared.css is not generated and not purged
   - it ships byte-for-byte - so the separation here cannot evaporate.

   (Do not write a Tailwind class pattern like gap-<star>/pl-<star> literally
   in a comment here: the slash-star sequence closes the CSS comment early and
   silently eats the rule that follows. That is exactly how the .hero-stats
   base rule went missing the first time this was written.)

   Three defences, any one of which is enough on its own:
     1. each figure sits directly ABOVE its own label, so a figure can never
        end up adjacent to another figure;
     2. horizontal separation is padding + margin on the item itself, not a
        flex `gap` on the parent;
     3. a hairline rule is drawn between items via ::after, so the boundary is
        visible even if every spacing declaration were somehow lost.
   Do not move this back into utility classes. */
.hero-stats{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:1.25rem}
.hero-stat{position:relative;padding-right:1.25rem;margin-right:1.25rem}
.hero-stat::after{content:"";position:absolute;right:0;top:.2rem;bottom:.2rem;
  width:1px;background:rgba(245,240,230,.14)}
.hero-stat:last-child{padding-right:0;margin-right:0}
.hero-stat:last-child::after{display:none}
.hero-stat__val{display:block;font-size:1.25rem;line-height:1.2;color:#f5f0e6}
.hero-stat__lbl{display:block;font-size:.75rem;line-height:1.4;
  color:rgba(245,240,230,.55);margin-top:.25rem}
@media (min-width:640px){
  /* The rule separating this group from the "20+" firm stat also lives here,
     not as sm:pl-10 sm:border-l, so the whole row is Tailwind-independent. */
  .hero-stats{padding-left:2.5rem;border-left:1px solid rgba(245,240,230,.10)}
  .hero-stat{padding-right:1.75rem;margin-right:1.75rem}
  .hero-stat__val{font-size:1.5rem}
}
/* The gradient endpoints are unchanged, so the navy ink still measures 7.40:1
   on gold-500 and 9.42:1 on gold-400. The added inset is a 1px top highlight -
   it catches the eye like a lit edge and costs no contrast. */
.btn-gold{background:linear-gradient(135deg,#c9a227,#dbb94a);color:#0f162d;font-weight:600;transition:all .3s ease;
  box-shadow:0 2px 10px rgba(201,162,39,.24),inset 0 1px 0 rgba(255,255,255,.22)}
.btn-gold:hover{box-shadow:0 6px 22px rgba(201,162,39,.44),inset 0 1px 0 rgba(255,255,255,.3);transform:translateY(-2px)}
.btn-outline{border:2px solid rgba(245,240,230,.3);color:#f5f0e6;transition:all .3s ease}
.btn-outline:hover{border-color:#c9a227;color:#c9a227}
#mobile-menu{transition:transform .35s cubic-bezier(.22,1,.36,1)}
.accordion-content{max-height:0;overflow:hidden;transition:max-height .4s cubic-bezier(.22,1,.36,1)}
.accordion-content.open{max-height:2000px}
.accordion-arrow{transition:transform .3s ease}
.accordion-arrow.rotate{transform:rotate(180deg)}
.form-input{background:rgba(245,240,230,.06);border:1px solid rgba(245,240,230,.12);color:#f5f0e6;transition:border-color .3s ease,box-shadow .3s ease}
.form-input:focus{border-color:#c9a227;box-shadow:0 0 0 3px rgba(201,162,39,.15);outline:none}
.form-input::placeholder{color:rgba(245,240,230,.35)}
/* WhatsApp CTA. Navy ink on the brand green, NOT white: white measures 1.98:1
   here and was the last AA failure on the site (fixed August 2026). Navy gives
   9.03:1 on #25D366 and 7.31:1 on the hover green, and keeps WhatsApp's actual
   brand colour untouched - darkening the fill instead would have meant #075E54
   before white passed, which no longer reads as WhatsApp.
   Same ink-on-bright-fill pattern as .btn-gold and .map-selection-go, so the
   colour lives here and the markup carries no text-* class. */
.whatsapp-btn{background:#25D366;color:#0f162d;transition:all .3s ease}
.whatsapp-btn:hover{background:#1ebe5d;transform:translateY(-2px);box-shadow:0 6px 20px rgba(37,211,102,.4)}
/* Regions accordion. Sized so all six collapsed rows fit one viewport without
   scrolling (client request, August 2026) - the badge came down 48px -> 40px
   and the row padding with it. The row is a <button>, and at 40px badge +
   px-4/py-3 it still measures ~64px tall, well clear of the 44px WCAG 2.5.5
   floor, so do not re-add a min-height here. */
.region-badge{min-width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:10px;font-weight:700;font-size:1rem;color:#f5f0e6;flex-shrink:0}
.city-pill{display:inline-block;padding:3px 11px;border-radius:9999px;font-size:.8125rem;font-weight:500;background:rgba(245,240,230,.06);color:rgba(245,240,230,.85);border:1px solid rgba(245,240,230,.1)}
.incentive-check{display:flex;align-items:center;gap:8px;padding:3px 0;color:rgba(245,240,230,.9);font-size:.875rem}
.incentive-check svg{flex-shrink:0;color:#25D366}
html{scroll-behavior:smooth}
::selection{background:rgba(201,162,39,.3);color:#f5f0e6}

/* Map legend — key for the sequential region ramp (built by turkey-map.js) */
.map-legend{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:20px}
.map-legend-label{font-size:.75rem;color:rgba(245,240,230,.65);white-space:nowrap}
.map-legend-scale{display:flex;gap:4px}
.map-legend-swatch{width:34px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;font-size:.75rem;font-weight:700;line-height:1}
@media (max-width:420px){.map-legend{gap:8px}.map-legend-swatch{width:28px;height:24px}.map-legend-label{font-size:.6875rem}}

/* Province picker — the reliable route on touch, keyboard-friendly everywhere */
.map-picker{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin-bottom:18px}
.map-picker-label{font-size:.8125rem;color:rgba(245,240,230,.7)}
.map-picker-select{min-height:44px;padding:10px 14px;border-radius:10px;background:#182344;
  color:#f5f0e6;border:1px solid rgba(245,240,230,.18);font-size:.875rem;font-family:inherit;
  min-width:210px;cursor:pointer}
.map-picker-select:hover{border-color:rgba(201,162,39,.5)}

/* Selection bar — appears after the first tap on a touchscreen */
/* [hidden] sets display:none in the UA sheet, but an author display:flex
   overrides it — without this rule the empty selection bar is visible. */
.map-selection[hidden]{display:none}
.map-selection{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap;
  margin-top:16px;padding:12px 16px;border-radius:12px;background:rgba(245,240,230,.05);
  border:1px solid rgba(245,240,230,.1)}
.map-selection-name{font-size:.9375rem;font-weight:500;color:#f5f0e6}
.map-selection-sub{font-size:.8125rem;color:#92f6c8}
.map-selection-go{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;
  border-radius:10px;background:#c9a227;color:#0f162d;font-weight:600;font-size:.875rem}
.map-selection-go:hover{background:#dbb94a}

/* Visible focus for keyboard users — nothing had one before */
a:focus-visible,button:focus-visible,select:focus-visible,
[tabindex]:focus-visible,path[role="link"]:focus-visible{
  outline:2px solid #dbb94a;outline-offset:3px;border-radius:4px}
path[role="link"]:focus-visible{outline-offset:1px}

/* Respect a reduced-motion preference: the site animates on scroll throughout */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important}
  .animate-on-scroll{opacity:1!important;transform:none!important}
}

/* Touch target sizing (WCAG 2.5.5). The header controls and footer links were
   20-34px tall. Enlarged on coarse pointers only, so desktop stays compact. */
#lang-toggle,#menu-toggle{min-height:44px;min-width:44px;display:inline-flex;
  align-items:center;justify-content:center}
@media (pointer: coarse){
  footer a,#mobile-menu a{min-height:44px;display:flex;align-items:center}
  footer .flex-col{gap:0}
  /* header logo link, cookie-banner controls, and inline "see all" links */
  header a:has(img),#cookie-accept,#cookie-banner a,
  main a:not([class*="btn-"]):not(.service-card):not(.map-selection-go){
    min-height:44px;display:inline-flex;align-items:center}
  /* the card links wrap whole blocks; they are already far larger than 44px */
  main a.service-card{display:block}
}

/* Map hover tooltip. Two fixed lines — province/region, then the support count.
   The full incentive list is deliberately not here (see turkey-map.js). */
.map-tooltip{position:fixed;z-index:9999;background:rgba(15,22,45,.96);color:#f5f0e6;
  font-family:'DM Sans',sans-serif;padding:8px 14px;border-radius:10px;pointer-events:none;
  opacity:0;transition:opacity .15s ease;border:1px solid rgba(201,162,39,.35);
  box-shadow:0 4px 20px rgba(0,0,0,.45);white-space:nowrap;display:flex;flex-direction:column;gap:2px}
.map-tip-name{font-size:14px;font-weight:500;line-height:1.25}
.map-tip-sub{font-size:12px;font-weight:400;color:#92f6c8;line-height:1.25}

/* Homepage FAQ — native <details>, so it works with no JS and stays keyboard
   accessible and strict-CSP safe by construction. */
.faq-item{background:rgba(245,240,230,.03);border:1px solid rgba(245,240,230,.06);border-radius:12px;overflow:hidden;
  transition:border-color .3s ease}
/* Same dark-UI logic as .service-card: the open/hover cue is border luminance,
   not a shadow. [open] holds the warmer edge so the expanded item stays marked. */
.faq-item:hover,.faq-item[open]{border-color:rgba(201,162,39,.65)}
.faq-q{cursor:pointer;list-style:none;padding:18px 22px;font-size:1rem;font-weight:500;color:#f5f0e6;
  display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:44px;
  transition:background .2s}
.faq-q::-webkit-details-marker{display:none}
.faq-q::after{content:"+";font-size:1.4rem;font-weight:400;color:#c9a227;line-height:1;flex-shrink:0;
  transition:transform .2s}
.faq-item[open] .faq-q::after{content:"2"}
.faq-q:hover{background:rgba(245,240,230,.02)}
.faq-a{padding:0 22px 20px;color:rgba(245,240,230,.6);font-size:.9375rem;line-height:1.45}

/* Numerals.
   Playfair Display is a Didone: very high stroke contrast, so its hairlines
   drop below one device pixel at small sizes and on low-DPI screens, which
   made step numbers and the 20+ stat look thin and hard to read. DM Sans has
   uniform stroke weight and stays legible at any size.
   tabular-nums keeps 01..05 aligned in the step lists; lining-nums keeps the
   digits on the baseline at cap height rather than dropping descenders. */
.num{font-family:'DM Sans',system-ui,-apple-system,sans-serif;
  font-variant-numeric:tabular-nums lining-nums;
  font-feature-settings:"tnum" 1,"lnum" 1;
  letter-spacing:-0.02em;font-weight:700}

/* Ambient backdrop.
   Flat navy-900 across a tall page reads heavy and dead. These three radial
   washes lift the top edge and both sides toward navy-800/700 and fade back to
   the base, so the page has depth without any section looking like it has a
   different background.

   Rendered on a single fixed pseudo-element (not background-attachment:fixed,
   which forces a repaint on every scroll frame on mobile). pointer-events:none
   and z-index:-1 keep it clear of all interaction and above nothing.

   The alphas are capped deliberately: composited over navy-900 the lightest
   point lands near navy-800, where text-cream/55 still measures ~4.9:1. Pushing
   them higher takes the body copy under the 4.5:1 AA floor.

   Colours re-derived August 2026 for the desaturated navy ramp. The alphas are
   UNCHANGED - only the wash colours moved (navy-700 #1a2a5e -> #25325c,
   navy-800 #0f1d45 -> #182344), so the lightest composited point went
   rgb(20,33,76) -> rgb(28,39,73) and text-cream/55 5.07:1 -> 4.94:1. Still
   clears AA, but the headroom is now ~0.44, so re-run the audit against the
   LIGHTEST point (not against navy-900) before touching either. */
body{position:relative;background-color:#0f162d;line-height:1.45}
body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(1200px 640px at 50% -12%, rgba(37,50,92,.50), transparent 62%),
    radial-gradient(720px 900px at -8% 22%, rgba(37,50,92,.34), transparent 60%),
    radial-gradient(720px 900px at 108% 28%, rgba(37,50,92,.34), transparent 60%),
    radial-gradient(900px 500px at 50% 108%, rgba(24,35,68,.40), transparent 65%);
}
@media (prefers-reduced-motion: no-preference){
  body::before{transition:opacity .3s ease}
}
