MDS Dark theme - version history

Current version: 1.15.2

This file is updated every time the theme package changes, so you can
always tell which zip you're looking at (also shown in style.css's
"Version:" header, and used as the cache-busting query string on the
theme's CSS file). The zip filename itself now also carries the version
(e.g. mds-dark-1.13.0.zip) so you can tell packages apart without
opening them. As of this version, screenshot.png (the Appearance >
Themes admin thumbnail) also carries the version, stamped in
parentheses at the end of the white hero heading -- see the 1.13.0
entry below.

------------------------------------------------------------------
1.15.2
------------------------------------------------------------------
- Fixed: a dropdown opened by CLICKING its parent item stayed open
  while hovering other main-menu items (it was kept open by
  :focus-within, because the clicked link kept keyboard focus). Now,
  while the pointer is over the main menu, only the hovered item's
  dropdown is shown (style.css).
- Main-menu Custom Links with URL "#" (dropdown-only headers such as
  "Corporate" / "Solutions"): clicking them no longer appends "#" to
  the address or jumps to the top of the page, and a mouse click
  releases focus so the dropdown closes normally when the pointer
  leaves. Keyboard activation keeps focus (accessibility).
  Small inline script, mds_nav_hash_links() in functions.php.

------------------------------------------------------------------
1.15.1
------------------------------------------------------------------
- Moving to a real Main Menu (Appearance > Menus) instead of the
  automatic fallback list. Two changes make that work:
  * Dropdown sub-menus: header.php now renders 2 levels (was depth 1,
    so child items were silently dropped), with a dropdown styled to
    the theme (dark panel, accent top border) that opens on hover or
    keyboard focus. RTL-aware. Drag a page under another one in
    Appearance > Menus to put it in the dropdown (e.g. the solution
    pages under Solutions).
  * mds_translate_nav_items() (functions.php, since 1.12.0): a Page
    item with NO translation in the current language is now removed
    from that language's menu, together with its child items (instead
    of showing the English page). So ONE menu can be assigned to EN,
    TR and AR right away -- each language shows only pages that exist
    in it, and a page appears there automatically once translated.
    Custom Links are untouched (never translated or removed), and
    pages with no Polylang language set behave as before.
- Not changed: below 900px wide the main menu is still hidden (no
  mobile menu yet -- pre-existing).

------------------------------------------------------------------
1.15.0
------------------------------------------------------------------
- Rolled back the 1.13.1-1.14.2 changes to the Default template. It
  turned out the solution pages only needed the "Standard Page"
  template (the one About Us uses); changing the Default template
  left two near-identical templates (Default + System Default). Now:
  * Default template (page.php) = plain text page again, exactly as in
    1.13.0 -- no hero image, no extra ACF fields.
  * "System Default" template (page-system-default.php) removed.
    A page still set to it falls back to the Default template
    (plain), so nothing breaks; re-select "Default template" on it
    when convenient.
  * Removed the Default-template ACF location rule and its helper
    filter mds_default_tpl_bos_varsayilan() -- no longer needed.
  * Designed pages (hero image + modules + CTA) = "Standard Page"
    template, one shared layout for About Us, Chairman's Message,
    Vision & Mission and the solution pages. Empty hero image = theme
    default image.
- ACTION NEEDED: switch the 4 solution pages to Page Attributes >
  Template > Standard Page. If a page was never saved under 1.14.x,
  the Checklist, Info Strip and Image + Text fields will show About
  Us's pre-filled defaults -- clear them before clicking Update.
- Kept from 1.13.1: 01/02 module numbers removed, editable hero image
  on the Solutions grid page. Kept from 1.14.2: corrected admin help
  texts (Image + Text image, hero image).

------------------------------------------------------------------
1.14.2
------------------------------------------------------------------
- Fixed two wrong admin help texts in "Standard Page Fields":
  * Image + Text > Image: claimed block-hangar.jpg was selected by
    default -- it never was (ACF image fields have no default). Now
    says that leaving it empty hides the whole block, Title/Text
    included.
  * Short List (Checklist): now notes that the pre-filled About Us
    text starts empty on Default-template pages (see 1.14.0).
  * Page Top (Hero) Image: added a help text explaining the empty-
    field behavior per template (see 1.14.1).
  Text-only change, no behavior change.

------------------------------------------------------------------
1.14.1
------------------------------------------------------------------
- Default template (page.php): if no hero image is selected, the image
  header is now hidden entirely (no fallback to hero-template.jpg) --
  the page shows just breadcrumb + title, then the content modules and
  CTA as usual. Select a Page Top (Hero) Image to get the full image
  header. Standard Page / Chairman's Message / Vision & Mission keep
  their fallback to the default image, unchanged.

------------------------------------------------------------------
1.14.0
------------------------------------------------------------------
- WordPress's "Default template" (page.php) now uses EXACTLY the same
  layout as About Us / Chairman's Message / Vision & Mission
  (inc/tpl-standard-page.php): hero image with the theme's default
  hero-template.jpg when left empty, text, optional Info Strip and
  Image+Text, and the CTA box -- all edited from the same "Standard
  Page Fields" box. Solution pages (Systems Integration, Construction
  Solutions, Consultancy Services, Facility Management) on the Default
  template now get the default hero image automatically.
- The old plain (image-less) layout is now a selectable template named
  "System Default" (page-system-default.php). ACTION NEEDED: any page
  that should stay plain (e.g. Privacy Policy) -> Page Attributes >
  Template > System Default, then Update.
- Removed 1.13.1's separate "Default Page Fields" ACF group (superseded
  by the shared group). A hero image already picked there keeps
  working (raw attachment IDs are converted to URLs); re-saving the
  page migrates it cleanly.
- Some "Standard Page Fields" defaults are About-Us-specific (training
  checklist, Headquarters Ankara / Branch Doha, maintenance hangar
  text). New filter mds_default_tpl_bos_varsayilan() (inc/acf-fields.php)
  blanks those defaults ONLY on Default-template pages that never saved
  that field, so existing solution pages don't suddenly show About Us
  content. About Us / Chairman's Message / Vision & Mission unchanged.

------------------------------------------------------------------
1.13.1
------------------------------------------------------------------
- Default page template (page.php -- "Default template" in wp-admin)
  now has an optional top (hero) image: edit the page > "Default Page
  Fields" box > Page Top (Hero) Image. If set, the page opens with the
  same full-width image header + content layout as About Us /
  Chairman's Message. If left empty, nothing changes -- the page keeps
  the old plain text layout (e.g. Privacy Policy). Used by the
  solution pages (Systems Integration, Construction Solutions,
  Consultancy Services, Facility Management), which are plain Pages on
  the Default template. Polylang: set it on each language's version.
- Default template breadcrumb now also shows the parent page (Home /
  Parent / Page) when the page has a parent, same as the Corporate
  pages.
- Solutions grid page (template "Solutions", page-uzmanlik.php) also
  got an editable hero image ("Solutions Page Fields" box). Empty =
  the theme's default hero-template.jpg, exactly as before.
- Removed the "01 / 02 / 03" module numbers from the shared Standard
  Page layout (inc/tpl-standard-page.php) completely. Since 1.3.4 they
  were only hidden when a page had a single module, so they still
  showed on Chairman's Message (2+ modules filled). Now they never
  show on About Us, Chairman's Message or Vision & Mission. Press
  Room's per-article numbers are untouched.
- NOTE: an intermediate build was briefly made from an outdated 1.8.1
  package and numbered 1.8.2 / 1.8.3. Those zips do NOT contain the
  1.9.0-1.13.0 changes -- do not install them; 1.13.1 supersedes them.

------------------------------------------------------------------
1.13.0
------------------------------------------------------------------
- Fixed the real cause of the nav menu font/width inconsistency
  reported after 1.11.0's font self-hosting fix: on some pages (Home,
  Press Room with no articles yet) the top menu would render in a
  wider fallback font, then look normal again on other pages (Project
  Deployments), toggling on repeat visits.
  Root cause, confirmed directly via DevTools Network tab and the
  document.fonts API on the live staging site: .primary-nav a uses
  Oswald weight 500, but only weight 600 (headings) and IBM Plex 400
  (body) were preloaded (see 1.11.0). font-display:optional gives the
  browser almost no patience -- if a font face isn't already
  guaranteed available, on many pages it does not even attempt to
  download it at all. Oswald 500 was never requested on Home or Press
  Room (zero network entries for it), so the menu permanently rendered
  in the fallback (system-ui) font there -- wider than Oswald's
  condensed shape. On Project Deployments, something else on that page
  also happens to use Oswald 500, which incidentally triggered the
  download early enough for the menu to benefit too -- explaining why
  that one page looked "normal" while others didn't.
  Fix: added oswald-latin-500-normal.woff2 and
  oswald-latin-ext-500-normal.woff2 (the menu's actual font/weight,
  including the Turkish-required latin-ext subset) to the preload list
  in mds_font_preload() (functions.php), alongside the existing 600 +
  IBM Plex 400. The menu now loads its real font reliably on every
  page instead of depending on incidental page content to trigger the
  download in time.
- Added inc/tools/stamp-screenshot-version.py: stamps "(vX.Y.Z)" onto
  screenshot-base.png (a clean, unstamped master capture of the
  homepage) to produce screenshot.png, so the version is visible at a
  glance on the Appearance > Themes thumbnail in wp-admin. Always
  stamps from the clean base so re-running for a new version never
  layers old version text under the new one. Needs Pillow
  (pip install Pillow --break-system-packages); uses a one-time TTF
  conversion of the theme's own Oswald Bold woff2
  (inc/tools/fonts/oswald-700.ttf, dev-tooling only, never enqueued on
  the live site) so the stamp matches the heading's real font.
  Going forward: after bumping MDS_THEME_VERSION, run
  `python3 inc/tools/stamp-screenshot-version.py X.Y.Z` from the theme
  root before zipping.

------------------------------------------------------------------
1.12.0
------------------------------------------------------------------
- Real (non-fallback) menus now auto-translate their items too.
  Background: every nav location already had a fully multilingual
  FALLBACK (mds_fallback_menu() for Main Menu; an equivalent inline
  fallback in footer.php for the 3 footer columns) -- but that fallback
  only ran when has_nav_menu($location) was FALSE for that location.
  The moment a real WordPress menu was assigned to a location, the
  fallback's automatic language-awareness was completely bypassed. If
  the SAME menu object was then assigned to all 3 language slots of a
  location (as happened with Footer-Corporate-Menu), every language
  rendered the identical, un-translated menu -- e.g. TR pages still
  showing "About Us" / "Press Room" in English.
  Fix: a new wp_nav_menu_objects filter, mds_translate_nav_items()
  (functions.php), runs on the theme's 4 registered locations
  (primary, footer_corporate, footer_solutions, footer_offices).
  For every Page-linked item in whatever real menu is active, it looks
  up that page's Polylang translation for the current language and
  swaps the item's URL + title to point at it. Custom links and
  category links are left untouched.
  Practical effect: you can now build ONE menu, in any order, with any
  items, and assign that SAME menu to as many language locations as
  you like -- each item auto-resolves to the correct language's page
  on render. No more building/maintaining 3 parallel menu copies.
  This does NOT force every language to share the same menu -- it only
  translates items on whichever menu ends up assigned to a given
  language slot. If one language genuinely needs different content
  (e.g. no Chairman's Message page in Arabic), you can still build a
  separate, smaller menu and assign it only to that language's slot,
  while the other languages keep sharing the common menu -- each
  location/language pair keeps its own independent menu assignment in
  Polylang, exactly as before. This filter is purely additive; it
  changes nothing for a location that still relies on the fallback, or
  for a language slot that already has its own distinct menu.
  Guarded with function_exists() checks so nothing changes if Polylang
  is ever deactivated.

------------------------------------------------------------------
1.11.0
------------------------------------------------------------------
- Fixed the font "flicker" on every page load/refresh (reported on the
  Turkish homepage, but it affected every page): Oswald + IBM Plex Sans
  were loaded from Google Fonts with font-display:swap, which by design
  paints the page with a fallback font first and then visibly swaps to
  the real font once it downloads -- Oswald's condensed shape made that
  swap especially noticeable.
  Fix: both fonts are now self-hosted from the theme's own
  assets/fonts/ folder (16 woff2 files, ~270KB total -- latin + latin-
  ext subsets, covering EN/TR; Arabic content already falls back to
  the next font in the stack since these families never covered Arabic
  script) with font-display:optional instead of swap. optional means
  the browser uses the real font ONLY if it's already available within
  about 100ms of the text needing to paint -- otherwise it stays on the
  fallback for that render and never swaps later, so there is no
  visible flash-then-replace. The two most-used files (Oswald 600 --
  hero heading/kicker -- and IBM Plex Sans 400 -- body text) are
  preloaded in <head> (mds_font_preload(), functions.php) so they are
  very likely ready before first paint, virtually eliminating even the
  rare "stuck on fallback for this one load" case.
  Also removes the external request to fonts.googleapis.com/
  fonts.gstatic.com entirely -- fonts now come from the same origin as
  the rest of the site, one less third-party dependency and DNS/TLS
  round-trip on every page load.
  No visual change otherwise -- same two font families, same weights.

------------------------------------------------------------------
1.10.1
------------------------------------------------------------------
- Added screenshot.png (1200x900) at the theme root -- this is what
  WordPress shows as the theme's preview thumbnail in Appearance >
  Themes. There was none before, so WordPress showed a blank/generic
  placeholder there. Shows the real header nav + homepage hero,
  rendered from the theme's own style.css and assets (not a photo of
  the live site, since it isn't reachable from here, but pixel-for-
  pixel the same colors/layout/copy as what a visitor actually sees).

------------------------------------------------------------------
1.10.0
------------------------------------------------------------------
- Renamed the displayed label "President's Message" to "Chairman's
  Message" everywhere it's shown (footer link, registered Polylang
  string, CSV, MENUS-AND-SYSTEM.md). Turkish stays "Başkanın Mesajı"
  (already correct/short), Arabic left as-is. The underlying file
  (page-president-message.php) and its "Template Name:" internal file
  reference were deliberately left unchanged -- only the Template
  Name label text and on-site text changed -- so a page that already
  has this template assigned keeps working with no database changes
  needed. Re-run inc/tools/import-polylang-strings.php to pick up the
  new English source string.
- Replaced assets/img/favicon.png: the old one showed only a thin red
  line (white "MDS" text on a transparent background, invisible on a
  light browser tab). New favicon is a clean, bold "MDS" wordmark in
  dark navy, sized to fill the square icon -- legible even at 16x16.
  This only touches favicon.png; the full white logo used in the
  header/footer (mds-logo-white.png) is unchanged.

------------------------------------------------------------------
1.9.1
------------------------------------------------------------------
- Fixed inc/tools/polylang-string-translations-tr-ar.csv: the Turkish
  column had been stripped of Turkish letters (c/g/i/o/s/u instead of
  ç/ğ/ı-İ/ö/ş/ü) across all 57 rows -- e.g. "Cozumler" instead of
  "Çözümler", "Egitim & Simulasyon" instead of "Eğitim ve Simülasyon".
  All Turkish text has been corrected. Also removed the "&" symbol
  from Turkish translations (kept in the English source column only),
  replaced with "ve" -- e.g. "Vizyon & Misyon" -> "Vizyon ve Misyon".
- ACTION NEEDED: you already ran the import once with the broken CSV,
  so the wrong Turkish text is now live in Diller > Dize Cevirileri.
  Re-run the same command with this corrected CSV to overwrite it:
    php wp-cli.phar eval-file wp-content/themes/mds-dark/inc/tools/import-polylang-strings.php --path=/var/www/html --allow-root

------------------------------------------------------------------
1.9.0
------------------------------------------------------------------
- New bundled tool: inc/tools/import-project-images.php (WP-CLI).
  Bulk-imports project photos placed directly on the server (in
  assets/img/proje-referans/) into the real Media Library, and
  auto-assigns one as a Project's Featured Image when the filename
  matches that Project's slug exactly (also propagated to Polylang
  translations of that Project, if any). Safe to run repeatedly --
  already-imported files are skipped. See MENUS-AND-SYSTEM.md
  section 4.1 for usage.

------------------------------------------------------------------
1.8.1
------------------------------------------------------------------
- Fixed a bug found while answering a question about the CTA block:
  the "Standard Page Fields" ACF group (Hero image, Info Strip,
  Image+Text block, and the Call to Action box) was only wired up to
  show in wp-admin on the original "Standard Page" template. Since
  "President's Message" and "Vision & Mission" are separate template
  files (even though they share the same rendering code), that admin
  box was invisible on those two -- there was no way to customize
  their Hero image or CTA text, they'd silently always show the
  generic fallback content. Now it shows on all three templates.
- The CTA box's phone number no longer falls back to the old
  hardcoded Istanbul-area number when left empty. It now falls back
  to whichever office has "Use as Footer Phone Number" checked
  (same mechanism added in 1.8.0) -- and if none is checked, the CTA
  box just shows the email address with no phone number, instead of
  a wrong number.

------------------------------------------------------------------
1.8.0
------------------------------------------------------------------
- The phone number at the top of the footer (next to the logo) is no
  longer hardcoded. It now comes from whichever Office has the new
  "Use as Footer Phone Number" checkbox ticked (Offices > edit an
  office > Office Information). If none is ticked, or that office's
  Phone field is empty, the footer just shows no number there.
  See MENUS-AND-SYSTEM.md section 4.2 for setup steps.
- ACTION NEEDED: after installing this version, open your Doha,
  Qatar office record, fill in its Phone field if needed, and check
  "Use as Footer Phone Number" -- otherwise the footer's phone number
  will disappear (it no longer falls back to the old hardcoded
  Istanbul-area number).

------------------------------------------------------------------
1.7.1
------------------------------------------------------------------
- Fax field on the Contact page's office cards no longer shows a
  "Fax:" text label -- the printer icon in front of it is enough,
  same as Phone (just icon + number, no text label). Removed the
  now-unused "Fax" registered string from the Polylang string list
  and the translation CSV.

------------------------------------------------------------------
1.7.0
------------------------------------------------------------------
- Added a Fax field to Office records (Offices > edit an office >
  Office Information > Fax) -- shows on the Contact page's office
  cards with a printer icon and a "Fax:" label (so it's not mistaken
  for a second phone number), right after Phone. Leave it empty and
  nothing extra shows, same as Address/Phone/Email.
- Also translated the two Office Information field labels that were
  still in Turkish ("Telefon" -> "Phone", "E-posta" -> "Email") to
  match every other admin-facing label in the theme.

------------------------------------------------------------------
1.6.2
------------------------------------------------------------------
- Company headquarters moved from Istanbul to Ankara -- updated every
  code-side reference: the footer's "Offices" fallback text, the
  "Headquarters" Info Strip default value on the Standard Page
  template (Corporate Information module), and the bulk translation
  CSV (inc/tools/). NOTE: if a real "Istanbul (HQ)" Office record
  already exists in wp-admin (Offices post type), that's real content
  and needs to be edited there too -- this only fixes the theme's own
  code-level fallback/default text, not existing database content.

------------------------------------------------------------------
1.6.1
------------------------------------------------------------------
- Footer copyright line now reads "Modern Defense Solutions" instead
  of the old "MDS Defense Technologies and Construction" -- the new
  About Us and President's Message content both settled on "Modern
  Defense Solutions (MDS)" as the company name, so the footer now
  matches instead of showing the old construction-focused name.

------------------------------------------------------------------
1.6.0
------------------------------------------------------------------
- The footer's three dynamic columns (Corporate, Solutions, Offices)
  are now fully parametric, the same way the top navigation already
  was: three new menu locations under Appearance > Menus > Manage
  Locations -- "Footer - Corporate column", "Footer - Solutions
  column", "Footer - Offices column". Assign a real menu to any of
  them and you get full manual control (add/remove/reorder/rename/
  link anywhere); leave it unassigned and the existing automatic
  behavior (About Us/President's Message/Vision & Mission/Press Room
  links, or the first N Solutions/Offices records) keeps working
  exactly as before. Nothing breaks if you don't touch this.
- Bundled two one-off WP-CLI admin tools directly inside the theme
  package this time (inc/tools/) instead of sending them separately,
  so they always travel with the zip you actually deploy:
  * inc/tools/polylang-string-translations-tr-ar.csv -- editable
    English/Turkish/Arabic translation spreadsheet for every string
    registered by the theme.
  * inc/tools/import-polylang-strings.php -- run once with `wp
    eval-file` to bulk-load that CSV's Turkish/Arabic columns into
    Polylang's String Translations, instead of typing 50+ entries by
    hand in wp-admin. Safe to re-run after editing the CSV.
- Added MENUS-AND-SYSTEM.md -- a single reference document covering
  every menu location and its fallback behavior, the page-template
  system, the CPT ordering rules, the multi-language string-
  translation system, and RTL support. Not a changelog (this file
  still is) -- a living "how does X work" reference.

------------------------------------------------------------------
1.5.0
------------------------------------------------------------------
- Footer "Corporate" links are now genuinely multi-language:
  * "About Us" used to find its target page by guessing a slug
    ("hakkimizda", "about-us", "about") -- which broke as soon as a
    language had a different slug (e.g. the Arabic page's real slug is
    "about-us-ar"). It now finds the page under ANY of those slugs, in
    ANY language, then hands off to Polylang to resolve the correct
    translation for whichever language you're currently viewing.
  * "Press Room" now links to the real Press Room page instead of a
    dead "#".
  * Added two new selectable Page templates -- "President's Message"
    and "Vision & Mission" (Page Attributes > Template, same place as
    "Standard Page"). Once you create a Page with one of these
    templates (in each language, via Polylang's "+" translate button,
    exactly like About Us), the matching footer link finds it
    automatically and correctly per language -- no slug guessing
    involved, same proven method already used for Projects, Solutions,
    Contact and Press Room.
  * Pages using these two new templates are deliberately left OUT of
    the automatic top-menu list (mds_fallback_menu()) -- they're meant
    to live in the footer only, not clutter the main navigation. This
    only matters if you're relying on that automatic menu (no menu set
    up yet under Appearance > Menus); if you do set up a real menu
    there, you simply choose what's in it either way.
  * Fixed a small pre-existing display bug on the same line: "Vision &
    Mission" was showing as "Vision &amp; Mission" (double-encoded).
  * "Standard Page", "President's Message" and "Vision & Mission" now
    share ONE underlying layout file (inc/tpl-standard-page.php) so a
    future design tweak only needs to happen in one place.

------------------------------------------------------------------
1.4.0
------------------------------------------------------------------
- Fixed a real bug: Arabic pages (e.g. /ar/about-us-ar/) rendered with
  NO styling at all -- completely unstyled, elements stacked with no
  layout, colors or spacing. Cause: the theme was telling WordPress to
  swap in a "style-rtl.css" file whenever a right-to-left language was
  active (wp_style_add_data(...'rtl'=>'replace')), but that file was
  never created -- so on every Arabic page WordPress tried to load a
  stylesheet that doesn't exist, and the entire theme CSS silently
  failed to load. Removed that broken swap.
- Added real RTL (right-to-left) support instead, as a single set of
  "[dir=\"rtl\"]" override rules at the bottom of style.css -- not a
  separate mirrored file. Most of the theme's two-column layouts
  (About, Image+Text, Project/Solution detail, footer columns) already
  auto-mirror correctly under RTL because they're built with CSS
  grid/flexbox, which the browser flips automatically. The override
  block only touches the handful of rules that were hardcoded to a
  physical left/right and needed an explicit flip: the header language
  switcher's spacing, the capability-strip dividers, the homepage hero's
  darkening gradient, the About section's decorative corner accent, the
  accent-bar/quote-style left borders used in several places, and list
  bullet indentation.
- The little "->" arrow at the end of "Read Article" / "View Project" /
  "Details" links now points the correct direction automatically: left
  ("<-") on right-to-left pages, right ("->") everywhere else.
- Standard Page template: the "01/02/03" module numbers now only show
  up when a page actually has 2 or more of its modules (Text Block,
  Info Strip, Image+Text) filled in at once -- i.e. only when there is
  a real sequence to count. A page with just one of those filled in
  (like About Us right now, with only the Text Block populated) no
  longer shows a lone, meaningless "01". Press Room is untouched --
  it already only shows a number per real article in the list.

------------------------------------------------------------------
1.3.4
------------------------------------------------------------------
- Standard Page template: the "01/02/03" module numbers now only show
  up when a page actually has 2 or more of its modules (Text Block,
  Info Strip, Image+Text) filled in at once -- i.e. only when there is
  a real sequence to count. A page with just one of those filled in
  (like About Us right now, with only the Text Block populated) no
  longer shows a lone, meaningless "01". Press Room is untouched --
  it already only shows a number per real article in the list.

------------------------------------------------------------------
1.3.3
------------------------------------------------------------------
- Removed the decorative "01" module number from the single Project
  page and single Solution page. On those pages it was hardcoded and
  never actually counted anything (there's only ever one module on
  each), so it was pure leftover -- unlike the Standard Page template
  and the Press Room list, where the same number can reflect a real
  stack of multiple modules or list items. Layout adjusts to a single
  column now that the number's reserved space is gone.
- Delivered theme zip files are now named with the version in the
  filename (mds-dark-<version>.zip) instead of a fixed mds-dark-theme.zip
  name, so two versions received separately don't overwrite each other
  and you can tell at a glance which one you're looking at.

------------------------------------------------------------------
1.3.2
------------------------------------------------------------------
- Standard Page template: removed the generic "Text Block" label that
  was displaying above the page's main content. It made sense as a
  placeholder when this section only ever held a short paragraph, but
  it read as an internal/leftover label once real content with its
  own heading (e.g. "Who We Are") was added -- now the content just
  starts directly under the module number, with no redundant label
  above it.

------------------------------------------------------------------
1.3.1
------------------------------------------------------------------
- Removed the "Picture Block" / "Project Pictures" custom ACF field(s)
  added in 1.3.0 -- turned out to be unnecessary. Each Project already
  shows its own individual picture via the built-in Featured Image
  field (used for both the Projects grid thumbnail and that project's
  own page); there is no separate picture field to fill in anymore.
- This is a data issue, not a code issue, but worth noting: on staging,
  every project currently falls back to the same placeholder image
  (hero-template.jpg) because neither of the two real Project posts has
  a Featured Image set yet. See set-proje-featured-images.sh (delivered
  separately) to set each project's own picture from the render images
  already sourced for this site.

------------------------------------------------------------------
1.3.0
------------------------------------------------------------------
- Projects page: shortened the "no projects yet" empty-state message --
  it no longer tells you where to add one, just says none exist yet.
- Added a "Picture Block" to Project records (Projects > edit a project):
  a separate custom picture (with an optional caption) you can add to
  that project's own page, independent of the Featured Image (which is
  only used for the thumbnail in the Projects grid). Leave it empty and
  nothing extra is shown.

------------------------------------------------------------------
1.2.0
------------------------------------------------------------------
- Every remaining Turkish admin-facing string translated to English:
  "Template Name:" headers (the Page Attributes > Template dropdown),
  all ACF field group titles / field labels / instructions boxes.
- CPT URL slugs switched from Turkish to English: /projeler/ ->
  /projects/, /cozumler/ -> /solutions/, /basin/ -> /press/.
- Fixed a related bug: several internal links (breadcrumbs, CTA
  buttons) guessed a page's URL from a hardcoded Turkish slug
  (home_url('/projeler/'), etc.). Replaced with a proper
  template-based lookup (mds_page_url_by_template()) so links stay
  correct no matter what slug you actually give each page.
- Language-switcher fallback markup (used only when Polylang can't
  supply the real language list) now shows EN as the active/default
  language instead of TR.
- All four content types (Projects, Offices, Solutions, Press) now
  support manual ordering (Page Attributes > Order / "page-attributes"
  support) -- drag a number to control display order in every grid.
  Press keeps defaulting to newest-first unless you set an order.

------------------------------------------------------------------
1.1.0
------------------------------------------------------------------
- Footer copyright now shows "2026" while the current year is 2026,
  and automatically becomes "2026-XXXX" once the year passes 2026
  (computed from date('Y'), never hardcoded).
- Added a real Contact Form (Full Name / Email / Phone / Message) to
  the Contact page, self-contained (no external plugin), with nonce +
  honeypot spam protection.
- Main navigation is now fully dynamic: it lists every published Page
  automatically (ordered by Page Attributes > Order), instead of a
  fixed slug list -- a new Page appears in the menu with no code
  change needed.
- Site default language switched to English (Turkish and Arabic are
  Polylang secondary languages). All theme chrome text (buttons,
  breadcrumbs, kicker labels, empty-state messages, form labels,
  footer headings) is now English source text, registered with
  Polylang (mds_t() / mds_te() helpers) so translations can be typed
  into Languages > String translations without touching code.
- CPT admin labels (Projects/Offices/Solutions/Press Room) translated
  to English. ACF default field content translated to English.
- Removed the language switcher from the footer (kept in the header
  only -- it didn't align with the rest of the footer content).
- Solutions ("Cozumler") list expanded from the original 4 categories
  to 6: Training & Simulation, Military Facilities, Consultancy
  Services, Physical & Facility Security, Data Centers &
  Communications, Cyber Security. Footer's Solutions column now
  queries up to 6 records instead of 4.
- Added seed-cozumler.sh (WP-CLI script, delivered separately from the
  theme zip) to create the 6 Solutions records with real placeholder
  title/summary/content in one run.

------------------------------------------------------------------
1.0.0
------------------------------------------------------------------
- Initial "MDS Dark" theme: Anasayfa (Hero-only front page), Hakkimizda
  / generic "Sayfa Sablonu" page template, Projeler (mds_proje CPT +
  grid + single), Ofisler (mds_ofis CPT, feeds the Contact page grid
  and footer column), Cozumler / Uzmanlik (mds_cozum CPT + grid +
  single), Basin Odasi (mds_basin CPT + list). ACF (free) field groups
  for all editable content, Polylang-ready language switcher.
