/*
Theme Name: GEOSTRAT News
Theme URI: https://geostrat.local/
Author: Soroush Tamaskani
Author URI: https://geostrat.local/
Description: A dark, terminal-grade news & magazine theme skinned exactly like the GEOSTRAT Global Monitoring Console. Fully Elementor-compatible — every section, header, footer and single/archive template can be rebuilt visually with Elementor (Pro Theme Builder locations supported). Ships a professional news layout (homepage, About, Contact with working form, author + hero templates), breaking-news ticker, breadcrumbs, share + related posts, social links, six Elementor widgets, an on-brand global colour/typography kit, a live/dark toggle, and first-class ways to embed or link the live GEOSTRAT console.
Version: 1.1.1
Requires at least: 6.0
Tested up to: 6.6
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: geostrat-news
Tags: news, magazine, blog, elementor, dark, one-column, two-columns, right-sidebar, custom-menu, custom-logo, featured-images, threaded-comments, translation-ready, full-width-template, block-styles, wide-blocks
*/

/* ============================================================================
   GEOSTRAT NEWS — design tokens
   Ported 1:1 from the geo-monitor console (styles.css :root). These are also
   seeded into Elementor's Global Colours / Global Fonts on activation so the
   editor stays on-brand while remaining fully user-editable.
   ========================================================================== */
:root {
  --gs-bg:            #0a0f0a;
  --gs-bg-panel:      #0d130d;
  --gs-bg-raise:      #121a12;
  --gs-line:          #1f2f1f;
  --gs-line-bright:   #2e452e;
  --gs-grid:          #16241680;
  --gs-text:          #b8c8b0;
  --gs-text-dim:      #5f755c;
  --gs-green:         #6abf5e;
  --gs-green-bright:  #8fe07f;
  --gs-amber:         #d9a441;
  --gs-red:           #d95448;
  --gs-cyan:          #56b8b0;
  --gs-purple:        #c070d0;

  --gs-head:          linear-gradient(180deg, #131d13, #0b110b);
  --gs-panel-a:       #0b110be8;
  --gs-active:        #14231280;
  --gs-sel:           #16281470;

  --gs-mono: "JetBrains Mono", "Cascadia Mono", "Consolas", "SFMono-Regular",
             "JetBrains Mono", "Courier New", monospace;
  --gs-read: var(--gs-mono);            /* long-form body font (override to a
                                           serif/sans in Customizer if desired) */

  --gs-radius: 0px;                     /* GEOSTRAT is sharp-cornered */
  --gs-maxw: 1280px;
  --gs-read-maxw: 760px;
  --gs-gutter: 22px;
}

/* Light theme — ported from styles.css :root[data-theme="light"] */
:root[data-theme="light"] {
  --gs-bg:            #e9ede3;
  --gs-bg-panel:      #eef2e8;
  --gs-bg-raise:      #e2e8da;
  --gs-line:          #c6d1bd;
  --gs-line-bright:   #a9bb9f;
  --gs-grid:          #9fb39680;
  --gs-text:          #26302a;
  --gs-text-dim:      #5d6f5a;
  --gs-green:         #3f8a34;
  --gs-green-bright:  #2c7a24;
  --gs-amber:         #9a6a08;
  --gs-red:           #c0392b;
  --gs-cyan:          #137d74;
  --gs-purple:        #7c2f8c;
  --gs-head:          linear-gradient(180deg, #e4eadc, #f2f5ec);
  --gs-panel-a:       #f3f6eeee;
  --gs-active:        #cfe4c799;
  --gs-sel:           #d6e8cd88;
}

/* ============================================================================
   Reset / base
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--gs-bg);
  color: var(--gs-text);
  font-family: var(--gs-mono);
  font-size: 15px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
img, svg, video { max-width: 100%; height: auto; display: block; }
a { color: var(--gs-green-bright); text-decoration: none; transition: color .15s; }
a:hover { color: var(--gs-amber); }
hr { border: 0; border-top: 1px solid var(--gs-line); margin: 2rem 0; }
::selection { background: var(--gs-green); color: var(--gs-bg); }

h1, h2, h3, h4, h5, h6 {
  font-family: var(--gs-mono);
  line-height: 1.2;
  color: var(--gs-text);
  margin: 0 0 .5em;
  font-weight: 700;
  letter-spacing: .5px;
}
h1 { font-size: 2.1rem; }
h2 { font-size: 1.6rem; }
h3 { font-size: 1.3rem; }
p { margin: 0 0 1.1em; }

/* Scrollbars — console style */
* { scrollbar-width: thin; scrollbar-color: var(--gs-line-bright) transparent; }
*::-webkit-scrollbar { width: 8px; height: 8px; }
*::-webkit-scrollbar-thumb { background: var(--gs-line-bright); }
*::-webkit-scrollbar-track { background: transparent; }

.gs-container { width: 100%; max-width: var(--gs-maxw); margin: 0 auto; padding: 0 var(--gs-gutter); }
.screen-reader-text { position: absolute !important; clip: rect(1px,1px,1px,1px); width: 1px; height: 1px; overflow: hidden; }
.skip-link { position: absolute; left: -9999px; top: 0; z-index: 1000; background: var(--gs-bg-panel); color: var(--gs-green-bright); padding: 10px 16px; border: 1px solid var(--gs-green); }
.skip-link:focus { left: 8px; top: 8px; }

/* ============================================================================
   Buttons — modelled on .filter-btn / redeem button
   ========================================================================== */
.gs-btn,
button.gs-btn,
input[type="submit"],
button[type="submit"],
.wp-block-button__link {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--gs-mono);
  font-size: 12px; letter-spacing: 2px; text-transform: uppercase;
  padding: 10px 18px;
  background: var(--gs-active);
  color: var(--gs-green-bright);
  border: 1px solid var(--gs-green);
  border-radius: var(--gs-radius);
  cursor: pointer;
  transition: background .15s, color .15s, border-color .15s, box-shadow .15s;
}
.gs-btn:hover,
input[type="submit"]:hover,
button[type="submit"]:hover,
.wp-block-button__link:hover {
  color: var(--gs-bg);
  background: var(--gs-green);
  box-shadow: 0 0 14px -2px var(--gs-green);
}
.gs-btn.ghost { background: transparent; color: var(--gs-text); border-color: var(--gs-line-bright); }
.gs-btn.ghost:hover { color: var(--gs-green-bright); border-color: var(--gs-green); background: var(--gs-active); box-shadow: none; }
.gs-btn.amber { color: var(--gs-amber); border-color: var(--gs-amber); background: transparent; }
.gs-btn.amber:hover { color: var(--gs-bg); background: var(--gs-amber); box-shadow: 0 0 14px -2px var(--gs-amber); }

/* Forms */
input[type="text"], input[type="search"], input[type="email"], input[type="url"],
input[type="password"], input[type="number"], textarea, select {
  font-family: var(--gs-mono); font-size: 14px;
  background: var(--gs-bg); color: var(--gs-text);
  border: 1px solid var(--gs-line-bright); border-radius: var(--gs-radius);
  padding: 10px 12px; width: 100%; outline: none;
}
input:focus, textarea:focus, select:focus { border-color: var(--gs-green); box-shadow: 0 0 0 1px var(--gs-green); }
::placeholder { color: var(--gs-text-dim); }
label { color: var(--gs-text-dim); font-size: 12px; letter-spacing: 1px; text-transform: uppercase; }

/* ============================================================================
   Decorative helpers — corner brackets, scanline, blink (from the console)
   ========================================================================== */
.gs-corners { position: relative; }
.gs-corners::before, .gs-corners::after {
  content: ""; position: absolute; width: 16px; height: 16px; pointer-events: none;
  border: 2px solid var(--gs-green); opacity: .55;
}
.gs-corners::before { top: -1px; left: -1px; border-right: 0; border-bottom: 0; }
.gs-corners::after  { bottom: -1px; right: -1px; border-left: 0; border-top: 0; }
.gs-blink { animation: gs-blink 1.1s steps(2, start) infinite; }
@keyframes gs-blink { 50% { opacity: 0; } }
.gs-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--gs-green); box-shadow: 0 0 6px var(--gs-green); animation: gs-pulse 2s infinite; }
@keyframes gs-pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }
.gs-eyebrow { font-size: 11px; letter-spacing: 3px; text-transform: uppercase; color: var(--gs-amber); }

/* ============================================================================
   TOP STATUS BAR  (thin console readout strip above the masthead)
   ========================================================================== */
#gs-statusbar {
  background: var(--gs-bg);
  border-bottom: 1px solid var(--gs-line);
  font-size: 11px; letter-spacing: 1px; color: var(--gs-text-dim);
}
#gs-statusbar .gs-container { display: flex; align-items: center; gap: 18px; height: 30px; overflow: hidden; white-space: nowrap; }
#gs-statusbar .sb-item b { color: var(--gs-amber); }
#gs-statusbar .sb-clock { color: var(--gs-green-bright); }
#gs-statusbar .sb-spacer { margin-left: auto; }
#gs-statusbar .sb-live { color: var(--gs-green-bright); }

/* ============================================================================
   MASTHEAD / HEADER
   ========================================================================== */
#gs-masthead {
  background: var(--gs-head);
  border-bottom: 1px solid var(--gs-line-bright);
  position: relative; z-index: 40;
}
#gs-masthead.is-sticky { position: sticky; top: 0; }
.gs-mast-inner { display: flex; align-items: center; gap: 20px; min-height: 68px; padding-top: 10px; padding-bottom: 10px; }
.gs-brand { display: flex; align-items: baseline; gap: 12px; }
.gs-brand a { color: inherit; display: flex; align-items: baseline; gap: 12px; }
.gs-brand-mark { color: var(--gs-green); font-size: 20px; animation: gs-pulse 2s infinite; }
.gs-brand-name { font-size: 24px; font-weight: 700; letter-spacing: 5px; color: var(--gs-green-bright); text-transform: uppercase; }
.gs-brand-sub { font-size: 10px; letter-spacing: 3px; color: var(--gs-text-dim); text-transform: uppercase; }
.gs-brand-logo img { max-height: 46px; width: auto; }

.gs-mast-tools { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.gs-icon-btn {
  background: var(--gs-bg-raise); color: var(--gs-text-dim);
  border: 1px solid var(--gs-line); border-radius: var(--gs-radius);
  width: 36px; height: 34px; display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; font-size: 15px; font-family: var(--gs-mono); transition: all .15s;
}
.gs-icon-btn:hover { color: var(--gs-green-bright); border-color: var(--gs-green); }

/* Primary navigation */
#gs-primary-nav { background: var(--gs-bg); border-bottom: 1px solid var(--gs-line); }
#gs-primary-nav .gs-container { display: flex; align-items: center; }
.gs-menu { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; }
.gs-menu li { position: relative; }
.gs-menu a {
  display: block; padding: 12px 16px;
  font-size: 12px; letter-spacing: 2px; text-transform: uppercase;
  color: var(--gs-text); border-right: 1px solid var(--gs-line);
}
.gs-menu > li:first-child > a { border-left: 1px solid var(--gs-line); }
.gs-menu a:hover, .gs-menu .current-menu-item > a, .gs-menu .current_page_item > a {
  color: var(--gs-green-bright); background: var(--gs-active);
}
.gs-menu .menu-item-has-children > a::after { content: " ▾"; color: var(--gs-text-dim); }
/* sub menu */
.gs-menu ul.sub-menu {
  position: absolute; top: 100%; left: 0; min-width: 210px; z-index: 60;
  background: var(--gs-bg-panel); border: 1px solid var(--gs-line-bright);
  list-style: none; margin: 0; padding: 4px 0; display: none;
}
.gs-menu li:hover > ul.sub-menu { display: block; }
.gs-menu ul.sub-menu a { border-right: 0; padding: 10px 14px; }

.gs-nav-cta { margin-left: auto; padding: 8px 0; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.gs-nav-sitrep { white-space: nowrap; }

/* Mobile nav toggle */
#gs-nav-toggle { display: none; }
@media (max-width: 900px) {
  .gs-brand-sub { display: none; }
  #gs-nav-toggle { display: inline-flex; }
  #gs-primary-nav .gs-container { flex-wrap: wrap; }
  .gs-menu { display: none; flex-direction: column; width: 100%; }
  .gs-menu.open { display: flex; }
  .gs-menu a, .gs-menu > li:first-child > a { border: 0; border-bottom: 1px solid var(--gs-line); }
  .gs-menu ul.sub-menu { position: static; display: block; border: 0; padding-left: 14px; }
  .gs-nav-cta { margin: 8px 0; }
}

/* ============================================================================
   PAGE LAYOUT (content + sidebar)
   ========================================================================== */
#gs-content { padding: 30px 0 50px; }
.gs-layout { display: grid; grid-template-columns: 1fr 320px; gap: 30px; align-items: start; }
.gs-layout.no-sidebar { grid-template-columns: 1fr; }
.gs-layout.full-width { grid-template-columns: 1fr; max-width: none; }
@media (max-width: 960px) { .gs-layout { grid-template-columns: 1fr; } }

/* Section label — the amber uppercase panel header from the console */
.gs-section-head {
  display: flex; align-items: center; gap: 10px;
  font-size: 12px; letter-spacing: 3px; text-transform: uppercase;
  color: var(--gs-amber);
  padding: 8px 0; margin: 0 0 18px;
  border-bottom: 1px solid var(--gs-line-bright);
}
.gs-section-head .count { color: var(--gs-text-dim); margin-left: auto; letter-spacing: 1px; }

/* ============================================================================
   ARTICLE CARDS (archive / home grid)
   ========================================================================== */
.gs-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 22px; }
@media (max-width: 640px) { .gs-grid { grid-template-columns: 1fr; } }

.gs-card {
  background: var(--gs-bg-panel);
  border: 1px solid var(--gs-line);
  border-radius: var(--gs-radius);
  display: flex; flex-direction: column;
  transition: border-color .15s, transform .15s, box-shadow .15s;
  position: relative;
}
.gs-card:hover { border-color: var(--gs-green); transform: translateY(-2px); box-shadow: 0 6px 20px -12px var(--gs-green); }
.gs-card .thumb { display: block; aspect-ratio: 16 / 9; overflow: hidden; border-bottom: 1px solid var(--gs-line); background: var(--gs-bg-raise); }
.gs-card .thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s, filter .4s; filter: saturate(.85) contrast(1.02); }
.gs-card:hover .thumb img { transform: scale(1.04); filter: saturate(1) contrast(1.05); }
.gs-card .body { padding: 14px 16px 16px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.gs-card .title { font-size: 1.05rem; line-height: 1.3; margin: 0; }
.gs-card .title a { color: var(--gs-text); }
.gs-card:hover .title a { color: var(--gs-green-bright); }
.gs-card .excerpt { font-size: 12.5px; color: var(--gs-text-dim); line-height: 1.55; margin: 0; }
.gs-card .card-foot { margin-top: auto; }

/* Category tag / meta line — the loc-tag / feed-meta look */
.gs-tag {
  display: inline-block; font-size: 10px; letter-spacing: 1.5px; text-transform: uppercase;
  color: var(--gs-amber); border: 1px solid currentColor; padding: 2px 7px; border-radius: var(--gs-radius);
}
.gs-tag.a-conflict { color: var(--gs-red); }
.gs-tag.a-energy   { color: var(--gs-amber); }
.gs-tag.a-cyber    { color: var(--gs-cyan); }
.gs-tag.a-markets  { color: var(--gs-green-bright); }
.gs-tag.a-diplo    { color: var(--gs-purple); }
.gs-meta { font-size: 11px; letter-spacing: 1px; color: var(--gs-text-dim); display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.gs-meta .sep { color: var(--gs-line-bright); }
.gs-meta a { color: var(--gs-text-dim); }
.gs-meta a:hover { color: var(--gs-green-bright); }

/* Lead / featured story */
.gs-lead {
  grid-column: 1 / -1;
  display: grid; grid-template-columns: 1.3fr 1fr; gap: 0;
  background: var(--gs-bg-panel); border: 1px solid var(--gs-line-bright);
  margin-bottom: 26px;
}
@media (max-width: 720px) { .gs-lead { grid-template-columns: 1fr; } }
.gs-lead .thumb { border-bottom: 0; border-right: 1px solid var(--gs-line); aspect-ratio: 16/10; }
@media (max-width: 720px) { .gs-lead .thumb { border-right: 0; border-bottom: 1px solid var(--gs-line); } }
.gs-lead .body { justify-content: center; padding: 26px; gap: 12px; }
.gs-lead .title { font-size: 1.7rem; }

/* ============================================================================
   SINGLE POST / PAGE
   ========================================================================== */
.gs-article { background: transparent; }
.gs-article-head { margin-bottom: 22px; }
.gs-article-head .gs-title { font-size: 2.3rem; line-height: 1.15; margin: 10px 0 14px; color: var(--gs-text); }
.gs-dateline { font-size: 12px; letter-spacing: 1.5px; text-transform: uppercase; color: var(--gs-text-dim); }
.gs-dateline b { color: var(--gs-green-bright); }
.gs-featured { margin: 0 0 26px; border: 1px solid var(--gs-line-bright); }
.gs-featured img { width: 100%; }
.gs-featured figcaption { font-size: 11px; letter-spacing: 1px; color: var(--gs-text-dim); padding: 6px 10px; border-top: 1px solid var(--gs-line); background: var(--gs-bg-panel); }

.gs-entry { font-family: var(--gs-read); max-width: var(--gs-read-maxw); font-size: 15.5px; line-height: 1.8; }
.gs-entry.full { max-width: none; }
.gs-entry > * { margin-bottom: 1.25em; }
.gs-entry h2 { font-size: 1.5rem; margin-top: 1.6em; padding-bottom: .3em; border-bottom: 1px solid var(--gs-line); }
.gs-entry h2::before { content: "◆ "; color: var(--gs-green); }
.gs-entry h3 { font-size: 1.2rem; margin-top: 1.4em; color: var(--gs-green-bright); }
.gs-entry a { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--gs-line-bright); }
.gs-entry a:hover { text-decoration-color: var(--gs-amber); }
.gs-entry ul, .gs-entry ol { padding-left: 1.4em; }
.gs-entry ul { list-style: none; padding-left: 1.2em; }
.gs-entry ul li::before { content: "▪"; color: var(--gs-green); margin-right: 8px; margin-left: -1.2em; }
.gs-entry blockquote {
  border-left: 3px solid var(--gs-green); background: var(--gs-bg-panel);
  margin: 1.6em 0; padding: 14px 18px; color: var(--gs-text);
}
.gs-entry blockquote p:last-child { margin-bottom: 0; }
.gs-entry code, .gs-entry kbd, .gs-entry pre {
  font-family: var(--gs-mono); background: var(--gs-bg-panel); border: 1px solid var(--gs-line);
}
.gs-entry code { padding: 1px 6px; font-size: .9em; color: var(--gs-cyan); }
.gs-entry pre { padding: 14px 16px; overflow-x: auto; }
.gs-entry pre code { border: 0; background: transparent; padding: 0; }
.gs-entry img { border: 1px solid var(--gs-line-bright); }
.gs-entry table { width: 100%; border-collapse: collapse; }
.gs-entry th, .gs-entry td { border: 1px solid var(--gs-line); padding: 8px 10px; text-align: left; }
.gs-entry th { background: var(--gs-bg-panel); color: var(--gs-amber); font-size: 12px; letter-spacing: 1px; text-transform: uppercase; }

.gs-tags-row { margin: 24px 0; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.gs-post-nav { display: flex; justify-content: space-between; gap: 14px; margin: 30px 0; border-top: 1px solid var(--gs-line); padding-top: 18px; }
.gs-post-nav a { font-size: 12px; letter-spacing: 1px; }
.gs-post-nav .dir { color: var(--gs-text-dim); display: block; font-size: 10px; letter-spacing: 2px; }

/* Author box */
.gs-authorbox { display: flex; gap: 14px; border: 1px solid var(--gs-line); background: var(--gs-bg-panel); padding: 16px; margin: 26px 0; }
.gs-authorbox img { border-radius: 50%; width: 56px; height: 56px; border: 1px solid var(--gs-line-bright); }
.gs-authorbox .name { color: var(--gs-green-bright); letter-spacing: 1px; text-transform: uppercase; font-size: 13px; }

/* ============================================================================
   SIDEBAR / WIDGETS
   ========================================================================== */
#gs-sidebar { display: flex; flex-direction: column; gap: 24px; }
.gs-widget {
  background: var(--gs-bg-panel); border: 1px solid var(--gs-line);
}
.gs-widget .widget-title, .gs-widget h2.widgettitle, .gs-widget .widgettitle {
  margin: 0; padding: 10px 14px;
  font-size: 12px; letter-spacing: 2px; text-transform: uppercase; color: var(--gs-amber);
  background: var(--gs-head); border-bottom: 1px solid var(--gs-line);
}
.gs-widget > ul, .gs-widget > div, .gs-widget > form, .gs-widget > p { padding: 14px; margin: 0; }
.gs-widget ul { list-style: none; margin: 0; padding: 14px; }
.gs-widget ul li { padding: 8px 0; border-bottom: 1px solid var(--gs-line); font-size: 13px; }
.gs-widget ul li:last-child { border-bottom: 0; }
.gs-widget ul li a { color: var(--gs-text); }
.gs-widget ul li a:hover { color: var(--gs-green-bright); }
.gs-widget a.rsswidget { color: var(--gs-green-bright); }
.gs-widget .post-date, .gs-widget .rss-date { color: var(--gs-text-dim); font-size: 11px; letter-spacing: 1px; }

/* ============================================================================
   PAGINATION
   ========================================================================== */
.gs-pagination { margin: 34px 0 0; display: flex; }
.gs-pagination .nav-links { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 auto; }
.gs-pagination .page-numbers {
  min-width: 38px; text-align: center; padding: 8px 12px;
  border: 1px solid var(--gs-line-bright); color: var(--gs-text);
  font-size: 13px; letter-spacing: 1px;
}
.gs-pagination .page-numbers:hover { border-color: var(--gs-green); color: var(--gs-green-bright); }
.gs-pagination .page-numbers.current { background: var(--gs-active); color: var(--gs-green-bright); border-color: var(--gs-green); }
.gs-pagination .page-numbers.dots { border-color: transparent; }

/* ============================================================================
   COMMENTS
   ========================================================================== */
#gs-comments { margin-top: 40px; border-top: 1px solid var(--gs-line-bright); padding-top: 24px; }
.gs-comments-title { font-size: 13px; letter-spacing: 2px; text-transform: uppercase; color: var(--gs-amber); margin-bottom: 18px; }
.commentlist, .comment-list { list-style: none; margin: 0; padding: 0; }
.comment-list li { margin: 0 0 16px; }
.comment-body { border: 1px solid var(--gs-line); background: var(--gs-bg-panel); padding: 14px 16px; }
.comment-author { font-size: 12px; letter-spacing: 1px; text-transform: uppercase; color: var(--gs-green-bright); }
.comment-author .says { display: none; }
.comment-metadata a { color: var(--gs-text-dim); font-size: 11px; }
.comment-list .children { list-style: none; margin: 14px 0 0 22px; padding-left: 14px; border-left: 1px solid var(--gs-line); }
.comment-reply-link { font-size: 11px; letter-spacing: 1px; text-transform: uppercase; }
.comment-respond { margin-top: 24px; border: 1px solid var(--gs-line); background: var(--gs-bg-panel); padding: 18px; }
.comment-respond .comment-reply-title { font-size: 13px; letter-spacing: 2px; text-transform: uppercase; color: var(--gs-amber); }
.comment-form label { display: block; margin: 10px 0 4px; }

/* ============================================================================
   FOOTER
   ========================================================================== */
#gs-footer { background: var(--gs-bg-panel); border-top: 1px solid var(--gs-line-bright); margin-top: 40px; }
.gs-footer-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 26px; padding: 34px 0; }
@media (max-width: 820px) { .gs-footer-cols { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .gs-footer-cols { grid-template-columns: 1fr; } }
.gs-footer-cols .widget-title, .gs-footer-cols .widgettitle {
  font-size: 12px; letter-spacing: 2px; text-transform: uppercase; color: var(--gs-amber);
  margin: 0 0 12px; padding: 0 0 8px; border-bottom: 1px solid var(--gs-line); background: none;
}
.gs-footer-cols ul { list-style: none; margin: 0; padding: 0; }
.gs-footer-cols li { padding: 5px 0; font-size: 13px; }
.gs-footer-cols a { color: var(--gs-text); }
.gs-footer-cols a:hover { color: var(--gs-green-bright); }

#gs-colophon {
  border-top: 1px solid var(--gs-line);
  font-size: 11px; letter-spacing: 1px; color: var(--gs-text-dim);
}
#gs-colophon .gs-container { display: flex; align-items: center; gap: 14px; min-height: 40px; flex-wrap: wrap; }
#gs-colophon .disclaimer { margin-left: auto; text-align: right; }

/* ============================================================================
   GEOSTRAT CONNECT — console embed + CTA widget/shortcode
   ========================================================================== */
.gs-console-embed { border: 1px solid var(--gs-line-bright); background: var(--gs-bg); position: relative; }
.gs-console-embed .embed-head {
  display: flex; align-items: center; gap: 10px; padding: 8px 12px;
  background: var(--gs-head); border-bottom: 1px solid var(--gs-line);
  font-size: 11px; letter-spacing: 2px; text-transform: uppercase; color: var(--gs-amber);
}
.gs-console-embed .embed-head .gs-dot { margin-left: auto; }
.gs-console-embed iframe { width: 100%; display: block; border: 0; background: var(--gs-bg); }

.gs-cta {
  border: 1px solid var(--gs-green); background:
     repeating-linear-gradient(0deg, transparent 0 3px, #00000010 3px 4px),
     radial-gradient(ellipse at center, var(--gs-bg-raise) 0%, var(--gs-bg) 75%);
  padding: 30px 26px; text-align: center; position: relative;
}
.gs-cta .k { font-size: 11px; letter-spacing: 4px; text-transform: uppercase; color: var(--gs-amber); }
.gs-cta h3 { font-size: 1.5rem; letter-spacing: 2px; color: var(--gs-green-bright); margin: 10px 0; }
.gs-cta p { color: var(--gs-text-dim); font-size: 13px; max-width: 520px; margin: 0 auto 18px; }
.gs-cta .gs-btn { font-size: 13px; }

/* ============================================================================
   Elementor compatibility helpers
   ========================================================================== */
/* Let Elementor full-width/canvas sections truly go edge-to-edge */
.elementor-page #gs-content .gs-container,
body.elementor-template-full-width #gs-content .gs-container { max-width: none; padding: 0; }
/* Keep our type/colour defaults from bleeding into Elementor's own controls preview */
.elementor-widget-container { color: inherit; }

/* Blog POSTS built with Elementor (single.php adds .gs-elementor): hand the content
   column to Elementor so the post renders on the front end the way it looks in the
   editor — not squeezed into the 760px reading column, and not double-decorated by
   the theme's article typography (◆ headings, ▪ bullets, forced section margins). */
/* An Elementor-built POST also gets WP's body.elementor-page class, which the
   full-canvas rule above stretches edge-to-edge — but a blog post should stay
   boxed like every other page. single.php marks it #gs-content.gs-el-post; re-cap. */
.elementor-page #gs-content.gs-el-post .gs-container { max-width: var(--gs-maxw); padding: 0 var(--gs-gutter); }
.gs-entry.gs-elementor { max-width: none; font-family: inherit; font-size: inherit; line-height: inherit; }
.gs-entry.gs-elementor > * { margin-bottom: 0; }
.gs-entry.gs-elementor h1, .gs-entry.gs-elementor h2, .gs-entry.gs-elementor h3,
.gs-entry.gs-elementor h4, .gs-entry.gs-elementor h5, .gs-entry.gs-elementor h6 { margin: 0; padding: 0; border: 0; }
.gs-entry.gs-elementor h2::before { content: none; }
.gs-entry.gs-elementor ul li::before { content: none; margin-left: 0; }
.gs-entry.gs-elementor a { text-decoration: none; }
.gs-entry.gs-elementor img { border: 0; }

/* WP core alignment + captions inside entry */
.gs-entry .alignleft { float: left; margin: 0 1.4em 1em 0; }
.gs-entry .alignright { float: right; margin: 0 0 1em 1.4em; }
.gs-entry .aligncenter { display: block; margin-left: auto; margin-right: auto; }
.gs-entry .wp-caption-text, .gs-entry figcaption { font-size: 11px; letter-spacing: 1px; color: var(--gs-text-dim); }
.gs-entry .wp-block-image { margin-left: auto; margin-right: auto; }

/* Sticky-post + states */
.sticky .gs-card, .gs-card.is-sticky { border-color: var(--gs-amber); }
.gs-badge-pinned { color: var(--gs-amber); font-size: 10px; letter-spacing: 2px; }

/* 404 / search-empty */
.gs-empty { text-align: center; padding: 60px 20px; border: 1px dashed var(--gs-line-bright); }
.gs-empty .code { font-size: 4rem; color: var(--gs-green); letter-spacing: 6px; }
.gs-empty p { color: var(--gs-text-dim); }

/* ============================================================================
   v1.1 — news-site components
   ========================================================================== */

/* Grid column helpers */
.gs-grid-1 { grid-template-columns: 1fr; }
.gs-grid-2 { grid-template-columns: repeat(2, 1fr); }
.gs-grid-3 { grid-template-columns: repeat(3, 1fr); }
.gs-grid-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 1000px) { .gs-grid-3, .gs-grid-4 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px)  { .gs-grid-2, .gs-grid-3, .gs-grid-4 { grid-template-columns: 1fr; } }

/* ---- Top-bar secondary menu + social ---- */
.sb-menu { list-style: none; display: flex; gap: 0; margin: 0; padding: 0; }
.sb-menu a { color: var(--gs-text-dim); padding: 0 10px; font-size: 11px; letter-spacing: 1px; text-transform: uppercase; }
.sb-menu a:hover { color: var(--gs-green-bright); }
.sb-spacer { margin-left: auto; }
.gs-social { display: inline-flex; align-items: center; gap: 8px; }
.gs-social-link { color: var(--gs-text-dim); display: inline-flex; transition: color .15s, transform .15s; }
.gs-social-link:hover { color: var(--gs-green-bright); transform: translateY(-1px); }
.sb-social { gap: 10px; }
.sb-social .gs-social-link svg { width: 15px; height: 15px; }
@media (max-width: 900px) { .sb-menu, .sb-date { display: none; } }

/* ---- Breaking ticker ---- */
#gs-ticker { background: var(--gs-bg); border-bottom: 1px solid var(--gs-line); overflow: hidden; }
#gs-ticker .gs-container, .gs-ticker-inner { display: flex; align-items: stretch; height: 34px; }
.gs-ticker-widget { border: 1px solid var(--gs-line-bright); }
.ticker-label {
  flex: 0 0 auto; display: flex; align-items: center; padding: 0 14px;
  background: var(--gs-red); color: #fff; font-size: 11px; letter-spacing: 2px; font-weight: 700;
}
:root[data-theme="light"] .ticker-label { color: #fff; }
.ticker-viewport { flex: 1; overflow: hidden; position: relative; }
.ticker-track { position: absolute; white-space: nowrap; display: flex; align-items: center; height: 100%; animation: gs-ticker 48s linear infinite; }
.ticker-track:hover { animation-play-state: paused; }
.tick { display: inline-flex; align-items: center; gap: 8px; margin: 0 20px; font-size: 12px; letter-spacing: .5px; color: var(--gs-text); }
.tick .dot { color: var(--gs-amber); font-size: 8px; }
a.tick:hover { color: var(--gs-green-bright); }
@keyframes gs-ticker { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ---- Breadcrumbs ---- */
.gs-breadcrumbs { border-bottom: 1px solid var(--gs-line); background: var(--gs-bg); }
.gs-breadcrumbs .gs-container { padding-top: 9px; padding-bottom: 9px; font-size: 11px; letter-spacing: 1.5px; text-transform: uppercase; color: var(--gs-text-dim); }
.gs-breadcrumbs a { color: var(--gs-text-dim); }
.gs-breadcrumbs a:hover { color: var(--gs-green-bright); }
.gs-breadcrumbs .sep { margin: 0 8px; color: var(--gs-line-bright); }
.gs-breadcrumbs .current { color: var(--gs-green-bright); }

/* ---- Hero band ---- */
.gs-hero { background: var(--gs-head); border-bottom: 1px solid var(--gs-line-bright); position: relative; }
.gs-hero .gs-container { padding-top: 34px; padding-bottom: 34px; }
.gs-hero-title { font-size: 2.4rem; letter-spacing: 1px; margin: 8px 0 0; color: var(--gs-text); }
.gs-hero-sub { color: var(--gs-text-dim); margin: 10px 0 0; max-width: 640px; font-size: 14px; }
.gs-author-hero { display: flex; align-items: center; gap: 18px; }
.gs-author-hero img { border-radius: 50%; border: 1px solid var(--gs-line-bright); }

/* ---- Homepage ---- */
.gs-home .gs-container { padding-top: 26px; }
.gs-home-hero { display: grid; grid-template-columns: 1.7fr 1fr; gap: 22px; margin-bottom: 26px; }
@media (max-width: 860px) { .gs-home-hero { grid-template-columns: 1fr; } }
.gs-hero-lead { }
.gs-hero-lead .thumb { aspect-ratio: 16/9; overflow: hidden; border-bottom: 1px solid var(--gs-line); background: var(--gs-bg-raise); }
.gs-hero-lead .thumb img { width: 100%; height: 100%; object-fit: cover; }
.gs-hero-lead .body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 10px; }
.gs-hero-lead .title { font-size: 1.9rem; line-height: 1.2; margin: 0; }
.gs-hero-lead .title a { color: var(--gs-text); }
.gs-hero-lead:hover .title a { color: var(--gs-green-bright); }
.gs-hero-lead .excerpt { color: var(--gs-text-dim); font-size: 13.5px; margin: 0; }

.gs-hero-rail { display: flex; flex-direction: column; gap: 0; border: 1px solid var(--gs-line); background: var(--gs-bg-panel); }
.gs-mini { display: flex; gap: 12px; padding: 12px; border-bottom: 1px solid var(--gs-line); }
.gs-mini:last-child { border-bottom: 0; }
.gs-mini .mini-thumb { flex: 0 0 84px; height: 60px; overflow: hidden; background: var(--gs-bg-raise); border: 1px solid var(--gs-line); }
.gs-mini .mini-thumb img { width: 100%; height: 100%; object-fit: cover; }
.gs-mini .mini-title { font-size: 13px; line-height: 1.3; margin: 6px 0; }
.gs-mini .mini-title a { color: var(--gs-text); }
.gs-mini:hover .mini-title a { color: var(--gs-green-bright); }

.gs-home-section { margin: 30px 0; }
.gs-home-section .gs-section-head .count { font-size: 11px; }
.gs-home-cta { margin: 8px 0 10px; }

/* ---- Contact ---- */
.gs-contact-layout { display: grid; grid-template-columns: 1fr 340px; gap: 30px; align-items: start; padding-top: 26px; }
@media (max-width: 900px) { .gs-contact-layout { grid-template-columns: 1fr; } }
.gs-contact-aside { display: flex; flex-direction: column; gap: 22px; }
.gs-coords { padding: 4px 0; }
.gs-coord { padding: 12px 14px; border-bottom: 1px solid var(--gs-line); display: flex; flex-direction: column; gap: 3px; }
.gs-coord:last-child { border-bottom: 0; }
.gs-coord .lbl { font-size: 10px; letter-spacing: 2px; color: var(--gs-amber); text-transform: uppercase; }
.gs-coord a { color: var(--gs-green-bright); }

/* ---- Forms (contact + newsletter) ---- */
.gs-form .gs-field { margin: 0 0 14px; }
.gs-form .gs-field label { display: block; margin-bottom: 5px; }
.gs-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 520px) { .gs-field-grid { grid-template-columns: 1fr; } }
.gs-form-notice { border: 1px solid; padding: 10px 14px; margin-bottom: 16px; font-size: 12px; letter-spacing: 1px; }
.gs-form-notice.ok { border-color: var(--gs-green); color: var(--gs-green-bright); background: var(--gs-active); }
.gs-form-notice.err { border-color: var(--gs-red); color: var(--gs-red); background: rgba(217,84,72,.08); }
.gs-newsletter { border: 1px solid var(--gs-line-bright); background: var(--gs-bg-panel); padding: 18px; }
.gs-newsletter p { color: var(--gs-text-dim); font-size: 13px; margin: 8px 0 12px; }
.gs-newsletter-form input[type="email"] { flex: 1; min-width: 0; }
.widget .gs-newsletter { border: 0; padding: 0; background: none; }

/* ---- About: stats / values / team ---- */
.gs-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
@media (max-width: 680px) { .gs-stats { grid-template-columns: repeat(2, 1fr); } }
.gs-stat { border: 1px solid var(--gs-line-bright); background: var(--gs-bg-panel); padding: 22px 16px; text-align: center; }
.gs-stat .v { font-size: 2.1rem; color: var(--gs-green-bright); letter-spacing: 1px; }
.gs-stat .l { font-size: 10px; letter-spacing: 2px; color: var(--gs-text-dim); text-transform: uppercase; margin-top: 6px; }
.gs-values { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (max-width: 720px) { .gs-values { grid-template-columns: 1fr; } }
.gs-value { border-left: 2px solid var(--gs-green); padding: 4px 0 4px 16px; }
.gs-value .k { color: var(--gs-amber); letter-spacing: 2px; font-size: 12px; text-transform: uppercase; }
.gs-value p { color: var(--gs-text-dim); font-size: 13px; margin: 6px 0 0; }
.gs-team { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
@media (max-width: 860px) { .gs-team { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .gs-team { grid-template-columns: 1fr; } }
.gs-member { border: 1px solid var(--gs-line); background: var(--gs-bg-panel); padding: 20px 16px; text-align: center; }
.gs-member img { border-radius: 50%; border: 1px solid var(--gs-line-bright); margin: 0 auto 10px; }
.gs-member .name { letter-spacing: 1px; text-transform: uppercase; font-size: 13px; }
.gs-member .name a { color: var(--gs-green-bright); }
.gs-member p { color: var(--gs-text-dim); font-size: 12px; margin: 8px 0 0; }

/* ---- Share row + article foot ---- */
.gs-article-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 22px; margin: 26px 0; padding: 16px 0; border-top: 1px solid var(--gs-line); border-bottom: 1px solid var(--gs-line); }
.gs-share { display: inline-flex; align-items: center; gap: 10px; margin-left: auto; }
.gs-share-link { width: 34px; height: 34px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--gs-line-bright); color: var(--gs-text-dim); font-size: 14px; }
.gs-share-link:hover { border-color: var(--gs-green); color: var(--gs-green-bright); }
.gs-related { margin-top: 34px; }

/* ---- Footer social ---- */
.gs-footer-social { border-top: 1px solid var(--gs-line); }
.gs-footer-social .gs-container { display: flex; justify-content: center; padding: 16px 0; gap: 16px; }
.gs-footer-social .gs-social-link svg { width: 20px; height: 20px; }

/* Full-width + canvas page templates */
.gs-fullwidth { width: 100%; }
#gs-content:has(.gs-fullwidth) { padding: 0; }
body.gs-canvas { background: var(--gs-bg); }

/* Print */
@media print { #gs-statusbar, #gs-primary-nav, #gs-footer, #gs-colophon, .gs-mast-tools, #gs-sidebar { display: none !important; } body { background: #fff; color: #000; } }

/* ============================================================================
   Easy Table of Contents (ez-toc) — themed to match GEOSTRAT
   Uses !important to override the plugin's "grey" preset + screen.min.css.
   Colours come from the --gs-* tokens, so it follows light/dark automatically.
   ========================================================================== */
#ez-toc-container,
#ez-toc-container.ez-toc-grey,
div#ez-toc-container.ez-toc-grey {
  background: var(--gs-bg-panel) !important;
  border: 1px solid var(--gs-line-bright) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  color: var(--gs-text) !important;
  font-family: var(--gs-mono) !important;
  padding: 14px 16px !important;
}
#ez-toc-container .ez-toc-title,
#ez-toc-container .ez-toc-box-title {
  color: var(--gs-green-bright) !important;
  letter-spacing: 1px !important;
  text-transform: uppercase !important;
}
#ez-toc-container .ez-toc-title-toggle,
#ez-toc-container a.ez-toc-toggle,
#ez-toc-container .ez-toc-js-icon-con svg,
#ez-toc-container .ez-toc-js-icon-con path,
#ez-toc-container .ez-toc-icon-toggle-span svg,
#ez-toc-container .ez-toc-icon-toggle-span path {
  color: var(--gs-text-dim) !important;
  fill: var(--gs-text-dim) !important;
}
#ez-toc-container a.ez-toc-toggle:hover,
#ez-toc-container .ez-toc-icon-toggle-span:hover svg,
#ez-toc-container .ez-toc-icon-toggle-span:hover path { color: var(--gs-green-bright) !important; fill: var(--gs-green-bright) !important; }
#ez-toc-container ul li,
#ez-toc-container nav ul li { border: 0 !important; background: transparent !important; }
#ez-toc-container ul li a,
#ez-toc-container .ez-toc-link {
  color: var(--gs-text-dim) !important;
  text-decoration: none !important;
  transition: color .15s;
}
#ez-toc-container ul li a:hover,
#ez-toc-container .ez-toc-link:hover,
#ez-toc-container ul li a.active,
#ez-toc-container .ez-toc-link.active,
#ez-toc-container a.ez-toc-link:focus { color: var(--gs-green-bright) !important; }
/* numbered counters (ez-toc-counter) */
#ez-toc-container.ez-toc-counter nav ul li a::before,
#ez-toc-container.counter-hierarchy nav ul li a::before { color: var(--gs-amber) !important; }

/* ==========================================================================
   Elementor page overrides — the homepage intro button and the Services page
   cards live in Elementor custom HTML/CSS, so we restyle them site-wide here.
   ========================================================================== */

/* Homepage "Explore Our Services" → themed amber (matches the 24H AI SITREP button) */
.gs-intro-button {
  background: var(--gs-amber) !important;
  border: 1px solid var(--gs-amber) !important;
  color: var(--gs-bg) !important;
  font-family: var(--gs-mono) !important;
  letter-spacing: 2px !important;
  text-transform: uppercase !important;
  border-radius: var(--gs-radius) !important;
  box-shadow: none !important;
  transition: background .15s, color .15s, box-shadow .15s !important;
}
.gs-intro-button:hover {
  background: transparent !important;
  color: var(--gs-amber) !important;
  box-shadow: 0 0 16px -2px var(--gs-amber) !important;
}

/* Services page — equal-height cards with bottom-aligned buttons, a hover lift,
   and a terminal-style top accent (boxes kept exactly as they are). */
.gs-services-grid { align-items: stretch !important; }
.gs-service-card {
  display: flex !important;
  flex-direction: column !important;
  padding: 22px 18px !important;
  position: relative !important;
  overflow: hidden !important;
  transition: transform .16s ease, border-color .16s ease, box-shadow .16s ease !important;
}
.gs-service-card::before {
  content: "" !important;
  position: absolute !important; left: 0; right: 0; top: 0;
  height: 2px !important;
  background: linear-gradient(90deg, var(--gs-green) 0%, transparent 72%) !important;
  opacity: .5 !important;
}
.gs-service-card:hover {
  transform: translateY(-3px) !important;
  border-color: var(--gs-green) !important;
  box-shadow: 0 12px 30px -14px rgba(74, 222, 128, .55) !important;
}
.gs-service-card:hover::before { opacity: 1 !important; }
.gs-service-number {
  color: var(--gs-amber) !important;
  opacity: .9 !important;
  font-family: var(--gs-mono) !important;
  letter-spacing: 1px !important;
}
.gs-service-title {
  margin-bottom: 12px !important;
  padding-bottom: 11px !important;
  border-bottom: 1px solid rgba(134, 239, 172, .14) !important;
}
.gs-service-list { flex: 1 1 auto !important; margin-bottom: 16px !important; }
.gs-service-button {
  margin-top: auto !important;
  align-self: flex-start !important;
  transition: background .15s, color .15s, box-shadow .15s !important;
}
.gs-service-button:hover {
  background: var(--gs-green) !important;
  color: var(--gs-bg) !important;
  box-shadow: 0 0 14px -2px var(--gs-green) !important;
}

/* Elementor-built pages (e.g. /services/): the theme page title was full-bleed left
   while the Elementor content sits in a centred ~1140px column, so the H1 hung off the
   left edge / looked cut off. Constrain the title header to the same column + tidy it. */
.elementor-page .gs-article-head { max-width: 1140px; margin-left: auto !important; margin-right: auto !important; box-sizing: border-box; }
.elementor-page .gs-title { text-transform: uppercase; letter-spacing: 3px; color: var(--gs-green-bright); }

/* ============================================================================
   MOBILE FRAME FIX + phone polish (2026-09-04)
   The home/blog post grid put its lead card's ~494px image into a grid track;
   grid/flex children default to min-width:auto (they refuse to shrink below their
   content), so the track blew past the viewport, stretched the layout viewport and
   zoomed the WHOLE page out on phones ("the frame not right"). Pinning these
   children to min-width:0 lets the image honour its max-width:100% and the columns
   collapse cleanly to the device width. Unconditional — it only bites when content
   would otherwise overflow, so it is safe at every breakpoint.
   ========================================================================== */
.gs-grid, .gs-card, .gs-lead, .gs-card .thumb, .gs-card .body,
.gs-home-hero, .gs-hero-lead, .gs-stats, .gs-values, .gs-team,
.gs-footer-cols, .gs-contact-layout, .gs-layout { min-width: 0; }
.gs-grid > *, .gs-home-hero > *, .gs-stats > *, .gs-footer-cols > * { min-width: 0; }
/* hard guard: on phones nothing may force horizontal scroll / zoom-out (scoped so
   desktop dropdown sub-menus, which overflow right, are never clipped). */
@media (max-width: 900px) { html, body { overflow-x: clip; } }

/* small-screen typographic + spacing tidy-up */
@media (max-width: 560px) {
  #gs-content { padding: 22px 0 40px; }
  .gs-grid { gap: 16px; }
  .gs-lead .title { font-size: 1.35rem; }
  .gs-lead .body { padding: 18px; }
  .gs-section-head { font-size: 11px; letter-spacing: 2px; }
  .gs-card .title { font-size: 1rem; }
}
