/* ==========================================================================
   NEXT GEO — /urunler/dijital-harita-cozumleri/ and
   /en/products/digital-map-solutions/. ONE authored sheet for the pair;
   ng-page-apply.php copies it to the English slug with --css-from, so the two
   languages cannot drift.

   NOTHING LANGUAGE-SPECIFIC MAY EVER GO IN THIS FILE. PATTERNS records the
   optimizasyon finding: a `content:` label written here is a Turkish string
   that --css-from copies byte for byte onto the English page.

   Loaded after ng-foundation / ng-components / ng-mobile / ng-shared, scoped to
   .ng-v2. Tokens only, no literal colours, no !important.

   HEADINGS ARE WRITTEN DOUBLED, at (0,3,0). Neuros ships
   `body .content-wrapper h?:not(:first-child){margin-top:50px}` at (0,2,2),
   which beats a plain `.ng-v2 .ng-x` at (0,2,0). It has cost this build twice
   already, each time as a 50px hole nobody authored.

   WHAT THIS PAGE REUSES RATHER THAN REINVENTS, because the contract says to
   reach for the shared primitives first and this page needed almost nothing
   else: .ng-masthead--stack (§15a, the B-STACK opening), .ng-masthead__proof
   (§4), .ng-figband / --split / --flip / __fig--center (§17a), .ng-grid--3 and
   --4 with .ng-card (§5, §6), .ng-steps (§13c, twice — nine dark, four light),
   .ng-facts (§15c), .ng-list, .ng-note, .ng-actions, .ng-btn.

   TWO PAGE-LEVEL BLOCKS ARE NEW AND BOTH ARE JUSTIFIED WHERE THEY ARE DEFINED:
   .ng-dhc-dl (§4 below) and .ng-dhc-close (§7). Everything else here is
   spacing and type for shared blocks, which is the established division —
   shared owns the block, the page owns its voice.
   ========================================================================== */


/* ==========================================================================
   1. PAGE VOICE — the type this page repeats in more than one section.
   Named .ng-dhc__* rather than per-section so the same heading does not get
   three slightly different sizes down one page, which is how a page starts
   looking assembled rather than designed.
   ========================================================================== */

/* Section-level heading OUTSIDE .ng-section-head — inside a .ng-figband__text
   column, where .ng-section-head__title's 40px would fight the 44fr measure. */
.ng-v2 .ng-dhc__h2.ng-dhc__h2{
  margin:12px 0 0;
  font-family:var(--ng-font-display); font-weight:600;
  font-size:clamp(23px, 3vw, 32px); line-height:1.16; letter-spacing:-0.02em;
  color:var(--ng-ink);
  text-wrap:balance;
}
.ng-v2 .ng-dhc__h3.ng-dhc__h3{
  margin:12px 0 0;
  font-family:var(--ng-font-display); font-weight:600;
  font-size:clamp(19px, 2.3vw, 25px); line-height:1.2; letter-spacing:-0.016em;
  color:var(--ng-ink);
  text-wrap:balance;
}
.ng-v2 .ng-dhc__p{
  margin:14px 0 0; max-width:56ch;
  font-size:15.5px; line-height:1.62;
  color:var(--ng-muted);
}
/* An inline link inside a .ng-note. --ng-accent, not --ng-accent-display: the
   note sets at 14px and the contract reserves the display tier for 24px and
   above. The underline is drawn as a border so it can animate and so the
   theme's own `a` decoration cannot reintroduce itself under it. */
.ng-v2 .ng-dhc__link{
  color:var(--ng-accent); text-decoration:none;
  border-bottom:1px solid var(--ng-hairline);
}
.ng-v2 .ng-dhc__link:hover,
.ng-v2 .ng-dhc__link:focus-visible{ border-bottom-color:currentColor; }


/* ==========================================================================
   2. SECTION 10 — the B-STACK masthead.
   The modifier does the work (ng-shared §15a): no aside, headline at the full
   container, proof strip spanning it. All this file adds is the note under the
   strip, which is the signpost to /cozumler/dijital-harita-servisleri/ and the
   one place a visitor who wants the CAPABILITY detail is told where it lives.
   ========================================================================== */
.ng-v2 .ng-dhc-lead__note{
  margin:22px 0 0;
  max-width:74ch;
}


/* ==========================================================================
   3. SECTION 20 — why the listing needs an operation. MIST.
   ========================================================================== */
.ng-v2 .ng-dhc-why__band{ margin-top:4px; }
/* 44px, not the grid's own 26: the four risk cards are a different KIND of
   thing from the band above them, and at the section's default rhythm they
   read as a fifth and sixth row of the same block. */
.ng-v2 .ng-dhc-why__grid{ margin-top:44px; }


/* ==========================================================================
   4. THE DEFINITION LIST — .ng-dhc-dl, and why it is not one of the shared
   blocks.

   Three places on this page pair a SHORT NAME with ONE SENTENCE about it: the
   AI's three detections, the analytics loop's four measures, and the two named
   roles. Every shared primitive that takes a pair was tried first and each one
   mis-states the material:

     .ng-facts (§15c)  runs the pair as label-above-VALUE and sets the second
                       line at 20px display weight. A sentence set as a value
                       reads as a headline; the strip is right for "~3 saat"
                       in section 50 and is used there.
     .ng-card (§6)     a raised box each. Nine of them down one page, on top of
                       the seven this page already has, is the undifferentiated
                       stack of white boxes §13c was written to stop.
     .ng-steps (§13c)  a numbered sequence. These are not in an order.
     .ng-list (§7)     one line per item, no room for the name to lead.

   So: a real <dl>, a hairline per pair, name in ink and sentence in muted. It
   is a page block rather than a promotion because ONE page has wanted it —
   PATTERNS' threshold is three.
   ========================================================================== */
/* The wrapping <div> per pair is not optional and is not decoration: it is the
   only valid way to group a dt/dd inside a description list, and it is what
   lets section 50 grid the same list two-up. §15c's .ng-facts carries the same
   note for the same reason. Row rhythm is `gap`, never a margin, so the two-up
   variant does not need a first-row margin reset. */
.ng-v2 .ng-dhc-dl{
  margin:20px 0 0; padding:0;
  display:grid; grid-template-columns:minmax(0,1fr);
  gap:16px;
}
.ng-v2 .ng-dhc-dl__row{
  min-width:0;
  padding-top:14px;
  border-top:1px solid var(--ng-hairline);
}
.ng-v2 .ng-dhc-dl__k{
  margin:0;
  font-family:var(--ng-font-display); font-weight:600;
  font-size:16px; line-height:1.3; letter-spacing:-0.01em;
  color:var(--ng-ink);
}
.ng-v2 .ng-dhc-dl__v{
  margin:6px 0 0;
  font-size:15px; line-height:1.6;
  color:var(--ng-muted);
}


/* ==========================================================================
   5. SECTION 30 — the nine-step flow. THE INDIGO BAND.

   NO COLOUR IS WRITTEN HERE. `is-dark` on the section flips --ng-ground,
   --ng-ink, --ng-muted, --ng-surface, --ng-hairline and the accent tier in
   ng-foundation §3. Anything hand-coloured in this block would survive that
   flip and be wrong on exactly one band.
   ========================================================================== */
/* §13c goes 1-up below 860 and 3-up above it. NINE items make that jump from
   one column to three across a single breakpoint, which on a 780px tablet is
   nine full-width rows — a very long band. A 2-up step at 620 costs one rule
   and halves it. */
.ng-v2 .ng-dhc-flow__steps{ margin-top:36px; }
@media (min-width:620px) and (max-width:859px){
  .ng-v2 .ng-dhc-flow__steps{ grid-template-columns:repeat(2,minmax(0,1fr)); }
}
/* "(opsiyonel)" / "(optional)" is a QUALIFIER ON THE STEP, not part of its
   name, so it is set down and muted inside the same heading rather than given
   a chip of its own. A chip beside step 08 and nowhere else reads as a badge
   the other eight failed to earn. */
.ng-v2 .ng-dhc-flow__opt{
  font-weight:500;
  color:var(--ng-muted);
}
.ng-v2 .ng-dhc-flow__note{
  margin:34px 0 0;
  max-width:76ch;
}


/* ==========================================================================
   6. SECTIONS 40 AND 50 — platforms, AI, and the two composed plates.

   PAGES OWN THEIR FIGURE SPACING, and they have to win it twice. Elementor
   ships `.elementor .elementor-widget:not(…):not(…) figure{margin:0}` at
   (0,4,1), a megabyte later in the combined LiteSpeed file than our sheets, so
   the obvious `.ng-v2 .ng-x__fig{margin:…}` at (0,2,0) keeps its max-width and
   silently loses every margin — the band renders hard left with its caption
   jammed into the next block. Two agents hit that independently. The doubled
   class inside `.ng-v2 .ng-section .ng-container` is (0,5,0) and beats it.
   ng-shared §17a's `--center` supplies ONLY margin-inline; the vertical step
   is per composition and belongs here.
   ========================================================================== */
.ng-v2 .ng-dhc-plat__grid{ margin-top:34px; }
.ng-v2 .ng-dhc-plat__note{ margin:22px 0 0; max-width:62ch; }
.ng-v2 .ng-dhc-ai{ margin-top:48px; }

/* Both plates run the FULL container. They are 1560x1080 and carry 23px type;
   in a --split column they land at ~600 CSS px and that type renders at 11px,
   under the contract's reading floor and under the point at which the Google
   labels inside the map plate are legible at all. At container width they
   render at ~0.72 and the map's labels read at about 1.4x their design size,
   which is the safe direction. The artwork in the split columns carries no
   type, so the same constraint does not touch it.

   AT 390 THE PLATES ARE 342 CSS PX AND THEIR TYPE IS NOT READABLE. That is a
   4.6x downscale, and it is true of all 66 exhibits already on this site — the
   primitive has no answer for it and inventing a phone-only treatment for two
   figures would be a new pattern nothing else on the site follows. What this
   page does instead is make the plates SUPPORTING evidence rather than the only
   carrier: the five report lines are also a .ng-list above the report plate,
   the four measures are also a .ng-dhc-dl above the usage plate, and the map
   plate's three marker classes are named in the AI list above it and again in
   its own figcaption. A phone reader loses the picture, never the content. */
.ng-v2 .ng-section .ng-container figure.ng-dhc-plat__fig.ng-dhc-plat__fig{
  margin:48px auto 0;
}
.ng-v2 .ng-section .ng-container figure.ng-dhc-open__fig.ng-dhc-open__fig{
  margin:26px auto 0;
}

.ng-v2 .ng-dhc-open__facts{ margin-top:34px; }
.ng-v2 .ng-dhc-open__note{ margin:20px 0 0; max-width:72ch; }
/* The two evidence blocks — report, then measurement. A rule between them
   rather than more air: at 56px apart with no line they read as one very long
   list of figures rather than as two questions answered in turn. */
.ng-v2 .ng-dhc-open__block{
  margin-top:44px; padding-top:34px;
  border-top:1px solid var(--ng-hairline);
}
.ng-v2 .ng-dhc-open__list{ margin-top:18px; max-width:56ch; }
/* 2-up from 720: four measures in one column under a full-width plate is a
   column of four lines with 500px of empty mist beside it. */
@media (min-width:720px){
  .ng-v2 .ng-dhc-open__dl{
    grid-template-columns:repeat(2,minmax(0,1fr));
    column-gap:44px;
  }
}


/* ==========================================================================
   7. SECTION 60 — team, roadmap, and the close.

   .ng-dhc-close IS A PAGE BLOCK, NOT .ng-cta. ng-shared's closing band is the
   indigo slab, and this page has already spent its dark band in section 30
   (tonal order GROUND · MIST · DARK · GROUND · MIST · GROUND). Closing on a
   second indigo band would hand this page the dark-close silhouette 76 of 76
   leaves used to have and ARCHETYPES.md was written to break. The shape is the
   SUNKEN role on the ground — mist, hairline, no shadow — which is the same
   answer akaryakit.css reached for a `dark: MIDDLE` assignment. Copied rather
   than promoted: three leaves have now written a close rail and not the same
   one, so promoting the shared half while the surfaces still disagree would
   only move the disagreement into ng-shared.css.
   ========================================================================== */
.ng-v2 .ng-dhc-team__band{ margin-top:4px; }
.ng-v2 .ng-dhc-team__roadh.ng-dhc-team__roadh{ margin:52px 0 0; }
.ng-v2 .ng-dhc-team__steps{ margin-top:26px; }
@media (min-width:1000px){
  .ng-v2 .ng-dhc-team__steps{ grid-template-columns:repeat(4,minmax(0,1fr)); }
}

.ng-v2 .ng-dhc-close__rail{
  margin-top:56px;
  padding:28px 22px;
  background:var(--ng-surface-sunken);
  border:1px solid var(--ng-hairline);
  border-radius:var(--ng-radius);
}
@media (min-width:900px){
  .ng-v2 .ng-dhc-close__rail{ padding:38px 40px; }
}
/* Doubled for the theme's 50px margin-top: this heading is NOT the first child
   of its block — the eyebrow is — so `h3:not(:first-child)` does match it,
   unlike a .ng-section-head title. */
.ng-v2 .ng-dhc-close__title.ng-dhc-close__title{
  margin:14px 0 0;
  font-family:var(--ng-font-display); font-weight:600;
  font-size:clamp(1.6rem, 3.2vw, 2.1rem);
  line-height:1.15; letter-spacing:-0.02em;
  color:var(--ng-ink);
  max-width:24ch;
  text-wrap:balance;
}
.ng-v2 .ng-dhc-close__lede{
  margin:14px 0 0; max-width:60ch;
  font-size:17px; line-height:1.6;
  color:var(--ng-muted);              /* 5.42:1 on mist */
}
.ng-v2 .ng-dhc-close__actions{ margin-top:24px; }


/* ==========================================================================
   8. NARROW WIDTHS
   The contract's floors: 16px for anything read on a phone, 44px targets to
   1024 (.ng-btn and .ng-actions already carry those from ng-shared §8).
   ========================================================================== */
@media (max-width:767px){
  .ng-v2 .ng-dhc__p{ font-size:16px; max-width:none; }
  .ng-v2 .ng-dhc-dl__v{ font-size:16px; }
  .ng-v2 .ng-dhc-close__lede{ font-size:16px; }
  .ng-v2 .ng-dhc-close__rail{ margin-top:40px; padding:22px 18px; }
  .ng-v2 .ng-dhc-team__roadh.ng-dhc-team__roadh{ margin-top:40px; }
  .ng-v2 .ng-section .ng-container figure.ng-dhc-plat__fig.ng-dhc-plat__fig{
    margin-top:34px;
  }
  .ng-v2 .ng-dhc-open__block{ margin-top:34px; padding-top:26px; }
}


/* ==========================================================================
   9. TRIED AND REJECTED, so it is not re-tried
   ========================================================================== */
/* .ng-fig (§16a) FOR THE "~3 saat" COMMITMENT IN SECTION 50. It is the exact
   markup shape — big numeral, tracked label, one line of detail — and it was
   built and pulled. §16a sets the numeral at 184px, and ARCHETYPES is explicit
   that a D-NUMBER figure "must be real and countable from the page or the
   site". ~3 hours is neither: it is what the owner undertakes to do. At 184px
   it reads as a measured company metric no matter what note sits under it,
   which is the same finding §16a records against putting the homepage's
   illustrative 84.300 there. It is a 20px .ng-facts cell now, sitting in a row
   with the channel and the cadence.

   .ng-anim ON ANY OF THE FIGURE BANDS. §17's third rule: .ng-anim's hidden
   state is a transform, and transform + image is the one combination HANDOFF
   records as never loading. No block on this page that contains an <img>
   carries it, and none of the four .ng-card grids' ancestors do either — a
   .ng-anim wrapper around .ng-card reveals the cards inside an element that is
   itself still hidden. */


/* ==========================================================================
   4b. THE SERVICE REGISTER — folded in 2026-08-25

   The seven service headings come from the retired page
   /cozumler/dijital-harita-servisleri/. They were the one thing on it this page
   did not already say: this page describes how the operation runs, the register
   says what it covers. Rather than lose them when the page came down, they are
   a section here.

   The rules are lifted from that page's §2 unchanged. They were recovered from
   the DEPLOYED stylesheet — the source file went with the page directory — so
   they are the bytes that were actually rendering, not a reconstruction.

   The `.ng-kut__fig` rules are deliberately NOT brought across: that section
   opened with a plate on the old page, and this page already opens with one.
   ========================================================================== */


/* ==========================================================================
   2. SECTION 20 — THE REGISTER (`.ng-kut__*`, the page's dominant shape)

   NAME: `kütük` is the section's own word (#hizmet-kutugu, "HİZMET KÜTÜĞÜ").
   Deliberately not `.ng-reg__*`, which pages/kamu.css already uses for a
   component it also calls THE REGISTER but builds as a data table — including a
   `.ng-reg__name` that is a table cell where this one is an h4. That is the
   `.ng-idx__*` collision ng-shared.css §16 declined to promote around, and there
   is no reason to create a second instance of it.

   WHY A REGISTER AND NOT SEVEN CARDS. A card states that its contents are one of
   several equivalent options. These seven are not equivalent and not
   alternatives: they are the standing items of one service, two of which happen
   once, four of which recur forever, and one of which applies only to charging
   stations. Seven cards in a grid say none of that and leave a ragged last row
   at every column count this system supports (3+3+1, 4+3, 2+2+2+1). A ledger row
   with a metadata spine says it on every row without repeating a tag seven times
   — which was the previous version's first attempt and was rejected in the
   markup: a tag on a card reads as a property OF that card, when the thing being
   expressed is a grouping ACROSS cards.

   THE SPINE IS A BLOCK, NOT A ROW, and that is what keeps §2 from reading as
   §1's index a second time. §1's row is one baseline: ordinal | title + body |
   label. §2's row is two columns: a stacked three-line metadata block on the
   left — ordinal, rhythm, platforms — against the heading and the client's own
   paragraph on the right. Same page, same rules, different object.
   ========================================================================== */

.ng-v2 .ng-kut__group + .ng-kut__group{ margin-top:44px; }

/* (0,3,0) via the doubled class, per ng-shared.css §11 — a page-level heading
   class needs the same defence or the theme's
   `body .content-wrapper h3:not(:first-child){margin-top:50px}` at (0,2,2)
   turns the authored margin into a 50px hole above the second and third group
   titles. 22px sits deliberately between the 44px section title and the 19px
   entry title: it is a sub-head inside a section, not a section of its own. */
.ng-v2 .ng-kut__gname.ng-kut__gname{
  margin:0;
  font-size:22px; line-height:1.25;
  letter-spacing:-0.012em;
  color:var(--ng-ink);
}
/* The two definitions the masthead plate used to carry. 17px — one step over the
   entry body — because it is the group's premise and the entries below it are
   its instances. */
.ng-v2 .ng-kut__gbody{
  margin:10px 0 0;
  font-size:17px; line-height:1.6;
  color:var(--ng-muted);
  max-width:76ch;
}

/* The list. 2px cap and 1px rules between, the sequence idiom §1b and
   `.ng-steps` both use, so the three lists on this page read as one family.
   No `border-bottom` on the last item: a rule under the last entry of a group
   and 44px of air before the next group's heading reads as a rule belonging to
   the heading. */
.ng-v2 .ng-kut__list{
  list-style:none; margin:18px 0 0; padding:0;
  border-top:2px solid var(--ng-hairline);
}
.ng-v2 .ng-kut__item{
  padding:20px 0;
  border-bottom:1px solid var(--ng-hairline);
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:14px;
}
.ng-v2 .ng-kut__list > .ng-kut__item:last-child{ border-bottom:0; }
@media (min-width:900px){
  .ng-v2 .ng-kut__item{
    /* 200px is a WRAPPING track, not a nowrap one, which is why a fixed value is
       safe here and was not on akaryakit's right-hand destination label: this is
       a stacked metadata block on the left, so a label that needs two lines gets
       two lines and nothing is pushed onto a line of its own. The longest string
       is "ŞARJ İSTASYONLARINA ÖZEL" at ~192px. */
    grid-template-columns:200px minmax(0,1fr);
    column-gap:40px;
    padding:22px 0;
  }
}
.ng-v2 .ng-kut__spine{
  min-width:0;
  display:flex; flex-wrap:wrap; align-items:baseline;
  gap:6px 14px;
}
@media (min-width:900px){
  /* A column at desktop, a wrapping row at phone width. At 342px the three
     labels on one row would have to hyphenate; stacked they cost three lines
     above a five-line paragraph, which is worse. Wrapping row it is, and the
     ordinal leads it. */
  .ng-v2 .ng-kut__spine{ display:block; }
}
/* THE ORDINAL IS A DISPLAY NUMERAL HERE, not the 12px tracked label §1b uses.
   It is the second thing that separates the register from the index at a
   glance, and at 16px it is over the body floor rather than relying on the
   tracked-label exception — an ordinal in a ledger is read, not glanced at. */
.ng-v2 .ng-kut__n{
  display:inline-block;
  font-family:var(--ng-font-display); font-weight:700;
  font-size:16px; line-height:1.4;
  letter-spacing:-0.01em;
  color:var(--ng-ink);
  font-variant-numeric:tabular-nums;
}
/* THE RHYTHM IS THE ONE ACCENT IN THIS SECTION. It is the column a reader scans
   to answer "what is a one-off and what runs forever", and every string in it is
   the client's own. 12px x .1em = ratio .10, over the 0.08 ng-page-check
   measures for the tracked-label exception; --ng-accent is 5.45:1 on the ground
   and is the correct tier for text under 24px. */
.ng-v2 .ng-kut__rhythm{
  display:inline-block;
  font-family:var(--ng-font-label); font-weight:600;
  font-size:12px; line-height:1.5; letter-spacing:.1em;
  text-transform:none;                /* authored pre-uppercased: i -> İ */
  color:var(--ng-accent);
}
/* The platforms the entry touches. Muted and one step down, because it
   qualifies the rhythm rather than competing with it. 11px x .1em = ratio .10. */
.ng-v2 .ng-kut__plat{
  display:inline-block;
  font-family:var(--ng-font-label); font-weight:500;
  font-size:11px; line-height:1.5; letter-spacing:.1em;
  text-transform:none;
  color:var(--ng-muted);
}
@media (min-width:900px){
  .ng-v2 .ng-kut__n{ display:block; }
  .ng-v2 .ng-kut__rhythm{ display:block; margin-top:8px; }
  .ng-v2 .ng-kut__plat{ display:block; margin-top:6px; }
}

.ng-v2 .ng-kut__main{ min-width:0; }
/* The doubled-class margin defence again. This h4 IS the first child of
   `.ng-kut__main`, so `h4:not(:first-child)` does not currently match it — the
   defence is here because that is a fact about the markup, and the markup is the
   thing most likely to change. 19px, the same size as the index entry it is the
   destination of, deliberately: arriving at a row that is set larger than the
   row you clicked reads as having landed somewhere else. */
.ng-v2 .ng-kut__name.ng-kut__name{
  margin:0;
  font-family:var(--ng-font-display); font-weight:600;
  font-size:19px; line-height:1.3;
  letter-spacing:-0.012em;
  color:var(--ng-ink);
}
.ng-v2 .ng-kut__body{
  margin:9px 0 0;
  font-size:16px; line-height:1.65;
  color:var(--ng-muted);
  max-width:78ch;
}
/* The one chip in this section, on the PlugShare entry. `.ng-actions--chips`
   keeps it a row rather than going full-bleed at 767. */
.ng-v2 .ng-kut__actions{ margin-top:16px; }

.ng-v2 .ng-kut__note{ margin-top:30px; max-width:88ch; }



@media (max-width:767px){
  /* The register at 390. The entry body is already 16px; the heading comes down
     one step so a long Turkish title takes two lines rather than three, and the
     row padding comes down so seven entries plus three group heads still scroll
     like a list rather than like seven screens. */
  .ng-v2 .ng-kut__gbody{ font-size:16px; }
  .ng-v2 .ng-kut__name.ng-kut__name{ font-size:18px; }
  .ng-v2 .ng-kut__gname.ng-kut__gname{ font-size:20px; }
  .ng-v2 .ng-kut__item{ padding:18px 0; gap:12px; }
  .ng-v2 .ng-kut__group + .ng-kut__group{ margin-top:36px; }
  .ng-v2 .ng-kut__note{ max-width:none; }
}

/* The seven entries keep their ids so a deep link to one still works, and
   .ng-jump keeps its scroll offset so such a link lands below the header rather
   than under it. One declaration, brought across with the register. */
.ng-v2 .ng-jump{ scroll-margin-top:104px; }
@media (max-width:767px){
  .ng-v2 .ng-jump{ scroll-margin-top:84px; }
}
