/*
Theme Name: FlyMag Dark
Theme URI: https://flymag.com
Description: Dark, article-first redesign of FlyMag. Child theme of FlyMag Pro — inherits every plugin integration, newsletter handler and image pipeline from the parent while replacing the presentation layer entirely.
Author: Arlington North LLC
Author URI: https://flymag.com
Template: FlyMag Theme
Version: 1.0.0
License: GPL v2 or later
Text Domain: flymag-dark
*/

/* ==========================================================================
   FlyMag Dark
   --------------------------------------------------------------------------
   The parent enqueues get_stylesheet_uri(), which resolves to THIS file when
   the child is active — so the parent's 2,000-line light stylesheet never
   loads. That is deliberate: this is a replacement, not a patch, and there is
   no specificity war to fight.
   ========================================================================== */

:root {
  --bg: #06111b;
  --bg-deep: #030a11;
  --surface: #0b1a27;
  --surface-2: #0f2232;
  --surface-3: #12293a;
  --border: #20384c;
  --border-soft: rgba(255,255,255,.08);
  --text: #f6f8fb;
  --text-2: #c8d3dc;
  --muted: #89a0b2;
  --red: #e51e2a;
  --red-2: #ff3846;
  --green: #25b87a;
  --amber: #f4b740;
  --blue: #45a7ff;
  --shadow: 0 18px 50px rgba(0,0,0,.25);
  --radius: 10px;
  --max: 1440px;
  --sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --serif: Georgia, "Times New Roman", serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

body {
  margin: 0;
  color: var(--text);
  background:
    radial-gradient(circle at 75% -20%, rgba(34,85,120,.18), transparent 30%),
    linear-gradient(180deg, #071521 0%, var(--bg) 28%, #050d15 100%);
  background-attachment: fixed;
  font-family: var(--sans);
  line-height: 1.55;
  overflow-x: hidden;
}

a { color: inherit; text-decoration: none; }
a:hover { color: #fff; }
img { display: block; max-width: 100%; height: auto; }
button, input, textarea, select { font: inherit; }
button { cursor: pointer; }
svg { flex: 0 0 auto; }

/* Keyboard focus must stay visible on a dark ground — the browser default
   outline is nearly invisible against these surfaces. */
:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; border-radius: 3px; }

.screen-reader-text {
  position: absolute !important; width: 1px; height: 1px; overflow: hidden;
  clip: rect(1px,1px,1px,1px); white-space: nowrap;
}
.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 999;
  background: var(--red); color: #fff; padding: 10px 16px; font-weight: 800;
}
.skip-link:focus { left: 8px; top: 8px; }

.container { width: min(var(--max), calc(100% - 36px)); margin: 0 auto; }
.muted { color: var(--muted); }
.small { font-size: .82rem; }
.eyebrow { color:#fff; text-transform:uppercase; letter-spacing:.12em; font-size:.73rem; font-weight:800; }

/* ---------- Header ---------- */
.site-header {
  position: sticky; top: 0; z-index: 50;
  background: rgba(4,12,20,.95);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid rgba(255,255,255,.06);
}
.header-main { min-height: 72px; display: flex; align-items: center; gap: 32px; }
.logo {
  display:inline-flex; align-items:baseline; gap:2px; white-space:nowrap;
  font-weight:950; letter-spacing:-.055em; font-size:2rem; line-height:1;
}
.logo .dotcom { font-size:.9rem; letter-spacing:-.04em; color:#d8e3eb; }
.logo .dot { color: var(--red); }
.site-header .logo { margin: 0; }

.main-nav { margin-left:auto; display:flex; gap:24px; align-items:center; }
.main-nav a {
  font-size:.78rem; font-weight:750; color:#d4dfe6;
  text-transform:uppercase; letter-spacing:.035em; white-space:nowrap;
}
.main-nav a:hover, .main-nav a[aria-current] { color:#fff; }
/* This is a <button>, so without an explicit background the browser paints its
   default button face — which on a 34px circle reads as a solid white disc
   with no icon in it. */
.search-icon {
  width:34px; height:34px; display:grid; place-items:center; flex:0 0 auto;
  padding:0; background:transparent;
  border:1px solid var(--border); border-radius:50%; color:#dbe5ec;
}
.search-icon:hover { border-color:#3d5f7c; }
.header-main .mobile-menu { display:none; }

/* Search drawer — hidden until the header search toggle is pressed. */
.header-search { display:none; padding:0 0 14px; }
.header-search.is-open { display:block; }
.header-search form { display:flex; gap:8px; }
.header-search input {
  flex:1; min-width:0; background:#07131e; border:1px solid #31506a; color:#fff;
  border-radius:5px; padding:12px 13px; outline:none;
}

.breaking {
  border-top:1px solid rgba(229,30,42,.28);
  border-bottom:1px solid rgba(229,30,42,.45);
  background:linear-gradient(90deg, rgba(88,5,10,.62), rgba(28,4,7,.75) 45%, rgba(7,15,23,.95));
}
.breaking-inner { min-height:42px; display:flex; align-items:center; gap:16px; }
.breaking-badge {
  flex:0 0 auto; background:var(--red); color:#fff; border-radius:4px;
  padding:7px 11px; font-size:.72rem; font-weight:900; text-transform:uppercase;
}
.breaking-text { font-size:.84rem; color:#f1f5f8; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.breaking-time { color:#ff7982; font-size:.75rem; white-space:nowrap; }
.breaking-link { margin-left:auto; color:#ff525d; font-size:.72rem; font-weight:800; text-transform:uppercase; white-space:nowrap; }

/* ---------- Generic UI ---------- */
.section { margin: 26px 0; }
.section-heading {
  display:flex; justify-content:space-between; align-items:flex-end; gap:16px;
  margin-bottom:12px; padding-bottom:10px; border-bottom:1px solid var(--border-soft);
}
.section-heading h2, .section-heading h3 { margin:0; font-size:1.12rem; text-transform:uppercase; letter-spacing:.035em; }
.section-heading a { color:var(--muted); font-size:.72rem; font-weight:800; text-transform:uppercase; white-space:nowrap; }
.section-heading a:hover { color:#fff; }
.panel {
  background:linear-gradient(180deg, rgba(13,30,44,.98), rgba(8,21,32,.98));
  border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow);
}
.card { overflow:hidden; background:rgba(10,25,37,.9); border:1px solid var(--border); border-radius:var(--radius); }
.card-body { padding:14px; }
.card:hover { border-color:#2f5473; }
.tag {
  display:inline-flex; align-items:center; width:max-content; padding:4px 8px;
  border-radius:4px; background:rgba(229,30,42,.16); border:1px solid rgba(229,30,42,.58);
  color:#ff6872; font-size:.66rem; text-transform:uppercase; font-weight:850; letter-spacing:.035em;
}
.tag.green { color:#63d6a3; border-color:rgba(37,184,122,.45); background:rgba(37,184,122,.12); }
.tag.amber { color:#ffd277; border-color:rgba(244,183,64,.45); background:rgba(244,183,64,.12); }
.tag.blue  { color:#8cc9ff; border-color:rgba(69,167,255,.45); background:rgba(69,167,255,.12); }
.meta { color:var(--muted); font-size:.74rem; text-transform:uppercase; letter-spacing:.03em; }
.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  border:1px solid var(--border); background:#102335; color:#fff; border-radius:5px;
  padding:10px 15px; font-size:.75rem; font-weight:850; text-transform:uppercase; letter-spacing:.03em;
}
.btn.red { background:var(--red); border-color:var(--red); }
.btn.ghost { background:transparent; }
.btn:hover { filter:brightness(1.1); color:#fff; }
.text-link { color:#ff505b; font-size:.75rem; font-weight:800; text-transform:uppercase; }
.text-link:hover { color:#ff7d86; }

/* ---------- Homepage ---------- */
.home-main { padding: 24px 0 44px; }
.lead-grid { display:grid; grid-template-columns:minmax(0, 2fr) minmax(300px, .9fr); gap:16px; }
.lead-story { position:relative; min-height:520px; overflow:hidden; border-radius:var(--radius); border:1px solid var(--border); }
.lead-story img { width:100%; height:100%; min-height:520px; object-fit:cover; position:absolute; inset:0; }
.lead-story::after {
  content:""; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(180deg, rgba(4,10,15,.05) 18%, rgba(4,10,15,.36) 52%, rgba(3,9,15,.96) 100%);
}
.lead-copy { position:absolute; z-index:2; left:30px; right:30px; bottom:28px; max-width:900px; }
.lead-copy h1, .lead-copy h2 { margin:10px 0 10px; font-size:clamp(2rem, 4vw, 4rem); line-height:1.02; letter-spacing:-.045em; }
.lead-copy p { margin:0 0 18px; max-width:780px; color:#d4dee5; font-size:1.05rem; }
.lead-meta { display:flex; gap:16px; align-items:center; flex-wrap:wrap; }

.headline-list { padding:18px; }
.headline-list h2 { margin:0 0 8px; font-size:1rem; text-transform:uppercase; }
.headline-item { display:grid; grid-template-columns:92px 1fr; gap:12px; padding:13px 0; border-top:1px solid var(--border-soft); align-items:start; }
.headline-item img { width:92px; height:66px; object-fit:cover; border-radius:5px; }
.headline-item h3 { margin:0 0 5px; font-size:.93rem; line-height:1.25; font-weight:700; }

.top-story-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.story-card { display:flex; flex-direction:column; }
.story-card img { width:100%; height:170px; object-fit:cover; }
.story-card h3 { margin:8px 0 8px; font-size:1.03rem; line-height:1.25; font-weight:700; }

.tools-grid { display:grid; grid-template-columns:1.65fr .95fr; gap:16px; align-items:start; }
.tracker-panel { padding:18px; position:relative; overflow:hidden; min-height:390px; }
.tracker-panel::before {
  content:""; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(circle at 23% 58%, rgba(41,118,171,.22), transparent 16%),
    radial-gradient(circle at 72% 42%, rgba(41,118,171,.18), transparent 18%),
    linear-gradient(20deg, transparent 49.3%, rgba(104,149,177,.12) 49.5%, rgba(104,149,177,.12) 50.5%, transparent 50.7%),
    linear-gradient(90deg, transparent 49.3%, rgba(104,149,177,.08) 49.5%, rgba(104,149,177,.08) 50.5%, transparent 50.7%);
  background-size:auto, auto, 92px 92px, 92px 92px;
}
.tracker-head, .tracker-search, .tracker-map, .tracker-actions { position:relative; z-index:2; }
.tracker-head { display:flex; justify-content:space-between; gap:14px; align-items:center; }
.tracker-head h2 { margin:0; font-size:1.15rem; text-transform:uppercase; }
.tracker-search { display:flex; gap:8px; margin:16px 0; }
.tracker-search input { flex:1; min-width:0; background:#07131e; border:1px solid #31506a; color:#fff; border-radius:5px; padding:12px 13px; outline:none; }
.tracker-search input::placeholder { color:#6f8698; }
.tracker-map { height:232px; border:1px solid #25445c; border-radius:7px; background:rgba(3,12,20,.64); overflow:hidden; position:relative; }
.tracker-map svg { width:100%; height:100%; opacity:.65; display:block; }
.plane { position:absolute; color:#ffc400; font-size:19px; text-shadow:0 1px 8px rgba(255,196,0,.35); transform:rotate(var(--r,0deg)); }
.tracker-actions { margin-top:12px; display:flex; gap:10px; align-items:center; flex-wrap:wrap; }

.route-watch { padding:18px; }
.route-watch h2 { margin:0 0 10px; text-transform:uppercase; font-size:1.05rem; }
.route-row { display:grid; grid-template-columns:88px 1fr auto; gap:12px; align-items:center; padding:14px 0; border-top:1px solid var(--border-soft); }
.route-row:hover { background:rgba(255,255,255,.02); }
.route-code { font-weight:900; letter-spacing:.04em; font-size:1rem; }
.route-code span { color:#ef6872; margin:0 5px; }
.route-row p { margin:3px 0 0; color:var(--muted); font-size:.76rem; }
.route-row .chev { color:var(--muted); }

.coverage-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; align-items:start; }
.coverage-column { padding:16px; }
.coverage-column .section-heading { margin-bottom:2px; }
.mini-story { display:grid; grid-template-columns:92px 1fr; gap:12px; align-items:center; padding:11px 0; border-top:1px solid var(--border-soft); }
.mini-story img { width:92px; height:64px; object-fit:cover; border-radius:5px; }
.mini-story h3 { margin:0 0 4px; font-size:.9rem; line-height:1.25; font-weight:700; }

.latest-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
.latest-card { display:grid; grid-template-columns:140px 1fr; gap:14px; padding:12px; align-items:start; }
.latest-card img { width:140px; height:105px; object-fit:cover; border-radius:5px; }
.latest-card h3 { margin:4px 0 6px; font-size:.98rem; line-height:1.28; font-weight:700; }

.newsletter-strip {
  display:grid; grid-template-columns:1fr 1fr; gap:24px; align-items:center; padding:26px;
  border:1px solid #224663; border-radius:var(--radius);
  background:linear-gradient(120deg,#0a2031,#0b2b41 58%,#0e1824);
}
.newsletter-strip h2 { margin:3px 0 7px; font-size:1.65rem; }
.newsletter-strip p { margin:0; color:var(--text-2); }

/* Aircraft reference chips. Carried over from the parent homepage because the
   section still earns its place, restyled for the dark ground. */
.home-ac-grid { display:flex; flex-wrap:wrap; gap:8px; }
.home-ac-chip {
  display:inline-flex; align-items:baseline; gap:7px; padding:8px 12px;
  background:#0c1b27; border:1px solid #263f52; border-radius:5px; font-size:.82rem;
}
.home-ac-chip:hover { border-color:#3d6484; }
.home-ac-chip .mfr { color:var(--muted); font-size:.7rem; text-transform:uppercase; letter-spacing:.05em; }
.home-ac-chip .code { color:#7dc4ff; font-size:.7rem; font-weight:800; }

/* ---------- Article ---------- */
.article-main { padding:28px 0 48px; }
.article-grid { display:grid; grid-template-columns:minmax(0, 900px) minmax(290px, 360px); gap:28px; align-items:start; justify-content:center; }
.breadcrumbs { color:var(--muted); font-size:.74rem; margin-bottom:14px; }
.breadcrumbs a:hover { color:#fff; }
.article-header h1 { font-size:clamp(1.95rem,3.4vw,3.05rem); line-height:1.06; letter-spacing:-.035em; margin:11px 0 12px; max-width:900px; }
.article-deck { font-size:1.15rem; color:#b9c9d5; max-width:830px; margin:0 0 19px; }
.byline-row { display:flex; align-items:center; gap:13px; padding:14px 0 18px; border-bottom:1px solid var(--border-soft); }
.avatar { width:42px; height:42px; border-radius:50%; display:grid; place-items:center; background:#274059; border:1px solid #42617b; font-weight:900; overflow:hidden; flex:0 0 auto; font-size:.85rem; }
.avatar img { width:100%; height:100%; object-fit:cover; border-radius:50%; }
.byline-copy strong { display:block; font-size:.88rem; }
.byline-copy span { color:var(--muted); font-size:.75rem; }
.byline-spacer { flex:1; }
.share-mini { display:flex; gap:8px; }
.icon-btn { width:36px; height:36px; border-radius:50%; display:grid; place-items:center; border:1px solid var(--border); background:#0a1722; color:#dbe5ec; }
.icon-btn:hover { border-color:#3d5f7c; background:#0f2130; }

.hero-media { margin:18px 0 8px; }
.hero-media img { width:100%; border-radius:8px; border:1px solid var(--border); max-height:620px; object-fit:cover; }
.caption { color:#6f8798; font-size:.72rem; margin-top:6px; }

.article-content { font-family:var(--serif); font-size:1.08rem; color:#dfe7ec; }
.article-content > p { margin:0 0 1.2em; }
.article-content h2 { font-family:var(--sans); font-size:1.55rem; line-height:1.18; margin:1.6em 0 .55em; letter-spacing:-.02em; color:#fff; }
.article-content h3 { font-family:var(--sans); font-size:1.2rem; margin:1.4em 0 .5em; color:#fff; }
.article-content ul, .article-content ol { margin:0 0 1.2em 1.2em; padding:0; }
.article-content li { margin:0 0 .45em; }
.article-content a { color:#7dc4ff; text-decoration:underline; text-decoration-color:rgba(125,196,255,.35); text-underline-offset:3px; }
.article-content a:hover { text-decoration-color:#7dc4ff; }
.article-content strong { color:#fff; }
.article-content img { border-radius:7px; border:1px solid var(--border); margin:6px 0; }
/* ...but only editorial images.
   Leaflet renders every map tile as an <img>, and the route map is injected
   into the_content, so the rule above was putting a 1px #20384c border and a
   7px radius on each of a map's ~12 tiles. That is what drew the grid across
   every route map — a colour lighter than both the ocean (#090909) and the
   land (#262626) in Carto's dark tileset, at exactly tile spacing. Plugin
   widgets all style their own imagery. */
.article-content .leaflet-container img,
.article-content .flymag-rmap img,
.article-content .flymag-recommendation img,
.article-content .apw img,
.article-content .flymag-airline-card img,
.article-content .flymag-airport-card img,
.article-content .flymag-nl img { border:0; border-radius:0; margin:0; box-shadow:none; }
.article-content figure { margin:22px 0; }
.article-content figcaption { color:#6f8798; font-size:.72rem; margin-top:6px; font-family:var(--sans); }
.article-content blockquote {
  margin:22px 0; padding:14px 20px; border-left:4px solid var(--red);
  background:linear-gradient(90deg,rgba(229,30,42,.09),rgba(12,29,42,.75));
  border-radius:0 8px 8px 0; color:#e6eef3;
}
.article-content blockquote p:last-child { margin-bottom:0; }
.article-content table { width:100%; border-collapse:collapse; font-family:var(--sans); font-size:.86rem; margin:18px 0; display:block; overflow-x:auto; }
.article-content th, .article-content td { border:1px solid var(--border); padding:9px 11px; text-align:left; }
.article-content th { background:#0f2232; text-transform:uppercase; font-size:.72rem; letter-spacing:.04em; }
.article-content code { background:#0c1b27; border:1px solid #263f52; border-radius:4px; padding:1px 5px; font-size:.9em; }

.article-image { margin:22px 0; }
.article-image img { border-radius:7px; border:1px solid var(--border); }
.bottom-line { padding:18px 20px; border-left:4px solid var(--red); background:linear-gradient(90deg,rgba(229,30,42,.09),rgba(12,29,42,.75)); border-radius:0 8px 8px 0; }
.bottom-line h2 { margin-top:0; }
.tags { display:flex; flex-wrap:wrap; gap:7px; padding-top:12px; border-top:1px solid var(--border-soft); align-items:center; }
.tags a { font-family:var(--sans); font-size:.72rem; color:#a7b7c4; background:#0c1b27; border:1px solid #263f52; padding:6px 9px; border-radius:4px; }
.tags a:hover { border-color:#3d6484; color:#fff; }
.share-bar { display:flex; gap:8px; flex-wrap:wrap; margin:20px 0; }
.share-bar a, .share-bar button { font-family:var(--sans); font-size:.76rem; border:1px solid #2d475b; padding:8px 11px; border-radius:5px; background:#0a1722; color:#dbe5ec; display:inline-flex; align-items:center; gap:7px; }
.share-bar a:hover, .share-bar button:hover { border-color:#3d6484; color:#fff; }

.more-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
.more-grid .story-card img { height:150px; }

.sidebar { position:sticky; top:130px; display:grid; gap:15px; align-content:start; }
.sidebar-panel { padding:15px; }
.sidebar-panel h3 { margin:0 0 10px; font-size:.9rem; text-transform:uppercase; letter-spacing:.03em; }
.sidebar-tracker input { width:100%; padding:10px 11px; background:#06131d; color:#fff; border:1px solid #31506a; border-radius:4px; margin-bottom:8px; }
.sidebar-tracker .btn { width:100%; }
.sidebar-list .headline-item { grid-template-columns:82px 1fr; }
.sidebar-list .headline-item img { width:82px; height:58px; }
.sidebar-related .mini-story { grid-template-columns:88px 1fr; }
.sidebar-related .mini-story img { width:88px; }

/* ---------- Archives, search, pagination ---------- */
.archive-main { padding:24px 0 44px; }
.archive-head { padding:22px 0 18px; border-bottom:1px solid var(--border-soft); margin-bottom:20px; }
.archive-head h1 { margin:6px 0 8px; font-size:clamp(2rem,4vw,3.2rem); letter-spacing:-.04em; line-height:1.04; }
.archive-head p { margin:0; color:var(--text-2); max-width:760px; }
.archive-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.archive-layout { display:grid; grid-template-columns:minmax(0,1fr) minmax(290px,340px); gap:28px; align-items:start; }

.pagination .page-numbers,
.pagination-wrap .page-numbers {
  display:inline-grid; place-items:center; min-width:40px; height:40px; padding:0 12px;
  border:1px solid var(--border); border-radius:5px; background:#0a1722;
  font-size:.82rem; font-weight:800; color:#cddae3;
}
.pagination .page-numbers:hover,
.pagination-wrap .page-numbers:hover { border-color:#3d6484; color:#fff; }
.pagination .page-numbers.current,
.pagination-wrap .page-numbers.current { background:var(--red); border-color:var(--red); color:#fff; }
.pagination .page-numbers.dots,
.pagination-wrap .page-numbers.dots { border-color:transparent; background:transparent; color:var(--muted); }

.no-results { padding:40px 0 60px; text-align:center; }
.no-results h1 { font-size:clamp(2rem,5vw,3.4rem); letter-spacing:-.04em; margin:0 0 10px; }
.no-results p { color:var(--text-2); margin:0 auto 22px; max-width:520px; }
.no-results form { display:flex; gap:8px; max-width:460px; margin:0 auto; }
.no-results input {
  flex:1; min-width:0; background:#07131e; border:1px solid #31506a; color:#fff;
  border-radius:5px; padding:12px 13px;
}

/* Author box */
.author-box { display:grid; grid-template-columns:64px 1fr; gap:16px; padding:18px; margin:26px 0; }
.author-box .avatar { width:64px; height:64px; font-size:1.1rem; }
.author-box h3 { margin:0 0 4px; font-size:1.05rem; }
.author-box p { margin:0 0 8px; color:var(--text-2); font-size:.88rem; }

/* Page template */
.page-main { padding:28px 0 48px; }
.page-narrow { max-width:900px; margin:0 auto; }
.page-main h1 { font-size:clamp(2.2rem,4.5vw,3.6rem); letter-spacing:-.04em; line-height:1.04; margin:8px 0 18px; }

/* ---------- Comments ---------- */
.comments-area { margin-top:26px; }
.comments-area .comment-count { display:flex; align-items:center; justify-content:space-between; padding-bottom:10px; border-bottom:1px solid var(--border-soft); }
.comment-list { list-style:none; margin:0; padding:0; }
.comment-list ol.children { list-style:none; margin:0 0 0 26px; padding:0; }
.comment-body { display:grid; grid-template-columns:46px 1fr; gap:13px; padding:18px 0; border-bottom:1px solid var(--border-soft); }
.comment-body .avatar { width:42px; height:42px; }
.comment-meta { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.comment-meta .fn, .comment-author { font-size:.87rem; font-weight:800; font-style:normal; }
.comment-meta time, .comment-metadata { color:var(--muted); font-size:.7rem; }
.comment-content p { margin:7px 0; color:#cbd7df; font-size:.88rem; }
.comment-reply-link { color:#ff5661; font-size:.72rem; font-weight:700; }
.comment-respond { margin-top:20px; padding:16px; }
.comment-respond .comment-reply-title { margin:0 0 12px; font-size:1rem; }
.comment-form textarea, .comment-form input[type="text"], .comment-form input[type="email"], .comment-form input[type="url"] {
  width:100%; background:#07141e; border:1px solid #2f495d; color:#fff; border-radius:5px; padding:11px 12px; margin-bottom:10px;
}
.comment-form textarea { min-height:120px; resize:vertical; }
.comment-form .submit {
  border:1px solid var(--red); background:var(--red); color:#fff; border-radius:5px;
  padding:11px 18px; font-size:.75rem; font-weight:850; text-transform:uppercase; letter-spacing:.03em;
}
.comment-form .comment-notes, .comment-form .logged-in-as { color:var(--muted); font-size:.78rem; }

/* ---------- Footer ---------- */
.site-footer { border-top:1px solid #1e3548; background:linear-gradient(180deg,#071420,#030a11); margin-top:40px; }
.footer-grid { display:grid; grid-template-columns:1.35fr repeat(4,1fr); gap:36px; padding:38px 0 30px; }
.footer-logo { font-size:1.55rem; margin-bottom:10px; }
.footer-about p { color:#8fa2b1; font-size:.8rem; margin:0 0 14px; }
.social-row { display:flex; gap:8px; flex-wrap:wrap; }
.social-row a { width:30px; height:30px; display:grid; place-items:center; border-radius:50%; border:1px solid #294357; color:#cad6df; }
.social-row a:hover { border-color:#3d6484; color:#fff; }
.footer-col h4 { margin:0 0 10px; font-size:.78rem; text-transform:uppercase; letter-spacing:.04em; }
.footer-col a { display:block; color:#91a5b4; font-size:.78rem; margin:6px 0; }
.footer-col a:hover { color:#fff; }
.footer-bottom { border-top:1px solid rgba(255,255,255,.06); padding:15px 0 20px; display:flex; justify-content:space-between; gap:12px; color:#708798; font-size:.7rem; }

/* ==========================================================================
   Plugin surfaces
   --------------------------------------------------------------------------
   The FlyMag Airlines plugin ships ~4,600 lines of light-theme CSS with
   hard-coded colours. Restyling all of it would fork the plugin and break on
   every update. Instead these rules flip only what actually shows against a
   dark ground — panel fills, borders, and text that would otherwise render
   near-black on near-black. Structure and spacing stay the plugin's own.
   ========================================================================== */
.flymag-rmap, .flymag-rmap-block, .flymag-share-widget, .flymag-nl,
.rw-entry, .rw-directory, .ac-card, .ac-directory,
.flymag-airline-card, .flymag-airport-card, .flymag-fleet-table {
  background:linear-gradient(180deg, rgba(13,30,44,.98), rgba(8,21,32,.98)) !important;
  border-color:var(--border) !important;
  color:var(--text-2) !important;
}
.flymag-rmap h2, .flymag-rmap h3, .flymag-share-widget h2, .flymag-share-widget h3,
.flymag-nl h2, .flymag-nl h3, .rw-entry h2, .rw-entry h3,
.ac-card h2, .ac-card h3, .flymag-airline-card h2, .flymag-airline-card h3,
.flymag-airport-card h2, .flymag-airport-card h3 { color:#fff !important; }

.flymag-nl-input, .flymag-nl-input-name, .fsw-copy input,
.rw-directory input, .rw-directory select, .ac-directory input, .ac-directory select {
  background:#06131d !important; color:#fff !important; border-color:#31506a !important;
}
.flymag-nl-input::placeholder { color:#6f8698 !important; }

.fsw-net, .rw-entry, .ac-card, .flymag-rmap-legend {
  background:rgba(10,25,37,.9) !important; border-color:var(--border) !important;
}
.fsw-net-name, .rw-route, .ac-card-name { color:#fff !important; }
.fsw-net-text, .rw-meta, .ac-card-facts, .flymag-rmap-legend { color:var(--muted) !important; }

.flymag-fleet-table th { background:#0f2232 !important; color:#fff !important; }
.flymag-fleet-table td, .flymag-fleet-table th { border-color:var(--border) !important; }

/* Leaflet renders white by default; darken the frame so the live map and the
   in-article route map sit in the page rather than punching a hole in it. */
/* The grid over every map was tile seams.
   
   Leaflet places tiles at fractional pixel offsets, so adjacent 256px tiles can
   land a half pixel apart and leave a hairline of the container showing through.
   At 256px intervals across a map that reads as a drawn grid.
   
   Two things are needed, and the second one is the reason an earlier attempt at
   this did nothing. Leaflet assigns each tile's width and height as an INLINE
   style in GridLayer._initTile, so a plain class rule cannot resize them — the
   overlap only takes effect with !important.
   
   The background is sampled from the tileset itself: Carto dark_all draws water
   at #090909 and land at #262626, so #090909 is what a seam should blend into. */
.leaflet-container { background:#090909 !important; }
.leaflet-container img.leaflet-tile { max-width:none !important; }
.leaflet-popup-content-wrapper, .leaflet-popup-tip {
  background:#0d1f2d !important; color:var(--text) !important;
}
.leaflet-bar a { background:#0f2232 !important; color:#dbe5ec !important; border-color:var(--border) !important; }

/* WordPress core alignment classes used inside post content */
.alignleft { float:left; margin:6px 20px 14px 0; }
.alignright { float:right; margin:6px 0 14px 20px; }
.aligncenter { margin-left:auto; margin-right:auto; }
.alignwide, .alignfull { max-width:none; }
.wp-caption { max-width:100%; }
.wp-caption-text { color:#6f8798; font-size:.72rem; margin-top:6px; font-family:var(--sans); }
.sticky, .gallery-caption, .bypostauthor { display:block; }


/* ---------- Bits the templates need that the concept did not draw ---------- */

/* Posts without a featured image. The concept assumed every story has art;
   1,700 of them do not all have it, and a missing <img> would collapse the
   grid row it sits in. This keeps the geometry and reads as intentional. */
.thumb-empty {
  display:grid; place-items:center; width:100%; height:100%; min-height:64px;
  background:linear-gradient(140deg,#0d2030,#091825); border:1px solid var(--border);
  border-radius:5px; color:#2f5473;
}
.story-card .thumb-empty { min-height:170px; border-radius:0; border:0; }
.latest-card .thumb-empty { min-height:105px; }
.lead-story .thumb-empty { position:absolute; inset:0; min-height:520px; border-radius:0; }

/* Two different pagination shapes are in play. the_posts_pagination(), used by
   this theme's archives, wraps its links in .navigation.pagination > .nav-links.
   The plugin's Route Watch and aircraft directories call paginate_links()
   directly inside .pagination-wrap, which emits bare anchors with no list —
   so styling only the first shape left those pages with an unstyled
   "1 2 3 ... 18 Next" line of text.
   so the flex row belongs on the inner element, not the <nav>. */
.pagination { margin:32px 0 8px; }
.pagination .nav-links,
.pagination-wrap { display:flex; flex-wrap:wrap; gap:7px; justify-content:center; margin:32px 0 8px; }
.pagination .screen-reader-text { position:absolute !important; }
/* paginate_links() labels these "« Previous" and "Next »". Keeping the
   words is clearer than swapping in arrows, and the row wraps on narrow
   screens anyway. */
.pagination-wrap .prev,
.pagination-wrap .next { font-weight:800; }

.home-ac-chip .name { font-weight:700; }
.page-links { margin:20px 0; display:flex; gap:7px; flex-wrap:wrap; font-size:.8rem; }

/* Inline SVG icons sit on the text baseline by default, which leaves them
   floating a couple of pixels high inside buttons and social pills. */
.ico { display:block; }
.btn .ico, .social-row .ico, .icon-btn .ico, .search-icon .ico { display:block; }

/* Cards are flex columns so the body can grow; without this the meta line in a
   short-headline card floats up and the row of cards loses its baseline. */
.story-card .card-body { display:flex; flex-direction:column; gap:2px; flex:1; }
.story-card .card-body h3 { flex:1; }
.headline-item:last-child, .mini-story:last-child { padding-bottom:0; }

/* Anything the plugin renders inside post content is sans, not the body serif. */
.article-content .flymag-rmap,
.article-content .flymag-share-widget,
.article-content .flymag-nl,
.article-content .flymag-airline-card,
.article-content .flymag-airport-card { font-family:var(--sans); }


/* ==========================================================================
   Fix 1 — Newsletter, in every context
   --------------------------------------------------------------------------
   The plugin's stylesheet is built for a white page: the popup shell is #fff,
   the two list rows are #f7f9fc with #2c3e50 text, and the submit button is
   navy. On the dark ground that produced a half-converted card — dark shell,
   white rows, off-brand button. These restyle the component properly rather
   than only recolouring its outer box.
   ========================================================================== */

.flymag-nl-popup-backdrop { background: rgba(2,8,14,.78) !important; }
.flymag-nl-popup {
  background: linear-gradient(180deg,#102539,#0a1a27) !important;
  border: 1px solid var(--border) !important;
  box-shadow: 0 28px 80px rgba(0,0,0,.6) !important;
}
.flymag-nl-popup .flymag-nl { background: transparent !important; }
.flymag-nl-popup-close {
  background: rgba(255,255,255,.08) !important;
  color: #dbe5ec !important;
}
.flymag-nl-popup-close:hover { background: rgba(255,255,255,.18) !important; }

.flymag-nl-title { color: #fff !important; }
.flymag-nl-blurb { color: var(--text-2) !important; }
.flymag-nl-fine  { color: var(--muted) !important; }

.flymag-nl-input, .flymag-nl-input-name {
  background: #06131d !important;
  border: 1px solid #31506a !important;
  color: #fff !important;
}
.flymag-nl-input::placeholder { color: #6f8698 !important; }
.flymag-nl-input:focus { border-color: var(--blue) !important; box-shadow: none !important; }

.flymag-nl-list {
  background: #0c1e2d !important;
  border: 1px solid #27455e !important;
}
.flymag-nl-list:hover { border-color: #3d6484 !important; }
.flymag-nl-list input[type="checkbox"] { accent-color: var(--red) !important; }
.flymag-nl-list-label strong { color: #eef4f8 !important; }
.flymag-nl-list-desc { color: var(--muted) !important; }
/* Selected rows should read as chosen, which on this palette means the brand
   red, not the plugin's navy. */
.flymag-nl-list input[type="checkbox"]:checked ~ .flymag-nl-list-label strong { color: #ff6872 !important; }
.flymag-nl-list:has(input:checked) { border-color: rgba(229,30,42,.55) !important; background: #14212c !important; }

.flymag-nl-submit {
  background: var(--red) !important;
  border-color: var(--red) !important;
  color: #fff !important;
}
.flymag-nl-submit:hover { filter: brightness(1.1); }
.flymag-nl-message { color: var(--text-2) !important; }

/* ==========================================================================
   Fix 2 — Tracker map
   ========================================================================== */


/* ==========================================================================
   Fix 3 — Route Watch rows
   --------------------------------------------------------------------------
   The badge column was a fixed 88px sized against the concept's placeholder
   copy ("New route", "Increase"). Real change types are longer — "Seasonal
   resumption", "Frequency increase" — so the badge overflowed its track and
   sat on top of the route code. The labels are now shortened at the source
   (flymag_dark_short_change_label) and the column is sized to fit them.
   ========================================================================== */

.route-row {
  grid-template-columns: 112px minmax(0, 1fr) 16px;
  align-items: start;
  gap: 14px;
}
.route-row .tag {
  white-space: nowrap;
  font-size: .6rem;
  padding: 4px 7px;
  margin-top: 1px;
  justify-self: start;
}
.route-row .route-code { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.route-row p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.route-row .chev { align-self: center; }


/* ==========================================================================
   Parent theme palette variables
   --------------------------------------------------------------------------
   The parent defines --accent-color, --text-primary and --text-secondary on
   :root, and plugin stylesheets reference them — the article recommendation
   cards colour their label, title and meta entirely from these. Because this
   child replaces the parent's stylesheet rather than extending it, those
   variables were undefined, so those rules fell back to inherited or initial
   values. That is why the related-article cards rendered as pale boxes.

   Redefining the same names with dark-appropriate values fixes every plugin
   that reads them, including ones not yet looked at.
   ========================================================================== */
:root {
  --primary-color: #7fb4dd;
  --secondary-color: #5aa2e0;
  --accent-color: #5aa2e0;
  --success-color: #25b87a;
  --warning-color: #f4b740;
  --danger-color: #ff3846;
  --background: #06111b;
  --card-bg: #0b1a27;
  --text-primary: #f6f8fb;
  --text-secondary: #a8bccb;
  --footer-bg: #030a11;
  --footer-text: #cad6df;
}

/* ==========================================================================
   Airline / airport cards inside an article
   --------------------------------------------------------------------------
   The plugin paints these #f8fafc-to-white with #888 and #555 text. The
   earlier override changed only the outer background, which left grey-on-dark
   body text that was hard to read, and a hover state that flooded the card
   with #f0f4f8.
   ========================================================================== */
.flymag-airline-card,
.flymag-airport-card {
  background: linear-gradient(135deg, #10263a 0%, #0a1a27 100%) !important;
  border-left: 4px solid var(--red) !important;
  border-top: 1px solid var(--border) !important;
  border-right: 1px solid var(--border) !important;
  border-bottom: 1px solid var(--border) !important;
}
.airline-card-link, .airport-card-link { color: inherit !important; }
/* Hover should read as a lift, not a lightbox. */
.airline-card-link:hover,
.airport-card-link:hover { background: rgba(255,255,255,.045) !important; }

.airline-card-title, .airport-card-title { color: #fff !important; }
.airline-card-codes, .airline-card-founded,
.airport-card-codes, .airport-card-founded { color: var(--muted) !important; }
.airline-card-stats, .airport-card-stats { color: #c3d2dd !important; }
.airline-card-iata, .airport-card-iata { color: #8fd2ff !important; }
.airline-card-more, .airport-card-more { color: #ff6872 !important; font-weight: 800; }

/* Carrier logos are supplied on white, so the tile stays light on purpose —
   only its border is brought into the palette. */
.airline-card-logo-wrap, .airport-card-logo-wrap {
  border-color: #2b4357 !important;
  box-shadow: 0 2px 10px rgba(0,0,0,.35);
}
.airline-card-status {
  background: rgba(37,184,122,.14) !important;
  color: #63d6a3 !important;
  border: 1px solid rgba(37,184,122,.4) !important;
}
.airline-card-lowcost {
  background: rgba(244,183,64,.14) !important;
  color: #ffd277 !important;
  border: 1px solid rgba(244,183,64,.4) !important;
}

/* ==========================================================================
   In-article related cards (flymag-article-recommendations)
   ========================================================================== */
.flymag-recommendation {
  background: linear-gradient(135deg, #10263a 0%, #0a1a27 100%) !important;
  border-left: 4px solid #3f7fb5 !important;
  border-top: 1px solid var(--border);
  border-right: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  border-radius: 0 8px 8px 0;
}
.flymag-recommendation:hover { background: linear-gradient(135deg, #143049 0%, #0d2030 100%) !important; }
/* The card is UI, so its text takes the interface font — without this the
   headline inherits the article's Georgia and reads as a pull-quote.
   Named elements only: a universal selector here also captured the <i> tags
   the meta row uses for its folder and calendar icons, and overriding their
   font-family replaces the glyphs with tofu boxes. */
.flymag-recommendation,
.flymag-recommendation .recommendation-label,
.flymag-recommendation .recommendation-title,
.flymag-recommendation .recommendation-meta,
.flymag-recommendation .recommendation-meta span,
.flymag-recommendation a { font-family: var(--sans) !important; }
.flymag-recommendation:after { display: none; }
.recommendation-link { color: inherit !important; }
/* display:flex from the plugin makes this span fill the row, which is why a
   background on it rendered as a full-width band rather than a chip. */
.recommendation-label {
  display: inline-flex !important;
  width: max-content;
  background: rgba(90,162,224,.14) !important;
  color: #9ccdf5 !important;
  border: 1px solid rgba(90,162,224,.38);
  border-radius: 4px;
  padding: 4px 9px !important;
  font-size: .64rem !important;
  font-weight: 800 !important;
  letter-spacing: .08em;
  margin-bottom: 10px !important;
}
.recommendation-label:before { display: none !important; }
.recommendation-title {
  color: #fff !important;
  font-size: 1.02rem !important;
  font-weight: 750 !important;
  line-height: 1.32 !important;
  letter-spacing: -.005em;
}
.recommendation-link:hover .recommendation-title { color: #8fd2ff !important; }
.recommendation-meta, .recommendation-meta span, .recommendation-meta i { color: var(--muted) !important; }
.recommendation-image img { border-color: #2b4357 !important; }

/* ==========================================================================
   Route map
   --------------------------------------------------------------------------
   The basemap itself is now Carto's dark_all tileset, switched via the
   flymag_rmap_tiles filter in functions.php. What is left here is the frame
   around it: header, legend and controls.
   ========================================================================== */
.flymag-rmap-block { background: #081720 !important; border: 1px solid var(--border) !important; border-radius: 8px; overflow: hidden; }
.flymag-rmap-title { color: #fff !important; }
.flymag-rmap-legend { background: #0b1c28 !important; border-top: 1px solid var(--border) !important; color: var(--text-2) !important; }
.flymag-rmap-legend a { color: #cfe0ec !important; }
.flymag-rmap-legend a:hover { color: #fff !important; }
.flymag-rmap-loading { color: var(--muted) !important; }
.flymag-rmap-pin-label,
.flymag-rmap .leaflet-popup-content-wrapper { background: rgba(10,26,39,.96) !important; color: #eaf2f7 !important; }

/* ==========================================================================
   Homepage tracker map
   --------------------------------------------------------------------------
   The graticule is gone: at this size a 30-degree grid read as a screen-door
   pattern laid over the panel rather than as a map. The routes now sit on a
   soft wash instead, which is what the panel was reaching for.
   ========================================================================== */
.tracker-map {
  height: 264px;
  background: radial-gradient(ellipse at 50% 45%, #123449 0%, #0a1c29 58%, #06131d 100%);
}
.tm-arc { filter: drop-shadow(0 0 6px rgba(120,200,255,.35)); }
.tm-dot { fill: #ff3846; filter: url(#fm-glow); }
.tm-halo { fill: none; stroke: #ff3846; stroke-opacity: .35; stroke-width: 1.2; }
.tm-plane { fill: #ffc400; stroke: rgba(3,10,17,.75); stroke-width: .8; }
.tm-code {
  fill: #dbe9f3;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 800;
  letter-spacing: .06em;
  paint-order: stroke;
  stroke: rgba(3,10,17,.9);
  stroke-width: 3.5px;
}

/* The dashes crawl along each route. Motion is small and slow on purpose; it
   suggests movement without turning the panel into a carousel. */
@media (prefers-reduced-motion: no-preference) {
  .tm-arc { animation: fm-crawl 3.2s linear infinite; }
  @keyframes fm-crawl { to { stroke-dashoffset: -26; } }
}


/* ==========================================================================
   Links inside plugin widgets
   --------------------------------------------------------------------------
   .article-content a is underlined, which is right for prose links and wrong
   for everything the plugin injects into the flow. The airline card ended up
   with an underline under the carrier name, the codes, the fleet line, the
   founding year and the call to action — five underlines in one small box.
   These widgets are UI, not body copy, so the rule is lifted for them.
   ========================================================================== */
.article-content .flymag-airline-card a,
.article-content .flymag-airport-card a,
.article-content .flymag-recommendation a,
.article-content .flymag-rmap-block a,
.article-content .flymag-share-widget a,
.article-content .flymag-nl a,
.article-content .apw a,
.article-content .flymag-fleet-table a { text-decoration: none; }

.article-content .flymag-airline-card a:hover,
.article-content .flymag-airport-card a:hover,
.article-content .flymag-recommendation a:hover { color: #8fd2ff; }

/* The one link that should still look like a link is the card's CTA. */
.airline-card-more, .airport-card-more { text-decoration: none !important; }
.airline-card-more:hover, .airport-card-more:hover { text-decoration: underline !important; }

/* ==========================================================================
   Share widget — collapsed by default
   --------------------------------------------------------------------------
   theme.js moves everything below each network's head into .fsw-net-body and
   toggles .is-open. Until that runs the panels are simply open, so a reader
   without JS loses nothing.
   ========================================================================== */
.flymag-share-widget { padding: 16px !important; }
.fsw-head { margin-bottom: 10px; }
.fsw-networks { display: grid; gap: 8px; }

.fsw-collapsible { border-radius: 8px !important; overflow: hidden; }
.fsw-collapsible .fsw-net-head {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 14px; cursor: pointer; margin: 0;
  user-select: none;
}
.fsw-collapsible .fsw-net-head:hover { background: rgba(255,255,255,.04); }
.fsw-collapsible .fsw-net-name { flex: 1; }

/* Chevron, rotated when open. Drawn in CSS so it needs no icon font. */
.fsw-collapsible .fsw-net-head::after {
  content: ""; flex: 0 0 auto; width: 8px; height: 8px; margin-left: 4px;
  border-right: 2px solid var(--muted); border-bottom: 2px solid var(--muted);
  transform: rotate(45deg); transition: transform .18s ease;
}
.fsw-collapsible.is-open .fsw-net-head::after { transform: rotate(-135deg); }

.fsw-collapsible .fsw-net-body { display: none; padding: 0 14px 14px; }
.fsw-collapsible.is-open .fsw-net-body { display: block; }

.fsw-net-text {
  background: #06131d !important;
  border: 1px solid #2f495d !important;
  color: #dbe5ec !important;
  border-radius: 6px !important;
}
.fsw-net-badge {
  background: rgba(255,255,255,.06) !important;
  color: var(--muted) !important;
  border: 1px solid var(--border) !important;
}

/* ==========================================================================
   AirlinePics widget
   --------------------------------------------------------------------------
   Served by airlinepics.com/widget/embed.js, which injects its own stylesheet
   built for a white page: #fff panel, #1a202c title, #718096 meta. On this
   ground the heading was black on near-black. We cannot change what it ships,
   so it is restyled from here.
   ========================================================================== */
.apw {
  background: linear-gradient(180deg, rgba(13,30,44,.98), rgba(8,21,32,.98)) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  padding: 16px !important;
  margin: 26px 0 !important;
}
.apw-header { border-bottom: 1px solid var(--border-soft); padding-bottom: 10px; margin-bottom: 12px; }
.apw-title {
  color: #fff !important;
  font-family: var(--sans) !important;
  font-size: 1.05rem !important;
  font-weight: 800 !important;
  letter-spacing: .02em;
}
.apw-card {
  background: rgba(10,25,37,.9) !important;
  border: 1px solid var(--border) !important;
  border-radius: 6px !important;
  overflow: hidden;
}
.apw-card:hover { border-color: #3d6484 !important; }
.apw-img { border-radius: 0 !important; }
.apw-info { padding: 9px 10px !important; }
.apw-airline { color: #eef4f8 !important; font-family: var(--sans) !important; font-weight: 700 !important; }
.apw-aircraft { color: var(--muted) !important; font-family: var(--sans) !important; }
.apw-footer { border-top: 1px solid var(--border-soft); margin-top: 12px; padding-top: 10px; }
.apw-link { color: #ff6872 !important; font-weight: 800 !important; }
.apw-powered, .apw-powered a { color: var(--muted) !important; }


/* ==========================================================================
   Newsletter
   --------------------------------------------------------------------------
   The plugin's markup is fixed:

     .flymag-nl > .flymag-nl-body > h3.flymag-nl-title
                                  > p.flymag-nl-blurb
                                  > form.flymag-nl-form
                                      > .flymag-nl-row    (the email field)
                                      > .flymag-nl-lists  (two checkboxes)
                                      > button.flymag-nl-submit
                                      > p.flymag-nl-fine
                                      > .flymag-nl-message

   Stacked at full width — as the plugin lays it out — that is five
   full-bleed rows for what is really one email field. Recolouring it was
   never going to fix that, so the form is re-laid-out here as a grid: the
   two lists become compact chips on one line, and the field and button share
   the row beneath. Hidden inputs are display:none by the UA stylesheet, so
   they do not take grid cells.
   ========================================================================== */

.article-content .flymag-nl {
  background: linear-gradient(150deg, #102a3e 0%, #0b1d2c 55%, #0b1622 100%) !important;
  border: 1px solid #27506e !important;
  border-radius: 12px !important;
  padding: 22px 24px 20px !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.06), 0 16px 40px rgba(0,0,0,.32);
  margin: 28px 0 !important;
}
.article-content .flymag-nl .flymag-nl-title {
  font-family: var(--sans) !important;
  font-size: 1.22rem !important;
  font-weight: 850 !important;
  letter-spacing: -.015em;
  margin: 0 0 4px !important;
}
.article-content .flymag-nl .flymag-nl-blurb {
  font-family: var(--sans) !important;
  font-size: .87rem !important;
  margin: 0 0 16px !important;
}

/* --- the grid --- */
.flymag-nl-form {
  display: grid;
  grid-template-columns: 1fr auto;
  column-gap: 10px;
  row-gap: 12px;
  align-items: center;
}
.flymag-nl-lists  { grid-column: 1 / -1; grid-row: 1; display: flex !important; flex-wrap: wrap; gap: 8px !important; margin: 0 !important; }
.flymag-nl-row    { grid-column: 1; grid-row: 2; display: flex; gap: 8px; margin: 0 !important; }
.flymag-nl-submit { grid-column: 2; grid-row: 2; margin: 0 !important; white-space: nowrap; }
.flymag-nl-fine   { grid-column: 1 / -1; grid-row: 3; margin: 0 !important; font-size: .74rem !important; }
.flymag-nl-message{ grid-column: 1 / -1; grid-row: 4; margin: 0 !important; }

/* --- the two lists, as chips --- */
.flymag-nl-list {
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
  width: auto !important;
  padding: 8px 14px !important;
  border-radius: 999px !important;
  background: #0d2130 !important;
  border: 1px solid #2b4a63 !important;
  transition: border-color .15s, background .15s;
}
.flymag-nl-list:hover { border-color: #3d6484 !important; }
/* Selected reads as a tinted chip, not a red alarm. */
.flymag-nl-list:has(input:checked) {
  background: rgba(69,167,255,.1) !important;
  border-color: rgba(120,190,255,.5) !important;
}
.flymag-nl-list input[type="checkbox"] { accent-color: var(--blue) !important; margin: 0 !important; }
.flymag-nl-list-label { flex-direction: row !important; align-items: baseline; gap: 7px; }
.flymag-nl-list-label strong { font-size: .82rem !important; color: #e8f1f7 !important; }
.flymag-nl-list:has(input:checked) .flymag-nl-list-label strong { color: #fff !important; }
/* The descriptions are what made this five rows tall; the blurb above already
   says what the two newsletters are. */
.flymag-nl-list-desc { display: none !important; }

/* --- field and button --- */
.flymag-nl-input {
  border-radius: 8px !important;
  padding: 13px 15px !important;
  min-width: 0;
  flex: 1;
}
.flymag-nl-submit {
  border-radius: 8px !important;
  padding: 13px 26px !important;
  letter-spacing: .04em;
  font-weight: 850 !important;
  box-shadow: 0 6px 18px rgba(229,30,42,.3);
}
.flymag-nl-submit:hover { filter: brightness(1.08); }

/* ==========================================================================
   Newsletter — sidebar
   --------------------------------------------------------------------------
   It already sits inside .sidebar-panel, which supplies the border, the
   background and the padding. Giving the widget its own panel chrome as well
   produced a box inside a box. Here it is just a form.
   ========================================================================== */
.sidebar-newsletter .flymag-nl {
  background: none !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
.sidebar-newsletter .flymag-nl-title { display: none; }  /* the panel has its own <h3> */
.sidebar-newsletter .flymag-nl-blurb {
  font-family: var(--sans) !important;
  font-size: .8rem !important;
  color: var(--muted) !important;
  margin: 0 0 12px !important;
}
/* One column: at ~300px the field and button cannot share a row. */
.sidebar-newsletter .flymag-nl-form { grid-template-columns: 1fr; row-gap: 10px; }
.sidebar-newsletter .flymag-nl-row    { grid-column: 1; grid-row: 2; }
.sidebar-newsletter .flymag-nl-submit { grid-column: 1; grid-row: 3; width: 100%; }
.sidebar-newsletter .flymag-nl-fine   { grid-row: 4; }
.sidebar-newsletter .flymag-nl-message{ grid-row: 5; }
.sidebar-newsletter .flymag-nl-list   { padding: 7px 12px !important; }
.sidebar-newsletter .flymag-nl-list-label strong { font-size: .78rem !important; }

/* Homepage strip: the section already provides the panel, and the wide variant
   adds a first-name field, so the field row needs both inputs to share it. */
.newsletter-strip-form .flymag-nl {
  background: none !important; border: 0 !important; box-shadow: none !important; padding: 0 !important;
}
.newsletter-strip-form .flymag-nl-title,
.newsletter-strip-form .flymag-nl-blurb { display: none; }

@media (max-width: 590px) {
  .flymag-nl-form { grid-template-columns: 1fr; }
  .flymag-nl-row    { grid-column: 1; }
  .flymag-nl-submit { grid-column: 1; grid-row: 3; width: 100%; }
  .flymag-nl-fine   { grid-row: 4; }
  .flymag-nl-message{ grid-row: 5; }
  .article-content .flymag-nl { padding: 18px 16px !important; }
}

/* ---------- Responsive ---------- */
@media (max-width: 1120px) {
  .main-nav { gap:14px; }
  .main-nav a:nth-child(n+7) { display:none; }
  .lead-grid { grid-template-columns:1fr; }
  .lead-story, .lead-story img { min-height:460px; }
  .headline-list { display:grid; grid-template-columns:repeat(2,1fr); gap:0 20px; }
  .headline-list h2 { grid-column:1/-1; }
  .tools-grid { grid-template-columns:1fr; }
  .coverage-grid { grid-template-columns:1fr 1fr; }
  .coverage-grid > :last-child { grid-column:1/-1; }
  .article-grid { grid-template-columns:minmax(0,1fr) 300px; }
  .archive-layout { grid-template-columns:minmax(0,1fr) 290px; }
  .archive-grid { grid-template-columns:repeat(2,1fr); }
  .footer-grid { grid-template-columns:1.2fr repeat(2,1fr); gap:28px; }
}

@media (max-width: 860px) {
  .site-header { position:static; }
  .main-nav {
    display:none; position:absolute; left:0; right:0; top:100%;
    flex-direction:column; align-items:stretch; gap:0; padding:8px 18px 16px;
    background:rgba(4,12,20,.99); border-bottom:1px solid var(--border);
  }
  .main-nav.is-open { display:flex; }
  .main-nav a { display:block; padding:12px 0; border-bottom:1px solid var(--border-soft); font-size:.85rem; }
  .main-nav a:nth-child(n+7) { display:block; }
  .header-main { position:relative; gap:14px; }
  .header-main .mobile-menu { display:inline-flex; margin-left:auto; }
  .breaking-link { display:none; }
  .lead-story, .lead-story img { min-height:440px; }
  .lead-copy { left:20px; right:20px; bottom:20px; }
  .top-story-grid { grid-template-columns:1fr 1fr; }
  .coverage-grid, .latest-grid { grid-template-columns:1fr; }
  .coverage-grid > :last-child { grid-column:auto; }
  .newsletter-strip { grid-template-columns:1fr; }
  .route-row { grid-template-columns:1fr 16px; }
  .route-row .tag { grid-column:1/-1; }
  .article-grid, .archive-layout { grid-template-columns:1fr; }
  .sidebar { position:static; grid-template-columns:1fr 1fr; }
  .more-grid { grid-template-columns:1fr 1fr; }
  .footer-grid { grid-template-columns:1fr 1fr; }
  .flymag-nl-lists { grid-template-columns:1fr !important; }
}

@media (max-width: 590px) {
  .container { width:min(100% - 22px, var(--max)); }
  .header-main { min-height:62px; }
  .logo { font-size:1.65rem; }
  .breaking-inner { gap:9px; }
  .breaking-badge { padding:6px 8px; }
  .breaking-time { display:none; }
  .lead-story, .lead-story img { min-height:390px; }
  .lead-copy h1, .lead-copy h2 { font-size:2.15rem; }
  .lead-copy p { display:none; }
  .headline-list { display:block; }
  .top-story-grid { grid-template-columns:1fr; }
  .story-card { display:grid; grid-template-columns:125px 1fr; }
  .story-card img { height:100%; min-height:125px; }
  .story-card .card-body { padding:11px; }
  .tracker-search, .newsletter-form { display:grid; grid-template-columns:1fr; }
  .latest-card { grid-template-columns:105px 1fr; }
  .latest-card img { width:105px; height:80px; }
  .article-header h1 { font-size:1.95rem; }
  .byline-spacer, .share-mini { display:none; }
  .more-grid, .sidebar, .archive-grid { grid-template-columns:1fr; }
  .footer-grid { grid-template-columns:1fr; gap:22px; }
  .footer-bottom { flex-direction:column; gap:5px; }
  .comment-list ol.children { margin-left:12px; }
}

/* Print: strip the dark ground so an article does not burn a cartridge. */
@media print {
  body { background:#fff; color:#000; }
  .site-header, .site-footer, .sidebar, .share-bar, .breaking, .newsletter-strip { display:none; }
  .article-content { color:#000; font-size:11pt; }
  .article-content a { color:#000; }
}

/* ---------- Tracker map: land, routes, labels ---------- */
.tracker-map {
  height: 272px;
  background: linear-gradient(180deg, #0a1f2e 0%, #081a27 55%, #06131d 100%);
}
/* Land sits just above the water, not as a hard silhouette — the routes are
   the subject and the continents are only there to give them somewhere to be. */
.tm-land { fill: #17303f; stroke: #23495f; stroke-width: .5; vector-effect: non-scaling-stroke; }
.tm-arc  { filter: drop-shadow(0 0 5px rgba(120,200,255,.4)); }
.tm-dot  { fill: #ff3846; filter: url(#fm-glow); }
.tm-halo { fill: none; stroke: #ff3846; stroke-opacity: .3; stroke-width: 1; }
.tm-plane { fill: #ffc400; stroke: rgba(3,10,17,.75); stroke-width: .7; }
.tm-code {
  fill: #e6f1f8;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 800;
  letter-spacing: .05em;
  paint-order: stroke;
  stroke: rgba(4,12,19,.92);
  stroke-width: 3.5px;
}
@media (prefers-reduced-motion: no-preference) {
  .tm-arc { animation: fm-crawl 3.2s linear infinite; }
}

/* ==========================================================================
   Newsletter artwork
   --------------------------------------------------------------------------
   A gate shot at sunset behind the two large newsletter blocks. The photo is
   warm and the palette is cold, which is the point — it reads as a window
   rather than as another panel.

   The gradient is doing the real work: near-opaque on the left where the
   heading and the form sit, thinning to the right so the aircraft and the
   sun show through. Text never sits on unmanaged photo, so contrast holds
   whatever the crop does at a given width.

   1600x700 WebP, 33KB. Both blocks are below the fold, so it never competes
   with the LCP image.
   ========================================================================== */
.article-content .flymag-nl,
.newsletter-strip {
  background-image:
    linear-gradient(100deg,
      rgba(7,20,31,.985) 0%,
      rgba(7,20,31,.95) 34%,
      rgba(8,24,36,.74) 62%,
      rgba(9,26,38,.42) 100%),
    url("assets/img/newsletter-bg.webp") !important;
  background-size: auto, cover !important;
  background-position: center, right center !important;
  background-repeat: no-repeat, no-repeat !important;
  border-color: #2d5876 !important;
}
.newsletter-strip { border: 1px solid #2d5876; }

/* Narrow columns leave no room for the photo to read as anything but noise,
   so below the article width the gradient closes over it. */
@media (max-width: 700px) {
  .article-content .flymag-nl,
  .newsletter-strip {
    background-image:
      linear-gradient(160deg, rgba(7,20,31,.985) 0%, rgba(8,24,36,.88) 60%, rgba(9,26,38,.7) 100%),
      url("assets/img/newsletter-bg.webp") !important;
  }
}

/* ==========================================================================
   Plugin surfaces, generated
   --------------------------------------------------------------------------
   The plugin stylesheets carry 92 light backgrounds and 160 dark text colours
   across route watch, the aircraft and airline directories, the share widget,
   the newsletter and the route map. Overriding them by hand as each one turned
   up is why white boxes kept reappearing one page at a time.

   These are generated from the plugin CSS itself: every light background maps
   to its dark counterpart (all gradient stops, not just the first) and every
   dark text colour to a legible one. Scoped under body.flymag-dark, so they
   apply only while this theme is active and win on specificity alone — no
   !important, which leaves the hand-designed components above free to override
   them.

   Carrier logos, the AirlinePics embed and Leaflet are excluded: logos ship on
   white and disappear without it.

   Regenerate after a plugin update and anything new is picked up.
   ========================================================================== */
body.flymag-dark .ac-chip{background:#0d1f2d;color:#cfe3f2}
body.flymag-dark .ac-chip:hover{background:#0e2231}
body.flymag-dark .ac-card{background:#0d1f2d}
body.flymag-dark .ac-card-image{background:#12293a}
body.flymag-dark .ac-card-name{color:#cfe3f2}
body.flymag-dark .ac-card-codes code{background:#12293a;color:#cfe3f2}
body.flymag-dark .ac-card-facts{color:#c3d2dd}
body.flymag-dark .ac-card-facts i{color:#93a9b9}
body.flymag-dark .ac-single-facts{background:#0d1f2d}
body.flymag-dark .ac-single-body, body.flymag-dark .ac-single-operators, body.flymag-dark .ac-single-route-watch, body.flymag-dark .ac-single-articles, body.flymag-dark .ac-single-foot{background:#0d1f2d}
body.flymag-dark .ac-single-operators h2, body.flymag-dark .ac-single-route-watch h2, body.flymag-dark .ac-single-articles h2{color:#cfe3f2}
body.flymag-dark .ac-section-lead{color:#93a9b9}
body.flymag-dark .ac-operator{background:#0e2231}
body.flymag-dark .ac-operator-iata{color:#cfe3f2}
body.flymag-dark .ac-operator-name{color:#e8f1f7}
body.flymag-dark .ac-operator-count{color:#93a9b9}
body.flymag-dark .ac-single-foot{color:#93a9b9}
body.flymag-dark .ac-single-foot a{color:#cfe3f2}
body.flymag-dark .filter-select{background:#0d1f2d}
body.flymag-dark .airline-card{background:#0d1f2d}
body.flymag-dark .airline-card-code{color:#e8f1f7}
body.flymag-dark .airline-card-fleet{color:#c3d2dd}
body.flymag-dark .airline-breadcrumb a{color:#e8f1f7}
body.flymag-dark .airline-hero{background:linear-gradient(135deg, #0e2231 0%, #12293a 100%)}
body.flymag-dark .airport-intro{background:#0e2231}
body.flymag-dark .airport-intro p{color:#e8f1f7}
body.flymag-dark .airline-fleet th{background:#0e2231;color:#e8f1f7}
body.flymag-dark .fleet-livery-row td{background:#0e2231}
body.flymag-dark .airline-fleet tbody tr.fleet-type-row:hover{background:#12293a}
body.flymag-dark .fleet-toggle{color:#93a9b9}
body.flymag-dark .fleet-detail-cell{background:#0e2231}
body.flymag-dark .fleet-detail-table th{background:#12293a;color:#c3d2dd}
body.flymag-dark .fleet-detail-table td{color:#c3d2dd}
body.flymag-dark .fleet-detail-table tbody tr:hover{background:#12293a}
body.flymag-dark .flymag-stats-card{background:#0d1f2d}
body.flymag-dark .flymag-stat-box{background:#0d1f2d}
body.flymag-dark .airline-hero-code{color:#e8f1f7}
body.flymag-dark .stat-card{background:#0d1f2d}
body.flymag-dark .stat-card .stat-value{color:#e8f1f7}
body.flymag-dark .airline-info-table th{color:#c3d2dd}
body.flymag-dark .article-cat{background:#12293a}
body.flymag-dark .article-excerpt{color:#c3d2dd}
body.flymag-dark .flymag-airline-card{background:linear-gradient(135deg, #0e2231 0%, #0d1f2d 100%)}
body.flymag-dark .airline-card-link:hover{background:#12293a}
body.flymag-dark .airline-card-iata{color:#e8f1f7}
body.flymag-dark .airline-card-title{color:#e8f1f7}
body.flymag-dark .airline-card-stats{color:#c3d2dd}
body.flymag-dark .airline-card-more{color:#8fd2ff}
body.flymag-dark .airport-card-code-lg{color:#e8f1f7}
body.flymag-dark .flymag-iata-link{color:#e8f1f7}
body.flymag-dark .flymag-iata-link:hover{color:#8fd2ff}
body.flymag-dark .concierge-step{background:#0d1f2d}
body.flymag-dark .concierge-form textarea, body.flymag-dark .concierge-followup textarea, body.flymag-dark .concierge-followup input[type="text"]{background:#0e2231}
body.flymag-dark .concierge-form textarea:focus, body.flymag-dark .concierge-followup textarea:focus, body.flymag-dark .concierge-followup input:focus{background:#0d1f2d}
body.flymag-dark .concierge-summary{background:#0e2231}
body.flymag-dark .concierge-followup h3{color:#e8f1f7}
body.flymag-dark .concierge-field-optional{color:#93a9b9}
body.flymag-dark .concierge-budget-prefix{color:#93a9b9}
body.flymag-dark .concierge-budget-input input[type="number"]{background:#0d1f2d;color:#e8f1f7}
body.flymag-dark .concierge-field-help{color:#93a9b9}
body.flymag-dark .concierge-gen-substatus{color:#e8f1f7}
body.flymag-dark .concierge-itinerary-meta a{color:#8fd2ff}
body.flymag-dark .concierge-itinerary-body{background:#0d1f2d}
body.flymag-dark .concierge-itinerary-body h2{color:#e8f1f7}
body.flymag-dark .concierge-itinerary-body h3{color:#8fd2ff}
body.flymag-dark .concierge-itinerary-body a{color:#8fd2ff}
body.flymag-dark .flight-units-buttons button:hover{color:#e8f1f7}
body.flymag-dark .flight-aircraft-livery{background:linear-gradient(180deg, #f1f5f9 0%, #0d1f2d 100%)}
body.flymag-dark .flight-search-help{color:#c3d2dd}
body.flymag-dark .flight-search-help strong{color:#e8f1f7}
body.flymag-dark .flight-not-found{color:#c3d2dd}
body.flymag-dark .flight-not-found h1{color:#e8f1f7}
body.flymag-dark .flight-leg{background:#0d1f2d}
body.flymag-dark .flight-leg.is-active{background:linear-gradient(135deg, #0e2231 0%, #0d1f2d 100%)}
body.flymag-dark .flight-leg-iata{color:#e8f1f7}
body.flymag-dark .flight-hero{background:linear-gradient(135deg, #0e2231 0%, #12293a 100%)}
body.flymag-dark .flight-hero-num{color:#e8f1f7}
body.flymag-dark .flight-hero-iata{color:#e8f1f7}
body.flymag-dark .flight-hero-iata a:hover{color:#8fd2ff}
body.flymag-dark .flight-hero-countdown-time{color:#e8f1f7}
body.flymag-dark .flight-live-stat{background:#0d1f2d}
body.flymag-dark .flight-detail-panel{background:#0d1f2d}
body.flymag-dark .flight-detail-airport{color:#e8f1f7}
body.flymag-dark .flight-aircraft-panel{background:#0d1f2d}
body.flymag-dark .airport-hero-iata{color:#e8f1f7}
body.flymag-dark .flymag-airport-card{background:linear-gradient(135deg, #f0f7ff 0%, #0d1f2d 100%)}
body.flymag-dark .airport-card-title{color:#e8f1f7}
body.flymag-dark .airport-card-stats{color:#c3d2dd}
body.flymag-dark .airport-card-more{color:#8fd2ff}
body.flymag-dark .trip-route-map{background:#12293a}
body.flymag-dark .trip-route-meta{background:#0e2231;color:#e8f1f7}
body.flymag-dark .trip-route-endpoint strong{color:#cfe3f2}
body.flymag-dark .trip-route-arrow{color:#cfe3f2}
body.flymag-dark .trip-route-pin-label{color:#cfe3f2}
body.flymag-dark .trip-weather{background:linear-gradient(135deg, #0e2231 0%, #eaf3fa 100%)}
body.flymag-dark .trip-weather-head{color:#cfe3f2}
body.flymag-dark .trip-weather-unit-toggle{background:#0d1f2d}
body.flymag-dark .trip-weather-unit-btn{color:#93a9b9}
body.flymag-dark .trip-weather-unit-btn:hover{color:#cfe3f2}
body.flymag-dark .trip-weather-day{background:#0d1f2d}
body.flymag-dark .trip-weather-dow{color:#93a9b9}
body.flymag-dark .trip-weather-date{color:#e8f1f7}
body.flymag-dark .trip-weather-icon.fa-cloud{color:#8296a5}
body.flymag-dark .trip-weather-icon.fa-smog{color:#8296a5}
body.flymag-dark .trip-weather-temps{color:#cfe3f2}
body.flymag-dark .trip-weather-sep{color:#8296a5}
body.flymag-dark .trip-weather-label{color:#93a9b9}
body.flymag-dark .trip-weather-est-note{color:#93a9b9}
body.flymag-dark .trip-share-btn{background:#0d1f2d;color:#cfe3f2}
body.flymag-dark .trip-share-btn:hover{background:#0e2231}
body.flymag-dark .trip-section > h2{color:#cfe3f2}
body.flymag-dark .trip-section-note{color:#93a9b9}
body.flymag-dark .flight-card{background:#0d1f2d}
body.flymag-dark .flight-card-airline-name{color:#e8f1f7}
body.flymag-dark .flight-card-flight-no{color:#93a9b9}
body.flymag-dark .flight-card-time{color:#cfe3f2}
body.flymag-dark .flight-card-airport{color:#93a9b9}
body.flymag-dark .flight-card-arrow{color:#8296a5}
body.flymag-dark .flight-card-duration{color:#93a9b9}
body.flymag-dark .flight-card-arrow-line{color:#cfe3f2}
body.flymag-dark .flight-card-stops{color:#93a9b9}
body.flymag-dark .flight-card-price-note{color:#8296a5}
body.flymag-dark .flight-card-aircraft{color:#93a9b9}
body.flymag-dark .flight-card-notes{color:#93a9b9}
body.flymag-dark .transfer-card{background:#0d1f2d}
body.flymag-dark .transfer-card-mode{color:#cfe3f2}
body.flymag-dark .transfer-card-label{color:#8296a5}
body.flymag-dark .transfer-card-value{color:#e8f1f7}
body.flymag-dark .transfer-card-desc{color:#c3d2dd}
body.flymag-dark .transfer-card-cta{color:#cfe3f2}
body.flymag-dark .hotel-card{background:#0d1f2d}
body.flymag-dark .hotel-card-image{background:#12293a}
body.flymag-dark .hotel-card-name{color:#cfe3f2}
body.flymag-dark .hotel-card-neighborhood{color:#93a9b9}
body.flymag-dark .hotel-card-price span{color:#93a9b9}
body.flymag-dark .hotel-card-why{color:#e8f1f7}
body.flymag-dark .hotel-card-highlights li{color:#c3d2dd}
body.flymag-dark .hotel-card-nearby{color:#93a9b9}
body.flymag-dark .hotel-card-nearby strong{color:#e8f1f7}
body.flymag-dark .hotel-card-transfer{background:#0e2231;color:#e8f1f7}
body.flymag-dark .hotel-card-transfer i{color:#cfe3f2}
body.flymag-dark .hotel-card-name a:hover{color:#cfe3f2}
body.flymag-dark .hotel-card-transfers{background:#0e2231}
body.flymag-dark .hotel-card-transfers-label{color:#cfe3f2}
body.flymag-dark .hotel-card-transfers-list > li{color:#c3d2dd}
body.flymag-dark .hotel-card-transfers-list > li i{color:#cfe3f2}
body.flymag-dark .hotel-card-transfer-mode{color:#e8f1f7}
body.flymag-dark .hotel-card-transfer-meta{color:#93a9b9}
body.flymag-dark .hotel-card-transfer-desc{color:#93a9b9}
body.flymag-dark .hotel-card-cta{background:#0d1f2d;color:#cfe3f2}
body.flymag-dark .hotel-card-cta:hover{background:#0e2231}
body.flymag-dark .day-card{background:#0d1f2d}
body.flymag-dark .activity-card{background:#0e2231}
body.flymag-dark .activity-card-image{background:#12293a}
body.flymag-dark .activity-card-duration{color:#93a9b9}
body.flymag-dark .activity-card-name{color:#cfe3f2}
body.flymag-dark .activity-card-desc{color:#c3d2dd}
body.flymag-dark .activity-card-cta{color:#cfe3f2}
body.flymag-dark .trip-tips li{color:#e8f1f7}
body.flymag-dark .flymag-nl{background:#0d1f2d}
body.flymag-dark .flymag-nl-title{color:#cfe3f2}
body.flymag-dark .flymag-nl-blurb{color:#c3d2dd}
body.flymag-dark .flymag-nl-input{background:#0d1f2d;color:#e8f1f7}
body.flymag-dark .flymag-nl-list{background:#0e2231}
body.flymag-dark .flymag-nl-list input[type="checkbox"]:checked ~ .flymag-nl-list-label strong{color:#cfe3f2}
body.flymag-dark .flymag-nl-list-label strong{color:#e8f1f7}
body.flymag-dark .flymag-nl-list-desc{color:#93a9b9}
body.flymag-dark .flymag-nl-fine{color:#8296a5}
body.flymag-dark .flymag-nl-wide{background:#0d1f2d}
body.flymag-dark .flymag-nl-wide .flymag-nl-blurb{color:#93a9b9}
body.flymag-dark .flymag-nl-wide .flymag-nl-list{background:#0d1f2d}
body.flymag-dark .flymag-nl-hero .flymag-nl-submit{color:#cfe3f2}
body.flymag-dark .flymag-nl-popup{background:#0d1f2d}
body.flymag-dark .flymag-nl-popup-close{color:#c3d2dd}
body.flymag-dark .footer-section-newsletter .flymag-nl-submit{color:#cfe3f2}
body.flymag-dark .flymag-rmap-block{background:#0d1f2d}
body.flymag-dark .flymag-rmap{background:#12293a}
body.flymag-dark .flymag-rmap-loading{color:#93a9b9}
body.flymag-dark .flymag-rmap-legend{background:#0e2231;color:#e8f1f7}
body.flymag-dark .flymag-rmap-legend a{color:#cfe3f2}
body.flymag-dark .flymag-rmap-legend a:hover{color:#cfe3f2}
body.flymag-dark .flymag-rmap-legend strong{color:#cfe3f2}
body.flymag-dark .flymag-rmap-legend-sep{color:#8296a5}
body.flymag-dark .flymag-rmap-legend-arrow{color:#8296a5}
body.flymag-dark .flymag-rmap-pin-label{color:#cfe3f2}
body.flymag-dark .flymag-leads-empty{background:#0d1f2d}
body.flymag-dark .flymag-lead{background:#0d1f2d}
body.flymag-dark .rw-filter{background:#0d1f2d}
body.flymag-dark .rw-filter label{color:#e8f1f7}
body.flymag-dark .rw-filter input[type="text"], body.flymag-dark .rw-filter select{background:#0d1f2d;color:#e8f1f7}
body.flymag-dark .rw-filter-clear{color:#93a9b9}
body.flymag-dark .rw-filter-clear:hover{color:#cfe3f2}
body.flymag-dark .rw-results-count{color:#93a9b9}
body.flymag-dark .rw-empty{background:#0d1f2d;color:#93a9b9}
body.flymag-dark .rw-entry{background:#0d1f2d}
body.flymag-dark .rw-entry-title{color:#cfe3f2}
body.flymag-dark .rw-entry-title:hover{color:#cfe3f2}
body.flymag-dark .rw-entry-meta{color:#93a9b9}
body.flymag-dark .rw-entry-tag a{color:#cfe3f2}
body.flymag-dark .rw-single-head{background:#0d1f2d}
body.flymag-dark .rw-single-head h1{color:#cfe3f2}
body.flymag-dark .rw-single-summary{color:#c3d2dd}
body.flymag-dark .rw-single-facts{background:#0d1f2d}
body.flymag-dark .rw-fact{background:#0e2231}
body.flymag-dark .rw-fact-label{color:#93a9b9}
body.flymag-dark .rw-fact-value{color:#e8f1f7}
body.flymag-dark .rw-fact-value code{background:#12293a;color:#cfe3f2}
body.flymag-dark .rw-fact-value a{color:#cfe3f2}
body.flymag-dark .rw-arrow{color:#8296a5}
body.flymag-dark .rw-single-body, body.flymag-dark .rw-single-source, body.flymag-dark .rw-single-foot{background:#0d1f2d}
body.flymag-dark .rw-single-body h2, body.flymag-dark .rw-single-source h2{color:#cfe3f2}
body.flymag-dark .rw-single-foot{color:#93a9b9}
body.flymag-dark .rw-single-foot a{color:#cfe3f2}
body.flymag-dark .flymag-share-widget{background:#0d1f2d}
body.flymag-dark .fsw-title{color:#cfe3f2}
body.flymag-dark .fsw-sub{color:#93a9b9}
body.flymag-dark .fsw-net{background:#0e2231}
body.flymag-dark .fsw-net-name{color:#e8f1f7}
body.flymag-dark .fsw-net-badge{background:#0d1f2d;color:#93a9b9}
body.flymag-dark .fsw-net-text{background:#0d1f2d;color:#e8f1f7}
body.flymag-dark .fsw-copy{background:#0d1f2d;color:#cfe3f2}
body.flymag-dark .fsw-copy:hover{background:#12293a}
body.flymag-dark .fsw-simple-btn{background:#0d1f2d;color:#c3d2dd}
body.flymag-dark .fsw-simple-btn:hover{background:#12293a;color:#c3d2dd}
body.flymag-dark .flymag-recommendation{background:linear-gradient(135deg, #0e2231 0%, #0d1f2d 100%)}
body.flymag-dark .stat-item{background:#0e2231}
body.flymag-dark .gossiped-reply-card{background:#0e2231}
body.flymag-dark .comment-content{background:#0e2231}

/* ---------- Link hover on plugin surfaces ----------
   The global rule turns links white on hover, which is right against the dark
   chrome and was invisible while these panels were still white. They are dark
   now, but pinning an explicit hover here keeps the components readable even
   if one of them is restyled light again later. */
body.flymag-dark .rw-single a:hover,
body.flymag-dark .rw-entry a:hover,
body.flymag-dark .rw-fact-value a:hover,
body.flymag-dark .rw-single-foot a:hover,
body.flymag-dark .ac-card a:hover,
body.flymag-dark .ac-single-facts a:hover,
body.flymag-dark .flymag-rmap-legend a:hover,
body.flymag-dark .flymag-share-widget a:hover,
body.flymag-dark .airline-card a:hover,
body.flymag-dark .flymag-stats-card a:hover { color: #8fd2ff; }
